对于JAVA反射机制和CLASS类的个人理解

上周上课老师点我起来回答问题,问了一下JAVA反射机制,我本来对JAVA用得不多,加上有一段时间没有看过了,所以并没有能够答出来,之后就想要好好理解理解,加上老师布置作业让弄懂JAVA反射和Class类,所以CSDN第一次写博客,就来写写我对反射和Class的学习之后的感受吧。


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一.什么是JAVA的反射机制。

JAVA反射是指在程序运行时获取已知名称的类或已有对象的相关信息的一种机制。简单说来,就是可以在程序运行过程中得到刚刚知道的一个类的内部结构。就像老师所说的,反射是和动态挂钩的,反射就意味着我们可以动态地获取信息,动态地调用,创建对象。

在这里还是先给出一个简单的例子让大家稍微熟悉一下。也方便接下来Class的学习。

import java.util.Scanner;

import java.lang.reflect.Method;

public class ClassForName {

   public ClassForName(){
  
      try {
    	 Scanner inScanner = new Scanner(System.in);
    	  
         Class<?> classinstance=Class.forName(inScanner.next());  //根据输入返回一个类对象

         Method[] method=classinstance.getDeclaredMethods();//利用得到的Class对象,返回该类对象的方法集合
        
         System.out.println("forName:"+classinstance);
         
         for(Method me:method){
        	 
            System.out.println("方法有:"+me.toString());
            
         }//输出所有方法的名称
         
      }catch (ClassNotFoundException e) {
    	  
         e.printStackTrace();
      }

   }
   
   public static void main(String[] args) {
	   
      new ClassForName();
      
   }
}

这里给出这个例子的输出,当我输入java.lang.Class时,返回所有方法,输出为:

方法有:private java.lang.Object java.lang.Class.newInstance0() throws java.lang.InstantiationException,java.lang.IllegalAccessException

方法有:public static java.lang.Class java.lang.Class.forName(java.lang.String,boolean,java.lang.ClassLoader) throws java.lang.ClassNotFoundException
方法有:public static java.lang.Class java.lang.Class.forName(java.lang.String) throws java.lang.ClassNotFoundException
方法有:private static native java.lang.Class java.lang.Class.forName0(java.lang.String,boolean,java.lang.ClassLoader) throws java.lang.ClassNotFoundException

方法有:public native boolean java.lang.Class.isAssignableFrom(java.lang.Class)
方法有:public native boolean java.lang.Class.isInstance(java.lang.Object)
方法有:public native int java.lang.Class.getModifiers()
方法有:public native boolean java.lang.Class.isInterface()
方法有:public native boolean java.lang.Class.isArray()
方法有:public native boolean java.lang.Class.isPrimitive()
方法有:public native java.lang.Class java.lang.Class.getSuperclass()
方法有:public native java.lang.Class java.lang.Class.getComponentType()

方法有:private static native void java.lang.Class.registerNatives()
方法有:public java.lang.String java.lang.Class.toString()
方法有:public java.lang.String java.lang.Class.getName()
方法有:static boolean java.lang.Class.access$100(java.lang.Object[],java.lang.Object[])
方法有:static boolean java.lang.Class.access$202(boolean)
方法有:static boolean java.lang.Class.access$302(boolean)
方法有:private static void java.lang.Class.addAll(java.util.Collection,java.lang.reflect.Field[])
方法有:private static java.lang.String java.lang.Class.argumentTypesToString(java.lang.Class[])
方法有:private static boolean java.lang.Class.arrayContentsEq(java.lang.Object[],java.lang.Object[])
方法有:public java.lang.Class java.lang.Class.asSubclass(java.lang.Class)
方法有:public java.lang.Object java.lang.Class.cast(java.lang.Object)
方法有:private static void java.lang.Class.checkInitted()
方法有:private void java.lang.Class.checkMemberAccess(int,java.lang.ClassLoader)
方法有:private void java.lang.Class.clearCachesOnClassRedefinition()
方法有:private static java.lang.re

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值