第一章 数据类型转换
自动类型转换(隐式)
public class Demo01DataType{
public static void main(String[] args){
System.out.println(1024);//默认int类型
System.out.println(1.24);//默认double类型
long num1=100L;
System.out.println(num1);//100
//num2是long类型,100默认是int型
//等号代表赋值,将右侧的int常量,交给左侧的long变量进行存储
//int --> long,符合数据类型从小到大的要求,发生自动类型转换
long num2=100;
System.out.println(num2);//100
//同理(float --> double)
double num3=2.15F;
System.out.println(num3);//2.15
//同理(long --> double)
float num4=3L;
System.out.println(num4);//3.0
}
}
- 特点:代码不需要特殊处理,自动完成。
- 规则:数据类型范围从小到大
- byte --> short --> int --> long --> float --> double
强制类型转换
public class Demo02DataType{
public static void main(String[] args){
int num=100;
System.out.println(num);//100
//int num2=100L;
//System.out.println(num2);//错误
//100L未超过int范围
int num3=(int)100L;
System.out.println(num3);//100
//int最大大约21亿
int num4=(int)6000000000L;
System.out.println(num4);//1705032704(数据溢出);只截取60亿后面的部分
//float --> int
int num5=(int)3.4;
System.out.println(num5);//3(精度损失)
char zifu1='A';
System.out.println(zifu1 + 1);//66(A的ASCII值为65)
//40为超过byte范围,编译器会自己补上一个强制类型转换(byte)
byte num6=40;
byte num7=50;
//javac编译器会直接计算出常量表达式的结果,在.class文件中直接替换成结果
byte result=40+50;
System.out.println(result);//90
//byte result1=num6+num7;
//System.out.println(result1);//错误(左面byte类型,右面int类型)
}
}
- 特点:代码要进行特殊的格式处理,不能自动完成。
- 格式:范围小的类型 范围小的变量名 = (范围小的类型)范围大的数据或变量。
- 注意事项
- 强制类型一般不推荐使用,因为有可能发生精度损失、数据溢出。
- byte/short/char三种类型可以发生数学运算,如加法。
- byte/short/char三种类型在运算时,首先被提升为int类型,然后再计算。
- boolean类型不能发生任何数据类型转换
ASCII编码表
常见的ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)
0 — 30H — 48
A — 41H — 65
a — 61H — 97
其中汉字对用的是Unicode码表(万国码),0-127与ASCII一致,128及以后包含更多的字符。
第二章 运算符
运算符:进行特定操作的符号
表达式:用运算符连起来的式子
算数运算符
- 加:+
- 整数相加,就是加法。
- 对于char类型来说,运算之前要提升为int。
- 任何数据类型和字符串相加都会变成字符串。
- 减:-
- 乘:*
- 除:%(取余)、/(取整)
- 自增运算符:++
- 自减运算符:–
若运算过程中有不同类型的数据,运算结果的数据类型为范围大的那种。
自增和自减运算符的位置不同,含义也不同,并且只有变量可以使用。
赋值运算符
- =:直接赋值
- +=:a = a + 1
- -=:a = a - 1
- /=:a = a / 1
- %=:a = a % 1
复合赋值运算符中隐含了一个强制类型转换。
public class Demo03Operator{
public static void main(String[] args){
byte num=30;
//num=num+5;
//num+5:byte + int --> int + int = int
//byte = (byte)int(自动添加的)
num+=5;
System.out.println(num);//35
}
}
比较运算符
- ==
- <
- >
- >=
- <=
- !=
比较的结果为
true
或false
逻辑运算符
- &&:与(全1为1)
- ||:或(全0为0)
- !:非
与和或具有短路的效果,若左侧已经判得结果,右侧就不会运行。
三元运算符
- 一元运算符:!、++、–
- 二元运算符:+、-、%、/、&&、||、=等
- 三元运算符:判断语句?表达式1:表达式2
- 判断语句为true,运算结果为表达式1
- 判断语句为false,运算结果为表达式2
- 注意点:表达式类型要与赋值的变量类型一致,不管表达式是否会使用到
第三章 方法入门
概述
将一个功能剥离出来,让代码看起来更清晰,方便日后更新。
练习
public class Demo04Method{
public static void main(String[] args){
方法名(实参);
}
public static 返回值类型 方法名(形参){
方法体;
}
}
注意事项
- 方法定义的顺序无所谓。
- 方法的定义不能有嵌套包含关系。
- 方法定义完成后需调用后才能执行。
第四章 JShell脚本工具
JShell脚本工具是JDK9的新特性
- 启动JShell工具,在DOS命令行直接输入
jshell
命令。 - 使用情况:代码量少,不愿编写类和main方法,也不愿去编译和运行
- 退出命令:
/exit
第五章 扩展知识点
编译器的常量优化
- 赋值的常量为超出数据类型的范围,则编译器会自动添加一个强制类型装换
- 变量赋值的右端是常量表达式,没有一个变量。编译器会直接计算出常量表达式的结果并保存在字节码.class文件中。一旦有变量的出现,就不会优化。