2019独角兽企业重金招聘Python工程师标准>>>

一、概述

java反射不仅仅只用于对象的实例化,更多的情况下用于类的组成结构操作。类的基本组成结构:父类(父接口)、包、属性、方法(构造方法、普通方法)

建立如下结构程序:

package com.cz.parent;public interface IMessage {void  send();
}
package com.cz.parent;public interface IService {void  service();
}
public abstract class Study {}
package com.cz.entity;import com.cz.parent.IMessage;
import com.cz.parent.IService;
import com.cz.parent.Study;public  class Person extends Study implements IMessage,IService {private String name;private int age;public Person(){System.out.println("这是无参构造方法!!");}public Person(String name,int  age){this.name = name;this.age  = age;}public String toString(){return "名字:"+this.name+"年龄:"+this.age;}@Overridepublic void send() {System.out.println("消息发送");}@Overridepublic void service() {System.out.println("提供服务");}
}

二、获取父类信息

2.1 获取包名

public class Test {public static void main(String[] args) {Class<?> cls = Person.class;Package pac = cls.getPackage();System.out.println(pac.getName());}
}

输出结果:

2.2 获取父类信息

public class Test {public static void main(String[] args) {Class<?> cls = Person.class;Class<?> superclass = cls.getSuperclass();System.out.println(superclass.getName());}
}

输出结果:

2.3 获取父接口信息

public class Test {public static void main(String[] args) {Class<?> cls = Person.class;Class<?>[] interfaces = cls.getInterfaces();for (Class<?> temp: interfaces) {System.out.println(temp.getName());}}
}

输出结果:

三、获取构造方法

3.1 获取所有构造方法

public class Test {public static void main(String[] args) {Class<?> cls = Person.class;Constructor<?>[]  constructors = cls.getConstructors();  //Constructor<?>[] constructors = cls.getDeclaredConstructors();      //这种方式也可for (Constructor<?> temp: constructors) {System.out.println(temp);}}
}

输出结果:

3.2 通过参数获取指定构造器

public class Test {public static void main(String[] args) {Class<?> cls = Person.class;try {Constructor<?>  constructor = cls.getConstructor(String.class,int.class);Object obj = constructor.newInstance("张三",18);System.out.println(obj);} catch (Exception e) {e.printStackTrace();}}
}

运行结果:

四、反射获取普通方法

4.1 获取所有方法(包括父类)

public class Test {public static void main(String[] args) {Class<?> cls = Person.class;Method[] methods = cls.getMethods();for (Method temp: methods ) {System.out.println(temp);}}
}

运行结果:

4.2 获取本类的所有方法

public class Test {public static void main(String[] args) {Class<?> cls = Person.class;Method[] methods = cls.getDeclaredMethods();for (Method temp: methods) {System.out.println(temp);}}
}

运行结果:

4.3 根据方法名获取特定的方法

public class Test {public static void main(String[] args) {Class<?> cls = Person.class;try {Method methods = cls.getMethod("toString");System.out.println(methods);} catch (NoSuchMethodException e) {e.printStackTrace();}}
}

运行结果:

4.4 如何调用类中的setter与getter方法?

public class Test {public static void main(String[] args) throws Exception {Class<?> cls = Class.forName("com.cz.entity.Person");//反射(根据字符串类名)String  value  ="张三";//要设置的属性内容//任何情况下如果要保存类中的属相或者调用类中的方法都必须保证存在有实例化对象,既然不允许导入包,那就反射实例化Object obj = cls.getDeclaredConstructor().newInstance();//调用无参构造实例化//如果想要进行方法的调用,那么一定得获取方法的名称String setMethodName = "setName";//方法名称Method method = cls.getDeclaredMethod(setMethodName,String.class);//获取指定的方法method.invoke(obj,value);//等价于: Person对象的 setName(value)String  getMethodName = "getName";Method method1 = cls.getDeclaredMethod(getMethodName);System.out.println(method1.invoke(obj)); //等价于: Person对象的 getName()  }
}

注:初学者,写的不好请见谅,如有相关问题记得私信我

转载于:https://my.oschina.net/chenzhou/blog/2236271

java高级-反射获取对象的18代祖宗相关推荐

  1. java通过反射获取对象的指定属性值(包括私有属性值和指定注解属性值)

    通过反射机制,可以灵活地根据对象的属性名的字符串形式获取对象的属性值.当一个对象有多个属性的时候,只需要对其中的几个特定属性进行某种特殊处理,具体是哪个属性并不能提前确定,每个需要处理的属性的方法也不 ...

  2. Java反射获取对象的属性值

    当知道某个类,想获取类上的某个属性的值时,有时会用到Java的反射机制,如下参考: /*** 反射获取对象的属性值* @param object 对象(要遍历的对象)* @param targetFi ...

  3. java 反射获取对象_使用Java反射机制获取对象

    本文由广州疯狂软件教育java培训分享: 构造接口Person,所有Person都会问好,但具体讲什么语言就不知道了! package interf; public interface Person ...

  4. 通过Java反射获取对象上的注解,java反射注解妙用-获取所有接口说明

    原标题:java反射注解妙用-获取所有接口说明 转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10293490.html 前言 最近在做项目权限,使用shir ...

  5. 关于java通过反射 获取/修改 对象属性值的一些注意事项

    getFields()与 getDeclaredFields() 前者能够获取所有public字段,包括父类字段: 后者可以所有public/protected/private类型的字段,但是不包括父 ...

  6. java 通过反射获取调用类方法及属性

    首先说下反射是什么?反射是Sun公司推出的一组API,此组API位于Java.lang.reflect中 反射的作用是编写工具(例如eclipse),编写框架,当然对于一般的程序,我们不可能用反射来做 ...

  7. Java如何遍历获取对象中的所有属性和值

    当我们需要对对象的所有值进行遍历的时候,依次进行get.set方法非常的麻烦,这个时候我们就会用到对象属性和值的遍历,应用代码如下 // voucher是目标对象 try{//通过getDeclare ...

  8. JAVA通过反射获取方法真实参数名

    默认情况下,我们是无法获取到方法中参数的名称,通过反射机制也只能获取到类似于arg0,arg1这样表示参数顺序的"参数名" 这样当我们需要使用方法的实际参数时,比方说spring自 ...

  9. java get null_java 获取对象中为null的字段实例代码

    下面一段简单的代码给大家分享java 获取对象中为null的字段,具体代码如下所述: private static String[] getNullPropertyNames(Object sourc ...

最新文章

  1. 爆笑!论文中,这些话的实际意思是...
  2. FILA之后又有Amer,安踏能成为“世界的安踏”吗?
  3. python sklearn.datasets.fetch_mldata MNIST手写数字数据集无法获取, 报错 Function fetch_mldata is deprecated 的解决办法
  4. 玩转小程序转发——小程序探索
  5. javax.servlet.ServletException: Circular view path []: would dispatch back to the current....
  6. 本地项目文件夹同步到GitLab的操作步骤
  7. Vue:vue过渡、动画特效以及借助animate.css实现动画效果
  8. 干货丨7款易上手C语言编程软件推荐
  9. 如何用O2OA公文编辑器制作标准的红头文件?
  10. Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)
  11. deepin做服务器稳定吗,deepin从兴致勃勃到彻底放弃
  12. Ubuntu卸载、安装
  13. 吉林大学计算机唐班公示,重要通知|数学学院16级及17级唐敖庆班选拔方案及公示名单...
  14. *Android 多线程下载 仿下载助手(改进版)
  15. bp神经网络和cnn神经网络,bp神经网络与cnn区别
  16. DDR SDRAM原理介绍
  17. 创建镜像问题出现的错误
  18. Android TV Demo 工程,其中包含 TV 常用的自定义控件,飞框效果实现,外边框效果实现,UI 控件焦点自动处理,使 TV 开发更简单,更高效。
  19. python 爬取链家网北京租房信息
  20. 马来亚大学的计算机专业相当国内哪个水平,【马来亚大学和国内985对比】 - 马来西亚留学联盟...

热门文章

  1. [转]Java 对象锁-synchronized()与线程的状态与生命周期
  2. IOCP扩展方法AcceptEx, DisconnectEx, GetAcceptExSockaddr用法示例
  3. 黑产肆虐,AI如何扛起反欺诈大旗
  4. 总结一些开源的网站检测扫描器源码(未完)
  5. Java的“影子克隆”和“深度克隆”
  6. PAT-乙级-1039. 到底买不买(20)
  7. Swift - 邮件发送功能的实现
  8. u-boot工作流程
  9. 学会查找问题的源头:《全屏游戏中自动切出到桌面的问题解决(二)》
  10. windows环境:dos 通过ftp连接到vsftpd 显示乱码解决方法