Java反射机制(详解)——获取class的三种方式

Java反射-Class对象功能概述及反射案例 Java反射中的Class对象概述及反射案例 阅读详情

一、反射机制概述

1、反射机制的作用:

​              通过Java语言中的反射机制可以操作字节码文件。

可以读和修改字节码文件(类似于黑客)

Java中,反射是一种强大的工具。

 2、Java反射机制相关类在:Java.lang.reflect

3、反射机制相关的重要的类有:

java.lang.class:代表整个字节码。class文件

java.lang.reflect.Method:代表字节码中的方法字节码

java.lang.reflect.Constructor:代表字节码中的构造方法字节码

java.lang.reflect.Field:代表字节码中的属性字节码

 4、必须掌握的重点就是:

  • - 通过反射机制访问对象的属性
  • - 通过反射机制调用方法
  • - 获取父类和父接口

其它的只需要了解就行。

二、获取class的三种方式

其最重要的一个作用就是可以动态地创建类的对象,获取方法如下

第一种方式:通过Class c1 = Class.forName("java.lang.String");

  • public static 类<?> forName(String className)
    • 返回与具有给定字符串名称的类或接口关联的类对象。

public class test03{
    public static void main(String args[]){
        /*Class.forName:
        *       1、静态方法
        *       2、方法的参数是String类型的
        *       3、字符串必须是一个完整的类名,即必须带有包名*/
        Class c1 = null;
        try {
            c1 = Class.forName("java.lang.String");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        System.out.println(c1);//c1代表String.class文件,或者说c2代表String类型
        //class java.lang.String
    }
}

第二种方式:通过Class x = 对象.getClass();

import java.util.Date;
public class test03{
    public static void main(String args[]){
        Class c1 = null;
        Class c2 = null;
        try {
            c1 = Class.forName("java.lang.String");
            c2 = Class.forName("java.util.Date");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        System.out.println(c1);
        
        //第二种方式:Java中任何一个对象都有一个方法:get.class()
        String s = "abc";
        Class x = s.getClass(); //x代表String.class文件,或者说x代表String类型
        System.out.println(x==c1);//true(==比较的是内存地址,说明两个的内存地址是一样的)
        Date date = new Date();
        Class y = date.getClass();
        System.out.println(y==c2);//true
 //(y和c2两个变量中保存的内存地址都是一样的,都指向方法区中的字节码文件)
    }
}

第三种方式:Java语言中 任何一种数据类型(包括基本数据类型),都有一个.Class属性

Class c= 任何类型.class;

import java.util.Date;
​
public class test03{
    public static void main(String args[]){
        Class c1 = null;
        Class c2 = null;
        try {
            c1 = Class.forName("java.lang.String");
            c2 = Class.forName("java.util.Date");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        System.out.println(c1);//c1代表String.class文件,或者说c1代表String类型
        //输出:class java.lang.String
        //第二种方式:Java中任何一个对象都有一个方法:get.class()
        String s = "abc";
        Class x = s.getClass(); //x代表String.class文件,或者说x代表String类型
        System.out.println(x==c1);//true(==比较的是内存地址,说明两个的内存地址是一样的)
        Date date = new Date();
        Class y = date.getClass();
        System.out.println(y==c2);//true
​
        //第三种方式:Java语言中 任何一种数据类型(包括基本数据类型),都有一个.Class属性
        Class z = String.class;
        Class w = int.class;
        System.out.println(z==x);//true
    }
}

 

在反射机制中,Class是一个非常重要的类,那么如何才能获取Class类呢?总共有以下三种方法可以获取

1)Class.forName("类的路径")

2)类名.Class

3)实例.getClass()

三、面试题

Java创建对象的方式总共有以下几种:

1)通过new语句实例化一个对象

2)通过反射机制创建对象

3)通过clone()方法创建对象

4)通过反序列化的方式创建对象

如果你觉得博主的文章的不错或者对你有帮助,可以点一个免费的关注支持一下博主,你的鼓励将是我创作的最大动力!! 

Java--反射机制原理、几种Class获取方式及应用场景 学习Java的小伙伴,可能听过,但是熟悉又有点陌生,本文主要是通过思考面试中经常被问到的几个的问题,再通过结合及进行讲解,加深自己对的认知和理解,也希望能帮助到有需要的小伙伴~ (1)Java反射机制()是Java语言中一种的能力,主要作用是~ 更简单点的说就是Java程序在运行时(动态)通过创建一个类的反射对象,再对类进行相关操作,比如:(2)一般情况下,我们使用某个类,都会知道这个类,以及要用它来做什么,可以直接通过实例化创建对象,然后使用这个对象对类进行操作,这个就属于~(3)而则是一开始并不知道要初 阅读详情

相关推荐

嵌入式SD/TF卡通用协议-SDIO协议

为了驱动SD卡,首先的第一步就是观察SD卡引脚接线情况,通常我们在画原理图时,都是使用的SD卡卡槽与MCU进行接线。SD卡可以使用SDIO协议和SPI协议进行通信,这里我们主要介绍SDIO协议。下图中的TF卡只是容量小一点的SD卡。以F1C100S为例,接线图如下所示:我们发现上图中的TF卡使用的协议为SDIO协议,主要有4根数据线,1根命令线,1根时钟线组合而成。为了驱动这个SD/TF卡我们就需要去了解SDIO协议的时序。

qq_1033275663的博客 3050

java反射获取Class对象的三种方式

*获取Class对象的三种方式1. Class.forName("全类名");2.类名.Class;3.对象.getClass();*/

qq_65142821的博客 830

使用SSE流式输出(Javaweb前后端实战)

SSE(Server-Sent Events)是一种在Web应用中实现单向实时通信的技术。通过SSE,服务器可以主动向客户端发送更新,而无需客户端不断发起请求。这对于需要实时更新的应用场景(如聊天应用、实时数据监控等)非常有用。(服务端单向传输客户端,长连接)

记得开心一点嘛的博客 1万+

反射——获取Class对象的三种方法,构造器、成员变量、方法

【代码】反射——获取Class对象的三种方法,构造器、成员变量、方法。

qq_64391254的博客 1382

基于Arduino与光电传感器的心率监测系统:从原理到实现的完整指南

光电式心率监测是一种基于光电容积脉搏波描记法(PPG)的非侵入式生命体征测量技术。其核心原理是利用特定波长光线照射皮肤组织,通过检测因血液容积周期性变化导致的反射光强微弱波动,来获取心率信息。这项技术的关键价值在于实现了低成本、便携化的连续生理参数监测,广泛应用于健康管理、运动科学及嵌入式系统教学领域。在工程实践中,信号处理算法(如移动平均滤波与动态阈值峰值检测)对提升测量精度至关重要。本文以Arduino平台为例,详细解析了如何集成MAX30102或Pulse Sensor Amped等光电传感器,结合T

weixin_33461476的博客 245

别再为格式发愁:safetensors转GGUF的三种高效方法及Ollama集成对比

本文详细介绍了将safetensors格式转换为GGUF格式的三种高效方法,包括llama.cpp原生转换、GGUF官方工具链和Transformers中转方案,并对比了它们在Ollama集成中的表现。文章还提供了实际项目中的踩坑经验和性能调优建议,帮助开发者快速掌握模型转换技术。

weixin_42651281的博客 640

【Java】反射获取类对象、构造器对象、成员变量对象、成员方法对象的方式

反射第一步 获取Class类对象,这样才能获取类中的所有属性、行为...; 获取Class类的三种方式 方式一:Class c1 = 类名.class; 方式二:Class c2 = 对象名.getClass age去调用set方法喊对象s去进行赋值(反射) 以前是s,setage(18)主动去赋值 关系反转(age调用get方法喊s对象获取年龄) 注解的作用 元注解:注解注解的注解 ...

m0_64210833的博客 3957

LRTimelapse Pro v7.0.0 激活版下载安装教程 (延迟摄影后期渲染)

LRTimelapse Pro 是一款优秀的高级延时摄影解决方案,使用将为用户提供最全面的工具和功能,从导入和组织您的延时摄影序列、视觉工作流程、在 LRTimelapse 中直接编辑和渲染、视觉去闪烁等等,功能齐全,可以使用 LRTimelapse Pro 编辑多个序列时显著提高您的效率,轻松在 LRTimelapse 中配置和使用色彩管理,进行长期延时编辑,在 LRTimelapse Pro 中使用长期工作流程。为延时编辑、关键帧、分级和渲染提供最全面的解决方案。

wyqshusan的博客 3464

java反射三:获取Class对象的3种方法与创建对象

1、获取方法 第一种方法 调用某个对象的getClass()方法。 Student s=new Student(); Class clazz=s.getClass(); 第二种方法 调用某个类的 class 属性来获取该类对应的 Class 对象 Class clazz=Student.class; 第三种方法 使用 Class 类中的 forName()静态方法,此种方法最安全、性能最好。 Class clazz=Class.forName("类的全路径"); //推荐使..

春风化雨 4655

Python爬虫实战:社交媒体热点事件追踪与情感分析可视化

本文探讨了如何利用Python爬虫技术从微博和Twitter等社交媒体平台抓取数据,进行热点事件追踪和情感分析,并通过可视化方式展示舆论情感变化。文章详细介绍了最新的爬虫技术、数据处理方法和可视化实现,提供了完整的代码示例,帮助读者构建自己的社交媒体分析系统。关键词:Python爬虫、社交媒体分析、情感分析、数据可视化、热点追踪爬虫框架:Requests-HTML、aiohttp、Twint(Twitter专用)数据处理文本处理:Jieba(中文分词)、NLTK(英文处理)情感分析。

2201_76125261的博客 1104

uni-app:实现APP设置手机闹钟+取消闹钟+响铃重复/文字等,帮用户设置好闹钟并备注文本,uni-app设置安卓系统闹钟和苹果ios系统闹钟(uniapp调用手机上的闹钟,详细示例代码demo)

uniapp设置安卓和iOS闹钟的插件,uni-app设置安卓系统闹钟,uniapp设置苹果ios系统闹钟,uniapp设置定时闹铃的完整解决方案,UniApp设置手机闹钟,uniApp如何设置手机闹铃,uniapp设置闹钟,设置闹钟提醒,uni-app设置安卓系统闹钟_通过uniapp设置原声闹钟,调用android系统闹钟,如何在App中启动系统闹钟,uniapp如何取消闹钟,通过调用ios的原生接口来设置手机闹钟,uni-app 调用手机闹钟功能,uniap调用ios系统闹钟,uniapp调用手机上的

✅ 精选推荐文章 4233

Java之反射机制(获取Class对象的三种方式)

Java之反射机制(获取Class对象的三种方式) 开发工具与关键技术:MyEclipse 10,java 撰写时间:2019-06-14 如何得到各个字节码对应的实例对象? 每个类被加载后,系统会为该类生成对应的 Class对象,通过 Class 对象可以访问到 JVM 中 的这个类, 3种方式: 1、调用某个类的class 属性获取 Class 对象,如 Date.class 会返回 Date...

weixin_44538423的博客 7392

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Java】〖反射机制〗获取Class类对象的三种方式

〖反射机制〗获取Class类对象的三种方式 Class.forName(“全类名”) 类名.class 对象.getClass()     同一个字节码文件(.class)在一次程序运行过程中,只会被加载一次,所以无论使用哪种方式,获取的Class类对象都是同一个 Class.forName(“全类名”) package test; public class Test { public static void main(String[] args) t

Need not to know 276

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java反射机制---获取Class的三种方式

注:本文为本人学习整理出的老杜课程的学习笔记,仅供学习和参考,不用做任何商业用途

飞机的博客 1155

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java反射之获取class对象,Java之反射机制(获取Class对象的三种方式)

Java之反射机制(获取Class对象的三种方式)开发工具与关键技术:MyEclipse 10,java作者:刘东标撰写时间:2019-06-14如何得到各个字节码对应的实例对象?每个类被加载后,系统会为该类生成对应的 Class对象,通过 Class 对象可以访问到 JVM 中 的这个类,3种方式:1、调用某个类的class 属性获取 Class 对象,如 Date.class 会返回 Date...

weixin_32315511的博客 380

java反射机制中获取class文件的三种方式

上面这个c1就代表Scanner的class文件,即Scanner.class文件,或者说c1代表Scanner类型。要操作一个类的字节码,首先需要获取到这个类的字节码,那么怎么获取到这个类的 java.lang.Class 呢?那这个getClass()和上面的forName()返回的class文件有什么不同吗?

yeTanya_的博客 514

java反射机制__获取Class类型对象的三种方式

/* 获取Class类型对象的三种方式 */ import java.util.Date; class Test07 { public static void main(String[] args) throws Exception{ //第一种方式: Class c1 = Class.forName("Employee"); //c1引用保存内存地址指向堆中的对象,该对象代表的是Em...

qq_42895153的博客 766

java反射机制获取class字节码对象的三种方式

获取类对象三种方式: source源代码阶段:Class.forname(“全类名”);//多用于读取配置文件加载类的时候 Class类对象阶段(加载进内存):类名.class //多用于参数传递的时候 Runtime运行时阶段:对象.getClass(); //多用于对象获取字节码的方式 同一个字节码文件(.class)在一次程序运行过程中只会加载一次 不论通过哪一种方式获取的class对象都是同一个,即在堆中的地址相同 测试代码 public class Reflect_getClass {

weixin_45625779的博客 421

java反射机制(获取class的三种方式)

首先建立一个bean类  public class testbean {    private String name; public String getName() {  return name; } public void setName(String name) {  this.name = name; }    public testbean()    {

jiangyifeia的专栏 923

Java反射机制(一):深入理解Class对象——从三种获取方式看JVM的类加载原理

反射是Java框架的基石,而Class对象是反射的入口。本文通过一个完整的可运行实验,演示了三种获取Class对象的方式,并验证了JVM中同一个类只有一份Class对象。从代码到原理,从警告处理到性能思考,适合正在学Java反射的大二学生。附完整代码和截图。

2601_95769388的博客 706

编程自学指南:java程序设计开发,反射机制动态创建对象,反射的核心作用,反射创建对象的三大核心步骤,反射的本质,获取 Class 对象的三种方式

编程自学指南:java程序设计开发,反射机制动态创建对象,反射的核心作用,反射创建对象的三大核心步骤,反射的本质,获取 Class 对象的三种方式

zl515035644的博客 379

java反射三种方法_面试必问:Java基础之反射

出自:https://blog.youkuaiyun.com/sinat_38259539/article/details/71799078反射是框架设计的灵魂,使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件,即字节码一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种...

weixin_39654245的博客 1259

JavaSE基础知识-反射机制-获取Class对象的三种方式

反射机制是 Java 动态编程的基石,核心在于通过Class对象解析类的元信息并动态操作。本文介绍了反射的三大作用、核心类、获取 Class 对象的三种方式及基本实践。

2503_91308956的博客 656

如何使用反射机制获取class对象

如何使用反射机制获取class对象 什么是反射? 反射是框架的灵魂,将类的各个组成部分封装为其他对象,这就是反射机制。 什么是框架? 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码 如何用反射机制获取class对象 使用反射机制获取class对象一共有三种形式 Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象,这里的全类名包括了项目中Class类所在的包路径 该方法多用于配置文件,将类名定义在配置文件中。读取文件,加载类 类名.class:通过类名的

weixin_51957998的博客 510
上一篇: Java——死锁、定时器(Timer)的实现代码
下一篇: Java反射机制——通过反射机制实例化对象(详解)
-今非昔比°
博客等级 码龄5年 213粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-今非昔比°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值