—- 来源: Java核心技术 卷1 基础知识(第十版)—-

注释

单行注释

  1. //单行注释

多行注释

  1. /*
  2. 多行
  3. 注释
  4. */

文档注释

  1. /**
  2. * 文
  3. * 档
  4. * 注释
  5. */

数据类型

整型

image.png

浮点型

image.png

三种特殊的浮点数值:

  • 正无穷大
  • 负无穷大
  • NaN (不是一个数字)

char 型

char 类型的字面量值要用单引号括起来

Unicode 和 char

image.png

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, 那么其他类的方法也可以使用这个常量。

运算符

数学函数和常量

Math 类中包含了各种各样的数学函数
image.png

数值类型之间的转换

常需要将一种数值类型转换为另一种数值类型
在图中有 6 个实心箭头,表示无信息丢失的转换; 有 3 个虚箭头, 表示可能有精度损失的转换。 例如,123 456 789 是一个大整数, 它所包含的位数比 float 类型所能够表达的位数多。 当将这个整型数值转换为 float 类型时, 将会得到同样大小的结果,但却失去了一定的精度。
image.png

强制类型转换

在 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
}

括号与运算符级别

优先级图示
image.png
image.png

枚举类型

有时候,变量的取值只在一个有限的集合内

简单写法(未设置值)

/**
 * 方向
 *
 * @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 类对象称之为不可变字符串。
image.png
image.png
但是可以通过拼接的方式,将两个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
}