反射机制

先建立一个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");
}

}

原文地址:https://www.cnblogs.com/lxnlxn/p/5764355.html