Java基础知识,很重要!!!
JDK和JRE和JVM分别是什么,有什么区别?
- JDK(Java Development Kit):JDK 是 Java 开发工具包,包含了编写、编译、调试和运行 Java 程序所需的所有工具和组件,比如编译器(javac)、Java API、调试工具等。 JDK 是针对 Java 开发人员的,它包含了 JRE,还有编译器和其他工具,可以用来编写和 调试 Java 程序。
- JRE(Java Runtime Environment):JRE 是 Java 运行时环境,包括了 Java 虚拟机 (JVM)和 Java 标准类库(Java API)。JRE 是针对 Java 应用程序的,它提供了在计算机上运行 Java 应用程序所需的最小环境。
- JVM(Java Virtual Machine):JVM 是 Java 虚拟机,是 Java 程序运行的环境。JVM负责将 Java 代码解释或编译为本地机器代码,并在运行时提供必要的环境支持,比如内存管理、垃圾回收、安全性等。JVM 的主要作用是将 Java 代码转换为可以在计算机上运行的机器码,并负责程序的执行。
总结
- JDK 是 Java 开发工具包,包括了编译器、Java API、调试工具等,用于开发 Java 应用程序
- JRE 是 Java 运行时环境,包括了 Java 虚拟机和 Java 标准类库,用于在计算机上运行 Java 应用程序
- JVM 是 Java 虚拟机,是 Java 程序运行的环境,负责将 Java 代码转换为可以在计算机上运行的机器码,并提供必要的环境支持
- Java开发工具包 = Java 运行环境 + Java开发工具
- Java 运行环境= Java虚拟机 + Java核心类库
补充
1)JVM 并不是只有一种!只要满足 JVM 规范,每个公司、组织或者个人都可以开发自己的专属 JVM
2)Java 程序是如何在计算机上运行的:
- 编写Java源代码 => 需要用到JDK
- 将Java源代码编译成字节码 => 需要用到Java开发工具包中的编译器(javac),产生字节码文件
- 将字节码转换成机器码 => 需要用到 JVM
- 操作系统执行机器码,完成程序的运行 => 需要用到JRE
什么是字节码?采用字节码的最大好处是什么?
字节码是Java程序编译后的中间代码,是一种可移植的二进制代码,可以在任何支持Java虚拟机(JVM)的平台上运行。字节码通过将Java源代码编译为字节码指令序列,使得Java程序可以跨平台运行,即使是在不同的操作系统和硬件平台上也可以运行。
字节码采用中间代码的形式,相比于直接将程序编译为特定平台上的机器码,有以下几个好处:
- 可移植性:由于字节码是中间代码,所以可以在任何支持JVM的平台上运行,使得Java程序具有很好的移植性。这也是Java跨平台的重要特性之一。
- 安全性:由于字节码需要在JVM中运行,所以可以对字节码进行安全检查,以确保程序不会对系统造成威胁。
- 性能:由于字节码是一种紧凑的二进制格式,相比于直接编译为机器码,可以更快地加载和传输,同时也可以在运行时进行动态优化,提高程序的执行效率。
- 可读性:相比于直接编译为机器码,字节码具有更好的可读性,可以方便地进行反汇编和调试。
因此,采用字节码作为中间代码的最大好处是提高了 Java 程序的可移植性、安全性、性能和可读性。这也是 Java 跨平台和安全性等特性的基础。
补充
什么是Java内部类,内部类的分类有哪些?有哪些优点和应用场景?
定义
内部类:定义在某一个类中的类。
分类、优点、应用场景
分类:
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
分类 | 定义 | 作用范围 | 应用场景 |
---|---|---|---|
成员内部类 | 与其外部类的其他成员变量和方法平级的内部类 | 可以访问外部类的所有成员变量和方法,可以被外部类访问 | 为外部类提供服务的场景 |
静态内部类 | 使用static 关键字修饰的内部类 |
只能访问外部类的静态成员和静态方法,只能被外部类的静态方法访问 | 与外部无关或者需要单例模式的场景 |
局部内部类 | 定义在方法中的内部类,在方法中直接实例化 | 可以访问外部类或者代码块中声明为final 的变量,作用于仅限在方法内部,不能使用访问控制符修饰 |
执行特定任务或者逻辑操作场景 |
匿名内部类 | 没有名字的内部类,使用new 接口(){} 或者抽象类(){} 或者new 父类(){} |
没有名字,没有构造器,只能使用一次,必须集成一个父类型(接口或者抽象类)或者实现一个接口的局部内部类 | 创建回调函数、事件监听、线程等临时对象 |
创建与获取:
// 1. 私有内部类 => 在外部类中编写方法,对外提供内部类对象 |
优点:
- 通过内部类变相实现多继承,使得一个类可以假性地继承多个父类
- 内部类可以隐藏实现细节,简化代码的编写
- 内部类可以访问外部类的私有成员变量和方法,从而增加了程序的灵活性和安全性
反射机制、优缺点、应用场景
Java反射机制是指在运行时动态获取类的信息、创建对象以及调用对象的属性和方法的机制。
优点:
- 可以动态地获取类的信息,不需要在编译时就知道类的信息。
- 可以动态地创建对象,不需要在编译时就知道对象的类型。
- 可以动态地调用对象的属性和方法,可以在运行时动态地改变对象的行为。
缺点:
- 由于反射是动态的,所以它的运行效率较低,不如直接调用方法或属性。
- 由于反射是动态的,所以它会破坏 Java 的封装性,可能会使代码变得复杂和不稳定。
应用场景:
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时调用任意一个对象的成员变量和方法
- 在运行时处理注解
- 生成动态代理
补充哪些框架或者自己的哪些项目用到了反射,会是亮点