Java反射第一课认识Class类

时间:2023-01-10 20:09:58

http://blog.csdn.net/wei_chong_chong/article/details/52127622

Class类

1.在面向对象的世界里,万事万物皆对象

(1)先来理解两个问题:

(1)Java语音中,静态的成员,普通数据类型是不是对象?

【普通的数据类型int a = 5 不是面向对象的,但是它有包装类弥补了】

【java静态的东西不是面向对象的,静态的东西不是某个对象的他是属于类的】

所以在面向对象的世界里,万事万物皆对象

(2)类是谁的对象?

类是对象,类是java.lang.Class类的实例对象

Class类的实例对象是什么?---我们每一个对象所属的类就是Class类的实例对象(也就是说Class类的实例对象是类)

(3)Class类的这个对象如何表示


[java]  view plain  copy  print ? Java反射第一课认识Class类 Java反射第一课认识Class类
  1. <pre name="code" class="java">package com.edu.reflect;  
  2.   
  3. public class ClassDemo1 {  
  4.   
  5.     public static void main(String[] args) {  
  6.         // TODO Auto-generated method stub  
  7.         //Foo的实例对象如何表示:  
  8.         Foo foo1 = new Foo();  
  9.         //Foo 这个类也是一个实例对象,是Class类的实例对象  
  10.   
  11.         //任何一个类都是Class的实例对象,Class类的实例对象如何表示?3中表示方式  
  12.         //Class类的构造方法是私有的,只有java虚拟机可以创建,所以我们不能直接new出Class类的实例对象  
  13.   
  14.   
  15.         //第一种表示方式。实际在告诉我们任何一个类都有一个隐含的静态成员变量class  
  16.         Class c1 = Foo.class;  
  17.   
  18.         //第二中表达方式 已知该类的对象通过getClass方法  
  19.         Class c2 = foo1.getClass();  
  20.   
  21.         /* 
  22.          * 官网:c1,c2表示了Foo类的类类型(class type) 
  23.          * 万事万物皆对象 
  24.          * 类也是对象,是Class类的实例对象 
  25.          * 这个对象我们称为该类的类类型 
  26.          */  
  27.   
  28.         //不管c1 or c2 都代表了Foo类的类类型,一个类只可能是Class类  
  29.         //的一个实例对象  
  30.         System.out.println(c1==c2);//结果输出true  
  31.   
  32.         //第三种表达方式  
  33.         try {  
  34.             Class c3 = Class.forName("com.edu.reflect.Foo");  
  35.             System.out.println(c2==c3);//true  
  36.         } catch (ClassNotFoundException e) {  
  37.             // TODO Auto-generated catch block  
  38.             e.printStackTrace();  
  39.         }  
  40.         //我们完全可以通过类的类类型创建该类的对象实例  
  41.         try {  
  42.             Foo foo = (Foo) c1.newInstance();//需要有无参数的构造方法  
  43.             foo.print();  
  44.         } catch (InstantiationException e) {  
  45.             // TODO Auto-generated catch block  
  46.             e.printStackTrace();  
  47.         } catch (IllegalAccessException e) {  
  48.             // TODO Auto-generated catch block  
  49.             e.printStackTrace();  
  50.         }  
  51.     }  
  52.   
  53. }  
  54. class Foo{  
  55.     void print(){  
  56.         System.out.println("foo类方法");  
  57.     }  
  58. }