Java核心技术卷1(第11版)阅读笔记——第3章

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使用的通用语法是object.method(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 / Math.cos / Math.tan / Math.atan / Math.atan2
指数函数Math.exp / Math.log / Math.log10
πMath.PI
eMath.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。强制类型转换通过截断小数部分将浮点值转换为整型。
如果想对浮点数进行舍入运算, 以便得到最接近的整数(在很多情况下, 这种操作更有用) 那就需要使用 Math.round 方法:

double x = 9.997;
int nx = (int) Math.round(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。例 如, 以下代码:

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 括号与运算符级别

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值