目录

前言

一.反射及其相关概念

1.什么是反射?

2.反射的用途:

①分析类:

②查看并使用对象:

3.反射的应用场景:

4.类加载器:

类的加载时机:

5.Class对象:

联系:

二.获取Class对象的三种方法:(Three ways to get a Class object)

1.通过Object类的getClass() 方法:

2.通过类的静态属性:

3.通过Class类的静态方法:

4.代码演示:(注意注释)

三.获取构造器(Constructor)

1.前言(重要):

2.三种方式获取构造器对象:

方式一:

方式二:

方式三:

3.Constructor类的常用方法:

getName():

newInstance(Object...  initargs):(重点)

4.代码演示:(注释给我好好看)

5.输出结果及分析:

四.获取成员方法(Method)

1.前言:

2.三种方式获取Method对象:

方式一:

方式二:

方式三:

3.Method类的常用方法:

getName () :

invoke (Object obj, Object... args) :(invoke本身就是调用的意思)

4.代码演示(不理解多看注释):

5.输出结果及分析:

五.获取成员变量(Field)

1.前言:

2.Field对象:

3.三种方式获取Field对象:

方式一:

方式二:

方式三:

4.Field类的常用方法:

set (Object obj, Object value):

setAccessible (boolean flag):

5.代码演示:

6.输出结果及分析:

六.完结撒花❀❀❀❀❀


前言

大家好,今天给大家带来一篇详解JAVA反射基础的博文(将来会出JAVA反射进阶的讲解,准备放在JAVA进阶专栏),我会从字节码文件对象,构造器对象,方法对象,属性对象一一进行代码演示,由于Constructor,Method,和Field三者的用法大同小异,于是up决定重点把Constructor构造器这块儿讲得通透点,注意:注释内容也是重点,(注释内容也是重点,注释内容也是重点,)有利于大家举一反三。不要眼高手低,跟着up一块儿练习,看完就会用反射。学习反射基础需要有一定的javaSE基础,尤其是file类和Exception类。我之后会陆续出一系列专门讲javaSE基础的文章,把javaSE基础篇全讲一遍。所有文章都会适时补充完善,良工不示人以朴。PS:使用IEDA讲解,点击目录可以跳转。

一.反射及其相关概念

1.什么是反射?

反射指的是在程序运行的过程中分析类的一种能力。你可以这么理解,在程序运行过程中,我可以查看并使用其他类的构造器,方法和属性,这就是反射的能力。

光这么说还是过于抽象,我们直接上图片

如图,我们可以得知反射的第一步是获取字节码文件对象 。

2.反射的用途:

①分析类:

加载并初始化一个类(反射创建类的字节码文件对象时会加载类)

查看类的所有属性和方法(即Constructor, Method, Field,etc)

②查看并使用对象:

查看一个对象的全部属性和方法

使用对象的任意属性和方法

3.反射的应用场景

构建通用的工具

搭建具有高度灵活性和扩展性的系统框架。

4.类加载器:

类加载器,(ClassLoader

.java的源文件经过javac.exe编译后,会生成.class的字节码文件,而类加载器负责将类的字节码文件(.class)加载到内存中,并生成对应的Class对象。

类的加载时机:

①创建类的实例时:

eg:Dog dog = new Dog();

注意:一个类的字节码文件,只会被加载一次

②访问类的静态成员时:

eg:Collections.shuffle();

​​​​​​​        ③初始化类的子类时:(要先加载其父类)

eg:假设Honor类继承自Phone类,

即:class Honor extends Phone {

Honor h = new Honor();

}//那么,在加载子类Honor类之前,必须先加载它的父类Phone类。

        ​​​​​​​        ④反射方式创建类的Class对象时:(重点)

                eg:class c = Class.forName("类的正名");    //类的正名 = 包名 + 类名。                                      forName() 方法我们后面马上讲。

5.Class对象:

Class对象即java.lang.Class类的对象,也叫字节码文件对象每个Class对象对应一个字节码文件。

联系:

①如果.java的源文件中只有一个类,那么一个.java的源文件对应一个.class的字节码文件,对应一个Class对象。

②如果.java的源文件中不止一个类,那么编译后,每一个类都对应一个字节码文件。

二.获取Class对象的三种方法:(Three ways to get a Class object)

1.通过Object类的getClass() 方法:

Class c = 对象名.getClass();        //用Class类型(首字母大写) 来作接收,即得到一个Class对象。

        ​​​​​​​        注意:这里要用对象名.  的形式来调用,所以一定要先创建一个对象。

2.通过类的静态属性:

Class c2 = 类名.class;        //eg:Integer.class

3.通过Class类的静态方法:

Class c3 = Class.forName("类的正名");        //类的正名 = 包名 + 类名。中间用点'.'来连接

4.代码演示:(注意注释)

                我们先在包下新建一个类,创建一个标准的javabean学生公共类。

package knowledge.reflect;public class Student {//私有属性private String name;private String sex;private int age;//空参构造public Student() {}//带参构造public Student(String name, String sex, int age) {this.name = name;this.sex = sex;this.age = age;}//setter,getter方法public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

好的,创建好学生类后,借机再说一下类的正名。注意看,这个学生类最顶部的那一串去掉头尾,即去掉package和分号就是包名,所以up创建的这个学生类的包名就是knowledge.reflect,类的正名是包名+类名,所以这个学生类的正名就是knowledge.reflect.Student

java 反射基础 万字详解(Class-Constructor-Method-Field一条龙)相关推荐

  1. java 多线程基础 万字详解(通俗易懂)

    目录 一.前言 二.定义 1.进程 : 2.线程 : 3.单线程与多线程 : 4.并发与并行 : 三.线程的创建 1.创建线程的两种基本方式 : 1° 继承Thread类,并重写run方法 1.5° ...

  2. java反射机制深入详解_Java反射机制深入详解

    原标题:Java反射机制深入详解 一.概念 反射就是把Java的各种成分映射成相应的Java类. Class类的构造方法是private,由JVM创建. 反射是java语言的一个特性,它允程序在运行时 ...

  3. java反射机制深入详解_Java基础与提高干货系列——Java反射机制

    前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来.那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现. 正文 Java反射机制定义 Java反射机制 ...

  4. java IO流基础 万字详解(从拷贝文件到模拟上传头像)

    目录 一.前言: 二.IO流简介: 1.什么是IO流? 2.IO流能干什么? 3.IO流的分类: 4.IO流体系: 三.字符流读写文件: 1.普通字符流读取文件: 前言: ①以单个字符读取: 代码演示 ...

  5. java反射机制原理详解_java反射机制的详细讲解

    一 , 什么是java反射机制? JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象 ...

  6. Java反射机制(详解如何使用反射)

    1.定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的 ...

  7. java反射原理_java反射原理是什么?java反射机制原理详解

    前面给大家介绍了一下什么是java反射机制,那么下面要给大家介绍的就是java反射机制的原理,那么它的原理究竟是怎样的呢?下面就通过下面来做一下详细的了解吧. 首先我们再来介绍一下java反射机制. ...

  8. java static关键字 万字详解

    目录 一.为什么需要static关键字: 二.static关键字概述 : 1.作用 : 2.使用 : 三.static修饰成员变量详解 : 1.特点 : 2.细节 : ①什么时候考虑使用static关 ...

  9. Java反射——Type接口详解

    目录 Type的简介 Type的获得 Type的分类 1,Class 2,ParameterizedType 3,GenericArrayType 4,WildcardType 5,TypeVaria ...

最新文章

  1. c# 使用Autodesk design Review API
  2. 开发Eureka Server
  3. python利用写模块_使用C++编写python扩展模块
  4. mysql too many openfiles解决
  5. TableLayoutPanel闪烁问题解决
  6. 拥有Mac的你怎么可以不知道Downie,Downie4最新更新「安装与使用」
  7. CSS样式的使用(CSS选择器、CSS语法、CSS常见样式):
  8. linux命令取ip,linux下命令取IP地址的多种方法
  9. java学习心得---循环结构
  10. matlab数字图像处理实验报告
  11. vue3笔记(乱七芭蕉更新中)
  12. 【Android】使用deviceowner 配置手机设置 (Monkey自动化测试删去状态栏、设定输入法、静音、APP自动权限授予、Kiosk模式打开)
  13. PMP复习整理考点篇【12】--- 激励理论
  14. 中南大学计算机学院王瑞,中南大学优秀毕业生.xls
  15. 学信网学位认证报告在哪
  16. 黑白激光打印机出现重影故障的原因与解决办法
  17. ROS操作系统快速入门
  18. python程序员可以从哪些平台接单赚钱?看完我给你介绍的这几个平台,没学过python的你也能边学习边赚钱
  19. ROS2 Foxy 安装
  20. 华为三星非洲智能手机大战 低价为王

热门文章

  1. 新华三又获一奖“中国IT服务领军企业”,专业能力再受认可
  2. Topic 6 SCI 文章之计数变量泊松回归
  3. win10电脑启动QQ/TIM遇到QQ安全防护进程,打不开TIM/QQ解决方法
  4. 哈工大计算机学硕录取,哈工大计算机学院243人进复试241人录取,仅刷2人,杠杠的!...
  5. 基于VC6.0的控制台作图--动画和双缓冲技术
  6. 视频会议电视终端网络部署场景与操作步骤
  7. android 页面退出动画,android Activity打开和关闭动画
  8. Opencv项目实战:04 全景图片拼接
  9. Data URL 图片内联 简介
  10. 容智信息与富士胶片商业创新,赋能飞利浦实现流程自动化!