访问修饰符,JVM

文章详细介绍了Java开发的基础环境配置,包括JDK的安装与环境变量设置,以及IDE如Eclipse的下载。接着讨论了Java中的访问修饰符及其作用范围。深入到JVM,阐述了类加载系统(加载、链接、初始化)的三个步骤,以及JVM内存的五个部分:方法区、堆、栈、程序计数器和本地方法栈。此外,还提到了ExecutionEngine的字节码解释和即时编译,以及JavaNativeInterface(JNI)在调用本地代码中的角色和NativeMethodLibraries的支持功能。
摘要由CSDN通过智能技术生成

安装环境

  • 下载JDK
  • 设置环境变量
  • 测试安装成功,在控制台录入:javac -version
  • 下载IDE,如eclipse

Linux:安装OpenJDK,其他一样

访问修饰符(access modifiers)

控制类和方法的被访问范围,超出这个范围就无权访问了

名字同一个类同一个包不同的包但是子类不同的包
Private1000
Default1100
Protected1110
Public1111

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++库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值