Java核⼼技术卷1(第11版)阅读笔记——第3章
第三章 Java的基本程序设计结构(上)
3.1 ⼀个简单的java应⽤程序
从⼀个最简单的Java应⽤程序开始学习:
public class FirstSample
{
public static void main(String[] args)
{
System.out.println("We will not use 'Hello, World!'");
}
}
3.1.1 注意点
这个程序虽然很简单,但所有的Java应⽤程序都具有这种结构,因此我们要注意以下⼏个:
1. Java区分⼤⼩写 ,如果出现了⼤⼩写拼写错误,程序将⽆法运⾏;
2. 关键字poblic称为访问修饰符,这些修饰符⽤于控制程序的其他部分对这段代码的访问级别;
3. 关键字class表明Java程序中的全部内容都包含在类中;
4. 关键字class后⾯紧跟类名,名字必须以字母开头,后⾯可以跟字母和数字的任意组合,但是不能使⽤Java保留字,类名是以⼤写字母
开头的名词;
5. 源代码的⽂件名必须与公共类的名字相同,并⽤**.Java**作为扩展名;
6. 需要注意源代码中的⼤括号{};
7. Java使⽤的通⽤语法是hod(parameters)
3.2 注释
与⼤多数程序设计语⾔⼀样,Java中的注释也不会出现在可执⾏程序中。在Java中,有三种标记注释的⽅式。最常⽤的是使⽤ / /;也可以使⽤/*和 */注释界定符;也可以以/**开始,以 * / 结束来⾃动⽣成⽂档。
3.3 数据类型
Java是⼀种强类型语⾔。这就意味着必须为每⼀个变量声明⼀种类型。在Java中⼀共有8种基本类型,其中4种整型、2种浮点类型、1种字符类型char和1种⽤于表⽰真值的boolean类型。
3.3.1 整型
整型⽤于表⽰没有⼩数部分的数值,允许是负数。Java提供了4种整型,具体如下表。
长整型数值有⼀个后缀 L 或 1 ( 如 4000000000L) 。⼗六进制数值有⼀个前缀 0x 或 0X (如0xCAFE)。
⼋进制有⼀个前缀 0 , 例如,010 对应⼋进制中的 8。很显然, ⼋进制表⽰法⽐较容易混淆, 所以建议最好不要使⽤⼋进制常数。
从 Java 7 开始, 加上前缀 0b 或 0B 就可以写⼆进制数。例如,0b1001就是 9。另外,同样是从 Java 7 开始,还可以为数字字⾯量加下划线,如⽤ 1_000_000(或0b1111_0100_0010_0100_0000 )表⽰100万。这些下划线只是为了让⼈更易读。Java 编译器会去除这些下划线。
3.3.2 浮点类型
浮点类型⽤于表⽰有⼩数部分的数值。在 Java 中有两种浮点类型,具体内容如表 3-2 所⽰。
3.3.3 char类型
char 类型的字⾯量值要⽤单引号括起来。例如:‘A’是编码值为 65 所对应的字符常量。它与 “A” 不同,“A” 是包含⼀个字符 A 的字符串, char 类型的值可以表⽰为⼗六进制值,其范围从 \u0000 到 \uFFFF。例如:\u2122 表⽰商标符号 (TM ), \u03C0 表⽰希腊字母 π。除了转义序列 \u 之外, 还有
⼀些⽤于表⽰特殊字符的转义序列, 请参看表 3-3。
3.3.4 Unicode 和 char 类型
在 Java 中,char 类型描述了 UTF-16 编码中的⼀个代码单元。
我们强烈建议不要在程序中使⽤ char 类型,除⾮确实需要处理 UTF-16 代码单元。最好将字符串作为抽象数据类型处理(有关这⽅⾯的内容将在 3.6 节讨论)。
3.3.5 boolean 类型
boolean (布尔)类型有两个值:false 和 true, ⽤来判定逻辑条件整型值和布尔值之间不能进⾏相互转换。
3.4 变量与常量
3.4.1 声明变量
在Java中,每个变量都有⼀个类型(type)。在声明变量时,先指定变量的类型,然后是变量名。
double salary;
int vacationDays;
long earthPopulation;
boolean done;
3.4.2 变量初始化
声明⼀个变量之后,必须⽤赋值语句对变量进⾏显式初始化, 千万不要使⽤未初始化的变量。例如, Java 编译器认为下⾯的语句序列是错误的:
int vacationDays;
System.out.println(vacationDays):// ERROR variable not initialized
要想对⼀个已经声明过的变量进⾏赋值, 就需要将变量名放在等号(=) 左侧, 相应取值的 Java 表达式放在等号的右侧。
int vacationDays;
vacationDays:12;
也可以将变量的声明和初始化放在同⼀⾏中。例如:
int vacationDays =12;
最后,在 Java 中可以将声明放在代码中的任何地⽅。例如,下列代码的书写形式在 Java中是完全合法的:
double salary =65000.0;
System,out.println(salary);
int vacationDays =12;// OK to declare a variable here
在 Java 中, 变量的声明尽可能地靠近变量第⼀次使⽤的地⽅, 这是⼀种良好的程序编写风格。
注释:从Java10开始,对于局部变量,如果可以从变量的初始值推断出它的类型,就不再需要声明类型。
只需要使⽤关键字var⽽⽆须指定类型:
var vacationDays 12; // vacationDays is an int
var greeting = "Hello"; // greeting is a String
3.4.3 常量
在 Java 中, 利⽤关键字 final 指⽰常量。例如:
public class Constants
{
public static void main(String[] args){
final double CM_PER_INCH=2.54;
double paperWidth =8.5;
double paperHeight =11;
System,out.println("Paper size in centimeters: "+ paperWidth *CM PER INCH+" by "+ paperHeight *CM.PER.INCH);}}
关键字 final 表⽰这个变量只能被赋值⼀次。⼀旦被赋值之后,就不能够再更改了。习惯上,常量名使⽤全⼤写。
在 Java 中,经常希望某个常量可以在⼀个类中的多个⽅法中使⽤,通常将这些常量称为类常量。可以使⽤关键字 static final 设置⼀个类常量。 下⾯是使⽤类常量的⽰例:
public cl ass Constants〗{
public static final double CM_PER_INCH=2.54;
public static void main(Stringn args){
double paperWidth =8.5;
double paperHeight =11;
System.out.println("Paper size in centimeters: "+ paperWidth *CMJERJNCH+ by " + paperHeight *CM_PER_INCH);}}
需要注意, 类常量的定义位于 main ⽅法的外部。因此,在同⼀个类的其他⽅法中也可以使⽤这个常量。⽽且,如果⼀个常量被声明为public,那么其他类的⽅法也可以使⽤这个常量。 在这个⽰例中,Constants2.CM_PER-INCH 就是这样⼀个常量。
3.4.4 枚举类型
enum Size {SMALL,MEDIUM,LARGE,EXTRA_LARGE};
Size s = Size.MEDIUM;
Size类型的变量只能存储这个类型声明中给定的某个枚举值,或者特殊值 null,null表⽰这个变量没有设置任何值。
3.5 运算符
3.5.1 算术运算符
在 Java 中,使⽤算术运算符 +、-、 *、/ 表⽰加、减、 乘、除运算。 当参与 / 运算的两个操作数都是整数时, 表⽰整数除法;否则,表⽰浮点除法。 整数的求余操作(有时称为取模) ⽤ % 表⽰。例如,15/2 等于 7 ,15%2 等于 1 , 15.0/2 等于 7.5。
需要注意, 整数被 0 除将会产⽣⼀个异常, ⽽浮点数被 0 除将会得到⽆穷⼤或 NaN 结果。
3.5.2 数学函数与常量
在 Math类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。
函数代码
平⽅根Math.sqrt
幂次Math.pow
整数余数Math.floorMod
三⾓函数Math,sin / s / Math.tan / Math.atan / Math.atan2
指数函数p / Math.log / Math.log10
πMath.PI
e Math.E
提⽰:不必在数学⽅法名和常量名前添加前缀“ Math”,只要在源⽂件的顶部加上下⾯这⾏代码就可以了。
import static java.1ang.Math.*;
例如:
System.out.println("The square root of \u03C0 is " + sqrt(PI));
3.5.3 数值类型之间的转换
在图 3-1 中有 6 个实⼼箭头,表⽰⽆信息丢失的转换;有 3 个虚箭头, 表⽰可能有精度损失的转换。 例如,123 456 789 是⼀个⼤整数, 它所包含的位数⽐ float 类型所能够表达的位数多。 当将这个整型数值转换为 float 类型时, 将会得到同样⼤⼩的结果,但却失去了⼀定的精度。
当使⽤上⾯两个数值进⾏⼆元操作时(例如 n + f,n 是整数, f 是浮点数,) 先要将两个操作数转换为
同⼀种类型,然后再进⾏计算。·如果两个操作数中有⼀个是 double 类型, 另⼀个操作数就会转换为 double 类型。
·否则,如果其中⼀个操作数是 float 类型,另⼀个操作数将会转换为 float 类型。
·否则, 如果其中⼀个操作数是 long 类型, 另⼀个操作数将会转换为 long 类型。
·否则, 两个操作数都将被转换为 int 类型。
3.5.4 强制类型转换
在 Java 中, 允许进⾏这种数值之间的类型转换。
当然, 有可能会丢失⼀些信息。在这种情况下,需要通过强制类型转换( cast) 实现这个操作。强制类型转换的语法格式是在圆括号中给出想要转换的⽬标类型,后⾯紧跟待转换的变量名。例如:
double x =9.997;
int nx =(int) x;
这样, 变量 nx 的值为 9。强制类型转换通过截断⼩数部分将浮点值转换为整型。
如果想对浮点数进⾏舍⼊运算, 以便得到最接近的整数(在很多情况下, 这种操作更有⽤) 那就需要使⽤ und ⽅法:
double x =9.997;
int nx =(int) und(x);
现在, 变量 nx 的值为 10。 当调⽤ round 的时候, 仍然需要使⽤强制类型转换( int) 。其原因是round ⽅法返回的结果为 long 类型,由于存在信息丢失的可能性,所以只有使⽤显式的强制类型转换才能够将 long 类型转换成 int 类型。
3.5.5 结合幅值和运算符
可以在赋值中使⽤⼆元运算符,这是⼀种很⽅便的简写形式。例如,
X+=4;
等价于:
x = x +4;(⼀般地,要把运算符放在=号左边,如*=或%=)。
3.5.6 ⾃增与⾃减运算符
⾃增、 ⾃减运算符: n++ 将变量 n 的当前值加 1, n-- 则将 n 的值减 1。例 如, 以下代码:
java核心技术有哪些int n =12;
n++;
将 n 的值改为 13。由于这些运算符会改变变量的值,所以它们的操作数不能是数值。例如, 4++ 就不是⼀个合法的语句。
实际上, 这些运算符有两种形式;上⾯介绍的是运算符放在操作数后⾯的“ 后缀” 形式。
还有⼀种“ 前缀” 形式:++n。后缀和前缀形式都会使变量值加 1 或减 1。但⽤在表达式中时,⼆者就有区别了。前缀形式会先完成加 1;⽽后缀形式会使⽤变量原来的值。
int m =7;
int n =7;
int a =2*++m;// now a is 16, m is 8
int b =2* n++;// now b is 14, n is 8
建议不要在表达式中使⽤ ++, 因为这样的代码很容易让⼈困惑,⽽且会带来烦⼈的 bug。
3.5.7 关系和boolean运算符
Java 包含丰富的关系运算符:要检测相等性,可以使⽤两个等号 ==。
另外可以使⽤!= 检测不相等。
最后, 还有经常使⽤的 < (⼩于、) > (⼤于)、<=(⼩于等于)和 >= (⼤于等于)运算符。
Java 沿⽤了 C++ 的做法,使⽤ && 表⽰逻辑“ 与” 运算符,使⽤⼁| 表⽰逻辑“ 或” 运算符。从 != 运算符可以想到,感叹号!就是逻辑⾮运算符。&& 和⼁| 运算符是按照“ 短路” ⽅式来求值的: 如果第⼀个操作数已经能够确定表达式的值,第⼆个操作数就不必计算了。
最后⼀点,Java ⽀持三元操作符?:,这个操作符有时很有⽤。如果条件为 true, 下⾯的表达式
condition ? expression1 : expression2
就为第⼀个表达式的值,否则计算为第⼆个表达式的值。例如,
x < y ? x : y
会返回 x 和 y 中较⼩的⼀个。
3.5.8 位运算符
处理整型类型时,可以直接对组成整型数值的各个位完成操作。这意味着可以使⽤掩码技术得到整数中的各个位。位运算符包括:
&("and")|("or")^("XOr")~("not")
这些运算符按位模式处理。例如, 如果 n 是⼀个整数变量,⽽且⽤⼆进制表⽰的 n 从右边数第 4 位为 1,则
int fourthBitFromRight =(n &0bl0000)/0bl000;
会返回 1,否则返回 0。利⽤ & 并结合使⽤适当的 2 的幂, 可以把其他位掩掉, ⽽只保留其中的某⼀位。
另外,还有>> 和<< 运算符将位模式左移或右移。
最后,>>> 运算符会⽤ 0 填充⾼位,这与**>>不同,它会⽤符号位填充⾼位**。不存在<<<;运算符。
3.5.9 括号与运算符级别
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论