文章目录
1.Java对象的创建
1.1 new的方式创建
1.2 反射的方式创建
Java世界是运行在JVM之上的,我们编写的类代码,在经过编译器编译之后,会为每个类生成对应的.class文件,这个就是JVM可以加载执行的字节码。运行时期间,当我们需要实例化任何一个类时,JVM会首先尝试看看在内存中是否有这个类,如果有,那么会直接创建类实例;如果没有,那么就会根据类名去加载这个类,当加载一个类,或者当加载器(ClassLoader)的defineClass()被JVM调用,便会为这个类产生一个Class对象(一个Class类的实例),用来表达这个类,该类的所有实例都共同拥有着这个Class对象,而且是唯一的。
1.2.1Class对象和类的区别
类:只是信息描述的,写明了有哪些内部属性及接口,可以理解为是定义了一套规则。
Class对象:被用来对类的情况进行表述的一个实例,也就是是类的实际表现,可以理解为是对规则的图表化,这样JVM才能直观的看懂,可以看做是一个模版,Class对象包含了一个类的所有信息,比如构造器、方法、字段等。
类的实例化对象,就是通过模版,开辟出的一块内存进行实际的使用。
1.2.2再看对象创建过程
所谓的Class对象,是Class类的实例,而Class类是描述所有类的,比如Person类,Student类。
我们对一个事物下定义通常有两种方式
我们对一个东西下定义有两种方式
方式 | 解释 |
---|---|
属类定义 | 用大的集合去描述小集合,如:学生是在上学的人,对象是类的实例等 |
关系定义 | 当一个集合无法找到比他更大的范围时,用临近关系定义,如:物质和意识的关系 |
如:如果要跟概念下定义,则概念的概念是什么?我们可以找到更大的集合来描述它。 | |
概念:思维的基本形式之一,反映客观事物的一般的、本质的特征。 |
元数据:我们通常把用来描述数据的数据成为元数据
如:类是对象的元数据,它描述了对象的结构。
1.2.2获取Class类实例的4种方法
①前提:若已知具体的类,通过类的class属性获取,该方法最为安全可靠,
程序性能最高
Class clazz = String.class;
②前提:已知某个类的实例,调用该实例的getClass()方法获取Class对象
Class clazz = “www.atguigu.com”.getClass();
③前提:已知一个类的全类名,且该类在类路径下,可通过Class类的静态方
法forName()获取,可能抛出ClassNotFoundException
Class clazz = Class.forName(“java.lang.String”);
④其他方式
ClassLoader cl = this.getClass().getClassLoader();
Class clazz4 = cl.loadClass(“类的全类名”);
1.2.3有了Class对象,能做什么?
①创建类的对象
调用Class对象的newInstance()方法
1)类必须有一个无参数的构造器。
2)类的构造器的访问权限需要足够。
②获取运行时类的完整结构
Field、Method、Constructor、Superclass、Interface、Annotation
实现的全部接口
所继承的父类
全部的构造器
全部的方法
全部的Field