Class类探索(一)
来源:互联网 发布:网络小鲜肉图片大全 编辑:程序博客网 时间:2024/06/05 20:27
Class类是干嘛的
Class类封装了对象和接口运行时的状态,JVM依靠Class类来正确运行,Class类在类装载时就是内存中创建了Class类对象,八种基本数据类型(boolean,byte,char,short,int ,long ,float,double)和void 关键字都对应着一个Class类对象(包装类:Boolean,Byte,Character,Short,Integet,Long,Float,Double以及Void包装类)。每个相同类型和维数的数组共享一个Class类。Class类的三种获取方式
public class StudyClass { private static Class<?> bClass; public static void main(String[] args) { Person person = new Person(); System.out.println("获取Person对象:" + person.toString()); Class<? extends Person> aClass = person.getClass(); System.out.println("第一种方式获取 Class 对象:" + aClass.toString()); //----------------------------------------------- try { bClass = Class.forName("studyClass.Person"); System.out.println("第二种方式获取 Class 对象:" + bClass.toString()); } catch (ClassNotFoundException e) { e.printStackTrace(); } //--------------------------------------------- Class<Person> cClass = Person.class; System.out.println("第三种方式获取 Class 对象:" + cClass.toString()); //那么我们可以来判断一下aClass bClass cClass 这三个Class对象在内存中的地址是否相等 if (aClass==bClass){ if (bClass == cClass){ System.out.println("相等"); }else { System.out.println("不等"); } } }}
输出结果:
获取Person对象:Person{name='null', age=0}第一种方式获取 Class 对象:class studyClass.Person第二种方式获取 Class 对象:class studyClass.Person第三种方式获取 Class 对象:class studyClass.Person相等Process finished with exit code 0
由此我们可以看出,三种方式创建的Person类的Class对象的内存地址都是一样的, 通过上一篇文章我们知道了:类在转载的时候会进行类对象的内存地址的分配,也就是说我们的Person类只被转载了一次,且所有的Person对象共享该Class对象。
- 常用方法
1、静态方法.forName();
static Class<?> forName(String name, boolean initialize, ClassLoader loader)Returns the Class object associated with the class or interface with the given string name, using the given class loader.static Class<?> forName(String className)Returns the Class object associated with the class or interface with the given string name.
第二个方法在默认情况下会执行第一个方法的Class.forName(name,true,默认的此类的类加载器);当然了,我们可以指定这个类是否初始化和指定类的类加载器
2、newInstance();
newInstance 和new关键字所达到的效果其实是一样,两者的主要差别在于:
newInstance使用类的加载机制,而new是通过这个关键字来创建实例
从JVM的角度来看,newInstance创建实例是需要先决条件的,newInstance需要这个类已经初始化,而new关键字则不需要
newInstance是弱类型,效率低,只能调用无参构造方法,而new是强类型,效率高
3、getName();返回该Class类对象所表示的实例的名称
4、getClassLoader();返回该类的类加载器
- Class类探索(一)
- Class类探索(一)
- lua中面向对象(class)实现探索(一)
- lua中面向对象(class)实现探索(一)
- 探索 Word 2007 开发 II(一):引用 .NET Framework Class Library 在线文档 - Allen Lee
- 探索 Word 2007 开发 II(一):引用 .NET Framework Class Library 在线文档
- 软件探索(一)
- 数据探索(一)
- HyBrid探索(一)
- 反射(一)---类Class
- 对Class类的几点探索
- 探索软件设计模式(一)
- 百度贴吧发贴机探索(一)
- 探索软件设计模式(一)
- 探索软件设计模式(一)
- [原创] Delphi(一) --探索
- 探索之路(一)
- Django 探索(一) HelloWorld
- kaldi mono训练(学习查阅博客)
- Python 安全编程学习总结
- Codeforce 558C. Amr and Chemistry &51nod 1483 化学变换 By Assassin 暴力大法好
- URAL 1004 Sightseeing Trip 无向图最小环
- (一)标识符、注释
- Class类探索(一)
- 第一次使用cocoaPods
- 搭建和配置Spring与jdbc整合的环境
- 基于map函数生成星战片头动画
- sklearn,keras,tensorflow 模型本地保存与导入
- 在腾讯云Centos7系统下配置tomcat
- Linux进程状态详解
- Java小白练手之传统贪吃蛇应用
- 1