package com.at221;

import java.io.Serializable;
import java.lang.reflect.*; import org.junit.Test; public class TestReflection {
@Test
public void test1() throws Exception{
Class<?> class1 = null;
Class<?> class2 = null;
Class<?> class3 = null;
//对象实例化的第一种方式:
class1 = Class.forName("com.at221.Person");
// Person person = (Person)class1.newInstance(); //对象实例化的第二种方式: class2 = new Person().getClass(); //第三种对象实例化的方式: class3 = Person.class; System.out.println(class1);
System.out.println(class2);
System.out.println(class3); } /*运行结果:
* class com.at221.Person
class com.at221.Person
class com.at221.Person *
*/ //获取类的父类和接口:
@Test
public void test2() throws Exception{
Class<?> class1 = Class.forName("com.at221.Person"); Class<?> parentclass = class1.getSuperclass();
System.out.println(parentclass.getName()); System.out.println("----------------"); Class<?> inte[] = class1.getInterfaces();
for(int i = 0; i < inte.length; i++){
System.out.println(inte[i].getName());
}
}
/*
* 运行结果:
* com.at221.Creture
----------------
java.io.Serializable */ //获取类的属性和属性的作用域和类型:
@Test
public void test3(){
Class<?> class2 = new Person().getClass();
Field[] fields = class2.getDeclaredFields(); for(int i = 0; i < fields.length; i++){
Class<?> types = fields[i].getType();
int mo = fields[i].getModifiers();
System.out.println(Modifier.toString(mo) + " " +
types.getName() + " " + fields[i].getName() + "\n");
}
/*运行结果:
* private static final long serialVersionUID private java.lang.String name private int age private java.lang.String nation
*
*/ //获取构造器的各种信息: Class<?> class3 = new Person().getClass();
Constructor<?> construtor[] = class3.getDeclaredConstructors(); for(int i = 0; i < construtor.length; i++){
int mo = construtor[i].getModifiers();
Class<?> types[] = construtor[i].getParameterTypes();
System.out.println(Modifier.toString(mo) + " " + construtor[i].getName());
System.out.println(i + ": ");
for(int j = 0; j < types.length; j++){
System.out.print(types[j].getName() + " ");
}
System.out.println("--------------");
}
/*运行结果:
* public com.at221.Person
0:
--------------
public com.at221.Person
1:
java.lang.String int java.lang.String --------------
*
*/
} @Test
public void test4(){
//获取类中的方法:
Class<?> class4 = Person.class;
Method methods[] = class4.getDeclaredMethods();
for(int i = 0; i < methods.length; i++){ int mod = methods[i].getModifiers();//获取函数的作用域;
Class<?> returnTypes = methods[i].getReturnType();//q就函数的返回值; System.out.print("method[" + i + "] :" + Modifier.toString(mod) + " " +
" " + returnTypes.getName() + " " + methods[i].getName() + " ( ");
Class<?> parameterType[] = methods[i].getParameterTypes();//获取函数的形参类型;
for(int j = 0; j < parameterType.length; j++){
System.out.print(parameterType[j].getName() + " ");
}
System.out.println(")"); }
}
/*运行结果:
* method[0] :public java.lang.String toString ( )
method[1] :public java.lang.String getName ( )
method[2] :public void setName ( java.lang.String )
method[3] :public int getAge ( )
method[4] :public void setAge ( int )
method[5] :public java.lang.String getNation ( )
method[6] :public void setNation ( java.lang.String ) *
*/
} class Person extends Creture implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private int age;
private String nation; public Person() {
super();
} public Person(String name, int age, String nation) {
super();
this.name = name;
this.age = age;
this.nation = nation;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getNation() {
return nation;
} public void setNation(String nation) {
this.nation = nation;
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", nation=" + nation + "]";
}
} class Creture{
public Creture(){
super();
} public void show(){
System.out.println("!!!i am a creture!!!");
}
}

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. Vuex详解

    一.什么是Vuex 官网解释如下: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex ...

  2. PCL点云分割(3)

    (1)Euclidean分割 欧几里德分割法是最简单的.检查两点之间的距离.如果小于阈值,则两者被认为属于同一簇.它的工作原理就像一个洪水填充算法:在点云中的一个点被“标记”则表示为选择在一个的集群中 ...

  3. 关于QQ邮箱有时候接受不到邮件的解决

    1.很可能是被当作垃圾邮件拦截了,这时候就要自己找回 2.首先点击邮箱首页 3.在最后一行倒数第三个选择自助查询 4.一般在收信查询或者删信查询里面,找到被删的邮件,添加到白名单就好了

  4. MySQL中TEXT与BLOB字段类型的区别

    这篇文章主要介绍了MySQL中TEXT与BLOB字段类型的区别,本文总结了6大区别,需要的朋友可以参考下   在MySQL中有两个字段类型容易让人感觉混淆,那就是TEXT与BLOB,特别是自己写博客程 ...

  5. Swagger UI 与SpringMVC的整合

    关于 Swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API. S ...

  6. WordPress中默认文本编辑器替换成百度UEditor编辑器

    1.下载 下载地址: http://pan.baidu.com/s/1geNk19L 2.解压放到plugins目录下 3.插件启用

  7. 在vue中使用highcharts的仪表图等扩展

    仪表图(”solidgauge“)在highcharts中属于扩展,单独引入highcharts使用仪表图会报错,需要在你的组件中做一谢其他的引入: // 最主要是这里模块的引入 很坑 import ...

  8. 基于EBNF语法的描述

    基于JavaCC的语法描述 使用JavaCC从token序列中识别出"语句" “表达式” “函数调用” 等语法单位的方法. 只要为JavaCC描述“语句” “表达式” “函数调用” ...

  9. vs2013在使用ef6时,创建模型向导过程中,四种模型方式缺少2种

    下载eftool,并安装 https://download.microsoft.com/download/2/C/F/2CF7AFAB-4068-4DAB-88C6-CEFD770FAECD/EFTo ...

  10. 理解vue之element-ui中的 <template slot-scope="scope">

    https://blog.csdn.net/tg928600774/article/details/81945140?utm_source=blogxgwz1