2.1 关键字

关键字:被赋予特殊含义或用做专门用途的字符串

  • 定义数据类型的关键字:class、interface、enum、void、byte、short、int、long、float、double、char、boolean
  • 定义类、函数、变量修饰符的关键字:abstract、final、static、synchronized
    abstract用来创建抽象类和抽象方法。抽象类可包含抽象和非抽象方法。
    final用来修饰类、方法和变量,final修饰的类不能被继承,修饰的方法可以重载但不能被继承类重写,修饰的变量为常量(名称大写且仅可赋值一次)。
    static用来修饰类方法和类变量。其不需创建类对象就可调用。声明的静态方法不能使用类的非静态变量与方法,此外静态修饰的方法不能被重写。
    synchronized声明的方法同一时间只被一个线程访问。
  • 用于建立、引用、判断实例的关键字:new、this、supper、instanceof
  • 用于异常处理的关键字:try、catch、finally、throw、throws
  • 用于包的关键字:package、import
  • 其他修饰符关键字:native、strictfp、transient、volatile、assert
    native:与C/C联合开发时使用的,使用该关键字修饰的方法是由C/C实现的,JDK源代码并不包含,且对于不同平台也是不同的。Java在不同的平台上调用不同的native方法实现对操作系统的访问。
    strictfp:strict float point(精确浮点),使用该关键字声明的类、接口、方法在所声明的范围内将完全依照IEEE浮点数算术标准来执行,从而保证浮点数运算的准确性,使得在不同的硬件平台有一致的运行结果。
    transient:实现Serializable接口的对象进行序列化时, transient 修饰的实例变量将被跳过。当类中的字段值可以根据其它字段推导出来就不用将其序列化了,如长方形面积=长宽。
    *volatile
    修饰的变量在每次被线程访问时,都强制从共享内存中重新读取,当变量发生变化时,强制线程将变化值回写到共享内存。因此,任何时刻不同的线程总是看到变量的同一个值,从而保证同步。

    2.2 标识符命名规范

  • 包名: xxxyyyzzz

  • 类、接口名: XxxYyyZzz
  • 变量、方法名: xxxYyyZzz
  • 常量名: XXX_YYY_ZZZ

    2.3 变量与基本数据类型

    2.3.1 成员变量与局部变量

  • 成员变量: 方法体外、类体内声明的变量。无需初始化,其可由访问限制符修饰。final声明的变量必须显性初始化

  • 局部变量: 方法体内、形参声明的变量,定义时必须进行初始化,且仅可由final修饰

    2.3.2 基本数据类型与类型转换

    | 数据类型 | 含义 | 默认值 | 表示形式 | | —- | —- | —- | —- | | byte | 8位有符号 | 0 | | | short | 16 位有符号 | 0 | | | int | 32位有符号 | 0 | 整数默认整型 | | long | 64 位有符号 | 0 | long a = 100000L(l) | | float | 单精度32位 | 0 | float f1 = 234.5f。通常精确到7位 | | double | 双精度64 位 | 0 | 浮点数默认类型 | | boolean | true 和 false | false | | | char | 16 位 Unicode 字符 | 默认为空 | |

基本类型的一些信息以常量的形式定义在其对应的包装类中。例如:

  1. Integer.SIZE
  2. Integer.MIN_VALUE
  3. Integer.MAX_VALUE
  4. double a = 5.12e-2; // 浮点型科学计数法

二进制以0b/0B开头,八进制以0开头,十六进制以0X或0x开头。计算机以二进制补码的形式存储所有整数。正数的原码、反码、补码都相同;负数的反码是原码位取反,补码为反码加一。

自动类型转换:多种类型数据混合运算时,系统自动将数据类型转换成容量最大的数据类型再计算。

image.png

  1. // char使用条件运算符进行自动类型转化的特殊情况
  2. char x = 'x';
  3. int i = 10;
  4. System.out.println(true? x : i); // i 为变量,进行自动类型转换。输出120
  5. System.out.println(true? x : 10); // 10 为常量不转还你。输出x
  • boolean类型不能与其它数据类型运算。
  • String为引用数据类型,不是基本数据类型。String str = "abc"
    1. // 在串联多个非字符串类型时要注意连接顺序
    2. System.out.println(‘a’+1+“Hello!”); //输出:98Hello!
    3. System.out.println(“Hello”+‘a’+1); //输出:Helloa1

    强制类型转换:自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型,可能造成精度降低或溢出。

  1. short s = 5;
  2. s = (short) (s - 2); // 强制类型转换,因为s已经转为int型
  • 字符串转基本数据类型— -Integer.parseInt("123")
  • 基本类型转换为字符串—-String.valueOf(123)

    2.3.3 常见转义符号

    1. \n //换行 (0x0a)
    2. \r // 回车 (0x0d)
    3. \f // 换页符(0x0c)
    4. \b // 退格 (0x08)
    5. \0 // 空字符 (0x0)
    6. \s // 空格 (0x20)
    7. \t // 制表符
    8. \" // 双引号
    9. \' // 单引号
    10. \\ // 反斜杠

    2.3.4 引用类型与常量

    引用类型的变量类似于C/C++的指针,对象、数组都是引用数据类型,默认值是null。一个引用变量可以用来引用任何与之兼容的类型。例子:Site site = new Site("Runoob");

常量在程序运行时不能被修改的。如:final double PI = 3.1415927;

2.3.5 运算符

  • 算术运算符:+ - * / % ++ -- 。如果模数为负号,负号可忽略不记。 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。
  • 赋值运算符:= 。 当两侧数据类型不一致时,需进行自动类型或强制类型转换。支持连续赋值。
  • 扩展赋值运算:+= -= /= *= %=。使用扩展赋值运算符并不会改变变量本身的数据类型。
  • 关系运算符:== != > < >= <=
  • 位运算符:应用于int、long、short、char、byte等表示整数的类型。 | A&B | A|B | A^B | ~A | A<<2 | A>>2 | A>>>2 | | —- | —- | —- | —- | —- | —- | —- | | 按位与 | 按位或 | 按位异或 | 按位取反 | 按位左移,空位补0,被移除的高位直接丢弃 | 按位右移,最高位补符号位 | 按位右移空位补0 |

  • 逻辑运算符:&&(短路与) ||(短路或) ! ^(异或) &(逻辑与) |(逻辑或)

  • 条件运算符:x = (表达式) ? 为真返回 : 为假返回
  • instanceof运算符:检测实例对象是否为某一特定类型。

    1. String name = "James ";
    2. boolean result = name instanceof String; //name是 String或其子类,返回true

    2.4 分支与循环

    switch注意事项

  • switch(表达式)中表达式的值必须是:byte,short,char,int,enum,String。注意,不可为long

  • case子句中的值必须是常量,且不同子句中的常量值要互不相同
  • default可任选,位置也是灵活的。当没有匹配的case时执行

    for-each

    1. String [] names ={"James", "Larry", "Tom", "Lacy"};
    2. for( String name : names ) //
    3. System.out.print( name );