表达式:
把变量和字面值用某个运算符连接起来的式子 一个表达式必须有一个固定的值
a++表达式的值是4 ++a表达式的值是5
标识符
语法:
(1)字母、数字、下划线和货币符号且数字不能开头
(2)大小写是敏感的
(3)不能使用关键字和保留字
关键字 Class、package Java所有关键字都是小写 true和false也不行
保留字 goto const
(4)没有长度限制
习惯:望文生义、包名全小写、单词首字母大写、函数首单词小写 其他大写、常量名全大写,类名首字母大写。
变量
强类型:数据类型和变量类型必须相同
对象类型(引用类型)、简单类型(基本类型、原始类型)
例子:
int[] a1 = new int[3];
int[] a2 = new int[2];
int[][] a3 = new int[3][4];
String[] a4 = new String[3];
System.out.println(a1.getClass() == a2.getClass());
//System.out.println(a1.getClass() == a3.getClass());
//System.out.println(a1.getClass() == a4.getClass());
System.out.println(a1.getClass().getName());
System.out.println(a3.getClass().getName());
System.out.println(a4.getClass().getName());
System.out.println(a1.getClass().getSuperclass().getName());
System.out.println(a1.getClass().getSuperclass().getName());
Object o1 = a1;
Object o2 = a3;
Object o3 = a4;
//Object[] o3 = a1;//报错
Object[] o5 = a3;
Object[] o6 = a4;
//这个地方是比较奇特的。。。。用数组对象的引用指向一个数组对象 而不是用一个对象引用指向数组对象
整数类型:byte 1个字节 -128~127 short 2个字节 -32768~32767 (0~65535)int 4个字节 -2147483648~2147483647 long 8个字节
浮点数类型: float 4B double 8B
浮点数字面值表示方法 double dx = 1.4D; float fx = 1.4F; double dx = 1.4e10;
字符型 char unicode编码方式 char a = 65 a= 'A' a='\u0041'
a = 97 a= 'a'
a= 48 a= '0'
编码:
常见的编码:
美国 ASCII 1char-1byte
ISO-8859-1西欧 1char-1byte
GB2312 国标码 GBK 扩充国标码 简体中文 两者字符集不同
big5 繁体中文 港澳台常常使用
UTF-8 UTF-16 统称unicode编码 前者是变长字节 后者是定长字节 1char - 2byte
转义字符 '\t' 水平跳格 '\n'换行 '\''单引号 '\"'双引号 '\\'反斜杠
字符串能参与加法运算 表示字符连接
例子:Class Address{}
Address adr;
String s = "a"+3+3+adr;//前两个运算结果是字符串 编译运行没有问题
String s = "a"+adr+3+3;//前两个运算结果是字符串 编译运行没有问题
String s= 3+3+adr+"a";//前两个是类和数值相加 编译会报错
String s = 3+3+"a"+adr//没有问题 运算是从左到右,前两个运算结果是字符,字符可以和对象相加没有问题 编译运行通过
字面值:为一个属于某一个数据类型赋的值
类型转换
int i short s
强制类型转换 s=i;
自动类型转换 i=s;
自动类型提升
如果a和b有double ==>double
如果a和b有float ==>float
如果a和b有long ==>long
默认提升为int
byte b = 3;b+=3;b=b+3;这两个表达式,第一个不会发生自动类型提升,后一个会有自动类型提升
运算符
自增运算符:++a和a++ ++a要省一个寄存器
布尔运算符 == > < >= <= !=
移位运算符 >>>(逻辑移位) >> << 左移一位相当于乘以2 右移一位相当于除以2
例子:2*8 == 2<<3 左移三位
位运算符 &与 ~按位求反(单目运算符) |或 ^异或(相同为0 不相同为1)
例子:ox0f常和&搭配 0001&ox0f = 0001
短路运算符(&&) 只判断一个表达式是否为假 就不需要判断后边一个表达式是否为真了 非短路运算符 两个表达式都需要判断
例子:if(s!=null&&s.equals(a))如果第一个为假,后一个就不需要判断了
if(s!=null&s.equals(a))两个都需要判断,后面会抛出NullPointerException()
把变量和字面值用某个运算符连接起来的式子 一个表达式必须有一个固定的值
a++表达式的值是4 ++a表达式的值是5
标识符
语法:
(1)字母、数字、下划线和货币符号且数字不能开头
(2)大小写是敏感的
(3)不能使用关键字和保留字
关键字 Class、package Java所有关键字都是小写 true和false也不行
保留字 goto const
(4)没有长度限制
习惯:望文生义、包名全小写、单词首字母大写、函数首单词小写 其他大写、常量名全大写,类名首字母大写。
变量
强类型:数据类型和变量类型必须相同
对象类型(引用类型)、简单类型(基本类型、原始类型)
例子:
int[] a1 = new int[3];
int[] a2 = new int[2];
int[][] a3 = new int[3][4];
String[] a4 = new String[3];
System.out.println(a1.getClass() == a2.getClass());
//System.out.println(a1.getClass() == a3.getClass());
//System.out.println(a1.getClass() == a4.getClass());
System.out.println(a1.getClass().getName());
System.out.println(a3.getClass().getName());
System.out.println(a4.getClass().getName());
System.out.println(a1.getClass().getSuperclass().getName());
System.out.println(a1.getClass().getSuperclass().getName());
Object o1 = a1;
Object o2 = a3;
Object o3 = a4;
//Object[] o3 = a1;//报错
Object[] o5 = a3;
Object[] o6 = a4;
//这个地方是比较奇特的。。。。用数组对象的引用指向一个数组对象 而不是用一个对象引用指向数组对象
整数类型:byte 1个字节 -128~127 short 2个字节 -32768~32767 (0~65535)int 4个字节 -2147483648~2147483647 long 8个字节
浮点数类型: float 4B double 8B
浮点数字面值表示方法 double dx = 1.4D; float fx = 1.4F; double dx = 1.4e10;
字符型 char unicode编码方式 char a = 65 a= 'A' a='\u0041'
a = 97 a= 'a'
a= 48 a= '0'
编码:
常见的编码:
美国 ASCII 1char-1byte
ISO-8859-1西欧 1char-1byte
GB2312 国标码 GBK 扩充国标码 简体中文 两者字符集不同
big5 繁体中文 港澳台常常使用
UTF-8 UTF-16 统称unicode编码 前者是变长字节 后者是定长字节 1char - 2byte
转义字符 '\t' 水平跳格 '\n'换行 '\''单引号 '\"'双引号 '\\'反斜杠
字符串能参与加法运算 表示字符连接
例子:Class Address{}
Address adr;
String s = "a"+3+3+adr;//前两个运算结果是字符串 编译运行没有问题
String s = "a"+adr+3+3;//前两个运算结果是字符串 编译运行没有问题
String s= 3+3+adr+"a";//前两个是类和数值相加 编译会报错
String s = 3+3+"a"+adr//没有问题 运算是从左到右,前两个运算结果是字符,字符可以和对象相加没有问题 编译运行通过
字面值:为一个属于某一个数据类型赋的值
类型转换
int i short s
强制类型转换 s=i;
自动类型转换 i=s;
自动类型提升
如果a和b有double ==>double
如果a和b有float ==>float
如果a和b有long ==>long
默认提升为int
byte b = 3;b+=3;b=b+3;这两个表达式,第一个不会发生自动类型提升,后一个会有自动类型提升
运算符
自增运算符:++a和a++ ++a要省一个寄存器
布尔运算符 == > < >= <= !=
移位运算符 >>>(逻辑移位) >> << 左移一位相当于乘以2 右移一位相当于除以2
例子:2*8 == 2<<3 左移三位
位运算符 &与 ~按位求反(单目运算符) |或 ^异或(相同为0 不相同为1)
例子:ox0f常和&搭配 0001&ox0f = 0001
短路运算符(&&) 只判断一个表达式是否为假 就不需要判断后边一个表达式是否为真了 非短路运算符 两个表达式都需要判断
例子:if(s!=null&&s.equals(a))如果第一个为假,后一个就不需要判断了
if(s!=null&s.equals(a))两个都需要判断,后面会抛出NullPointerException()