`
李灵晖-raylee
  • 浏览: 129069 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

这一章节我们来介绍一下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 block
			e.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对象的使用以及一些注意的地方。


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

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

目录



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics