一、JDK、JRE、JVM是什么?以及他们之间的关系
JDK:是Java开发工具包,包含编译、编写、运行、调试Java项目所需的工具和组件,主要针对的是开发人员,包含JRE、javac编译器(编译之后产生字节码,就是.class文件)、调试工具等。用于开发Java应用程序。
JRE:是Java运行环境,针对的是Java应用程序,也就是说如果只想运行Java程序,只需要有JRE即可。
JVM:是Java虚拟机,主要作用是将Java代码转换为可以在计算机上运行的机器码,负责程序的执行。JVM并不是一个,比如说Mac、Linux、Windows上面的JVM都不是同一个版本。同一个Java程序可以在三个不同的操作系统中执行,这就实现了Java程序跨平台性。
JDK = JRE + Java开发工具
JRE = JVM + 核心类库
Java编写步骤:
1.编写Java源代码
2.javac编译,得到.class字节码文件
3.Java运行,把.class加载到jvm运行
‘+’的使用注意
1.当左右两边都是数值类型,做加法运算。
2.当左右两边有一方是字符串,做拼接运算。
System.out.println(600 + 66 +"hi");//输出666hi
System.out.println("hi" + 600 + 66);//输出hi60066
第二行”hi“和600先进行拼接运算,得到字符串hi600,然后再和66进行拼接运算,得到hi60066
二、数据类型
2.1基本数据类型:8种
整数类型(4种):byte[1],short[2],int[4],long[8]
浮点类型(2种):float[4],double[8]
字符型(1种):char[2]
布尔型(1种):boolean[1]
注意:字符串String不是基本数据类型,它是Object类的子类,属于引用类型。
引用数据类型:3种(类、接口、数组)
2.2基本数据类型的转换:
char -> int -> long -> float -> double
byte -> short -> int -> long -> float -> double
也就是说,char、byte、short三者要进行运算,都应该用int类型接受
大转小要强制转换
char类型可以保存int常量,不能保存int变量,保存需强转
char a = 1;
int x = 6;
char b = x; //错误
char c = (char)x; //正确
三、运算符
3.1 /(除)
/与数据类型有关
System.out.println(10 / 4); //实际运行是 2 ,前后两个类型都是int
System.out.println(10.0 / 4); //实际运行是 2.5 ,有类型为double
double a = 10 / 4;
System.out.println(a); //实际运行是 2.0 ,先运行出来10/4 得到 2,再转类型为double
3.2 %(取余)
本质是:a % b = a - a / b * b
-10 % 3 => (-10) - (-10) / 3 *3 = -1
3.3 ++(自增)
(1)i++(先赋值再自增)
int i = 1;
i = i++;
System.out.println(i); //1
(有一个隐藏的临时变量temp)
拆分先算 i++ --->temp = i ; i = i + 1;
然后计算 i = temp, 也就是 i = (i++);获得的这个临时变量赋值给 i
(2)++i(先自增后赋值)
int i = 1;
i = ++i;
System.out.println(i); //2
同样的,先计算 ++i ---> i = i + 1;temp = i;
然后计算 i = temp, 也就是 i = (++i)
3.4 &&(短路与)、||(短路或)
&&:a && b ,当a、b都为true的时候为true,假设a为false ,结果直接为false,不进行b的操作。
|| :a || b ,当a、b有一个为true的时候为true,假设a为true ,结果直接为true,不进行b的操作。
3.5 三元运算符(xxx?true:false)
3.6 <<(算术左移)、>>(算术右移)、>>>(逻辑右移)
- <<:符号位不变,低位补0(集合中扩容机制有使用,二进制乘二)
- >>:低位溢出,符号位不变,并用符号位补溢出的高位
- >>>:低位溢出,高位补0
- 注意:没有<<<符号