基础和语法

JDK和JRE的区别

JRE是Java程序的运行时环境,要想在计算机上运行Java语言编写的程序,JRE是必不可少的

JDK是Java程序的开发环境,要想在计算机上开发自己的Java程序,JDK是必不可少的。

JRE中包含了Java基础类库、Java虚拟机(可实现跨平台),JDK包含了JRE、Java编译器javac.exe和其他一些开发工具

20230122200652

Java字节码

所谓的字节码,就是Java程序经过编译之类产生的.class文件,字节码能够被虚拟机识别,从而实现Java程序的跨平台性。

20230122200839

由 Java 编写的程序需要先经过编译步骤,生成字节码(*.class 文件),这种字节码必须再经过JVM,解释成操作系统能识别的机器码,在由操作系统执行。因此,我们可以认为 Java 语言编译与解释并存。

Java包装类

基本类型与对应的包装类对象之间,来回转换的过程称为“装箱”与“拆箱”

20230122191157

1
2
Integer in4 = Integer.valueOf("1");
int i = in1.intValue();

JDK1.5后提供了自动装箱和自动拆箱功能,我们可以直接把一个基本类型的值赋给一个包装类对象(自动装箱),也可以直接把一个包装类对象的值赋给基本类型变量(自动拆箱)

1
2
3
4
5
//JDK1.5之前
Integer i = new Integer(8);
//JDK1.5开始,提供了自动装箱的功能,定义Integer对象可以这样写
Integer i = 8;
int n = i; //自动拆箱

更多用法见Java包装类详解

Java数值型变量的类型转换

Java 所有的数值型变量可以相互转换,当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,可以进行自动类型转换;反之,需要强制转换。

来看几个例子:

1
2
3
4
5
6
7
8
9
10
11
// 1. 不正确,3.4是双精度数,赋给单精度变量会造成精度损失
float f=3.4;
//正确写法是
float f=3.4F; 或 float f =(float)3.4;

// 2. 编译出错,1 是 int 类型,因此 s1+1 运算结果也是 int型,需要强制转换类型才能赋值给 short 型。
short s1 = 1; s1 = s1 + 1

// 3. 正确,有隐含的强制类型转换 s1 = (short(s1 + 1);
short s1 = 1; s1 += 1;