Think in java读书笔记--Class对象

java语言,类是程序的一部分,每一个类都有一个Class对象。换句话说,每当编写并且编译了一个新类,就会产生一个Class对象。所有的类都是在对其第一次使用时,动态加载到JVM中的。当程序创建第一个对类的静态成员的引用时,就会加载这个类。这个证明构造器也是类的静态方法,即使在构造器之前并没有使用static关键字。因此使用new操作符创建类的新对象也会被当作类的静态成员的引用。java程序在它开始运行之前并非被完全加载,其各个部分是在需要时才加载。

 1 package typeinfo;
 2 class Candy{
 3     static{
 4         System.out.println("Loading Candy.....");
 5     }
 6 }
 7 
 8 class Gum{
 9     static{
10         System.out.println("Loading Gum........");
11     }
12 }
13 
14 class Cookie{
15     static{
16         System.out.println("Loading Cookie......");
17     }
18 }
19 
20 public class SweetShop {
21     public static void main(String[] args) {
22         System.out.println("inside main");
23         new Candy();
24         System.out.println("after create candy");
25         try {
26             Class.forName("Gum");//取得Class对象引用的一个方法
27         } catch (ClassNotFoundException e) {
28             System.out.println("cound not found Gum");
29         }
30         System.out.println("after class.forName(\"Gum\")");
31         new Cookie();
32         System.out.println("after create cookie");
33     }
34 }

//output~:

1 inside main
2 Loading Candy.....
3 after create candy
4 cound not found Gum
5 after class.forName("Gum")
6 Loading Cookie......
7 after create cookie

无论何时,只要您想在运行时使用类型信息,就必须首先获得对恰当的Class对象的引用。Class.forName()就是实现此功能的一种方法。如果你已经拥有了一个类型的对象,那就可以通过调用getClass()方法来获取Class引用了。
举例class中一些有用的方法

 1 package typeinfo;
 2 interface HashBatteries{}
 3 interface Waterproof{}
 4 interface Shoots{}
 5 
 6 class Toy{
 7     Toy() {}
 8     Toy(int i){}
 9 }
10 
11 class FancyToy extends Toy implements HashBatteries,Waterproof,Shoots{
12     FancyToy(){
13         super(1);
14     }
15 }
16 
17 public class ToyTest {
18     static void printInfo(Class zz){
19         System.out.println("类的名称:" + zz.getName() + 
20                 "是否是接口?" + zz.isInterface());
21         System.out.println("类的简称:" + zz.getSimpleName());
22     }
23     
24     public static void main(String[] args) {
25         Class c = null;
26         try {
27             c = Class.forName("typeinfo.FancyToy");
28         } catch (ClassNotFoundException e) {
29             System.out.println("can't find FancyToy");
30             System.exit(1);
31         }
32         printInfo(c);
33         for(Class face : c.getInterfaces()){//Class.getInterfaces()返回的是Class对象
34             printInfo(face);
35         }
36         Class up = c.getSuperclass();//获取直接基类
37         Object object = null;
38         try {
39             object = up.newInstance();//实现虚拟构造器,来创建实例,从而获得引用
40         } catch (InstantiationException e) {
41             System.exit(1);
42         } catch (IllegalAccessException e) {
43             System.exit(1);
44         }
45         printInfo(object.getClass());
46     }
47 }

///output~:

 1 类的名称:typeinfo.FancyToy是否是接口?false
 2 类的简称:FancyToy
 3 类的名称:typeinfo.HashBatteries是否是接口?true
 4 类的简称:HashBatteries
 5 类的名称:typeinfo.Waterproof是否是接口?true
 6 类的简称:Waterproof
 7 类的名称:typeinfo.Shoots是否是接口?true
 8 类的简称:Shoots
 9 类的名称:typeinfo.Toy是否是接口?false
10 类的简称:Toy
View Code

 

posted on 2013-11-30 20:03  划根火柴点根烟 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/muyu-jinyu/p/3451672.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值