1. Java 程序的内存划分,分为 5 大区域,分别是什么?(重点,牢记)
-
PC 寄存器(Program Counter Register):
存储 Java 虚拟机正在执行的字节码指令地址 -
Java 虚拟机栈(Java Virtual Machine Stack):
存储栈帧 -
堆(Heap):
存储着 GC 锁管理的各种对象 -
方法区(Method Area):
存储每一个类的结构信息(比如字段和方法信息、构造方法和普通方法的字节码等) -
本地方法栈(Native Method Stack):
用来支持 native 方法的调用(比如用 C 语言编写的方法)
2. Java 的构造方法怎么写?可以重载吗?
3. Java 中 this 关键字是什么?本质是什么?如何在同一个类的一个构造器中调用另一个构造器?
- this 是一个指向当前对象的引用
- this 的本质是一个隐藏的、位置最靠前的方法参数
-
this()
可以调用其他构造器
4. 如何理解 this 的本质是一个隐藏的、位置最靠前的方法参数
这句话呢?(注意理解这个点,非常重要)
- 上面的
dog1.run()
这句代码相当于 方法区run(dog1)
的调用 - 上面的
Dog dog1 = new Dog(10);
这句代码等价于 方法区中Dog dog1 = Dog(新对象的地址, 10);
因为new
会创建出一个堆空间地址
5. Java 在什么情况会生成默认构造方法?如果有自定义构造方法,默认构造方法还在吗?
- 如果开发者不给类声明构造方法,就会自动生成无参默认构造方法
- 如果开发者有自定义构造方法,默认构造方法就不会生成了
6. Java 中的包本质是是什么?有什么作用?包的命名建议是什么?(重要)
- 包的本质就是文件夹
- 作用:① 将不同的类进行组织管理、访问控制 ② 解决命名空间
- 命名建议:一般用
公司名称的全小写字母
命名
7. 如何在一个类中使用其他包的类呢?(至少说两种方式)
8. 为了方便,Java 编译器会为每个源文件自动导入哪 2 个包?import aa.bb.*;
这句代码导入了哪些位置的类?
- 自动导入
import java.lang.*;
和import .*;
-
import aa.bb.*;
代表导入 aa/bb 文件夹下的所有类,并不会递归导入子文件夹的类