第一次写博客,写得不好,如果有朋友看到,请别见怪,有什么问题可以提出来。
自己是一个比较随性,不拘小节的人,不喜欢那些条条框框,所以性格使然,在写博客的时候我不会用那些官方的话,那样别人难以理解,自己理解起来也困难
所以我会用最简单粗暴的语言来说明,可能还会举一些例子来说明。
好记性不如烂笔头,今天向公司一大神请教问题的时候,大神强烈建议,遇到问题时把学习的过程用博客纪录下来,这样忘记了随时可以打开,看下自己解决的思路。
今天遇到一个问题,就是最近经常遇到XXX.class这个代码。很蒙蔽。这代码到底是干嘛用的,从而延伸到了Class类。只要了解这个类,那么这些问题都迎刃而解。
了解一个新东西,需要三个步骤
what,why,how。
好了,这三个步骤相信很多人都知道是什么意思,
不多BB,直接进入主题
第一:Class是什么?
先来看下Class的结构
java.lang.Object
java.lang.Class<T>
public final class Class<T> extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement
那么Class这个类是什么东东呢?
我这样:java程序在运行的时候需要把相关的类或者接口加载到JVM里对吧?那么问题来了,加载到JVM里的类啊,接口啊怎么管理呢?这时候本着面向对象的思想,Class就是来管理被加载的类或者接口的对象。
Class对象又是怎么样运作的呢?
Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。
But,要注意几点
1.Class没有公开的构造函数,通过源码,可以发现它的构造函数是私有的。这就意味它不能显性的构造,
Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
2.基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也都对应一个 Class 对象。
3.同一个类的多个实例对象,在JVM里的Class对象是同一个,可以说是唯一一个。
如:
User user1 =new User();
User user2 =new User();
User user3 = new User();
user1,user2,user3是三个不同的实例对象,但是他们的类User在JVM里面的Class对象永远只有一个。说白了Class对象只认User。
第一点Class是什么就简单的讲完了。
第二点:为什么会这样设计Class类。
这个的话,由于个人功力还不够深厚,具体的说不出个所以然,但是Class作为反射的基础,有一点是肯定的就是跟反射技术有很大关系。
反射技术,有兴趣的可以在网上找找资料。
第三点:怎么使用Class对象
使用Class对象有三种方式。
1.
Class.forName(String forName);
forName参数为你需要调用的类的全名,包括包名。这个大家应该很清楚,连接JDBC时就使用过。
2.
User user =new User();
user.getClass();