zoukankan      html  css  js  c++  java
  • 反射机制

    先建立一个Person类,然后使用反射的一些方法获取Person类的属性和方法
    Class<Person> clazz=Person.class;
    Person p=clazz.newInstance();

    Field f=clazz.getField("name");//反射获取属性
    Field f1=clazz.getField("age");

    f.set(p, "卷发送到");
    f1.set(p, 1231423);
    System.out.println(p);

    //反射获取方法
    Method m1=clazz.getMethod("show");//无参数方法
    m1.invoke(p);

    Method m2=clazz.getMethod("show", String.class);//有参数的方法
    m2.invoke(p, "fjasldjfk");
    8.11
    反射里面获取私有的指定的属性
    Field ff=clazz.getDeclaredField("age");//获取指定的属性
    ff.setAccessible(true);//把私有的age设置为可访问的
    ff.set(p, 321);
    System.out.println(p);

    反射里面获取私有的指定的构造器并赋值
    Class clazz=Person.class;
    Constructor con=clazz.getDeclaredConstructor(String.class,int.class);//获取带有两个参数的构造方法
    con.setAccessible(true);//设置为可访问的
    Person p=(Person)con.newInstance("jiajia",78);获取可运行时类的构造方法
    System.out.println(p);

    ---------------------------------------------------------

    例子:

    Person类

    package com.lanqiao.javatest;

    public class Person {
    private String name;
    private int age;

    public Person() {
    super();
    }
    private Person(String name) {
    super();
    this.name = name;
    }
    public Person(String name, int age) {
    super();
    this.name = name;
    this.age = age;
    }

    public void show(){
    System.out.println("java反射练习题!!");
    }

    public void show(String vation){
    System.out.println("java"+vation);
    }

    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }

    @Override
    public String toString() {
    return "Person [name=" + name + ", age=" + age + "]";
    }

    }

    反射的测试方法:

    1.

    package com.lanqiao.javatest;

    import java.lang.reflect.Constructor;

    import javax.swing.SpringLayout.Constraints;

    public class Test2 {

    public static void main(String[] args) throws Exception {
    //获取指定的构造器方法
    // 方法一
    // String className="com.lanqiao.javatest.Person";
    // @SuppressWarnings("rawtypes")
    // Class clazz=Class.forName(className);

    Class clazz=Person.class;
    Constructor con=clazz.getDeclaredConstructor(String.class,int.class);
    con.setAccessible(true);
    Person p=(Person)con.newInstance("jiajia",78);
    System.out.println(p);
    }
    }

    2.

    package com.lanqiao.javatest;

    import java.lang.reflect.Field;
    import java.lang.reflect.Method;

    /*
    * Class是java.long.Class包中的;
    * */
    public class Test1 {

    public static void main(String[] args) throws Exception {
    Class clazz=Person.class;
    Person p=(Person) clazz.newInstance();

    Field [] field=clazz.getFields();//获取全部属性


    Field ff=clazz.getDeclaredField("age");//获取指定的属性
    ff.setAccessible(true);//把私有的age设置为可访问的
    ff.set(p, 321);
    System.out.println(p);

    System.out.println();
    for(Field f:field){

    System.out.println(f.getType());//获取属性的类型
    System.out.println(f.getName());//获取属性的名字
    }

    System.out.println();
    Method[] method=clazz.getDeclaredMethods();//获取全部方法
    for(Method m:method){
    System.out.println(m.getName());
    }

    System.out.println();
    Method method1=clazz.getDeclaredMethod("show",String.class);//获取指定方法
    method1.invoke(p, "show");
    }

    }

  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/lxnlxn/p/5764355.html
Copyright © 2011-2022 走看看