要想了解反射,首先要知道一个概念Class。这个Class可不是我们通常所说的class。
我们通常说String, Integer, ArrayList 这些都属于class,或者我们自己定义的类Point,Person都属于class。
这么多的类用一个类型表示就是Class。
比如一个Person类new出来的类型就是人,人有很多属性,比如身高,体重,性别,还有很多动作,比如走,跑,跳,这些是人的方法。
那这个Class类new出来的类型就是class,java的类也有很多属性,比如名称,所在的包,继承的父类,还有里面的成员变量,成员方法,构造函数等等。
我们new一个Person 会 Person person = new Person();
那我们获取一个Class要如何获取呢
java提供了三种方式可以获取一个类的Class,我们以String为例
1. Class clz = String.class;
2. String s = new String();
Class clz = s.getClass();
3. Class clz = Class.forName("java.lang.String"); 用过jdbc的看这种方式眼熟
这三种方式本质上没有区别,只不过前两种在编译时指定了获取Class的类型,而第三种方式在运行时可以通过参数指定Class的类型。
需要注意的一点是不光引用类型的变量有Class,基本数据类型也有Class
Class clz = int.class;
我们可以通过clz来判断该类型是不是基本的数据类型
clz.isPrimitive();
clz.getName(); //获取类的名字
clz.getPackage();//获取该类所在的包
我们还可以获取类的成员变量,成员方法,构造方法。
Person p = new Person();
Class clz = p.getClass();
Constructor[] con = clz.getConstructors();//只能访问类中声明为public的构造函数
//Constructor[] con = clz.getDeclaredConstructors();//能访问类中所有的构造函数
for (Constructor c : con) {
System.out.println(c.getName());
}
Field[] fis = clz.getFields();//只能访问类中声明为公有的字段,私有的字段它无法访问
//Field[] fis = clz.getDeclaredFields();//能访问类中所有的字段
for (Field c : fis) {
System.out.println(c.getName());
}
Method[] mes = clz.getMethods();//只能访问类中声明为公有的方法,私有的方法它无法访问,能访问从其它类继承来的公有方法
//Method[] mes = clz.getMethods();//能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法
for (Method m : mes) {
System.out.println(m.getName());
}
我们可以看出这些信息都是运行时动态获取的,只要加载了某个类的Class,就可以动态的获取这个类里面的所有属性。
分享到:
相关推荐
java反射入门 实现java反射的两种模式
文章目录Java基础之反射1 前言2 反射的基本概念3 reflection的工作机制4 构造Class对象方式5 Java反射机制操作的基础套路5.1 Java中的类反射5.2 Java反射机制获取类中构造方法的信息5.3 获取类中方法的信息6 Java...
代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。
java反射机制基础,是进入java反射机制的一把钥匙
java基础,反射枚举基础,自己总结的笔记。
java反射机制基础学习。Class、Method、Field
Java反射机制Java反射机制Java反射机制Java反射机制
本工程为Java反射机制 基础知识demo
详细地讲解java反射机制 看完基础至少更进一层楼
对于Java基础的巅峰——反射机制的详细描述,反射的入门学习帮手!
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。下面我们来一起学习一下吧
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...
JAVA基础--JAVA中的反射机制详解:本文档详细的介绍了Java的反射API的应用,希望能对各有所帮助
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
摘要 Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过...读者基础:具备Java 语言基础。 本文适用工具:JDK1.5 关键词: Introspection(内省、内观) Reflection(反射)
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。...
java反射学习的一些基础代码,简单使用反射的案例,为eclipse中的工作空间,编码GBK
- 反射基础篇文末总结 反射是一个非常重要的知识点,在学习Spring 框架时,Bean的初始化用到了反射,在破坏单例模式时也用到了反射,在获取标注的注解时也会用到反射······ 当然了,反射在日常开发中,我们...
Reflection is commonly used by programs which require the ability to examine or modify the runtime behavior of applications running in the Java virtual machine. This is a relatively advanced feature ...
完整版 Java基础入门教程 Java程序语言设计 07 网络编程 反射机制(共23页).ppt 完整版 Java基础入门教程 Java程序语言设计 07 网络编程 网络编程(共32页).ppt 完整版 Java基础入门教程 Java程序语言设计 07 网络...