验证中...
8月18日(周六)成都源创会火热报名中,四位一线行业大牛与你面对面,探讨区块链技术热潮下的冷思考。
语言: Java
分类: 其他
最后更新于 2018-05-19 13:52
片段 1 片段 2 片段 3
获取类的方法
原始数据 复制代码
/**
* 获取类的方法
*/
import java.lang.reflect.Method;
public class Test02 {
public static void main(String[] args) {
//通过类的名称
Class c1 = String.class;
Method mc1[] = c1.getDeclaredMethods();
System.out.println("c1类的方法有:");
for(Method m:mc1){
System.out.println(m.getName()+"---"+m.toString());
}System.out.println();System.out.println();System.out.println();
//通过类的实例
String str = "Zzd";
Class c2 = str.getClass();
Method mc2[] = c2.getDeclaredMethods();
System.out.println("c2类的方法有:");
for(Method m:mc2){
System.out.println(m.getName()+"---"+m.toString());
}System.out.println();System.out.println();System.out.println();
//通过全限定类名 包名.类名
try {
Class c3 = Class.forName("java.lang.String");
//实例化
try {
Object o = c3.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Method mc3[] = c3.getDeclaredMethods();
System.out.println("c3类的方法有:");
for(Method m:mc3){
System.out.println(m.getName()+"---"+m.toString());
}System.out.println();System.out.println();System.out.println();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//包装类的一种方法
Class c4 = Integer.TYPE;
Method mc4[] = c4.getDeclaredMethods();
System.out.println("c4类的方法有:");
for(Method m:mc4){
System.out.println(m.getName()+"---"+m.toString());
}System.out.println();System.out.println();System.out.println();
}
}
简单应用
原始数据 复制代码
package study;
import java.io.BufferedReader;
import java.io.FileReader;
import java.lang.reflect.Method;
public class Test02 {
public static void main(String[] args) {
Game game = new Game();
game.run();
}
}
/*
*
*/
class Game {
Hero hero;
public Game(){
try {
//读取文件中的信息
BufferedReader reader = new BufferedReader(new FileReader("D://hero.txt"));
//得到需要获取的信息 本例中是英雄的具体
String heroName = reader.readLine();
//通过获取的信息得到一个Class类
Class c1 = Class.forName(heroName);
//通过Class类的实例化 得到一个Object类
Object newHero = c1.newInstance();
//获得需要使用的方法所在类中的所有方法
Method [] methods = Game.class.getDeclaredMethods();
//遍历需要使用的方法所在类中的所有方法
for(Method m:methods){
//获取到需要使用的方法
if(m.getName().equals("setHero")){
//调用需要使用的方法
m.invoke(this, newHero);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void setHero(Hero hero){
this.hero = hero;
}
public void run(){
hero.run();
}
}
/*
*
*/
class Hero {
public void run(){
}
}
/*
*
*/
class Solder extends Hero {
public void run(){
System.out.println("战士在攻击!");
}
}
/*
*
*/
class Master extends Hero {
public void run(){
System.out.println("法师在攻击!");
}
}
反射应用
原始数据 复制代码
package office.Work;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class Work {
public static void main(String[] args) {
Work work = new Work();
List<User> user = work.getUsers(User.class,"office/Work/User.txt");
//遍历输出users动态数组中所有用户的信息
for(User u:user){
String ID = u.getID();
String age = u.getAge();
String name = u.getName();
String sex = u.getSex();
String phone = u.getPhone();
System.out.println("ID:"+ID+" 年龄:"+age+" 姓名:"+name+" 性别:"+sex+" 联系方式:"+phone);
}
}
/**
* @param <T>
* @param clazz
* @param file
* @return
*/
public <T>List<T> getUsers(Class<T> clazz,String file){
//创建一个动态数组
List list = new ArrayList<User>();
//使用字节流加载文件
InputStream in = null;
//使用缓冲字符流读取文件中的数据
BufferedReader reader = null;
try {
//得到类的类加载器 获取文件得到字节输入流
//相当于用getResource()取得File文件后,再new InputStream(file)获取到输入流
in = clazz.getClassLoader().getResourceAsStream(file);
//读取文件
reader = new BufferedReader(new InputStreamReader(in));
//读取信息
while(true){
//读取第一组数据的信息
String message = reader.readLine();
//如果下一行为null 则跳出循环
if(message == null){
break;
}
//实例化一个clazz对象
Object thisU = clazz.newInstance();
//添加到list数组中
list.add(thisU);
//将信息拆分成各个属性 放到属性数组中
String [] mes = message.split(",");
//遍历属性数组
for(String m:mes){
//将一个对象的属性数组通过=分割为属性名+属性值
String [] mess = m.split("=");
//得到set方法名
String setmethod = new String("set"+mess[0].substring(0, 1).toUpperCase()+mess[0].substring(1));
//调用此set方法
Method method = User.class.getDeclaredMethod(setmethod,String.class);
//使用此方法 将信息设置到数组中的对象中
method.invoke(thisU, mess[1]);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return list;
}
}

评论列表( 0 )

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