1.标识符组成字符——词法规则
2.保留字,简单数据类型,变量的定义方法和常量表示方法及取值范围——数组和字符串
3.类型间的优先次序和自动转换规则,各数据类型间进行自动/强制转换的情况
4.运算符及优先关系——运算符和表达式
5.控制语句及语法规则
一、词法规则
关键字
abstract | double | int | strictfp** |
boolean | else | interface | super |
break | extends | long | switch |
byte | final | native | synchronized |
case | finally | new | this |
catch | float | package | throw |
char | for | private | throws |
class | goto* | protected | transient |
const* | if | public | try |
continue | implements | return | void |
default | import | short | volatile |
do | instanceof | static | while |
var(jdk10) | record(jdk14) |
标识符
1.字母(A~Z、a~z)、特殊符号($、_)和数字(0~9)
2.第1个符号不能为数字
3.不能为关键词、true、false、null
4.区分大小写
5.JDK9.0支持unicode字符变量名类名()
二、数据类型
1.基本
(1)number:
integers:
a.字节整数 (byte, 8 bits): -128 ~127, 0
b.短整数 (short, 16 bits): -32768 ~ 32767, 0
c.整数 (int, 32 bits): -2147483648 ~ 2147483647, 0
d.长整数 (long, 64 bits): … …, 0L
实型 (real numbers): 浮点型 (有效位数不同)
a.单精度(float, 32 bits): 0.0F(1符号位,8位指数位,23位尾数)
b.双精度(double, 64 bits): 0.0D (1符号位,11位指数位,52位尾数)
(2)字符 (char, 16-bit Unicode字符): \u0000~\uffff
(3)布尔 (boolean): true, false
2.复合
数组(Array), 类(class), 接口(interface)
3.类型转换 (casting)
(1)一种类型->另一种类型
操作数->同种类型,然后运算
整数型、实数型、字符型
表达形式: (类型) 操作数
(2)应用场合
二元运算符的二个操作数类型
表达式值与变量的类型
(3)方法
隐型: 自动(系统完成)
显型: 强制
三、常量与变量
1.常量
2.变量
定义
类型 变量名 [=初值][, 变量名[=初值] …]
类型: 基本数据类型或引用类型
int x, y, z;
float a, b;
作用域Scope——变量使用范围
if ( ... ) { int i = 17; ... } System.out.println("The value of i = " + i); |
以下代码c允许,Java不允许 int i=10; if ( ... ) { int i = 17; ... } |
带关键字final的变量——初始化后不能改变:final int aFV = 0;
final修饰的成员变量,必须在构造函数中初始化
final修饰的静态成员变量必须在静态语句块中初始化
四、运算符和表达式
1.运算符
算术 (Arithmetic)
c相同整数相除返回整数 与c不同小数也可以模除
关系(Relational)
>、>=、<、<=、==、!=
逻辑(Logical)
&&,||, ! 与c一样短路运算
位(Bitwise)
~,&,|,^
移位(Shift)
>>>(无符号右移,高位补0), >>(高位补符号位), <<(低位补0),
条件(Conditional)
2.自增、自减运算符(一元):符号在前先自增/自减
3.优先级
后缀 | [] . (params) expr++ expr-- |
一元 | ++expr --expr +expr -expr ~ ! |
构造/类型转换 | new (type)expr |
乘法 | * / % |
加法 | + - |
移位 | << >> >>> |
关系 | < > <= >= instanceof |
相等 | == != |
按位与 | & |
按位异或 | ^ |
按位或 | | |
逻辑与 | && |
逻辑或 | || |
条件 | ?: |
赋值 | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
4.表达式
操作数(常量、变量和函数)
算术/关系/逻辑/赋值表达式
复合赋值运算
<变量> <复合赋值运算符> <表达式> | <变量> =<变量><运算符> (<表达式>) |
五、控制语句
1.条件选择:if-else
2.switch/开关
switch语句结果必须是byte, char, short, int 类型,JDK 7发布版本中可以在switch语句的表达式中使用String对象。
表达式的结果依次与每个case子句比较
break语句跳出switch语句,没有break则执行匹配以后的所有语句直到遇到break或者}
default子句是可选的,没有匹配的时候执行。没有default且没有匹配值则退出
3.循环控制
组成
循环初始状态 循环体 迭代因子(计数器的递增或递减) 控制表达式
while do-while for
4.循环语句中途退出
Java没有goto语句
break:
不带标号:从循环体内跳出至后面语句。 跳出当前循环体,不是跳出当前大括号对。循环嵌套时,break 语句只跳出当前循环。
带标号:label: 定义标号,跳出标号标志的循环体
六、数组(基本类型/类/接口)与字符串
1.数组是一种特殊对象(Object)
定义类型 (声明)
创建数组 (分配内存空间) : new
释放 (Java虚拟机完成)
2.字符串
String strName2 = new String("Egg");
在堆上创建一个新的 String
实例,复制了字符串常量池中的 "Egg" 字符串的内容。通过将 new String("Egg")
的结果赋值给 strName2(
对象引用变量)
,指向堆上新创建的 String
对象。
字符串长度——str.length();
将数字添加到字符串
String strVar = "Mark" + (1+1);——Mark2
String strVar = "Mark" + 1+1;——Mark11
"+"拼接字符串问题:会产生一个新的String实例
对象生成需要内存空间和时间,不断生成String实例没有效率
How:StringBuffer的append方法替换"+"
3.字符串池——存放在程序中创建的所有字符串字面量
任何时候创建字符串字面量,系统会搜索字符串池查看是否存在
s1!=s2 | s3==s4 |
---|---|
String s1=new String("hello"); String s2=new String("hello"); | String s3="hello"; String s4 ="hello"; |
System.identityHashCode(Object x)
方法,返回对象哈希码——对象在内存中的唯一标识符