如何使用JAVA反射/JAVA反射实例

2025-11-01 15:30:34

1、1、常用举例:

package com.test.instancedemo;class X{};public class GetClassDemo02{ public static void main(String args[]){  Class<?> c1 = null ;  // 指定泛型  Class<?> c2 = null ;  // 指定泛型  Class<?> c3 = null ;  // 指定泛型  try{   // 以下的操作形式是在开发中最常用的一种形式   c1 = Class.forName("com.test.instancedemo.X") ;  }catch(ClassNotFoundException e){   e.printStackTrace() ;  }  c2 = new X().getClass() ;  // 通过Object类中的方法实例化  c3 = X.class ; // 通过类.class实例化  System.out.println("类名称:" + c1.getName())  ; // 得到类的名称  System.out.println("类名称:" + c2.getName())  ; // 得到类的名称  System.out.println("类名称:" + c3.getName())  ; // 得到类的名称 }};

如何使用JAVA反射/JAVA反射实例

2、2、反射如何操作对象:

package com.test.instancedemo ;class Person{ private String name ; // name属性 private int age ;  // age属性 public void setName(String name){  this.name = name ; } public void setAge(int age){  this.age = age ; } public String getName(){  return this.name ; } public int getAge(){  return this.age ; } public String toString(){ // 覆写toString()方法  return "姓名:" + this.name + ",年龄:" + this.age  ; }};public class InstanceDemo01{ public static void main(String args[]){  Class<?> c = null ;  // 声明Class对象  try{   c = Class.forName("com.test.instancedemo.Person") ;  }catch(ClassNotFoundException e){   e.printStackTrace() ;  }  Person per = null ; // 声明Person对象  try{   per = (Person)c.newInstance() ; // 实例化对象  }catch(Exception e){   e.printStackTrace() ;  }  per.setName("LXY") ;  // 设置姓名  per.setAge(30) ;    // 设置年龄  System.out.println(per) ; // 内容输出,调用toString() }};

如何使用JAVA反射/JAVA反射实例

3、3、如何使用反射包

package com.test.instancedemo.instancedemo ;import java.lang.reflect.Constructor ; // 导入反射机制包class Person{ private String name ; // name属性 private int age ;  // age属性 public Person(String name,int age){  this.setName(name) ;  this.setAge(age); } public void setName(String name){  this.name = name ; } public void setAge(int age){  this.age = age ; } public String getName(){  return this.name ; } public int getAge(){  return this.age ; } public String toString(){ // 覆写toString()方法  return "姓名:" + this.name + ",年龄:" + this.age  ; }};public class InstanceDemo03{ public static void main(String args[]){  Class<?> c = null ;  // 声明Class对象  try{   c = Class.forName("com.test.instancedemo.Person") ;  }catch(ClassNotFoundException e){   e.printStackTrace() ;  }  Person per = null ; // 声明Person对象  Constructor<?> cons[] = null ;  cons = c.getConstructors() ;  try{   per = (Person)cons[0].newInstance("LXY",30) ; // 实例化对象  }catch(Exception e){   e.printStackTrace() ;  }  System.out.println(per) ; // 内容输出,调用toString() }};

如何使用JAVA反射/JAVA反射实例

4、4、使用实例1

package com.test.instancedemo.factorydemo ;interface Fruit{ public void eat() ; // 吃水果}class Apple implements Fruit{ public void eat(){   // 覆写eat()方法  System.out.println("** 吃苹果"); }};class Orange implements Fruit{ public void eat(){  System.out.println("** 吃橘子") ; }};class Factory{ public static Fruit getInstance(String className){  Fruit fruit = null ;  try{   fruit = (Fruit)Class.forName(className).newInstance() ;  }catch(Exception e){   e.printStackTrace() ;  }  return fruit ; }};public class FactoryDemo01{ public static void main(String args[]){  Fruit f = Factory.getInstance("com.test.instancedemo.factorydemo.Apple") ;  if(f!=null){   f.eat() ;  } }};

如何使用JAVA反射/JAVA反射实例

5、4、使用实例2

package  com.test.instancedemo.factorydemo ;import java.util.Properties ;import java.io.File ;import java.io.FileOutputStream ;import java.io.FileInputStream ;interface Fruit{ public void eat() ; // 吃水果}class Apple implements Fruit{ public void eat(){   // 覆写eat()方法  System.out.println("** 吃苹果"); }};class Orange implements Fruit{ public void eat(){  System.out.println("** 吃橘子") ; }};class Init{ public static Properties getPro(){  Properties pro = new Properties() ;  File f = new File("d:\\fruit.properties") ; // 找到属性文件  try{   if(f.exists()){ // 文件存在    pro.load(new FileInputStream(f)) ; // 读取属性   }else{    pro.setProperty("apple"," com.test.instancedemo.factorydemo.Apple") ;    pro.setProperty("orange"," com.test.instancedemo.factorydemo.Orange") ;    pro.store(new FileOutputStream(f),"FRUIT CLASS") ;   }  }catch(Exception e){}  return pro ; }};class Factory{ public static Fruit getInstance(String className){  Fruit fruit = null ;  try{   fruit = (Fruit)Class.forName(className).newInstance() ;  }catch(Exception e){   e.printStackTrace() ;  }  return fruit ; }};public class FactoryDemo02{ public static void main(String args[]){  Properties pro = Init.getPro() ;  Fruit f = Factory.getInstance(pro.getProperty("apple")) ;  if(f!=null){   f.eat() ;  } }};

如何使用JAVA反射/JAVA反射实例

6、获取一个对象的方法

package com.test.instancedemo.factorydemo ;import java.lang.reflect.Method ; // 导入构造方法的包import java.lang.reflect.Modifier ; // 导入构造方法的包public class GetMethodDemo{ public static void main(String args[]){  Class<?> c1 = null ;  // 声明Class对象  try{   c1 = Class.forName("com.test.instancedemo.factorydemo.Person") ; // 实例化对象  }catch(ClassNotFoundException e){   e.printStackTrace() ;  }  Method m[] = c1.getMethods() ; // 取得全部方法  for(int i=0;i<m.length;i++){   Class<?> r = m[i].getReturnType() ; // 得到返回值类型   Class<?> p[] = m[i].getParameterTypes() ; // 取得全部参数的类型   int xx = m[i].getModifiers() ; // 得到修饰符   System.out.print(Modifier.toString(xx) + " ") ; // 输出修饰符   System.out.print(r + " ") ;   System.out.print(m[i].getName()) ;   System.out.print("(") ;   for(int j=0;j<p.length;j++){    System.out.print(p[j].getName() + " " + "arg" + j) ;    if(j<p.length-1){     System.out.print(",") ;    }   }   Class<?> ex[] = m[i].getExceptionTypes() ; // 取出异常   if(ex.length>0){    System.out.print(") throws ") ;   }else{    System.out.print(")") ;   }   for(int j=0;j<ex.length;j++){    System.out.print(ex[j].getName()) ;    if(j<p.length-1){     System.out.print(",") ;    }   }   System.out.println() ;  } }};

如何使用JAVA反射/JAVA反射实例

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:192
  • 阅读量:91
  • 阅读量:91
  • 阅读量:170
  • 阅读量:177
  • 猜你喜欢