反射机制

反射的基本作用:运行期,根据对象名就能获得该对象的:类型方法属性

基本的类定义如下:

1 class Person {
2 String name;
3 int age;
4
5 public String toString(){
6 return"name="+name+" age="+age;
7 }
8 }

一、反射的作用 

  反射的作用1:根据“字符串类型的类名”创建“实例”

String driverName="com.mysql.jdbc.Driver"; 
try{
       Class.forName(driverName);
       System.out.println("Mysql驱动加载成功!\n");
   }catch(ClassNotFoundException e){
       System.out.println("未能找到Mysql驱动!");
   }catch(Exception e){
       e.printStackTrace();
       System.out.println("Mysql驱动加载失败!");
   }

  反射的作用2:根据“引用”获取“类名”

1 System.out.println("开始测试反射机制。。。。");
2 Person person_A=new Person();
3
4 //反射的作用一:根据对象名获取其类名
5 Class c1=person_A.getClass();//会返回一个Class类型的实例
6 System.out.println("person_A的类名为:"+c1.getName());

        运行结果如下:

       

 

二、关于Class类

     a)两个常用方法:

         1)static Class forName(String className)

             返回类名为className的Class对象

         2)Object newInstance()

             返回当前类的一个新实例

      b)判断某个对象是否为某个类型

           理论依据:虚拟机为每个类型管理唯一 的一个Class对象

1 if (person_A.getClass()==Person.class){
2 System.out.println("类型相同!");
3 }else{
4 System.out.println("类型不同!");
5 }

     c)创建一个类型相同的实例

1 try {
2 person_A.getClass().newInstance();
3 } catch (Exception e) {
4 e.printStackTrace();
5 }

      d)类型名以字符串形式给出,创建其对象

1 String s="com.reflection.Person";
2 try { //若要在创建对象时传递参数,必须使用Constructor类中的
3 Object o=Class.forName(s).newInstance(); //newInstance方法
4 } catch (Exception e) {
5 e.printStackTrace();
6 }

 

posted @ 2011-08-07 14:35  edisonfeng  阅读(357)  评论(0编辑  收藏  举报