安装环境
- 下载JDK
- 设置环境变量
- 测试安装成功,在控制台录入:javac -version
- 下载IDE,如eclipse
Linux:安装OpenJDK,其他一样
访问修饰符(access modifiers)
控制类和方法的被访问范围,超出这个范围就无权访问了
名字 | 同一个类 | 同一个包 | 不同的包但是子类 | 不同的包 |
Private | 1 | 0 | 0 | 0 |
Default | 1 | 1 | 0 | 0 |
Protected | 1 | 1 | 1 | 0 |
Public | 1 | 1 | 1 | 1 |
JVM 的一天
1.类加载系统(Class Loader Subsystem):三步走(loading linking initialization)
Loading的过程:
- 首先检查类名还有它的父类名
- 然后看看有没有和其他类相关联
- 接着看看修饰符,变量,方法等信息
接下来,创建一个对象Class来代表这个对象A。注意这个对象Class已经在java.lang里面定义好了,它的作用就是提供程序员得到类A的信息,想要操作这个对象A我们可以使用getClass()方法
举例子:
Student s1 = new Student();
Class c1 = s1.getClass();
//getName()是Class内部方法,用于得到指向的类的名字
System.out.println(c1.getName());
//getDeclaredMethods()得到Student类所有的方法名
Method m[] = c1.getDeclaredMethods();
for (Method method : m)
System.out.println(method.getName());
// getDeclaredFields()得到所有的变量
Field f[] = c1.getDeclaredFields();
for (Field field : f)
System.out.println(field.getName());
剩下两个步骤:
- Linking:检查格式,分配内存,符号引用转换为直接引用
- Initialization:静态变量赋值,加载要使用的类到内存(如果没有加载成功,报错:java.lang.ClassNotFoundException)
2.JVM Memory
分为五个部分:
method area | 用于存储类信息,该区域只有一个并且共享 |
heap area | 用于存储对象,该区域只有一个并且共享 |
stack area | 用于保存线程信息,每一个线程有一个,不共享 |
pc registers | 用于存储执行的指令地址,每一个线程有一个,不共享 |
native methodd stacks | 存储本地代码,每个线程都有本地方法栈 |
3.Execution Engine
解释字节码,及时编译(所谓及时,就是指当一个method被多次使用时,这段代码被转换为本地代码,调用时无需再次解释字节码,提高效率),回收内存
4.Java Native Interface (JNI)(java本地接口)
允许JVM调用 C、C++ 等本地语言编写的程序,也可以让本地语言编写的程序调用 Java 程序
5.Native Method Libraries
用于支持Execution Engine 的本地c/c++库