文章目录

  • 1.概念
  • 2.实例
    • 2.1获取属性
      • 2.1.1获取属性名
      • 2.1.2获取属性的权限修饰符
      • 2.1.3获取属性的类型
    • 2.2获取方法
      • 2.2.1获取方法名
      • 2.2.2获取限定值

1.概念

通过反射调用类的完整结构

  • 实现的全部接口
  • 所继承的父类
  • 全部的构造器
  • 全部的方法
  • 全部的field

2.实例

我们为Person类添加父类,Annotation,Interface
父类

public class Creature <T>{public double weigth;public void breath(){System.out.println("take a breath!");}

Annotation

import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {String value();
}

Interface

import java.io.Serializable;public interface MyInterface extends Serializable{}

Person类

@MyAnnotation(value="yyzhang")
public class Person extends Creature<String> implements Comparable,MyInterface{public String name;private int age;public int id;public Person() {super();} public Person(String name) {super();this.name = name;}public Person(String name, int age) {super();this.name = name;this.age = age;}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;}@MyAnnotation(value="0025")public void show(){System.out.println("This is class of Person");}public void display (String nation)throws Exception{System.out.println("my nation is:"+nation);}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}@Overridepublic int compareTo(Object o) {// TODO Auto-generated method stubreturn 0;}class Bird{}
}

2.1获取属性

2.1.1获取属性名

  • getFields()
  • getDeclaredFields()
    运行Test代码
public void Test1(){Class clazz =Person.class;Field[] fields=clazz.getFields();//只能获取到运行时类及其父类public的属性for(int i=0;i<fields.length;i++){System.out.println(fields[i]);}//获取运行时类本身声明的所有属性Field[] fields1=clazz.getDeclaredFields();for(Field f:fields1){System.out.println(f.getName());}}

结果如下

得到结论:

  • getFields()只能获取到运行时类及其父类public的属性
  • getDeclaredFields()只能获取到运行时类本身声明的所有属性

2.1.2获取属性的权限修饰符

从前面我们知道了getDeclaredFields()可以获取到类本身声明的变量名,但比起getFields()而言,只有变量名来说是远远不够的。

  • 获取每个属性的权限修饰符
    getModifiers(),返回值是int类型,1代表public,2代表private,0代表默认。
  • 再调用Modifier.toString()方法,即可变为字符串类型。
int i=f.getModifiers();
String str=Modifier.toString(i);

输出结果

2.1.3获取属性的类型

代码

Class Type=f.getType();
System.out.println(Type.getName()+" ");

运行结果

2.2获取方法

2.2.1获取方法名

  • getMethods()

获取运行时类及其父类中所有声明为public的方法
代码

public void test1(){Class clazz =Person.class;Method[] m1=clazz.getMethods();for(Method m:m1){System.out.println(m);}}

运行结果

无法获取private的方法

  • getDeclaredMethods()
    获取运行时类本身的所有办法
    代码
Method[] m2=clazz.getDeclaredMethods();for(Method m:m2){System.out.println(m);}

运行结果

2.2.2获取限定值

  • 注释
  • 权限修饰符
  • 返回值类型
  • 方法名
  • 形参列表
    代码
public void test2(){Class clazz =Person.class;Method[] m2=clazz.getDeclaredMethods();for(Method m:m2){//1.注释Annotation[] ann=m.getAnnotations();for(Annotation a: ann){System.out.print(a+" ");}//2.权限修饰符String str=Modifier.toString(m.getModifiers());System.out.print(str+" ");//3.返回值类型Class returnType=m.getReturnType();System.out.print(returnType.getName()+" ");//4.方法名System.out.print(m.getName());//5.形参列表System.out.print("(");Class[] params=m.getParameterTypes();for(int i=0;i<params.length;i++){System.out.print(params[i].getName()+i+" ");}System.out.print(")");System.out.println();}}

输出结果

通过反射获取类的完整结构(1)--属性方法相关推荐

  1. 反射获取类_新人也能看懂?如何使用 Java 反射?反射的用法及案例

    · 简介 Java Reflection,称为 Java 反射,是Java基础部分的一个比较难的点.Reflection(反射)是被视为动态语言的关键,通过反射机制,我们可以在运行时(runtime) ...

  2. 【Java 19】反射 - 反射机制概述、获取Class实例、类的加载与ClassLoader的理解、创建运行时类的对象、获取运行时类的完整结构、调用运行时类的指定结构、动态代理

    反射机制概述.获取Class实例.类的加载与ClassLoader的理解.创建运行时类的对象.获取运行时类的完整结构.调用运行时类的指定结构.动态代理 反射 1 Java反射机制概述 1.1 Java ...

  3. Java基础知识点__获取运行时类的完整结构

    通过反射获取运行时类的完整结构 Field,method,Construuuctor,Superclass,Interface,Annotation 实现的全部接口 继承的父类 全部的构造器 全部的构 ...

  4. Java知识点总结(反射-获取类的信息)

    Java知识点总结(反射-获取类的信息) @(Java知识点总结)[Java, 反射] 应用反射的API,获取类的信息(类的名字.属性.方法.构造器等) import java.lang.reflec ...

  5. Java基础-通过反射获取类的信息

    目录 1.获取Field 2.反编译Field 3.通过反射机制访问对象属性 4.可变长度参数 5.反射Method(了解) 6.反编译(了解) 7.反射机制调用方法 8.反射Constructor ...

  6. 通过反射获取类的所有属性和方法

    通过反射获取类的所有属性和方法  1    private void button1_Click(object sender, EventArgs e)  2        {  3          ...

  7. java反射获取实现类_Java介绍通过反射获取类的信息

    免费学习推荐:java基础教程 目录1.获取Field 2.反编译Field 3.通过反射机制访问对象属性 4.可变长度参数 5.反射Method(了解) 6.反编译(了解) 7.反射机制调用方法 8 ...

  8. python 元类的call_python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法...

    python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法 一, 内置函数补充 1,isinstance(obj,cls)检查 ...

  9. java获取运行时对象,java 面向对象(四十一):反射(五)反射应用二:获取运行时类的完整结构...

    我们可以通过反射,获取对应的运行时类中所有的属性.方法.构造器.父类.接口.父类的泛型.包.注解.异常等.... 典型代码: @Test public void test1(){ Class claz ...

  10. java反射怎么获取结构体_java反射-使用反射获取类的所有信息

    在OOP(面向对象)语言中,最重要的一个概念就是:万事万物皆对象. 在java中,类也是一个对象,是java.lang.Class的实例对象,官网称该对象为类的类类型. Class 类的实例表示正在运 ...

最新文章

  1. linux vi 批量修改某类字符串
  2. ubuntu18安装pytorch-gpu,一行conda命令安装,不需要单独安装cuda
  3. android 之ViewStub
  4. boost::enable_current_exception用法测试程序
  5. 修改数据表部分字段方法封装-及-动态生成对象并动态添加属性
  6. MYSQL 在当前时间加上或减去一个时间段
  7. php 获取js对象的属性值,js获取对象,数组所有属性键值(key)和对应值(value)的方法示例...
  8. Vue优化策略_项目发布_01
  9. java 初始化 静态变量,关于spring:Java初始化静态变量的时间顺序
  10. MyCat分布式数据库集群架构工作笔记0017---高可用_单表存储千万级_海量存储_垂直分库
  11. PPPoE工作原理与帧格式
  12. js中eval的用法
  13. keras调用自己训练的模型,并去掉全连接层
  14. 【SpringBoot_ANNOTATIONS】 生命周期 01 @Bean指定初始化和销毁方法
  15. Excel常用的功能
  16. python调用谷歌翻译_python调用谷歌翻译
  17. Jenkins配置slaver节点
  18. 微信内嵌浏览器打开手机浏览器下载APP(APK)的方法
  19. 技术人该如何选择未来职业方向?一起听听这几位美团同学的故事
  20. JS中的BOM、正则表达式、定时器

热门文章

  1. 大白话5分钟带你走进人工智能-第一节开篇介绍以及线性回归简介篇
  2. 使用systemd来构建你的服务
  3. NIO - Buffer
  4. 提升研发团队战斗力的方法
  5. 《Java技术》预备作业总结
  6. 民营银行是怎样炼成的:优中选优最终挑选出5家
  7. .NET 2.0 的压缩功能
  8. 关于SQL的重复记录问题
  9. Ubuntu Linux系统备份与还原命令技巧
  10. 职场江湖 告诉你如何八面玲珑