目录

反射Method

反编译Method(了解)

反射机制调用方法

反射Costructor

反射机制调用构造方法

获取父类和父接口


反射Method

用户登录类

package lit.jxxxy.ry15.java.thread.service;/*** @author 华为*/
public class UserService {/***Login Method* @param name UserName* @param password  UserPassword* @return  True-Success / False-Fail*/public boolean login(String name, String password){if("admin".equals(name) && "638721".equals(password)){return true;}return false;}/*** Exit*/public void logout(){System.out.println("System exits!");}
}
package com.bjpowernode.java.reflect;import java.lang.reflect.Method;
import java.lang.reflect.Modifier;/*
作为了解内容(不需要掌握):反射Method*/
public class ReflectTest08 {public static void main(String[] args) throws Exception{// 获取类了Class userServiceClass = Class.forName("lit.jxxxy.ry15.java.thread.service.UserService");// 获取所有的Method(包括私有的!)Method[] methods = userServiceClass.getDeclaredMethods();//System.out.println(methods.length); // 2// 遍历Methodfor(Method method : methods){// 获取修饰符列表System.out.println(Modifier.toString(method.getModifiers()));// 获取方法的返回值类型System.out.println(method.getReturnType().getSimpleName());// 获取方法名System.out.println(method.getName());// 方法的修饰符列表(一个方法的参数可能会有多个。)Class[] parameterTypes = method.getParameterTypes();for(Class parameterType : parameterTypes){System.out.println(parameterType.getSimpleName());}}}
}

反编译Method(了解)

    public static void main(String[] args) throws Exception{StringBuilder s = new StringBuilder();//Class userServiceClass = Class.forName("com.bjpowernode.java.service.UserService");Class userServiceClass = Class.forName("java.lang.String");s.append(Modifier.toString(userServiceClass.getModifiers()) + " class "+userServiceClass.getSimpleName()+" {\n");Method[] methods = userServiceClass.getDeclaredMethods();for(Method method : methods){//public boolean login(String name,String password){}s.append("\t");s.append(Modifier.toString(method.getModifiers()));s.append(" ");s.append(method.getReturnType().getSimpleName());s.append(" ");s.append(method.getName());s.append("(");// 参数列表Class[] parameterTypes = method.getParameterTypes();for(Class parameterType : parameterTypes){s.append(parameterType.getSimpleName());s.append(",");}// 删除指定下标位置上的字符s.deleteCharAt(s.length() - 1);s.append("){}\n");}s.append("}");System.out.println(s);}

反射机制调用方法

调用方法
        要素分析:
            要素1:对象userService
            要素2:login方法名
            要素3:实参列表
            要素4:返回值

不使用反射机制,怎么调用方法

// 创建对象UserService userService = new UserService();// 调用方法boolean loginSuccess = userService.login("admin","123");

使用反射机制来调用一个对象的方法

        Class userServiceClass = Class.forName("lit.jxxy.rg.java.service.UserService");// 创建对象Object obj = userServiceClass.newInstance();// 获取MethodMethod loginMethod = userServiceClass.getDeclaredMethod("login", String.class, String.class);//调用方法Object retValue = loginMethod.invoke(obj, "admin","123123");System.out.println(retValue);

分析四要素:
        loginMethod方法
        obj对象
        "admin","123" 实参
        retValue 返回值

反射机制,让代码很具有通用性,可变化的内容都是写到配置文件当中,
    将来修改配置文件之后,创建的对象不一样了,调用的方法也不同了,
    但是java代码不需要做任何改动。这就是反射机制的魅力。


反射Costructor

反编译一个类的Constructor构造方法。

public class Vip {int no;String name;String birth;boolean sex;public Vip() {}public Vip(int no) {this.no = no;}public Vip(int no, String name) {this.no = no;this.name = name;}public Vip(int no, String name, String birth) {this.no = no;this.name = name;this.birth = birth;}public Vip(int no, String name, String birth, boolean sex) {this.no = no;this.name = name;this.birth = birth;this.sex = sex;}@Overridepublic String toString() {return "Vip{" +"no=" + no +", name='" + name + '\'' +", birth='" + birth + '\'' +", sex=" + sex +'}';}
}

反编译(了解)

/*
反编译一个类的Constructor构造方法。*/
public class ReflectTest11 {public static void main(String[] args) throws Exception{StringBuilder s = new StringBuilder();Class vipClass = Class.forName("java.lang.String");s.append(Modifier.toString(vipClass.getModifiers()));s.append(" class ");s.append(vipClass.getSimpleName());s.append("{\n");// 拼接构造方法Constructor[] constructors = vipClass.getDeclaredConstructors();for(Constructor constructor : constructors){//public Vip(int no, String name, String birth, boolean sex) {s.append("\t");s.append(Modifier.toString(constructor.getModifiers()));s.append(" ");s.append(vipClass.getSimpleName());s.append("(");// 拼接参数Class[] parameterTypes = constructor.getParameterTypes();for(Class parameterType : parameterTypes){s.append(parameterType.getSimpleName());s.append(",");}// 删除最后下标位置上的字符if(parameterTypes.length > 0){s.deleteCharAt(s.length() - 1);}s.append("){}\n");}s.append("}");System.out.println(s);}
}

反射机制调用构造方法

不使用反射机制怎么创建对象

        Vip v1 = new Vip();Vip v2 = new Vip(110, "zhangsan", "2001-10-11", true);

使用反射机制

        // 使用反射机制创建对象Class c = Class.forName("lit.jxxy.rg.java.bean.Vip");// 调用无参数构造方法Object obj = c.newInstance();System.out.println(obj);// 第一步:先获取到这个有参数的构造方法Constructor con = c.getDeclaredConstructor(int.class, String.class, String.class,boolean.class);// 第二步:调用构造方法new对象Object newObj = con.newInstance(110, "jackson", "1990-10-11", true);System.out.println(newObj);// 获取无参数构造方法Constructor con2 = c.getDeclaredConstructor();Object newObj2 = con2.newInstance();System.out.println(newObj2);

获取父类和父接口

重点:给你一个类,怎么获取这个类的父类,已经实现了哪些接口

        // String举例Class stringClass = Class.forName("java.lang.String");// 获取String的父类Class superClass = stringClass.getSuperclass();System.out.println(superClass.getName());// 获取String类实现的所有接口(一个类可以实现多个接口。)Class[] interfaces = stringClass.getInterfaces();for(Class in : interfaces){System.out.println(in.getName());}

Java——反射机制(下)相关推荐

  1. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  2. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...

    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn   发布于:2012-09-15 ...

  3. java基础-java反射机制

    2019独角兽企业重金招聘Python工程师标准>>> 引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩" ...

  4. 浅谈Java反射机制 之 获取类的字节码文件 Class.forName(全路径名) 、getClass()、class...

    先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对 ...

  5. Java反射机制大神必学系列之 ,高级与低级的差别在哪里?

    Java反射机制大神必学系列之 ,高级与低级的差别在哪里? java学习爱好者 2019-05-20 19:08 前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来 ...

  6. java反射机制(三)---java的反射和代理实现IOC模式 模拟spring

    IOC(Inverse of Control)可翻译为"控制反转",但大多数人都习惯将它称为"依赖注入".在Spring中,通过IOC可以将实现类.参数信息等配 ...

  7. 谈谈Java反射机制

    写在前面: 什么是java反射机制?我们又为什么要学它? 当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言.我们认为java并不是动态语言,但是它却有一个非常突出的动态相关机制,俗称:反 ...

  8. 粗浅看 java反射机制

    Java 反射是 Java 被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运 行时透过 Reflection APIs 取得任何一个已知名称的class 的内部信息,包括其 modifi ...

  9. Java基础与提高干货系列——Java反射机制

    前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来.那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现. 正文 Java反射机制定义 Java反射机制 ...

  10. java反射机制详解_Java反射机制详解

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...

最新文章

  1. 微信朋友圈:应对春节千亿访问量背后的故事
  2. Vue.js——十分钟入门Vuex
  3. python拼图_Python实现, 命令行下的拼图游戏
  4. Meterpreter重要命令与使用
  5. java中ArrayList类的操作
  6. 惠普暗影精灵3清灰_如何评价惠普笔记本这几年的表现?尤其是暗影精灵系列。...
  7. cpuz测试分数天梯图_最新手机处理器天梯图出炉:第一实至名归,你手机处理器排名高吗...
  8. 功夫小子实践开发-游戏设置功能的实现
  9. 从“运维”处谈OFO失败
  10. java 正则表达式 例子_Java正则表达式例子汇总
  11. Segger Embedded Studio使用有什么技巧?
  12. MIS课设 JavaFX考试管理系统
  13. 使用注册表清理右键新建菜单
  14. 创业型公司,你要不要去?
  15. 传奇GOM引擎单机架设图文教程
  16. 【干货】Python文件打包 .exe文件反编译
  17. 【转载】微服务架构论文-马丁福勒
  18. I.MX6ULL_Linux_基础篇(7) 裸机开发流程
  19. 美国哈佛大学图书馆凌晨4点座无虚席
  20. jQuery.print插件实现浏览器打印功能

热门文章

  1. 4.网络爬虫—Post请求(实战演示)
  2. 轻松熊喵喵 -- 名词解释(自用)
  3. java 生成banner 服务 字体
  4. html 设置请求头,http请求头和响应头设置
  5. 设备调试---用万用表寻找GND、RXD、TXD
  6. 基于YOLOv5的中式快餐店菜品识别系统
  7. 信数金服决策引擎分享(二):灰度发布-冠军/挑战者试验的另一个应用
  8. onchange()事件的应用
  9. Pandas 的melt函数解析
  10. BAT大厂面试题以及答案(一)