从头认识java-12.2 Class对象(1)-简介

来源:互联网 发布:淘宝男装首页文案范文 编辑:程序博客网 时间:2024/03/29 14:44

这一章节我们来介绍一下Class对象。

在介绍前有几点需要注意的:

1.每一个类都有一个Class对象,在jvm的类加载器子系统里面生成。

2.类加载器子系统包含类加载器链,但是只有一个原生加载器,原生加载器主要加载javaapi里面的可信的类。

3.只有当类被使用的时候才会加载,这个称之为动态加载。

4.只有加载了Class,才能new这个类的所有对象。

由于前面几点都暂时没有办法证明,只能当概念记住,我们下面举例说明最后一点:

package com.ray.ch11;public class Test {public static void main(String[] args) {new A();try {Class.forName("com.ray.ch11.B");//需要包名+类名} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}class A {static {System.out.println("loading A");}public A() {System.out.println("created A");}}class B {static {System.out.println("loading B");}public B() {System.out.println("created B");}}
输出:

loading A
created A
loading B

注意:在使用Class.forName的时候后面的字符串需要全名(包名+类名)。

从输出看见,create在load之后,证明了上面的描述,类是先加载后创建对象的。而在只是使用Class.forName的B中,其实只是加载B这个类,而且取得B类型的Class对象的引用(B类在加载的同时已经创建的B的Class对象),而没有创建任何B的对象。


除了Class.forName可以获取B类型的Class对象的引用,也可以通过B的对象那里获取,还可以在B.getClass()这里获取,我们下面举例:

package com.ray.ch11;public class Test {public static void main(String[] args) {B b = new B();System.out.println(b.getClass().getName());System.out.println(B.class.getName());}}class B {static {System.out.println("loading B");}public B() {System.out.println("created B");}}

输出:

loading B
created B
com.ray.ch11.B
com.ray.ch11.B


总结:这一章节我们简单的讲述了Class对象的概念与使用情况,我们下一章节将会继续讲述Class对象的使用以及一些注意的地方。


这一章节就到这里,谢谢。

-----------------------------------

目录



3 0
原创粉丝点击