还不存在的类–即我们需要使用反射来使用的类

Person类:

package com.qf.demo4;public class Person {private String name;public int age;static int weight;int male;protected int num;public Person(String name, int age, int weight) {this.name = name;this.age = age;this.weight = weight;System.out.println("有参数的构造方法");}public Person() {System.out.println("无参数的构造方法");}public void eat() {System.out.println("吃");}public void drink(String type) {System.out.println("喝" + type);}public String sleep() {System.out.println("睡");return "呵呵";}private void play() {System.out.println("玩");}public static void hehe() {System.out.println("heheheheh");}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ",weight = "+weight+"]";}
}

演示代码:


Test1:创建Class对象

package com.qf.demo4;import com.qf.demo.Person;
/*** 每一个类只有一个class 对象* com.qf.demo.Person 包名+类名  全限定名* @author Administrator**/
public class Test {public static void main(String[] args) {// 创建Class 对象// 第一种方式:类.classClass class1 = Person.class;System.out.println(class1.hashCode());// 第二种方式:创建类的对象;然后--对象.getClass()Person person = new Person();Class class2 = person.getClass();System.out.println(class2.hashCode());// 第三种方式:使用forname方法,参数为相对于本工程的地址try {Class class3 = Class.forName("com.qf.demo.Person");System.out.println(class3.hashCode());} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

Test2:创建Constructor对象,并创建Person类(还没有的类)对象

package com.qf.demo4;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;public class Test2 {public static void main(String[] args) {try {Class class1 = Class.forName("com.qf.demo4.Person");Constructor[] constructors = class1.getConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}// 1 通过构造方法创建  Perosn对象Constructor constructor = class1.getConstructor(null);// 得到无参的构造方法Person person = (Person) constructor.newInstance(null);System.out.println(person);// 2 利用有参数的构造方法创建对象Constructor constructor2 = class1.getConstructor(String.class,int.class,int.class);Person person2 = (Person) constructor2.newInstance("张三",5,9);System.out.println(person2);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

Test3:获取方法,以及调用方法

package com.qf.demo4;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class Test3 {public static void main(String[] args) {try {Class class1 = Class.forName("com.qf.demo4.Person");// 得到构造方法Constructor constructor = class1.getConstructor(null);Object object = constructor.newInstance(null);Method[] methods = class1.getMethods();// 得到本类和父类的非私有的方法Method[] methods2 = class1.getDeclaredMethods();// 得到本类中声明的所有的方法(包括私有)// 得到 无参  无返回值的 方法并且调用Method method = class1.getMethod("eat", null);//            调用方法的对象    实际参数method.invoke(object, null);// 是哪个方法被调用// 调用  有参数 无返回值的方法Method method2 = class1.getMethod("drink", String.class);method2.invoke(object, "水");// 有返回值的Method method3 = class1.getMethod("sleep", null);Object  object2 = method3.invoke(object, null);// invoke方法的返回值就是调用的方法的返回值System.out.println(object2);// 得到静态的方法Method method4 = class1.getMethod("hehe", null);method4.invoke(null, null);// 静态方法不需要传递对象  直接写null// 私有的   私有的方法 必须用 getDeclaredMethod 才能得到Method method5 = class1.getDeclaredMethod("play", null);method5.setAccessible(true);// 私有方法默认没有权限调用,必须单独设定调用权限method5.invoke(object, null);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

反射定义:http://blog.csdn.net/baidu_37107022/article/details/71234940

Java之反射代码演示说明相关推荐

  1. java执行反射代码导致频繁创建奇怪的类从而发生元数据区被占满FUllGc案例

    查看 JVM GC 日志 没有一丝耽搁,老王立刻调出了线上GC日志,在日志里,看到了一个"Metadata GC Threshold"的字样,类似于如下日志: [Full GC(M ...

  2. Java设计模式的代码演示(结构型模式一)

    目录 写在前面 一.适配器模式 1.1. 类适配器模式 1.2. 对象适配器模式 二.桥接模式 三.装饰器模式 写在前面 上一篇我们学习了创建型设计模式 本篇文章通过代码演示的形式,记录结构型设计模式 ...

  3. 【java】ThreadLocal 内存泄漏 代码演示 实例演示

    1.概述 转载:ThreadLocal 内存泄漏 代码演示 实例演示 首先看文章:ThreadLocal内存泄露原因分析 相关文章: [高并发]ThreadLocal.InheritableThrea ...

  4. java什么是反射 代码说明_java编程中,常提到的反射代码指的是什么?

    展开全部 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态e5a48de588b662616964757a686964616f31333335326232或行 ...

  5. java实现doc内容对比_Java平台Word格式处理控件Spire.Doc8月新功能代码演示:比较两个 Word 文档的内容...

    Spire.Doc 能够非常完美的识别中文字符并支持丰富的word文档元素:文本框.页眉.页脚.项目符号和编号.表格.文本.超链接.水印.图片.形状等. 自版本3.8.8开始,Spire.Doc fo ...

  6. 原型模式【浅克隆实现,使用序列化实现深克隆】Java代码演示

    文章目录 原型模式 浅克隆 深克隆(使用序列化) 原型模式 原型模式(Prototype) 的定义如下: 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象. 在这里, ...

  7. java 死锁演示_史上最通俗理解的Java死锁代码演示

    死锁的概念 知识储备 对象锁:Java一切皆对象,每个类都有一个class文件.由class文件可以new出对象,我们简单认识 下java对象,对象有个对象头信息,也就是这个对象概述,其中一条信息就是 ...

  8. java printwriter 文件,java使用PrintWriter写文件,javaprintwriter写,下面示例代码演示使用Pr...

    java使用PrintWriter写文件,javaprintwriter写,下面示例代码演示使用Pr 下面示例代码演示使用PrintWriter方法写文件. PrintWriter的构造函数接受Fil ...

  9. Java的反射机制,内含超简单实例代码(搞懂反射,这一篇就够了)

    一 首先来说说反射机制的概念: 程序在运行时, 对于类来说,可以知道该类的任意属性和方法: 对于对象来说,可以调用该对象的任意方法和属性: 就以上这种动态获取信息的机制就称为Java的反射机制 彻底了 ...

最新文章

  1. python计算机_基础python计算机知识
  2. 共享单车取消月卡优惠 烧钱时代正式结束
  3. Pydoc 本地 HTML 形式查看
  4. c语言文件查找函数fread,文件函数fread
  5. undo表空间文件丢失恢复(3)--无备份无redo的情况下恢复
  6. 关于优酷开放SDK之setOnCurrentPositionUpdateListener
  7. JS核心基础数组的操作概述
  8. 【clickhouse】clickhouse 表引擎之 null
  9. 比较默认对象和默认约束的异同_UE4对象类类型引用和类默认对象(Class Default Object,简称CDO)...
  10. iOS14.5 Beta7使用体验感受
  11. (BISM)FTP搜索引擎BLOG开通了,专门交流搜索引擎技术
  12. 摄像头参数介绍 ———— 视场角(FOV)
  13. H.264之几种开源解码器的对比评测
  14. 《一直在路上》系列——大美贵州,贵州避暑之旅
  15. 现代软件工程 第一章 【概论】练习与讨论 第6题 邓杰
  16. flea-db使用之JPA接入
  17. JS数组方法shift()、unshift()用法实例分析
  18. 第 12 章 武装飞船
  19. 初学自建的超简单网站
  20. TaxThemis: Interactive Mining and Exploration of Suspicious Tax Evasion Groups

热门文章

  1. EOS 核心功能 (2) nodeos
  2. 区块链BaaS云服务(12)易居(中国) 房地产 EBaaS(Estate Blockchain as a Service)
  3. 全国大学生电工数学建模竞赛赛题_A
  4. [register]-04-ARMv8的寄存器简介和总结
  5. KMP 算法并非字符串查找的优化 [转]
  6. 题目3:文本文件单词的检索与计数(实验准备)
  7. 【Web安全】php://filter 的浅略底层分析
  8. CVE-2012-1876 Internet Exporter堆溢出漏洞分析
  9. Windbg无源码调试驱动
  10. B - Bone Collector (01背包)