Java的语言特性
Java的语言特性
- 面向对象:Java是一种面向对象的语言,支持封装、继承和多态等面向对象的特性;
- 统一的内存管理:Java采用垃圾回收机制来管理内存,自动回收不再使用的对象,减轻了开发人员的负担;
- 跨平台性:Java源代码编译后生成的字节码可以在任何支持Java虚拟机的平台上运行;
- 异常处理:Java提供了完善的异常处理机制,可以增强程序的健壮性;
- 元数据:Java支持元数据,可以在运行时获取程序信息,利于程序的调试和优化;
- 线程支持:Java提供了多线程的支持,可以方便地处理并发任务;
- 安全性:Java具有高度的安全性,可以通过访问控制和类加载机制来保证程序的安全性;
泛型
一种机制能强制性的让我们只能存储对应类型的元素,否则编译就不通过
Java泛型是一种在编译时进行类型检查的机制,它允许我们在定义类、接口和方法时使用类型参数,从而实现代码的重用和类型安全。
使用泛型可以在编译时指定类、接口或方法的参数类型,使得代码更加灵活和通用。通过使用泛型,可以避免在代码中进行类型转换,并提供更好的类型安全性。
在Java中,泛型的基本用法是通过在类名、接口名或方法名后面使用尖括号<>来声明类型参数。
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
Box中的T就是一个类型参数,它可以在类的方法中使用,表示一个占位符类型。在实例化Box对象时,可以指定具体的类型,例如Box<Integer>
表示一个存储整数的盒子,Box<String>
表示一个存储字符串的盒子,Box<?>
表示一个未知类型。
一个Java程序如何从代码到运行
- 编写Java源代码:程序员通过编写Java源代码来实现所需的功能;
- 编译Java源代码:使用Java编译器将编写的Java源代码编译成Java字节码;
- 加载字节码:使用Java虚拟机将编译后的Java字节码加载到内存中;
- 验证字节码:Java虚拟机对字节码进行验证,确保字节码是合法、安全、符合Java语法规范的;
- 解释执行字节码:Java虚拟机将字节码解释成机器码,逐行执行Java程序;
- 运行中处理异常:在程序运行过程中,如果出现了异常,Java虚拟机会根据预设规则进行处理;
- 运行结束:Java程序结束运行,Java虚拟机释放内存资源。
以上是Java程序的基本运行过程,其中第3个步骤(加载字节码)和第4个步骤(验证字节码)称为Java虚拟机的类加载过程,是Java程序执行的第一步,也是Java虚拟机的重要功能之一。
什么是机器码
机器码(Machine Code)是计算机能够直接执行的最底层的指令集合,它表示计算机硬件上具体的操作。例如,将两个数相加,将一个值存储到内存中等操作。机器码由二进制代码组成,被计算机硬件直接识别并执行。
机器码通常是由计算机的汇编器生成的,汇编器会将汇编语言程序翻译成机器码。机器码是计算机最底层的指令,直接由计算机的硬件进行执行,因此它具有高效、快速的特点。
虽然机器码非常有效,但是它很难进行人工编写和阅读。因此,程序员通常使用高级编程语言编写程序,并使用编译器将高级语言编译成机器码。编译器会将高级语言转换成机器码,这样程序员就不需要直接编写机器码,而是可以使用高级语言进行开发和调试。
机器码通常只包含0和1两个数字,以下是一段简单的机器码的例子:
00110000 01111000 00001111
这段机器码表示的是一个简单的加法运算,其中前面的“00110000”表示存放加数1的内存地址,“01111000”表示存放加数2的内存地址,“00001111”表示存放结果的内存地址。计算机硬件将这段机器码加载到内存中,并按照对应操作进行计算,最终将结果存放到指定的内存地址中。
什么是字节码
字节码(Bytecode)是一种由Java编译器生成的中间代码,它是Java程序所编译的结果,在Java虚拟机上运行。Java源代码通过编译器编译为字节码,然后由Java虚拟机将字节码转换成机器码,最终由计算机硬件执行。
字节码是一种跨平台的中间格式,可以在不同的操作系统和硬件上执行。Java程序在不同的计算机上运行,只需要安装对应的Java虚拟机,不需要对源代码进行重新编译,这大大提高了程序的可移植性和兼容性。
Java中的字节码是由Java虚拟机解释执行的,它包含了Java语言中的所有指令,例如存储、加载、条件分支、函数调用等等。字节码是一种中间形式,它比机器码更接近源代码,并且使用了一些简单的指令,因此比起机器码可以更容易地进行调试和优化。
总之,字节码是一种处理方便、跨平台的中间代码,具有良好的可移植性和可扩展性,是Java程序的重要运行形式。