java反射怎么用_如何使用JAVA反射/JAVA反射实例

本文详细介绍了Java反射技术的基本概念、实例操作,如创建Class对象、操作对象实例、构造器使用以及动态实例化。通过实例演示了如何通过反射调用对象方法和配置工厂模式。适合开发者了解在实际开发中如何灵活运用反射技术。
摘要由CSDN通过智能技术生成

JAVA反射技术,在平时我们的开发中虽然很少会用到例如读取配制文件可能就用到这个技术,但在我们所使用的框架源码中是经常会用到的。

8686f9d31d7dfa8f1c7501c51dccdbec.png

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())  ; // 得到类的名称 }};

bd915b53478d8955518fc0f18c798af0.png

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() }};

9e04c9af264330210f0b15d141db4495.png

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() }};

f05c34ea9a731a754367e73981009fd4.png

4、使用实例1package 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() ;  } }};

156510f05164a16c88555e88f6ad61aa.png

4、使用实例2package  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() ;  } }};

9da2ec278e65386b4b29998d7198fa93.png

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 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 ex[] = m[i].getExceptionTypes() ; // 取出异常   if(ex.length>0){    System.out.print(") throws ") ;   }else{    System.out.print(")") ;   }   for(int j=0;j

4c546e168fb98a1ecec0465622eeb1f0.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值