反射基础

一、反射机制:
概述:反射是java中的动态机制,它允许我们实例化对象,调用方法或属性。从原来的编码期确定转为在程序运行期决定。这大大的增加了程序的灵活度。反射提高了灵活度,但是会降低性能。因此适度使用。

Class类:
Class类的每一个实例用于表示JVM加载的类。所以我们也称其为:“类的对象”。
概述:JVM加载的每个类都有且只有唯一的一个Class实例与之对应。我们可以获取某个类的类对象。
通过它我们可以得知该类的一切信息(类名,有哪些属性,哪些方法等)。甚至可以动态实例化这个类的实例,并调用它的属性和方法。

应用:获取一个类的类对象有以下几种方式:
1:每个类都有一个静态属性class。用于获取该类的类对象。我们确定要获取某个类的对象时,可以用这种方式。但由于是通过编码调用,所以不灵活。


  Class cls = String.class;
  Class cls = int.class;

2:调用Class的静态方法:forName(String name),该方法要求传入要加载的类的完全限定名(包名.类名)


  Class cls = Class.forName("java.util.String");

3:使用类加载器:ClassLoader

以下为测试代码
加载String


  try{
  	Scanner scanner = new Scanner(System.in);
  	System.out.println("请输入要加载的类的名字:");
  	String className = scanner.nextLine();
  	Class cls = Class.for(calssName);
  	Method [] method = cls.getDeclaredMethods();
	for(Method allMethod: method) {
  	System.out.println(allMethod.getName());
  }
 
   //以下为测试代码(唯一性)
  Class cls1 = Class.forName("java.util.String");
  Class cls2 = Class.forName("java.util.String");
  System.out.println(cls1==cls2)//true.JVM加载的每个类都有且只有唯一的一个Class实例与之对应
  //以下为测试代码(获取当前类的方法)
 //Method [] methods = cls1.getMethods();//获取当前类的所有方法,包含从超类继承的
  Method [] methods = cls1.getDeclaredMethods();//获取所有的方法,只包含当前类自己定义的方法
  for(Method method : methods){
  	System.out.prontln(method.getName()); 
  }catch(ClassNotFoundException e){
 	e.printStackTrace()
 }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值