美文网首页
java Class类的理解

java Class类的理解

作者: 幽澜先生 | 来源:发表于2019-01-29 17:29 被阅读0次

一 Class类是什么:java.lang包里的一个类,只是名字和class很像,java区分大小写

//java 类在编译后会产生一个以.class结尾的字节码文件

//该文件内存储了Class对象的相关信息,Class对象表示的是类在运行时的类型信息

//Class与java.lang.reflect构成了java的反射技术

//当我们要使用类时,例如使用new 操作符实例化一个新对象,访问类的静态方法,

//jvm会先检查该类的有无加载,若有加载了就会直接进行相应的操作

//若检查到没有加载,jvm就会先去加载这个类的对应的字节码文件(这里会进行相应的检查)

//当加载成功后,就可以进行相应的操作了

二 Class类的作用

1 Class类的实例什么时候创建,如何创建,这里有两种说法,不过不影响我们的理解(我认为是jvm加载类的时候加上的)

(1)java源文件被编译成java字节码(class文件)时,会在这个字节码文件中加上一个Class对象

(2)jvm在加载类的时候会加上一个Class对象

2 所有的java对象共用这一个Class对象,Class对象是和类定义放在一起的。

3 作用:但我们新建一个类的实例(对象)或者引用类的静态变量的时候,JVM是根据这个类的属性class对象创建实例对象或者提供静态变量的引用值。比如:Person person = new Person(); 首先去加载Person.class,然后找Person.class中的Person.class对象,没有找到就加载Person.class对象,然后根据Person.class对象去创建Person的实例对象p。

4 这里有个地方比较拗口:类的class属性是Class类的实例,这个class对象的内容是类的信息。

例如:Person.class的内容是Person类的信息(成员变量、方法等等)

三 获取Class实例对象的三种方法

1 类名.class(jvm加载类的时候添加的class属性)

2 Class.forName("类的全名")(Class的方法,最后是调用的Class的native方法forName0(),这个用得比较多,Class.forName("com.mysql.jdbc.Driver").newInstance()

说明:再调用Class.forName("xxx")的时候,JVM会加载这个类,如果你的这个类中有static代码块,这个时候,static代码块会执行。为什么要用Class.forName("com.mysql.jdbc.Driver")?只是为了在编译器确定有没有驱动,其实import com.mysql.jbdc.Driver是一样的。

3 实例对象.getClass()(用的是Object的native方法getClass)

三 Class类和java反射机制

1 Class类是java反射机制的源头

2 spring IOC中java反射的运用,伪代码举例:

一般的bean的配置:<bean id="test" class="com.indi.wangx.Test">

在spring中:

Class<T> class = Class.forName("com.indi.wangx.Test");

T t = class.newInstance();

contanier.put(t)(contanier是IOC容器)

*********************************************************************************************************************

*********************************************************************************************************************

3.Field   Method 

相关文章

  • java 反射

    java反射主要从以下几个方面理解 理解 Class 类 理解 Java 的类加载机制 学会使用 ClassLoa...

  • java Class类的理解

    一 Class类是什么:java.lang包里的一个类,只是名字和class很像,java区分大小写 //java...

  • 理解Abstract class和Interface

    理解Abstract class和Interface 抽象类是什么 Java中的Abstract class和In...

  • java中的反射

    主要介绍以下几方面内容 理解 Class 类 理解 Java 的类加载机制 学会使用 ClassLoader 进行...

  • java基础3

    1、说说对Class类的理解 2、说说Class/Java动态加载类 3、通过反射获取类的方法、变量等 4、方法的...

  • Java高级-反射

    15.1.Java反射机制概述 15.2.理解Class类并获取Class实例(重点) 用反射实现类的实例化,调用...

  • JAVA反射机制详解

    1.理解反射的基础:Class类 众所周知Java有个Object 类,是所有Java 类的继承根源,其内声明了数...

  • [Java]重学Java-成员与方法

    Java类 Java中的类都可以抽象成Class,Class的组成大致有: Class: 类型,许多Java框架的...

  • Class类

    什么是Class类 Class类是java.lang包中的类,是java反射中的一个特别重要的类,因为Class类...

  • java反射reflect

    Class类 java中类是谁的对象? 类是对象,类是java.lang.Class类的实例对象(there is...

网友评论

      本文标题:java Class类的理解

      本文链接:https://www.haomeiwen.com/subject/lqczjqtx.html