zoukankan      html  css  js  c++  java
  • java reflect反思总结

    --------------TestBean
    package lh.demo.bean;
    public class TestBean {
     private String userName;
     private String password;
     private String age;
     public TestBean (){
     }
     public TestBean (String _userName,String _password,String _age){
      this.userName = _userName;
      this.password = _password;
      this.age = _age;
     }
     public String getUserName() {
      return userName;
     }
     public void setUserName(String userName) {
      this.userName = userName;
     }
     public String getPassword() {
      return password;
     }
     public void setPassword(String password) {
      this.password = password;
     }
     public String getAge() {
      return age;
     }
     public void setAge(String age) {
      this.age = age;
     }
     public void print(String str){
      System.out.println("不是static : "+str);
     }
     private void privateprint(String str){
      System.out.println("private : "+str);
     }
     
     public static void staticprint(String str){
      System.out.println("static : "+str);
     }
     public String toString(){
      System.out.println(this.userName+","+this.password+","+this.age);
      return this.userName+","+this.password+","+this.age;
     } 
    --------------------------------

    package lh.demo.test;

    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import lh.demo.bean.TestBean;

    public class Reflect {
    // 1怎样得到各个字节码相应的实例对象?

    // 1)Class.forName("类的全路径") 推荐
    // Class<?

    > bean = Class.forName("lh.demo.bean.TestBean");

    // 2)对象.getClass()
    // Class<?> bean = new TestBean().getClass();
    // 3)类名.class
    // Class<?> bean = lh.demo.bean.TestBean.class;
     

    // 2创建实例对象:
    // 通常方式: TestBean bean = new TestBean("lisi","111","22");
    // 反射方式:
    // 1)已知类名
    // TestBean testBean = (TestBean)bean.newInstance();
    // 2)未知类名
    // Object object = bean.newInstance();
     
    // 3.Constructor类(java.lang.reflect)
    // 代表类中的构造方法
    //
    // 1)得到某个类的构造方法:
    // Class类的实例.getConstructors()
    // Class<?> bean = Class.forName("lh.demo.bean.TestBean");
    // Constructor[] con = bean.getConstructors();
    // Object o1 = con[0].newInstance();
    // Method method1 = bean.getMethod("toString",null);
    // method1.invoke(o1, null);
    // Object o2 = con[1].newInstance("lisi","111","22");
    // Method method2 = bean.getMethod("toString",null);
    // method2.invoke(o2, null);
     
    // Class类的实例.getConstructor(Class... parmTypes)
    // Class<?> bean = Class.forName("lh.demo.bean.TestBean");
    // Constructor con = bean.getConstructor(String.class,String.class,String.class);
    // Object b = con.newInstance("aaa","111","22");
     
    // Class类的实例.getDeclaredConstructor(Class... parmTypes)
    // 私有
     
    // 4.Field类(java.lang.reflect)
    // 代表类中的成员变量
    // 1)得到某个类的成员变量:
    // Class类的实例.getDeclaredFields()
    // Class<?

    > bean = Class.forName("lh.demo.bean.TestBean");

    // Object o = bean.newInstance();
    // Field[] fields = bean.getDeclaredFields();
    // for(Field f:fields){
    // System.out.println(f.getName());
    // }
    // Class类的实例.getFields()
    // Class类的实例.getDeclaredField(变量名)
    // Class<?> bean = Class.forName("lh.demo.bean.TestBean");
    // Object o = bean.newInstance();
    // Field age = bean.getDeclaredField("age");
    // age.setAccessible(true);
    // age.set(o,"23");
    // System.out.println(age.get(o));
    // Class类的实例.getField(变量名)
     
    // 5.Method类
    // 代表类中的成员方法
    // 1)得到某个类的成员方法:
    // Class类的实例.getDeclaredMethods()
    // 得到本类的全部方法(public,protected,private)继承的,不包含子类的
    // Class类的实例.getMethods()
    // 得到全部的方法包含子类的,父类的(public)
    // Class类的实例.getDeclaredMethod(方法名,Class... 參数类型)
    // Method method = bean.getDeclaredMethod("privateprint", String.class);
    // method.setAccessible(true); //私有方法
     
    // Class类的实例.getMethod(方法名,Class... 參数类型)
    // Method method = bean.getMethod("print", String.class);
    // 差别:
    // public Method[] getMethods()返回某个类的全部公用(public)方法包含其继承类的公用方法,当然也包含它所实现接口的方法。

    // public Method[] getDeclaredMethods()对象表示的类或接口声明的全部方法。包含公共、保护、默认(包)訪问和私有方法,但不包含继承的方法。当然也包含它所实现接口的方法。


    // 2)方法调用:
    // 反射的方式:method.invoke(对象,Object... 參数值);
    // //非静态调用方法
    // Object o3 = method.invoke(null,"aaa");
    // //静态
    // Object o2 = method.invoke(obj,"aaa");
     

     public static void main(String[] args) {
      try {
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
    }

  • 相关阅读:
    day10
    day 09
    day08
    day07
    day6
    day5
    成员变量和局部变量
    (第五章)java面向对象之this的作用总结
    简单的音乐播放
    异步消息处理机制 简析
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5046469.html
Copyright © 2011-2022 走看看