关于java程序初始化运行过程
一个.java
的文件经过javac
命令编译成功后,得到一个.class的文件
当我们执行了初始化操作(有可能是new、有可能是子类初始化 父类也一同被初始化、也有可能是反射…等),会将.class
文件通过类加载器装载到jvm
中
将.class
文件加载器加载到jvm中,又分了好几个步骤,其中包括 加载、连接和初始化
其中在加载的时候,会在Java堆中创建一个java.lang.Class类的对象,这个Class对象代表着类相关的信息(也就是说生成了一个class镜像)
在此Class对象(镜像)中,包含了类中所有的方法
获取class对象
Student stu = new Student();//首先实例化一个Student对象
1.通过实例化对象获得Class对象
Class stuClass = stu.getClass();//此句是在有类进行实例化然后进行获取
2.直接通过类名进行Class对象获取(用于已经在编译时知道了具体的类
Class stuClass = Student.class;//直接跳过了实例化的对象名而采取类名进行获取
3.直接通过对象全名字符串进行Class对象获取(用于动态的获取Class对象
testlaasss stClass = Class.forName("test.student");//直接通过了类所在路径(例如此处是package test 中的 Student 类)
关于一些反射访问的方法
当你在通过反射得到了stuClass之后
stuClass.getPackage();//获取类所在包名
stuClass.getNAme();//获取该类的名字以及名字
stuClass.getInterface();//实现该类下的相关未实现接口
stuClass.getMethods();//获取所有权为public的方法
stuClass.getDeclaredMethods();//获取该对象下所有的方法
stuClass.getFields()//获取所有权为public的成员变量
stuClass.getDeclareFileds();//获取当前对象的所有成员变量