乐字节Java反射之四:反射相关操作

蒋义渠
• 阅读 1138

大家好,乐字节小乐继续为Java初学者讲述Java基础知识。上次说到乐字节Java反射之三:方法、数组、类加载器,这次是Java反射之四:反射相关操作

1、操作属性

//1、获取Class对象
            Class<?> clz=Class.forName("com.shsxt.ref.simple.User");
            //2、获取对象
            User u=(User)clz.newInstance();
            //3、设置属性
            Field field=clz.getDeclaredField("uname");
            field.setAccessible(true);//打开权限
            field.set(u, "0523");
            //4、获取此属性
            System.out.println(field.get(u));

2、调用方法

调用方法,都是直接对象.方法([实参]);反射之后,动态调用方法需要使用 invoke即可。

1)、方法调用

  //1、获取Class对象
        Class<?> clz=Class.forName("com.shsxt.ref.simple.User");
        //2、获取对象
        User u=(User)clz.newInstance();
        //3、获取方法
        Method m =clz.getMethod("coding", String.class,String.class);
        //4、成员方法的调用
        m.invoke(u, "反射","多个参数");
        //若是静态方法,传递null即可   因为静态方法属性类,不属于对象
        m=clz.getMethod("testStatic",int.class);
        m.invoke(null, 100);//与对象无关

2)、操作setter与getter访问器

/**
     * @param obj     操作的对象
     * @param att      操作的属性
     * @param value  设置的值
     * */
 public static void setter(Object obj, String att,Object value) {
 try {
  //setUname setUpwd -->第一个字母大写
  att=att.substring(0,1).toUpperCase()+att.substring(1);
   Method method = obj.getClass().getMethod("set" + att, value.getClass());
 method.invoke(obj, value);
        } catch (Exception e) {
 e.printStackTrace();
        }
    }
 public static  Object getter(Object obj, String att) {
 try {
  //getUname getUpwd -->第一个字母大写
  att=att.substring(0,1).toUpperCase()+att.substring(1);
            Method method = obj.getClass().getMethod("get" + att);
 return method.invoke(obj);
        } catch (Exception e) {
 e.printStackTrace();
        }
 return null;
}
main方法
//1、获取Class对象
  Class<?> clz=Class.forName("com.shsxt.ref.simple.User");
  //2、获取对象
  User u=(User)clz.newInstance();
  //3、设置值
  setter(u,"uname","shsxt");
  //获取值
  String str=(String) getter(u,"uname");
  System.out.println(str);

3、利用反射编写简单工厂设计模式

利用反射+配置文件可以实现简单工厂模式。

interface  Car{
 void run();
}
class Bmw implements Car{
 public void run(){
  System.out.println("小样,学的怎么样");
 }
}
class QQ  implements Car{
 public void run(){
  System.out.println("大哥,救我");
 }
}
class Benz  implements Car{
 public void run(){
  System.out.println("哈哈");
 }
}
//简单工厂
class CarFactory{
 public static Car product2(String carStr){ 
  if(carStr.equals("qq")){
   return new QQ();
  }else if(carStr.equals("benz")){
   return new Benz();
  }
  //如有其它车辆,需要添加代码
  return null;
 }
 /**
  * 根据字符串 创建对象
  * @param carStr
  * @return
  */
 public static Car product(String carStr){  
  try {
   return (Car)Class.forName(carStr).newInstance();
  } catch (InstantiationException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
  return null;
 }
}
#car.properties
qq=com.shsxt.ref.simplefactory.QQ
benz=com.shsxt.ref. simplefactory.Benz
bmw=com.shsxt.ref. simplefactory.Bmw
public static void main(String[] args) throws Exception {
  //加载配置文件
  Properties pro =new Properties();
 pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("car.properties"));
  //获取对应的 完整路径(报名.类名)
  String clz =pro.getProperty("qq");
  CarFactory.product(clz).run();
 }

Java反射相关知识就讲到这里了,下次我们进入到JavaSE的课程:循环控制

请继续关注乐字节,Java知识技术分享,乐字节原创

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java反射大全
作者对反射的理解:方法的调用(正常的调用:对象.方法()。反射调用方法:方法.对象())静态属性的调用(正常的调用:类.属性。反射调用:属性.类)常见反射的用法:        1.通过反射获取类Class<?demo1Class
Wesley13 Wesley13
3年前
java反序列化——apache
看了好久的文章才开始分析调试java的cc链,这个链算是java反序列化漏洞里的基础了。分析调试的shiro也是直接使用了cc链。首先先了解一些java的反射机制。一、什么是反射反射是Java的特征之一,是一种间接操作目标对象的机制,核心是JVM在运行的时候才动态加载类,并且对于任意一个类,都能够知道这个类的所有属性和方法,调用方法/访问属性
Wesley13 Wesley13
3年前
java中的反射和代理
  Java反射机制可以动态地获取类的结构,动态地调用对象的方法,是java语言一个动态化的机制。java动态代理可以在不改变被调用对象源码的前提下,在被调用方法前后增加自己的操作,极大地降低了模块之间的耦合性。这些都是java的基础知识,要想成为一名合格的程序猿,必须掌握!Java反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知
Wesley13 Wesley13
3年前
java面试(反射)05
1.什么是反射JAVA反射机制是在运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取类信息以及动态调用对象内容就称为java语言的反射机制。2.反射的作用在运行时判断任意一个对象所属的
Wesley13 Wesley13
3年前
java的反射机制
java中的反射可以将代码结构更加灵活,通过反射机制可以访问属性、方法和构造方法sun公司为我们提供的4大类反射:java.lang.reflect.methodjava.lang.Classjava.lang.reflect.modifierjava.lang.reflect.Constructor有以下几种方式:比如是Employ
Wesley13 Wesley13
3年前
Java基础之反射(非常重要)
反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法
Wesley13 Wesley13
3年前
Java反射技术概述
1.什么是Java反射?  就是正在运行,动态获取这个类的所有信息2.反射机制的作用  a.反编译:.class.java  b.通过反射机制,访问Java对象的属性,方法,构造方法等3.反射机制的应用场景  Jdbc加载驱动  SpringIOC实现  Java框架4.创建对象的两种方式  a.直
Wesley13 Wesley13
3年前
Java重点基础:反射机制
一、什么是反射?Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。二、反射的三种方式
Wesley13 Wesley13
3年前
Java反射机制详解
一、内容提要:  1、反射机制是什么  2、反射机制能做什么  3、反射机制相关的API  4、通过一个对象获得完整的包名和类名  5、实例化Class类对象  6、获取一个对象的父类与实现的接口  7、获取某个类的全部构造函数  8、通过反射机制实例化一个类的对象  9、获取某个类的全部属性  10、
Wesley13 Wesley13
3年前
Java反射机制及适用场景
什么是Java反射机制?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为Java的反射机制。反射的适用场景是什么?1.当你做一个软件可以安装插件的功能,你连插件的类型名称都不知道,你怎么实例化这个对象呢
深入理解java反射机制及应用 | 京东物流技术团队
因为最近项目中经常有java反射的使用,而其中的IOC、动态代理用到了反射,因此趁这个机会来总结一下关于Java反射的一些知识,复习一下。本篇基于JDK1.8。java反射机制是什么反射原理Java反射机制(JavaReflection)是Java的特征之
蒋义渠
蒋义渠
Lv1
孤云独鸟川光暮,万井千山海色秋。
文章
5
粉丝
0
获赞
0