Java的反射机制的详细应用
- 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的反射机制的详细应用的更多相关文章
- Java 类反射机制分析
Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...
- Java的反射机制和动态代理
介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大的功能,可以原 ...
- Java核心反射机制
Java核心反射机制: 基本反射: 反射是一种动态类的处理机制,通过Class类来实现反射机制: Class类的基本信息: Module java.base Package java.lang Cla ...
- java的反射机制
一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
一.Java的反射机制 每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图: 其中
- java笔记--反射机制之基础总结与详解
一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象 ...
- JAVA的反射机制学习笔记(二)
上次写JAVA的反射机制学习笔记(一)的时候,还是7月22号,这些天就瞎忙活了.自己的步伐全然被打乱了~不能继续被动下去.得又一次找到自己的节奏. 4.获取类的Constructor 通过反射机制得到 ...
- java笔录---反射机制(1)
引言 为了方便记忆java的反射机制,在这里仔细的总结了一下.主要是怕以后忘记了,这样也方便回忆.因为最近利用空余时间深入的了解spring和Mybatis框架, 像spring中核心模块IO ...
- Java高新技术 反射机制
Java高新技术 反射机制 知识概要: (1)反射的基石 (2)反射 (3)Constructor类 (4)Field类 (5)Method类 (6)用反射方 ...
随机推荐
- #pragma multi_compile_fwdbase会增加很多个shader variants
#pragma multi_compile_fwdbase是unity内置的用于前向渲染的关键字快捷方式,它包含了前向渲染光照计算需要的大多数关键字,因此会被shader带来很多的变体. 下面这个简单 ...
- java执行post请求,并获取json结果组成想要的内容存放本地txt中
大概就是这样一个post 然后用户的需求是: 1.分析这个接口,实现1.1 获取到sentence, score字段值1.2 这个score值如果是<0.5,打印分值 情感倾向:0 ...
- 在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 ...
- springboot-thymeleaf
Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下三个极吸引人的特点: Thymeleaf 在有网络和无网络 ...
- 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 ...
- git rebase 的使用
rebase 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将学习什么是“rebase”,怎样使用“rebase”,并将展示该操作的惊艳之处,以及指 ...
- 织梦移动版页面点击下一篇获取不到id
1.首先找到网站目录下面的/include/arc.archives.class.php文件 2.找到837行的如下内容 if ( defined('DEDEMOB') ) { $mlink = 'v ...
- k8s(5)-拓展服务
在之前我们创建了一个部署,然后通过服务公开它.部署只创建了一个Pod来运行我们的应用程序.当流量增加时,我们需要扩展应用程序以满足用户需求. 通过更改部署中的副本数来完成扩展. 1. 拓展部署 这里将 ...
- thinphp5框架遇到 mkdir() Permission denied 解决办法
网站重装 直接复制本地程序文件 里面数据库链接信息要改成线上的 然后mysql apache 等都没有动 运行后出现错误 mkdir() Permission denied 这是由于runtime目录 ...
- Golang知识图谱
原:https://www.processon.com/view/link/5a9ba4c8e4b0a9d22eb3bdf0?from=timeline 百度脑图重制:http://naotu.bai ...