JAVA学习笔记之反射
从今天开始在CSDN记录Java学习的过程
学习方式:慕课网
1.Class类的使用
课程中讲到Java中所有的类都是Class的一个实例对象,假设创建一个 class foo(){} 类,foo f1=new foo() 这个方法创建的是名为f1的foo的实例对象,而Class c1=foo.class;Class c2=f1.getClass(); 得到的是Class的实例对象,也叫作foo类的类类型。
同时,Class c3=Class.forName(“类全名”); 也可以获取一个Class的实例或者说是foo的类类型。此时可以通过 (foo)c3.newInstance(); 来得到一个foo的实例对象,需要抛出异常且强制转换
2.动态加载类的方法
一般来说Java会使用new方法来创建对象,这种方式属于静态地加载类,用这种方式在编译的时候就需要加载所有的类
而动态加载类的方法就是上面第一点说到的 Class.forName(); 这个类加载器的方法
3.Java获取方法信息
课程中讲到,Java中既可以创建数据类型的类类型也可以创建类的类类型(int.class,String.class等方法获取数据类型的类类型)
用 1 中提出的几段代码来说明如何获取方法信息:
获取类名:
类类型(classType)c1.getName() 函数可以获取这个类类型对应类的全称如com.java.reflect.foo,用 c1.getSimpleName() 来获取类名如foo
获取方法名:
Method[] ms=Method[] ms=c.getMethods()//获取所有public函数包括继承来的,包括父类继承下来的(getDelcaredMethods() 获取全部该类自己声明的方法,不管访问权限)
ms[i].getName() 获取方法名
Class returnType=ms[i].getReturnType(); 得到返回值类型的类类型
returnType.getName(); 获取返回类型的名字
4.java获取成员变量信息
课程中讲到Java的成员变量也是一个对象, java.lang.reflect.Field 这个类封装了关于成员变量的操作
c.getFiled();
Field[] fs=c.getDeclaredFields()
Class fieldType=fs.getType() 返回成员变量的类型的类类型
5.Java方法反射的基本操作
A a=new A();
Class c=a.getClass();
Method m=c.getMethod(“methodName”,int.class,int.class)//传入的是方法名和参数列表类型的类类型
方法的反射操作是用m对象来进行方法调用
m.invoke(a,new Object[](10,20))
返回值为null或具体返回值
集合泛型的本质,泛型旨在编译阶段起作用也就是在编译的时候限制,而反射是编译之后的操作
声明:以上仅是博主学习Java过程中做的笔记,或许有错误,也希望各位前辈朋友们看到错误并给小弟指出,多谢!