1. package com.at221;
  2.  
  3. import java.io.Serializable;
  4. import java.lang.reflect.*;
  5.  
  6. import org.junit.Test;
  7.  
  8. public class TestReflection {
  9. @Test
  10. public void test1() throws Exception{
  11. Class<?> class1 = null;
  12. Class<?> class2 = null;
  13. Class<?> class3 = null;
  14. //对象实例化的第一种方式:
  15. class1 = Class.forName("com.at221.Person");
  16. // Person person = (Person)class1.newInstance();
  17.  
  18. //对象实例化的第二种方式:
  19.  
  20. class2 = new Person().getClass();
  21.  
  22. //第三种对象实例化的方式:
  23.  
  24. class3 = Person.class;
  25.  
  26. System.out.println(class1);
  27. System.out.println(class2);
  28. System.out.println(class3);
  29.  
  30. }
  31.  
  32. /*运行结果:
  33. * class com.at221.Person
  34. class com.at221.Person
  35. class com.at221.Person
  36.  
  37. *
  38. */
  39.  
  40. //获取类的父类和接口:
  41. @Test
  42. public void test2() throws Exception{
  43. Class<?> class1 = Class.forName("com.at221.Person");
  44.  
  45. Class<?> parentclass = class1.getSuperclass();
  46. System.out.println(parentclass.getName());
  47.  
  48. System.out.println("----------------");
  49.  
  50. Class<?> inte[] = class1.getInterfaces();
  51. for(int i = 0; i < inte.length; i++){
  52. System.out.println(inte[i].getName());
  53. }
  54. }
  55. /*
  56. * 运行结果:
  57. * com.at221.Creture
  58. ----------------
  59. java.io.Serializable
  60.  
  61. */
  62.  
  63. //获取类的属性和属性的作用域和类型:
  64. @Test
  65. public void test3(){
  66. Class<?> class2 = new Person().getClass();
  67. Field[] fields = class2.getDeclaredFields();
  68.  
  69. for(int i = 0; i < fields.length; i++){
  70. Class<?> types = fields[i].getType();
  71. int mo = fields[i].getModifiers();
  72. System.out.println(Modifier.toString(mo) + " " +
  73. types.getName() + " " + fields[i].getName() + "\n");
  74. }
  75. /*运行结果:
  76. * private static final long serialVersionUID
  77.  
  78. private java.lang.String name
  79.  
  80. private int age
  81.  
  82. private java.lang.String nation
  83. *
  84. */
  85.  
  86. //获取构造器的各种信息:
  87.  
  88. Class<?> class3 = new Person().getClass();
  89. Constructor<?> construtor[] = class3.getDeclaredConstructors();
  90.  
  91. for(int i = 0; i < construtor.length; i++){
  92. int mo = construtor[i].getModifiers();
  93. Class<?> types[] = construtor[i].getParameterTypes();
  94. System.out.println(Modifier.toString(mo) + " " + construtor[i].getName());
  95. System.out.println(i + ": ");
  96. for(int j = 0; j < types.length; j++){
  97. System.out.print(types[j].getName() + " ");
  98. }
  99. System.out.println("--------------");
  100. }
  101. /*运行结果:
  102. * public com.at221.Person
  103. 0:
  104. --------------
  105. public com.at221.Person
  106. 1:
  107. java.lang.String int java.lang.String --------------
  108. *
  109. */
  110. }
  111.  
  112. @Test
  113. public void test4(){
  114. //获取类中的方法:
  115. Class<?> class4 = Person.class;
  116. Method methods[] = class4.getDeclaredMethods();
  117. for(int i = 0; i < methods.length; i++){
  118.  
  119. int mod = methods[i].getModifiers();//获取函数的作用域;
  120. Class<?> returnTypes = methods[i].getReturnType();//q就函数的返回值;
  121.  
  122. System.out.print("method[" + i + "] :" + Modifier.toString(mod) + " " +
  123. " " + returnTypes.getName() + " " + methods[i].getName() + " ( ");
  124. Class<?> parameterType[] = methods[i].getParameterTypes();//获取函数的形参类型;
  125. for(int j = 0; j < parameterType.length; j++){
  126. System.out.print(parameterType[j].getName() + " ");
  127. }
  128. System.out.println(")");
  129.  
  130. }
  131. }
  132. /*运行结果:
  133. * method[0] :public java.lang.String toString ( )
  134. method[1] :public java.lang.String getName ( )
  135. method[2] :public void setName ( java.lang.String )
  136. method[3] :public int getAge ( )
  137. method[4] :public void setAge ( int )
  138. method[5] :public java.lang.String getNation ( )
  139. method[6] :public void setNation ( java.lang.String )
  140.  
  141. *
  142. */
  143. }
  144.  
  145. class Person extends Creture implements Serializable {
  146. /**
  147. *
  148. */
  149. private static final long serialVersionUID = 1L;
  150. private String name;
  151. private int age;
  152. private String nation;
  153.  
  154. public Person() {
  155. super();
  156. }
  157.  
  158. public Person(String name, int age, String nation) {
  159. super();
  160. this.name = name;
  161. this.age = age;
  162. this.nation = nation;
  163. }
  164.  
  165. public String getName() {
  166. return name;
  167. }
  168.  
  169. public void setName(String name) {
  170. this.name = name;
  171. }
  172.  
  173. public int getAge() {
  174. return age;
  175. }
  176.  
  177. public void setAge(int age) {
  178. this.age = age;
  179. }
  180.  
  181. public String getNation() {
  182. return nation;
  183. }
  184.  
  185. public void setNation(String nation) {
  186. this.nation = nation;
  187. }
  188.  
  189. @Override
  190. public String toString() {
  191. return "Person [name=" + name + ", age=" + age + ", nation=" + nation + "]";
  192. }
  193. }
  194.  
  195. class Creture{
  196. public Creture(){
  197. super();
  198. }
  199.  
  200. public void show(){
  201. System.out.println("!!!i am a creture!!!");
  202. }
  203. }

Java的反射机制的详细应用的更多相关文章

  1. Java 类反射机制分析

    Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...

  2. Java的反射机制和动态代理

    介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大的功能,可以原 ...

  3. Java核心反射机制

    Java核心反射机制: 基本反射: 反射是一种动态类的处理机制,通过Class类来实现反射机制: Class类的基本信息: Module java.base Package java.lang Cla ...

  4. java的反射机制

    一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...

  5. Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别

    一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:   其中

  6. java笔记--反射机制之基础总结与详解

    一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象 ...

  7. JAVA的反射机制学习笔记(二)

    上次写JAVA的反射机制学习笔记(一)的时候,还是7月22号,这些天就瞎忙活了.自己的步伐全然被打乱了~不能继续被动下去.得又一次找到自己的节奏. 4.获取类的Constructor 通过反射机制得到 ...

  8. java笔录---反射机制(1)

    引言   为了方便记忆java的反射机制,在这里仔细的总结了一下.主要是怕以后忘记了,这样也方便回忆.因为最近利用空余时间深入的了解spring和Mybatis框架,   像spring中核心模块IO ...

  9. Java高新技术 反射机制

     Java高新技术 反射机制 知识概要:                   (1)反射的基石 (2)反射 (3)Constructor类 (4)Field类 (5)Method类 (6)用反射方 ...

随机推荐

  1. #pragma multi_compile_fwdbase会增加很多个shader variants

    #pragma multi_compile_fwdbase是unity内置的用于前向渲染的关键字快捷方式,它包含了前向渲染光照计算需要的大多数关键字,因此会被shader带来很多的变体. 下面这个简单 ...

  2. java执行post请求,并获取json结果组成想要的内容存放本地txt中

    大概就是这样一个post 然后用户的需求是: 1.分析这个接口,实现1.1 获取到sentence,  score字段值1.2 这个score值如果是<0.5,打印分值 情感倾向:0       ...

  3. 在Linux下使用gcc编译mesa文件报undefined reference to symbol 'sin@@GLIBC_2.2.5和DSO missing from command line两个错误的解决方案

    一.概述 在Linux系统下使用gcc编译用C语言写的mesa的示例程序. 环境:Ubuntu Server 18.04.1 二.问题的出现 在Ubuntu下安装好mesa所需的库文件,将目标文件从g ...

  4. springboot-thymeleaf

    Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下三个极吸引人的特点: Thymeleaf 在有网络和无网络 ...

  5. node-sass 安装失败 Failed at the node-sass@4.9.2 postinstall script的解决

    控制台运行npm install时报错,报错信息如下: npm ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! node-sass@4.9.2 postins ...

  6. git rebase 的使用

    rebase 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将学习什么是“rebase”,怎样使用“rebase”,并将展示该操作的惊艳之处,以及指 ...

  7. 织梦移动版页面点击下一篇获取不到id

    1.首先找到网站目录下面的/include/arc.archives.class.php文件 2.找到837行的如下内容 if ( defined('DEDEMOB') ) { $mlink = 'v ...

  8. k8s(5)-拓展服务

    在之前我们创建了一个部署,然后通过服务公开它.部署只创建了一个Pod来运行我们的应用程序.当流量增加时,我们需要扩展应用程序以满足用户需求. 通过更改部署中的副本数来完成扩展. 1. 拓展部署 这里将 ...

  9. thinphp5框架遇到 mkdir() Permission denied 解决办法

    网站重装 直接复制本地程序文件 里面数据库链接信息要改成线上的 然后mysql apache 等都没有动 运行后出现错误 mkdir() Permission denied 这是由于runtime目录 ...

  10. Golang知识图谱

    原:https://www.processon.com/view/link/5a9ba4c8e4b0a9d22eb3bdf0?from=timeline 百度脑图重制:http://naotu.bai ...