—- 来源: Java核心技术 卷1 基础知识(第十版)—-
注释
单行注释
//单行注释
多行注释
/*
多行
注释
*/
文档注释
/**
* 文
* 档
* 注释
*/
数据类型
整型
浮点型
三种特殊的浮点数值:
- 正无穷大
- 负无穷大
- NaN (不是一个数字)
char 型
Unicode 和 char
Unicode 打破了传统字符编码机制的限制。 在 Unicode 出现之前, 已经有许多种不同的标准:美国的 ASCII、 西欧语言中的ISO 8859-1 俄罗斯的 KOI-8、 中国的 GB 18030 和 BIG-5 等。这样就产生了下面两个问题:一个是对于任意给定的代码值, 在不同的编码方案下有可能对应不同的字母;二是采用大字符集的语言其编码长度有可能不同。例如,有些常用的字符采用单字节编码, 而另一些字符则需要两个或更多个字节
在 Java 中,char 类型描述了 UTF-16 编码中的一个代码单元。
我们强烈建议不要在程序中使用 char 类型, 除非确实需要处理 UTF-16 代码单元。
最好将字符串作为抽象数据类型处理
boolean 型
boolean(布尔)类型只有2 个值:true 和 false。
用于逻辑判断 -> 其他类型与boolean 类型不能互相转换
变量
在Java 中,每个变量都有一个类型(type),在声明变量的时候,变量的类型位于变量名称之前。
int i;
long l;
double d;
float f;
short s;
byte b;
char c;
boolean flag;
每个声明以分号结束。由于声明是一条完整的 Java语句,所以必须以分号结束。
变量名必须是一个以字母开头并由字母或数字构成的序列。变量名中所有的字符都是有意义的,并且大小写敏感。变M名的长度基本上没有限制。另外, 不能使用 Java 保留字作为变量名。
变量初始化
声明一个变量之后,必须用赋值语句对变量进行显式初始化, 千万不要使用未初始化的变量.
对一个已经声明过的变量进行赋值, 就需要将变量名放在等号(=) 左侧, 相应取值的 Java 表达式放在等号的右侧
int i;
i = 10;
也可以将变量的声明和初始化放在同一行中
int k = 10;
常量
在Java 中,使用关键字final 修饰常量,关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后, 就不能够再更改了。习惯上常量名使用全大写。
final Long SO_LONG = 99999L;
类常量
在Java 中,希望某个常量可以在一个类中多个方法使用,通常将这种常量称之为类常量,可以使用关键字static final 设置
static final boolean FLAG = true;
需要注意, 类常量的定义位于 maiii 方法的外部。 因此, 在同一个类的其他方法中也可以使用这个常量。 而且, 如果一个常量被声明为 public, 那么其他类的方法也可以使用这个常量。
运算符
数学函数和常量
数值类型之间的转换
常需要将一种数值类型转换为另一种数值类型
在图中有 6 个实心箭头,表示无信息丢失的转换; 有 3 个虚箭头, 表示可能有精度损失的转换。 例如,123 456 789 是一个大整数, 它所包含的位数比 float 类型所能够表达的位数多。 当将这个整型数值转换为 float 类型时, 将会得到同样大小的结果,但却失去了一定的精度。
强制类型转换
在 Java 中, 允许进行这种数值之间的类型转换。当然, 有可能会丢失一些信息。在这种情况下,需要通过强制类型转换 ( cast) 实现这个操作。强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名
public static void main(String[] args) {
double d = 1.99d;
int i = (int) d;
System.out.println(i); // 输出 -> 1
}
如果试图将一个数值从一种类型强制转换为另一种类型, 而又超出了目标类型的表示范围, 结果就会截断成一个完全不同的值
结合赋值和运算符
可以在赋值中使用二元运算符,这是一种很方便的简写形式:+=、-=、*=、%=
public static void main(String[] args) {
int i = 0;
i += 1;
System.out.println(i); // 输出 -> 1
}
自增与自减运算符
++(自增)、—(自减)
二者都可以放在变量之前或者变量之后;
放在变量之前:
当运算符放在变量之前时(前缀),先自增/减,在赋值
放在变量之后:
当运算符放在变量之后时(后缀),先赋值,再自增/减
public static void main(String[] args) {
int i0 = 1;
System.out.println("自增在前: " + ++i0); // 输出 -> 自增在前: 2
int i1 = 1;
System.out.println("自增在后: " + i1++); // 输出 -> 自增在后: 1
System.out.println("==========");
int k0 = 2;
System.out.println("自减在前: " + --k0); // 输出 -> 自减在前: 1
int k1 = 2;
System.out.println("自减在后: " + k1--); // 输出 -> 自减在后: 2
}
关系和 boolean 运算符
检测相等:a == b
检测不相等:a != b
“与”运算符:&& -> 第一个表达式的真值为 false, 那么结果就不可能为 true,第二个操作数就不必计算了
(同真为真,有假即假)
“或”运算符:|| -> 如果第一个表达式为 true,那么结果自动为 true,第二个操作数就不必计算了
(有真即真,同假为假)
三元操作符:?:
public static void main(String[] args) {
int i = 1;
int k = 1;
System.out.println(i == k); // 输出 -> true
System.out.println(i != k); // 输出 -> false
System.out.println(i == 2 && k == 1); // 输出 -> false
System.out.println(i == 2 || k == 1); // 输出 -> true
System.out.println(i > k ? 0 : k); // 输出 -> 1
}
括号与运算符级别
优先级图示
枚举类型
简单写法(未设置值)
/**
* 方向
*
* @author xGuo
* @date 2022/03/26
*/
public enum Direction {
east,south,west,north
}
测试
public static void main(String[] args) {
Direction east = Direction.east;
Direction south = Direction.south;
Direction west = Direction.west;
Direction north = Direction.north;
}
进阶写法(设置了值)
/**
* 尺寸大小
*
* @author xGuo
* @date 2022/03/26
*/
public enum Size {
small(1,"小码"),
medium(2,"中码"),
large(3,"大码");
private int code;
private String name;
Size(int code, String name) {
this.code = code;
this.name = name;
}
public int getCode() {
return code;
}
public String getName() {
return name;
}
}
测试
public static void main(String[] args) {
System.out.println(Size.small.getCode()); // 输出 -> 1
System.out.println(Size.small.getName()); // 输出 -> 小码
}
字符串
从概念上讲, Java 字符串就是 Unicode 字符序列。 例如, 串“ Java\u2122” 由 5 个Unicode 字符 J、a、v、a 和™。Java 没有内置的字符串类型, 而是在标准 Java 类库中提供了一个预定义类, 很自然地叫做 String。每个用双引号括起来的字符串都是 String类的一个实例
不可变字符串
因为String 类没有提供用于修改字符串的方法(并且String 类是被final 所修饰的),所以Java 中将String 类对象称之为不可变字符串。
但是可以通过拼接的方式,将两个String 对象拼接为新的一个String 对象
public static void main(String[] args) {
String s0 = "Hello";
String s1 = " 你好!";
String s2 = s0 + s1;
System.out.println(s2); // 输出 -> Hello 你好!
}
String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何改变操作都会生成新的对象
String 深入理解可以参考这篇文章:https://www.cnblogs.com/xiaoxi/p/6036701.html
检测字符串是否相等
.equals() 方法
public static void main(String[] args) {
String s0 = "Hello";
String s1 = " 你好!";
System.out.println(s0.equals(s1)); // 输出 -> false
}