Java类型转换与字节码解析

需积分: 0 1 下载量 19 浏览量 更新于2024-07-01 收藏 2.35MB PDF 举报
"Java语言基础和JVM相关知识" Java是一种跨平台的编程语言,它的设计使得编译后的字节码文件(.class文件)可以在任何支持Java的JVM(Java虚拟机)上运行,无需重新编译。字节码是与硬件平台无关的二进制代码,它在运行时由JVM解释为对应平台的本地机器码,实现了“一次编写,到处运行”的理念。Java的字符类型`char`占据2个字节,能够表示Unicode编码,因此能处理多种语言字符。 在Java中,`main`方法是程序的入口点,必须是`public static`的,以便JVM可以直接调用。如果有多个`main`方法,编译器不会报错,但在运行时需要指定入口点。类型转换是Java中常见的操作,但要注意,`boolean`类型不能与其他类型进行转换。此外,对象类型的转换只能在具有继承关系的类之间进行。 在Java中,容量大的类型向容量小的类型转换(如`int`到`byte`)需要强制类型转换,可能会导致数据溢出或精度损失。例如,当`int`类型的值超过`byte`的最大值(127)时,转换会导致溢出。浮点数转换为整数时,小数部分会被舍去,而不是四舍五入。 关于位运算,`2^31-1`是`int`类型的最大值,左移一位后变为负数,因为最高位(符号位)变成了1。在表达式`2147483647L`中,`L`表示这是一个`long`类型,避免了溢出。 在Java的`switch`语句中,不能直接使用浮点数,但可以使用枚举、整数或字符串。`toString()`方法用于将非字符串对象转化为字符串,如`System.out.println(xx)`会自动调用`xx.toString()`。在字符串连接中,数值和字符串的结合遵循操作符优先级,可能导致不同的结果。 关于自动装箱和拆箱,`Integer`类在-128到127之间的值会复用缓存,超出这个范围则每次都会创建新对象。例如,`Integer a = 128`会创建新对象,而`Integer a = 1`则可能从缓存获取。数组的长度是其成员变量而非方法,因此可以使用`.`操作符获取,如`a.length`。数组的大小在创建后是不可变的。 Java支持不规则数组( jagged arrays),即多维数组的每行可以有不同的列数。`final`关键字用于标识不可变性,它可以修饰类、方法和变量。当`final`修饰类时,意味着该类不能被继承;修饰方法时,表示方法不能被重写;修饰变量则确保其值不可更改。对于`final`类中的方法,即使不明确声明`final`,也会隐式地成为`final`方法。
2011-11-29 上传