Java基础笔记-反射
来源:互联网 发布:淘宝上差评多久消失 编辑:程序博客网 时间:2024/05/21 08:41
1.能够分析类能力的程序称为反射
2.获取Class类对象的三种方法
1.E e = new E();Class cl = e.getClass();2.Class cl = E.class;3.Class cl = Class.forName(className);//className 包名
三种方法获取的字节码相同
注意1:字节码的比较都使用 == 而不是 equals
注意2:一个Class对象实际上表示的是一个类型,而这个类型未必一定是一种类,也有可能是Java基础类型。
例如int不是类,但int.class是一个Class类型的对象。
3.创建类实例
1.Object object = cl.newInstance();2.Constructor constructor = String.class.getConstructor(String.class); Object object = constructor.newInstance(new String("hello")); String string = (String) object;
4.反射分析类的能力
public void reflection(){ String classname="java.lang.Double"; try { Class c1=Class.forName(classname); Class superC1=c1.getSuperclass(); String modifiers=Modifier.toString(c1.getModifiers()); if(modifiers.length()>0) { System.out.printf(modifiers+" "); } System.out.print("class "+c1.getName()); if(superC1!=null&&superC1!=Object.class){ System.out.println(" extends "+superC1.getName()); } System.out.println("{"); printConstructors(c1); System.out.println(); printMethods(c1); System.out.println(); printFields(c1); System.out.println("}"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public void printConstructors(Class c1){ Constructor[] constructors = c1.getConstructors(); for (Constructor constructor:constructors){ System.out.print(" "); String modifiers = Modifier.toString(constructor.getModifiers()); if(modifiers.length()>0){ System.out.print(modifiers+" "); } System.out.print(c1.getName()+"("); Class[] paramTypes = constructor.getParameterTypes(); for(int i=0;i<paramTypes.length;i++){ if(i!=0) System.out.print(", "); System.out.print(paramTypes[i].getName()); } System.out.println(");"); } } public void printMethods(Class c1){ Method[] methods = c1.getDeclaredMethods(); for (Method method :methods){ System.out.print(" "); String modifiers = Modifier.toString(method.getModifiers()); if(modifiers.length()>0) { System.out.print(modifiers+" "); } Class returnType = method.getReturnType(); System.out.print(returnType.getName()+" "); System.out.print(method.getName()+"("); Class[] paramTypes = method.getParameterTypes(); for(int i=0;i<paramTypes.length;i++){ if(i!=0) System.out.print(", "); System.out.print(paramTypes[i].getName()); } System.out.println(");"); } } public void printFields(Class c1){ Field[] fields=c1.getDeclaredFields(); for (Field field : fields){ Class type = field.getType(); String name = field.getName(); System.out.print(" "); String modifiers = Modifier.toString(field.getModifiers()); if(modifiers.length()>0) { System.out.print(modifiers+" "); } System.out.println(type.getName()+" "+name+";"); } }
5.运行时反射分析对象
Field field = cl.getDeclaredField(fieldName);field.setAccessible(true);//打破java访问控制field.set(.....) ..field.get(....)//可以调用getset方法
6.调用任意方法
Method类中invoke方法 Object invoke(Object obj,Object… args)
Method sqrt = Math.class.getMethod("sqrt",double.class);double ans = (Double) sqrt.invoke(null,2.0);//对于静态方法把null作为隐式参数传递
7.使用反射编写泛型数组 TODO…
阅读全文
0 0
- Java基础笔记-反射
- java反射机制基础笔记
- java的反射基础笔记
- 笔记:Java反射机制基础
- 黑马程序员 JAVA基础学习笔记 反射
- Java基础笔记-反射及应用
- java基础巩固笔记(1)-反射
- JAVA基础笔记(十五)反射
- JavaWeb学习笔记-java基础-7-反射
- java基础学习笔记(六) java反射
- Java笔记7 Java基础加强<1>反射
- Java笔记-反射机制Reflection API(java动态机制)基础
- 反射基础-笔记01
- java反射(一):反射基础
- [ java ] java基础反射!
- Java,Class类,类装载,反射等基础学习笔记
- java基础学习笔记之十--反射(1)
- 黑马程序员-java学习笔记-反射基础类Class
- 赠书名单公布 & 在 vSAN 上部署、管理和运行 MongoDB 实例
- 前端跨域解决方案
- 百度地图点聚合改造
- PCB设计软件
- springMVC拦截器处理ajax请求及数据返回
- Java基础笔记-反射
- primer4 16.2
- Python GUI编程(Tkinter)
- POJ 3667
- Vue基础
- 解决CentOS7下使用ifconfig命令无法查看inet地址
- Android Studio 打包 release 版本后无法安装的问题
- 使用canvas与png/svg等格式图片解决html异形按钮创建
- 每天一道LeetCode-----将字符串的连续相同的字符合并成一个字符后加个数