【Java高级程序设计学习笔记】类型信息概述

对计算机而言,每个对象都有自己的信息,通常用字段的值来表示它的状态或信息,而用于描述对象所属类的信息被称为类型信息。类型信息记录了类的名称、拥有的字段、实现的方法、继承的父类或接口等信息,有了类型信息,JVM才能认识和识别对象,才能让程序富有动态性。

1.1类型信息的存储**

编译一个java的类文件会产生一个.class文件,它们之间有什么关系?
1.class文件与Java文件
Java的编译器在编译java类文件的时候,会把原有的文本文件翻译成二进制的字节码,并把这些字节码存储在.class文件中。
(1).java类中只有一个类或接口的情况下,编译后只产生一个.class文件

public class Person {
   
}

编写一个类Person存放在Person.java文件中,编译后可在bin目录下发现一个同名的.class的文件Person.class。编译器把编译后的Person类的字节码存放在Person.class文件中。
Person.class请添加图片描述Person.java
(2)如果Java类文件中存在内部类,编译这个文件的时候就会产生多个.class文件,并且这些.class文件(除外部类)的文件都以外部类名+$+内部类名来命名。

public class Person {
   
    class Toll {
   
    }
    interface Communication {
   
        public void speak();
    }
}

编写一个外部类Person,并在外部类中又定义了一个内部类和一个内部接口,并将这些代码全部存放在Person.java中。编译后可在bin目录下发现三个.class文件(我的是在out目录下)
在这里插入图片描述
(3)如果.java文件中存在多个并行类(接口),编译的时候也会产生多个.class文件,并且这些文件都以类名来命名。

public class Person {
   
}
class Monkey{
   
}
interface Thinking{
   
    void think();
}

编写了两个类和一个接口,并把这些类和接口存放在了Person.java文件中。编译后bin目录下存在三个.class文件。

在这里插入图片描述

2 .class文件结构

.class文件的内部结构如图所示:
在这里插入图片描述
在这里插入图片描述
从上表可以看出,Java类文件中的属性、方法,以及类中的常量信息都被分别存储在.class文件中。当Java在编译一个类文件时,除了翻译类文件外,还会为该类动态的添加一个共有的静态常量属性.class,这个属性记录了类的相关信息,即类型信息,他是Class类的一个实例。

**

1.2 类型信息的加载

Java提供两种类的装载模式:预先装载和按需装载。按需加载可以在程序启动的时候不用把所有类都装载到JVM中。大部分类都被延迟到使用的时候动态加载(java的运行时动态装载机制)。可以使得修改代码的时候无需全盘编译。
1.Java基础类的加载
采用预先装载机制。启动一个程序,Java会在JDK目录下找到并载入jvm.dll,然后启动虚拟机。此时会进行一些初始化操作。接着创建一个Bootstrap Loader对象,称它为启动类的装载器(C++编写),负责在虚拟机启动时一次性加载基础类。
2.含main()函数类的加载
Bootstrap Loader可以装载定义在sun.misc命名空间下的Launcher类,它有两个内部类 ExtClassLoader和AppClassLoader。 ExtClassLoader的父加载器被设置为null,表示为Bootstrap Loader,AppClassLoader的父加载器为ExtClassLoader,拥有main()函数的入口类,在程序启动时加载。

public class Boostrap {
   
    static {
   
        System.out.println("Bootstrap prepare!");
    }

    public static void main(String[] args) {<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天的命名词

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值