1. Class类
String str1 = "abc";
Class cls1 = str1.getClass();
Class cls2 = String.class;
Class cls3 = Class.forName("java.lang.String");
System.out.println(cls1 == cls2);//true
System.out.println(cls1 == cls3);//true
3.Constructor
3.1 获取某个类的所有构造方法:Constructor [] constructors = Class.forName("java.lang.String").getConstructors();
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class); //这个StringBuffer表示选择哪个构造方法
反射方式:String str = (String) constructor.newInstance(new StringBuffer("abc"));
String str = (String)Class.forName("java.lang.String").newInstance();
public class MyTest {
public static void main(String[] args) throws Exception {
Class ret = Class.forName("StrObj");
StrObj strObj = (StrObj) ret.newInstance();
strObj.display();
}
}
class StrObj {
private String name = "Tom";
private int age = 12;
public StrObj() {
}
public StrObj(String name, int age) {
super();
this.name = name;
this.age = age;
}
public void display() {
System.out.println("StrObj [name=" + name + ", age=" + age + "]");
}
}
public class MyTest {
public static void main(String[] args) throws Exception {
StrObj strObj = new StrObj();
Class clazz = strObj.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
//处理String类型变量
if (field.getType() == String.class) {
if (!field.isAccessible()) {
//处理private成员变量
field.setAccessible(true);
}
String str = (String) field.get(strObj);
field.set(strObj, str.replaceAll("b", "a"));//替换字符
String newStr = (String) field.get(strObj);
System.out.println(newStr);
}
}
}
}
class StrObj {
private String name = "12abcb";
public String email = "aabbcc";
public int age = 11;
}
Method类代表某个类中的一个成员方法。
Method m1 = Math.class.getMethod("abs", double.class);
m1.invoke(null, -2.3);