Java 反射

        反射库( reflection library) 提供了一个非常丰富且精心设计的工具集, 以便编写能够动态操纵 Java 代码的程序。这项功能被大量地应用于 JavaBeans 中, 它是 Java组件的体系结构。
        在设计或运行中添加新类时, 能够快速地应用开发工具动态地查询新添加类的能力。
        能够分析类能力的程序称为反射(reflective )。反射机制的功能极其强大,在下面可以看到, 反射机制可以用来:

  • 在运行时分析类的能力。
  • 在运行时查看对象, 例如, 编写一个 toString 方法供所有类使用。
  • 实现通用的数组操作代码。
  • 利用 Method 对象, 这个对象很像中的函数指针。

        反射是一种功能强大且复杂的机制。 使用它的主要人员是工具构造者,而不是应用程序员。

1、Class类

        在程序运行期间,Java 运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。 虚拟机利用运行时类型信息选择相应的方法执行。
        可以通过专门的 Java 类访问这些信息。保存这些信息的类被称为 Class, 这个名字很容易让人混淆。Object 类中的 getClass( ) 方法将会返回一个 Class 类型的实例。

        

package testCase;

public class TestReflection {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student st1 = new Student("zhangsan", "21");
		Class c1 = st1.getClass();
		System.out.println("st1.getClass.getName is [" + st1.getClass().getName() + "]");
		System.out.println("c1 is [" + c1.getName() + "]");
		
		
		String dassName = "java.util.Random";
		try {
			Class c2 = Class.forName(dassName);
			System.out.println("c2 is [" + c2.getName() + "]");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	

	}

}


class Student{
	private String name;
	private String age;
	
	public Student() {
		
	}
	
	public Student(String name, String age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}
	
}

运行结果

st1.getClass.getName is [testCase.Student]
c1 is [testCase.Student]
c2 is [java.util.Random]

        如果类名保存在字符串中, 并可在运行中改变, 就可以使用这个方法。当然, 这个方法只有在 dassName 是类名或接口名时才能够执行。否则,forName 方法将抛出一个 checkedexception ( 已检查异常)。无论何时使用这个方法, 都应该提供一个异常处理器。
        Class 类实际上是一个泛型类。例如, Employee.class 的类型是 Class<Employee>。没有说明这个问题的原因是: 它将已经抽象的概念更加复杂化了。在大多数实际问题中, 可以忽略类型参数, 而使用原始的 Class 类
        
        
        
        
        

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值