------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
java基础学习进行到最后的部分,有些激动,除此之外,听老师讲课的部分,由于习惯性毕老师的讲解,听张老师的有些很不习惯。也因此听了3遍才学完反射的部分,比较难,而且做做笔记方面,比较混乱,内容也较少,主要还是理解为主吧,以后还要继续加强反射的学习。
反射:
一,概念
Class类
Constructor类:
Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);
String str = (String)constructor.newInstance(new StringBuffer("abc"));
方法:newInstance()---构造出一个实例对象
Field类:
概念:某一个类的成员变量。
Field fieldY =ptl.getClass().getField("y");
FieldY不是对象身上的变量,而是类上的。用它取对应对象上的值。
方法:getDeclareField()可以获取私有。看不见
setAccessible(true);暴力反射,看见了拿不到。
练习:
public class ReflectPoint {
String x;
String y;
public String str1 = "basketball";
public String str2 = "ball";
public ReflectPoint(String x, String y) {
super();
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + "]";
}
}
public class Test {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ReflectPoint rp = new ReflectPoint(String.valueOf(3), String.valueOf(4));
Field[] fields = ReflectPoint.class.getFields();
for (Field field : fields) {
if (field.getType() == String.class) {
String str = (String) field.get(rp);
System.out.println(str.replace("b", "a"));
}
}
}
}
注意:同一个字节码可以用==
Method类
不是对象的方法,是一个类上的方法,可以调用对象。
得到类中的一个方法:
Method charAt = Class.forName("java.lang.String").getMethod("charAt",int.class);
调用方法:
通常方式:System.out.println(str.charAt(1));
反射方式:System.out.println(charAt.invoke(str, 1));
方法:getMethods(),getMethod("方法名",参数.class)注意:参数类型就是Class对象。
其它:如果传递给Method对象的invoke()方法的第一个参数为null,说明Method对象对应的是一个静态方法
数组的反射:
1、具有相同维数和元素类型的数组属于同一类型,即具有相同的Class实例对象。
2、代表数组的Class实例对象的getSupperClass()方法返回的父类为Object类对应的Class。
3、基本类型的一维数组可以当做Object类型来使用,不能当做Object[]来使用;
非基本类型的一维数组既可以当做Object类型来使用,也可以当做Object[]使用。
Arrays.aslist
Array工具类用于完成对数组的反射操作。
Array.getLength(obj);//获取数组的长度
Array.get(obj,x);//获取数组中的第x个元素。
框架:
反射类主要是用来做框架。
框架和工具类的区别:工具类被用户类调用,而框架是调用用户提供的类。
解决的核心问题:对未知的东西实现用。
另外:框架无法知道要被调用的类名,所以在程序中无法直接new其某个类的实例对象,
而要用反射来做。
举例:卖房子。
框架项目完成效率高。
配置文件:config.properties
本文深入探讨Java反射技术的概念、Class类、Constructor类、Field类、Method类以及数组的反射,通过实例代码演示反射在Java开发中的核心作用,包括获取类信息、构造方法、成员变量和方法的使用,以及如何利用反射解决未知类调用的问题。

570

被折叠的 条评论
为什么被折叠?



