Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java:反射入门学习

Java:反射入门学习

作者头像
Breeze.
发布于 2022-06-05 04:16:39
发布于 2022-06-05 04:16:39
26000
代码可运行
举报
运行总次数:0
代码可运行

介绍反射及作用

  • 反射(Reflect)是在运行时动态访问类与对象的技术
  • 反射是JDK1.2版本后的高级特性,隶属于java.lang.reflect
  • 大多数Java框架都基于反射实现参数配置、动态注入等特性

反射四个核心类

Class类

  • Class是JVM中代表“类和接口”的类
  • Class对象具体包含了某个特定类的结构信息
  • 通过Class对象可获取对应类的构造方法/方法/成员变量

Constructor构造方法类

  • Constructor类是对Java类中的构造方法的抽象
  • Constructor对象包含了具体类的某个具体构造方法的声明
  • 通过Constructor对象调用带构造方法创建对象

Method方法类

  • Method对象值代某个类中的方法的描述
  • Method对象使用classObj.getMethod()方法获取
  • 通过Method对象调用指定对象的应用方法

Field成员变量类

  • Field对应某个具体类中的成员变量的声明
  • Field对象使用classObj.getField()方法获取
  • 通过Field对象可为某对象成员变量赋值/取值

#### getDeclared系列方法说明

  1. getDeclaredConstructor(s) | Method(s) | Field(s)获取对应对象
  2. getConstructor(s) | Method(s) | Field(s)只能获取public对象
  3. 访问非作用域内构造方法、方法、成员变量,会抛出异常

产生异常

  1. ClassNotFoundException:类名与类路径书写错误时抛出“累无法找到”异常
  2. InstantiationException:非法访问异常,当在作用域外访问对象方法或成员变量时抛出
  3. IllegalAccessException:当对象无法被实例化,抛出“实例化异常”
  4. NoSuchMethodException:没有找到与之对应的格式的方法
  5. InvocationTargetException:当被调用方法的内部抛出了异常而没有被捕获时
  6. NoSuchFieldException:没有找到成员变量时跑出的异常

反射在项目中的应用

设置国家化配置文件config.properties

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
language=pers.hua.i18n.Zhcn

创建国家化接口并调用接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface I18N {
    public String say();
}
public class Zhcn implements I18N {
    @Override
    public String say() {
        return "生命不息奋斗不止!";
    }
}

创建Application

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Application {
    public static void main(String[] args){
        public static void say() {
            Properties properties = new Properties();
            String configPath = Application.class.getResource("/config.properties").getPath();
            try {
                configPath = new URLDecode().decode(congigPath,"UTF-8");
                properties.load(new FileInputStream(configPath));
                String language = configPath.getProperty("language");
                I18N i18n = (I18N)class.forName(language).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java入门(15)-- 反射
通过Java反射机制,可以在程序中访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改描述Java对象本身信息的功能。Java反射机制的功能十分强大,在java.lang.reflect包中提供了对该功能的支持。
爱学习的程序媛
2022/04/07
2620
Java入门(15)-- 反射
Java进阶-反射
来学习一下Java的反射,通过Class实例获取class信息的方法称为反射(Reflection),内容如下
reload
2024/03/01
2740
Java进阶-反射
反射,反射配置文件
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Twcat_tree
2022/11/30
3950
【Java学习】反射和枚举详解
可以看出,使用getDeclaredConstructors()时,不论构造方法的权限修饰符是什么,都可以获取到
2的n次方
2024/10/15
1940
【Java学习】反射和枚举详解
Java从入门到精通十八(反射)
反射机制是什么?是通过字节码文件找到其中的一个类,然后也可以找到类中的相关属性等。 我们正常一般的思维是编写java代码,然后代码会被编译为字节码文件。而我们的方法都是 自己在代码中写的,现在这个机制可以通过字节码找到代码中的属性。这就是反射机制的特 点。
兰舟千帆
2022/07/16
4550
Java从入门到精通十八(反射)
反射-详细概念
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对与任意一个对象,都能够调用他的任意一个方法和属性,这种动态的获取的信息以及动态调用对象的方法的功能成为java反射机制,
Java架构师必看
2021/05/14
3090
Java学习之反射篇
今天简单来记录一下,反射与注解的一些东西,反射这个机制对于后面的java反序列化漏洞研究和代码审计也是比较重要。
全栈程序员站长
2022/07/13
2930
java高级反射和注解
(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))
软件小生活
2021/08/13
6580
java高级反射和注解
Java知识点——反射初识以及基本API
.class字节码文件 .java文件 通过 javac编译工具生成对应的.class字节码文件 使用JDK中提供的反编译工具,可以看到.class文件中包含 Class 完整的包名.类名 Field 成员变量,成员变量的名字和成员变量的数据类型[如果是引用数据类型,也是 完整的包名.类名] Method 成员方法,方法权限修饰符,返回值类型,方法名,形式参数列表数据类型
用户7073689
2020/03/17
5260
Java反射知识
(2)Class类对象阶段:*.class字节码文件被类加载器加载进内存,并将其封装成Class对象(用于在内存中描述字节码文件),Class对象将原字节码文件中的成员变量抽取出来封装成数组Field[],将原字节码文件中的构造函数抽取出来封装成数组Construction[],在将成员方法封装成Method[]。当然Class类内不止这三个,还封装了很多,一般常用的就这三个。
乐心湖
2020/07/31
4390
Java反射知识
Java反射:Web学习的灵魂
我们将类分为三部分,成员变量,构造方法,成员方法,代码编译后,变成了字节码文件(.class文件)而万物皆对象,所以在字节码文件中,又将这三部分分别整合成对象,所以我们得出结论:
BWH_Steven
2019/08/09
3470
Java反射机制
| 方法名 | 说明 |
忆愿
2024/07/31
1230
Java反射机制
Java反射(一)反射机制
2.这样的需求在学习框架时特别多,即通过外部文件配置,在不修改源码情况下,来控制程序,也符合设计模式的 ocp 原则(开闭原则)
浅辄
2022/11/23
1.2K0
Java反射(一)反射机制
Java 反射机制详解
将类的各个组成部分封装为其他对象的过程就叫做 反射,其中 组成部分 指的是我们类的 成员变量(Field)、构造方法(Constructor)、成员方法(Method)。
村雨遥
2023/05/30
2480
Java 反射机制详解
Java 反射机制详解:入门、使用、实例
将类的各个组成部分封装为其他对象的过程就叫做 反射,其中 组成部分 指的是我们类的 成员变量(Field)、构造方法(Constructor)、成员方法(Method)。
村雨遥
2021/04/21
4750
Java---类反射(1)---类反射入门和基础
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
谙忆
2021/01/21
6080
Java---类反射(1)---类反射入门和基础
一起学JAVA 反射学习(超详细)
Reflection(反射) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,也有称作“自省”。 反射非常强大,它甚至能直接操作程序的私有属性。我们前面学习都有一个概念,被private封装的资源只能类内部访问,外部是不行的,但这个规定被反射赤裸裸的打破了。 反射就像一面镜子,它可以在运行时获取一个类的所有信息,可以获取到任何定义的信息(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分。
全栈程序员站长
2022/07/01
3640
一起学JAVA 反射学习(超详细)
JAVA入门学习十三
类加载概述:当程序要使用某个类时候,如果该类还未被加载到内存之中,则系统会通过加载、连接、初始化来实现对这个类进行初始化
全栈工程师修炼指南
2020/10/23
5880
20 Java 使用反射(Reflection) 和内省技术
反射(Reflection)是程序的自我分析能力,通过反射可以确定类有哪些方法、有哪些构造方法以及有哪些成员变量。Java语言提供了反射机制,通过反射机制能够动态读取一个类的信息;能够在运行时动态加载类,而不是在编译期。反射可以应用于框架开发,它能够从配置文件中读取配置信息动态加载类、创建对象,以及调用方法和成员变量。
acc8226
2022/05/17
4770
java基础之反射
Contents java基础巩固笔记(1)-反射 反射 反射基本使用 数组的反射 配置文件加载 内省(Instropector) & JavaBean 反射 反射:将类的属性和方法映射成相应的类。 反射基本使用 获取Class类的三种方法: 类名.class 对象名.getClass() Class.forName("要加载的类名") 根据API写就行了,大致流程就是: 用上述三种方式之一获取特定类的Class类,即该类对应的字节码 调用Class对象的getConstructor(Cla
xiangzhihong
2018/02/01
7960
相关推荐
Java入门(15)-- 反射
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验