黑马程序员--Java笔记16--反射
来源:互联网 发布:mac 英文界面 编辑:程序博客网 时间:2024/05/29 03:22
反射:将Java类中的成分抽取出来映射成对象
Class 类:
Class类的实例对象对应各个类在内存中的字节码
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
得到字节码的实例对象的3种方法:
1.类名.class
2.对象.getClass() // new Date().getClass()
3.Class.forName(“类名”)//Class.forName(“java.util.Date”)
九个预定义实例对象:
包括八个基本类型和Void//int.class==Integer.TYPE;
数组类型Class实例对象:Class.isArray();
Method 类:
得到类中的方法:
Method charAt=Class.forName(“java.lang.String”).getMethod(“charAt”,int.class);
charAt.invoke(str,1);//str==null,说明该方法是静态方法(用invoke调用方法)
练习:调用函数的main方法:
String name=args[0];//需要在运行前输入变量
Method m=Class.forName(name).getMethod("main", String[].class);
m.invoke(null,(Object)new String[]{});//main方法为静态的不需要传递对象Constructor类:
得到类中的构造函数:
所有构造函数:Constructor[] con=Class.forName(“java.lang.String”).getConstructor();
某一个:Constructor con=Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);
创建实例对象:
String str=(String)constructor.newinstance(new StringBuffer(“aaa”));
Field类:
得到类中的成员变量:
Feild f1=obj.getClass().getField(x);//获取x变量
Feild[] f=obj.getClass().getFields();//获得所有成员变量
练习:需求:将一个对象中所有String类型成员变量中的‘b’替换成‘a’
private static void change_b2a(Object obj) throws Exception {
Field[] f1=obj.getClass().getFields();//获取所有成员变量
for(Field f:f1){
if(f.getType()==String.class){//如果是String类型
String sold=(String) f.get(obj);//get()方法获得
String snew=sold.replace('b','a');
f.set(obj, snew);//set()方法设置为新的值
}
}
}
数组的反射:
//数组的反射
int []a1=new int[2];
int []a2=new int[3];
int [][]a3=new int[2][3];
String []a4=new String[2];
System.out.println(a1.getClass() == a2.getClass());//true
System.out.println(a1.getClass().getSuperclass() == a3.getClass().getSuperclass());//true
System.out.println(a1.getClass().getSuperclass() == a4.getClass().getSuperclass());//true
System.out.println(a1.getClass().equals(a3.getClass()));//false
//System.out.println(a1.getClass()==a4.getClass());//不兼容
System.out.println(a1.getClass().getName());//[I
System.out.println(a1.getClass().getSuperclass());//class java.lang.Object
- 黑马程序员--Java笔记16--反射
- 黑马程序员-java反射笔记
- 【黑马程序员】Java笔记--反射
- 黑马程序员---java 反射 学习笔记
- 黑马程序员------java学习笔记之反射
- 黑马程序员-java学习笔记-反射
- 黑马程序员 java高新技术笔记之反射
- 【黑马程序员】 学习笔记 - Java新技术 - 反射
- 黑马程序员 java学习笔记 Day10:反射
- 黑马程序员---------Java反射(Reflection)笔记
- 黑马程序员-Java的反射学习笔记
- 黑马程序员 JAVA基础学习笔记 反射
- 黑马程序员--java反射学习笔记
- 黑马程序员JAVA笔记9--反射
- 黑马程序员--JAVA反射学习笔记2
- 黑马程序员Java学习笔记之反射
- 黑马程序员--学习笔记--Java反射
- 黑马程序员--java 反射
- 对实体完整性和参照完整性的认识
- c++文件的加密与解密
- IOS WKWebView
- 串口操作
- Android开发错误:Error:” ” is not translated in “en” (English) [MissingTranslation]处理方法?
- 黑马程序员--Java笔记16--反射
- 我来了,请闭眼
- 资源整合篇---Wireshark入门与进阶
- hdu 1754 I Hate It
- GEF 入门教程
- ReactNativeiOS(二)读书记录 1入门指南
- qt程序打包
- eclipse用android真机调试程序出现的问题
- 第一讲 visual c++6.0概述