实体类
package test.mylo.basic.Test3;
/**
* @program: workSet
* @description:
* @author: Mylo
* @create: 2018-09-30 08:27
**/
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
int getAge() {
return age;
}
void setAge(int age) {
this.age = age;
}
}
|
普通的方式去创建对象,使用对象的方法
public class Test1 { public static void main(String[] args) throws Exception {
Student s = new Student();
s.setAge(18);
System.out.println(s);
}
}
|
根据上述得出总结:首先我们要调用无参构造去创建对象,然后,使用对象去调用方法,掉你用方法的时候,对应传递参数,如果是一个重载的方法,还可以根据方法上的参数去对应调用重载方法 | 反射其实也是一样的去执行相应的步骤,然后反射有些非常关键的知识我们要先了解一下:
1.所有的你想要的方法或者属性都可以从class对象里面获取
2.所有想要的方法或者属性,都要先获取出来
1.获取对应的构造方法(3种,获取出来都是一样的)
Student s = new Student(); Class<? extends Student> aClass = s.getClass();
Class<? extends Student> bClass = Student.class;//推荐使用类全名的方式获取,很多框架都是根据这种方式创建对象
Class c = Class.forName("test.mylo.basic.Test3.Student");
System.out.println(aClass == bClass);
System.out.println( c == bClass); |
1.1获取构造方法
//在反射里面 无论你是想调用方法还是属性 都要先从 class 对象里面 获取到这个东西 ~(class对象里面 是包含这个类所有东西)
// Constructor 构造器
Constructor cons = c.getConstructor(); |
| 1.2创建对象
//new 新的 / 新建 Instance 实例Object obj = cons.newInstance(); | | 2调用方法
2.1获取对应的方法
// getMethod 只能获取使用public 修饰的方法 //getDeclaredMethod 这个 无视修饰符 //参数1:方法名, 参数2:参数类型
Method setAge = c.getDeclaredMethod("setAge", int.class); | 2.2调用方法
//invoke 执行
setAge.invoke(obj,19);
//getAge
Method getAge = c.getDeclaredMethod("getAge");
Object age = getAge.invoke(obj); | 3.调用属性
//Field 字段//cannot access a member of class test.mylo.basic.Test3.Student with modifiers "private"
Field name = c.getDeclaredField("name");
name.setAccessible(true);
name.set(obj,"test");
System.out.println(name.get(obj)); |
|
|