验证中...
8月18日(周六)成都源创会火热报名中,四位一线行业大牛与你面对面,探讨区块链技术热潮下的冷思考。
片段 1 片段 2 片段 3
获得类 方法
原始数据 复制代码
import java.lang.reflect.Method;
import shx.Hero;
public class Test1 {
public static void main(String[] args) {
//在控制台打印Hero的方法
//1)通过类的名称
Class class1=Hero.class;
//2)通过实例获取
Hero h=new Hero();
Class class2=h.getClass();
//3)通过全限定类名(包名+类名)获取
try {
Class class3=Class.forName("shx.Hero");
Object instance=class3.newInstance();//实例化 new
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//4)对于包装类
Class class4=Integer.TYPE;
//动态的获取方法内容,无法得到继承的方法
Method [] methods=class1.getDeclaredMethods();
//动态的获取方法内容,可以得到继承的方法,但是只能是公开的方法
Method [] methods2=class1.getMethods();
for(Method m:methods){
System.out.println(m.getName());
}
}
}
package shx;
public class Hero {
public void kill(){
}
}
获得属性
原始数据 复制代码
package shx;
import java.lang.reflect.Field;
public class Test {
private int i;
public double k=0.3;
public static void main(String[] args) {
Field [] fs=Test.class.getDeclaredFields();
Test test=new Test();
// for(Field f:fs){
// System.out.println(f.getName());
// }
for(Field f:fs){
try {
f.set(test, 100);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
System.out.println(test.k);
}
}
package shx;
import java.lang.reflect.Field;
public class Test1 {
public static void main(String[] args) {
Field [] fs=Test.class.getDeclaredFields();
Test test=new Test();
for(Field f:fs){
try {
f.setAccessible(true);
f.set(test, 100);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
System.out.println(test.k);
}
}
英雄类中获得方法
原始数据 复制代码
package shx;
import java.io.BufferedReader;
import java.io.FileReader;
import java.lang.reflect.Method;
public class Hero {
void kill(){
}
public static void main(String[] args) {
Game g=new Game();
g.run();
}
}
class Soilder extends Hero {
void kill(){
System.out.println("战士在攻击");
}
}
class Master extends Hero {
void kill(){
System.out.println("法师在攻击");
}
}
class Game {
Hero hero;
public void setHero(Hero hero){
this.hero=hero;
}
public Game() {
try {
BufferedReader br=new BufferedReader(new FileReader("E:\\eclispe.txt"));
String className=br.readLine();
//一个具体的子类Class
Class clazz=Class.forName(className);
Object instance=clazz.newInstance();//得到一个实例
Method [] ms=Game.class.getDeclaredMethods();
for(Method m:ms){
if(m.getName().equals("setHero")){
m.invoke(this, instance);//通过反射获得方法来调用此方法
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void run(){
hero.kill();
}
}

评论列表( 0 )

你可以在登录后,发表评论