反射的基本作用:运行期,根据对象名就能获得该对象的:类型、方法、属性
基本的类定义如下:
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 }