Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java学习笔记(基础篇)—反射

java学习笔记(基础篇)—反射

作者头像
chlinlearn
发布于 2019-07-27 10:27:04
发布于 2019-07-27 10:27:04
46000
代码可运行
举报
文章被收录于专栏:java老实人java老实人
运行总次数:0
代码可运行

一、 反射 :自描述或者自定义

一个类或者对象通过反射可以获得自身的对象,该对象是一个java.lang.Class 的对象(就像一个镜像文件)。一个对象或者类获得自身的Class对象的过程称为反射。 java.lang.Class:是类镜像,镜像对象Class类镜像的作用可以获取该类和该对象的所有属性,方法和构造器,以及属性方法和构造器修饰符,修改私有属性的值。调用方法和调用构造器等等。 Class----实例化----->class-----实例化----->对象 对象------抽象化----->class------抽象化----->Class 抽象:具有相同属性和行为抽象出来

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public final class Class{
      Field[] fileds;
      Method[] methods;
      Constructor[] cons;
}
反射API:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.lang.Class
java.lang.reflect.Field
java.lang.reflect.Method
java.lang.reflect.Array
java.lang.reflect.Constructor

class Person{} Person创建100个对象,创建多少个Person的Class类型对象?

1个,类加载的时候创建Person的Class类型对象。

通过反射操作的步骤:

1)获取类镜像(Class对象),三种方式 a)Class.forName(String className) b)数据类型.class c)对象.getClass() 2)通过类镜像实例化对象(不通过new方式创建对象)

Object obj=类镜像对象.newInstance()。

​ 默认会调用class类的无参构造器。

3)通过实例化对象操作属性,方法,构造器 a)获取所有的属性(属性名和修饰符和数据类型)。 b)获取所有的方法(方法名和修饰符和返回值和参数列表) c)获取所有构造器(名字和修饰符和参数列表) d)修饰属性的值 e)调用方法:invoke() f)调用指定构造器创建的对象

什么时候用反射:

1)在运行的时候才知道类名 2)在运行的时候才知道属性名 3)在运行的时候才知道方法名

反射:

​ 1) 确定一个对象的class ​ 2) 可以获得一个类的修饰符、字段、方法、构造器和父类。 ​ 3) 获得接口声明的常量和方法。 ​ 4) 创建Class的实例,直到运行时才获得。 ​ 5) 运行前即使字段名字不知道,可以到程序运行时获得和修改这些字段的值。 ​ 6) 运行前即使对象的方法名不知道,可以到程序运行时触发调用该方法。 ​ 7) 运行前创建了一个大小和元素都未知的新数组, ​ 可以到运行时修改数组的元素。

反射的用途:

1)修改私有属性的值 2)调用任何对象的任何方法 3)不通过new方式创建对象

反射用途的注意:

1)反射可以让我们利用这个Class对象来获取和修改私有的变量和方法,不通过共有的方法去获得(原来我们例子都是通过一个public的方法来设置和获取私有的变 量),可以破坏数据的封装性。 2)反射机制通过在运行时探查字段和方法,从而可以帮助写出通用性很好的程序,这项能力对系统编程来说特别有用,但它并不适合于应用编程。而且,反射是脆弱的——编译不能帮助你发现编译错误,任何错误在运行时被发现并且都会导致异常。导致代码不安全。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
工欲善其事必先利其器,反射你真的掌握了吗?本文详细给你讲解,没时间看的建议收藏!!!
  本文继续来给大家巩固基础,详细的来给大家介绍下反射的原理。Java Reflection
用户4919348
2021/06/22
3340
工欲善其事必先利其器,反射你真的掌握了吗?本文详细给你讲解,没时间看的建议收藏!!!
java之反射机制
假设现在我们有一张动漫的图片,我们通过这张图片,在大脑中搜索有关记忆,就清楚这张图片是什么动漫里的谁;假设我们现在有一个名字,在大脑中搜索有关记忆,就自然而然地想到了该名字人物的具体形象,这种思维过程就是反射。
西西嘛呦
2020/08/26
3170
Java 反射深入浅出
Java Reflection(反射) 被视为动态语言的关键,Java并不是动态语言,但因为反射Java可以被称为准动态语言
Java_慈祥
2024/08/06
1510
Java 反射深入浅出
Java基础(二十三):反射机制
(1)class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类 (2)interface:接口 (3)[]:数组 (4)enum:枚举在这里插入代码片 (5)annotation:注解@interface (6)primitive type:基本数据类型 (7)void
Java微观世界
2025/01/21
1140
Java基础(二十三):反射机制
Java---类反射(1)---类反射入门和基础
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
谙忆
2021/01/21
5740
Java---类反射(1)---类反射入门和基础
Java学习之反射篇
今天简单来记录一下,反射与注解的一些东西,反射这个机制对于后面的java反序列化漏洞研究和代码审计也是比较重要。
全栈程序员站长
2022/07/13
2780
初探java安全之反射(1)
上次和亮去接了个渗透的比赛,结果我还是啥都不会,当时意识到现在大多数的网站的后端都基本上是 java 和 go了,想 php 的基本上比较少了,php 在以后肯定会没落的,java不想 php 那样 简单易用且灵活,所以很有必要系统性的学习一下java安全。
pankas
2022/10/08
2700
初探java安全之反射(1)
Java-反射
哈喽!大家好,我是小简。今天开始学习《Java-反射》,此系列是我做的一个 “Java 从 0 到 1 ” 实验,给自己一年左右时间,按照我自己总结的 Java-学习路线,从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!
小简
2023/01/04
4030
Java-反射
java反射机制原理剖析
当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。我们认为java并不是动态语言,但是java有一个非常突出的动态相关机制,俗称:反射。
周陆军博客
2023/04/09
4610
深入理解 Java 反射:Class (反射的入口)
张拭心 shixinzhang
2018/01/08
1.6K0
深入理解 Java 反射:Class (反射的入口)
Java反射详解
这样的需求在学习框架时特别多,即通过外部文件配置,在不修改源码情况下。来控制程序,也符合设计模式的ocp原则(开闭原则:不修改源码,扩容功能)。
timerring
2023/05/24
3380
Java反射详解
java反射原理
  简单来说,反射可以帮助我们在动态运行的时候,对于任意一个类,可以获取其所有的方法(包括public、protected、private和默认状态的),所有的变量(包括public、protected、private和默认状态的)。
Java阿呆
2020/11/04
5950
java反射原理
Java进阶-反射
来学习一下Java的反射,通过Class实例获取class信息的方法称为反射(Reflection),内容如下
reload
2024/03/01
2360
Java进阶-反射
java的反射(reflection)机制_腹部反射区图解
在运行时,判断任意一个类的完整结构,比如属性,方法,内部类,实现接口等
全栈程序员站长
2022/11/18
2800
java的反射(reflection)机制_腹部反射区图解
Java 反射机制详解
对于一般的开发者,很少需要直接使用 Java 反射机制来完成功能开发,但是反射是很多框架譬如 Spring, Mybatis 实现的核心,反射虽小,能量却很大。
子晋
2022/01/18
4110
Java 反射机制详解
『设计模式』反射,反射程序员的快乐!为什么我老是加班?为什么我工资不如他多?原来是我不懂反射!
Java是一门准动态语言,是因为存在反射机制,如果你不会是不是就等于白学了? 看完不会,请评论,我亲自给你解释,嘻嘻!
风骨散人Chiam
2020/10/28
1.2K0
JAVA之反射知识点整理
反射是被视为动态语言的关键,反射机制能够让程序在执行期间借助Reflection API获取任何类的内部信息,并能直接操作任意对象的内部属性和方法
大忽悠爱学习
2021/11/15
2420
java实现反射_java五大原则
在java的面向对象编程过程中,通常我们需要先知道一个Class类,然后new 类名()方式来获取该类的对象。也就是说我们需要在写代码的时候(编译期或者类加载之前)就知道我们要实例化哪一个类,运行哪一个方法,这种通常被称为静态的类加载。
全栈程序员站长
2022/09/23
4270
java实现反射_java五大原则
【JAVA-Day23】Java反射的五大神奇妙用,令人惊叹
在本篇博客中,我将以默语博主身份,以深入研究和扩展的方式,探讨Java反射的五大神奇妙用,这些应用令人惊叹。我们将详细讨论反射的概念,如何操作类、属性、方法、构造器以及注解,最后提供完整的示例代码供您参考。
默 语
2024/11/20
770
【JAVA-Day23】Java反射的五大神奇妙用,令人惊叹
Java 反射机制
【1】在运行时判断任意一个对象所属的类。 【2】在运行时构造任意一个类的对象。 【3】在运行时判断任意一个类所具有的成员变量和方法。 【4】在运行时调用任意一个对象的成员变量和方法。 【5】生成动态代理。
Java架构师必看
2021/05/14
3520
相关推荐
工欲善其事必先利其器,反射你真的掌握了吗?本文详细给你讲解,没时间看的建议收藏!!!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档