1.框架:半成品软件,可以在框架的基础上进行软件开发来简化代码
1. 源代码阶段在硬盘
2.class类对象阶段(内存中) 通过类加载器可以把.class的字节码文件加载到内存中去
成员变量封装为Fileld对象 然后注意看有个Fileld 后面的【】是个数组把这些对象都放里面
构造方法封装为Constructor对象
成员方法封装为Method[]对象
其实这里就是反射 :将类的各个组成部分封装为其他对象这就是反射机制
3.运行阶段创建对象在内存
其实打了str.之后跳出的方法就是反射 因为str字节进入内存 然后class类把方法都封装进了Method数组里然后把对象名展示出来。
2.获取字节码class文件的三种方式
1.Class.forName("全类名");
2.类名.class();
3.对象.getClass();
这里还新建一个Person类
package reflect;
import domain.Person;
/*
获取Class对象的方式
1.Class.forName("全类名"),将字节码文件加载进内存,返回class对象
2.类名.class 通过类名的属性class获取
3.对象.getClass(),getClass()方法在Object类中定义着
*/
public class reflectDemo {
public static void main(String[] args) throws Exception {
//1.Class.forName("全类名"),将字节码文件加载进内存,返回class对象
//全类名: 包名.类名
Class cls1 = Class.forName("domain.Person");
System.out.println(cls1);
//2.类名.class 通过类名的属性class获取
Class cls2 = Person.class;
System.out.println(cls2);
//3.对象.getClass(),getClass()方法在Object类中定义着
Person p = new Person();
Class cls3= p.getClass();
System.out.println(cls3);
//==去比较三个对象
System.out.println(cls1==cls2); //比较的是内存地址 true说明是一个对象
System.out.println(cls3==cls2);
//同一个字节码文件(*.class文件)在一次程序运行过程中只会被加载一次,
//无论通过那种方式加载内存的class对象都是同一个。
}
}
3.class对象功能
13个获取方法