A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

实体类
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));


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马