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
-
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 字符 | 默认为空 | |
基本类型的一些信息以常量的形式定义在其对应的包装类中。例如:
Integer.SIZE
Integer.MIN_VALUE
Integer.MAX_VALUE
double a = 5.12e-2; // 浮点型科学计数法
二进制以0b/0B开头,八进制以0开头,十六进制以0X或0x开头。计算机以二进制补码的形式存储所有整数。正数的原码、反码、补码都相同;负数的反码是原码位取反,补码为反码加一。
自动类型转换:多种类型数据混合运算时,系统自动将数据类型转换成容量最大的数据类型再计算。
// char使用条件运算符进行自动类型转化的特殊情况
char x = 'x';
int i = 10;
System.out.println(true? x : i); // i 为变量,进行自动类型转换。输出120
System.out.println(true? x : 10); // 10 为常量不转还你。输出x
- boolean类型不能与其它数据类型运算。
- String为引用数据类型,不是基本数据类型。
String str = "abc"
。// 在串联多个非字符串类型时要注意连接顺序
System.out.println(‘a’+1+“Hello!”); //输出:98Hello!
System.out.println(“Hello”+‘a’+1); //输出:Helloa1
强制类型转换:自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型,可能造成精度降低或溢出。
short s = 5;
s = (short) (s - 2); // 强制类型转换,因为s已经转为int型
- 字符串转基本数据类型— -
Integer.parseInt("123")
- 基本类型转换为字符串—-
String.valueOf(123)
2.3.3 常见转义符号
\n //换行 (0x0a)
\r // 回车 (0x0d)
\f // 换页符(0x0c)
\b // 退格 (0x08)
\0 // 空字符 (0x0)
\s // 空格 (0x20)
\t // 制表符
\" // 双引号
\' // 单引号
\\ // 反斜杠
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运算符:检测实例对象是否为某一特定类型。
String name = "James ";
boolean result = name instanceof String; //name是 String或其子类,返回true
2.4 分支与循环
switch注意事项
switch(表达式)
中表达式的值必须是:byte,short,char,int,enum,String
。注意,不可为longcase子句
中的值必须是常量
,且不同子句中的常量值要互不相同default
可任选,位置也是灵活的。当没有匹配的case时执行for-each
String [] names ={"James", "Larry", "Tom", "Lacy"};
for( String name : names ) //
System.out.print( name );