Java笔记042-反射章节练习

news2025/1/19 14:15:14

反射章节练习

  • 练习1:通过反射修改私有成员变量

  1. 定义PrivateTest类,有私有name属性,并且属性值为helloKitty
  2. 提供getName的公有方法
  3. 创建PrivateTest的类,利用Class类得到私有的name属性,修改私有的name属性值,并调用getName()的方法打印name属性值

Exercise01.java

package com22.exercise;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @ClassName Exercise01
 * @Description 通过反射修改私有成员变量
 * @Author 甲柒
 * @Date 2023/9/13 20:11
 * @Version 1.0
 **/
public class Exercise01 {
    public static void main(String[] args) throws Exception {
        /*
          定义PrivateTest类,有私有name属性,并且属性值为helloKitty
          提供getName的公有方法
          创建PrivateTest的类,利用Class类得到私有的name属性,修改私有的name属性值,并调用getName()的方法打印name属性值
         */
        Class<?> aClass = Class.forName("com22.exercise.PrivateTest");
        Object o = aClass.newInstance();
        Field name = aClass.getDeclaredField("name");
        name.setAccessible(true);
        System.out.println(name.get(o));//只得到private的name
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++");

        //1.得到PrivateTest类对应的Class对象
        Class<PrivateTest> privateTestClass = PrivateTest.class;
        //2.创建对象实例
        PrivateTest privateTestObj = privateTestClass.newInstance();
        //3.得到name属性对象
        Field name1 = privateTestClass.getDeclaredField("name");//name属性是private
        //4.暴破
        name1.setAccessible(true);
        name1.set(privateTestObj, "加菲猫");
        //5.得到getName方法对象
        Method getName = privateTestClass.getMethod("getName");
        //6.因为getName() 是public,所有直接调用
        Object invoke = getName.invoke(privateTestObj);
        System.out.println("name属性的值=" + invoke);//加菲猫
    }
}

class PrivateTest {
    private String name = "helloKitty";

    //默认无参构造器
    public String getName() {
        return name;
    }
}

运行结果

  • 练习2:利用反射和File完成以下功能

  1. 利用Class类的forName方法得到File类的class对象
  2. 在控制台打印File类的所有构造器
  3. 通过newInstance的方法创建File对象,并创建E:\mynew.txt文件

提示:创建文件的正常写法如下:

File file = new File("d:\\aa.txt");

file.createNewFile();

Exercise02.java

package com22.exercise;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @ClassName Exercise02
 * @Description 利用反射和File完成以下功能
 * @Author 甲柒
 * @Date 2023/9/13 20:55
 * @Version 1.0
 **/
public class Exercise02 {
    public static void main(String[] args) throws Exception {
        /**
         * 利用Class类的forName方法得到File类的class对象
         * 在控制台打印File类的所有构造器
         * 通过newInstance的方法创建File对象,并创建E:\java_study\011-study\src\com22\exercise\myNew.txt文件
         */
        //1.Class类的forName方法得到File类的class对象
        Class<?> fileCls = Class.forName("java.io.File");
        //2.得到所有构造器
        Constructor<?>[] declaredConstructors = fileCls.getDeclaredConstructors();
        //遍历输出
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println("File的所有构造器=" + declaredConstructor);
        }
        //3.单独得到public java.io.File(java.lang.String)
        Constructor<?> declaredConstructor = fileCls.getDeclaredConstructor(String.class);
        String fileAllPath = "E:\\java_study\\011-study\\src\\com22\\exercise\\myNew.txt";
        Object file = declaredConstructor.newInstance(fileAllPath);//创建File对象

        //4.得到createNewFile的方法对象
        Method createNewFile = fileCls.getMethod("createNewFile");
        createNewFile.invoke(file);//创建文件,调用的是createNewFile
        //file的运行类型就是File
        System.out.println(file.getClass());
        System.out.println("创建文件成功~~~~" + fileAllPath);
    }
}

运行结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1007734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

过拟合、欠拟合、泛化误差、训练误差

模型容量的影响&#xff1a; 泛化误差&#xff1a; 当训练的模型的容量过了最优点时&#xff0c;泛化误差反而升高&#xff0c;这是由于模型过于关注细节导致&#xff0c;模型也同时记住噪声&#xff1b;当拿来一个真的数据时&#xff0c;模型会被一些无关紧要的细节所干扰。 …

Python数据分析 — 数据分析概念、重要性、流程和常用工具

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。Python数据分析是利用Python编程语言进行数据处理、转换、清洗、可视化和建模的过程。Python在数据科学领域非常流行&#xff0c;有许多强大的库和工具可供使用&#xff0c;例如NumPy、Pandas、Matplotlib和Scikit-learn等…

问道管理:iPhone15系列发布 星闪技术快速商用

9月12日&#xff0c;沪指盘中窄幅震动收拾&#xff0c;创业板指午后下探。到收盘&#xff0c;沪指跌0.18%报3137.06点&#xff0c;深成指微跌0.08%报10373.99点&#xff0c;创业板指跌0.59%报2051.04点&#xff1b;两市算计成交7083亿元&#xff0c;较此前一日削减1329亿元&…

UPS电源UL1778认证,不间断电源系统ul1778认证

UPS电源UL1778认证&#xff0c;不间断电源系统ul1778认证 UL认证-不间断电源系统ul1778认证范围&#xff1a; 不间断电源系统&#xff1a;UPS即不间断电源(Uninterruptible Power Supply)&#xff0c;是一种含有储能装置的不间断电源。主要用于给部分对电源稳定性要求较高的设…

JavaScript与jQuery(上篇)

JavaScript与jQuery笔记&#xff08;上篇&#xff09; 一、引入JavaScript二、快速入门三、数据类型快速过一遍四、严格检查模式strict五、详解字符串六、数组详解七、对象详解八、流程控制&#xff0c;判断&#xff0c;循环九、Map、Set集合&#xff08;ES6才出来的&#xff…

FD1257H 带有嵌入式霍尔传感器的智能电机驱动器芯片

FD1257H 带有嵌入式霍尔传感器的智能电机驱动器芯片 特征 电机驱动器与集成霍尔传感器 锁关闭保护和自动重启功能 精确的磁开关阈值 “软开关“相位切换技术&#xff0c;以减少振动和声噪声 热关闭保护 可在SIP-4L包 为12V系统 一般说明 FD1257H是一个嵌入式霍尔传感器的单线圈…

帆软FineReport决策报表Tab实现方案

最近有个需求是要做首页展示&#xff0c;为了减少前端工作量&#xff0c;利用采购的帆软FineReport来实现&#xff0c;记录过程&#xff0c;方便备查。 需求 做个Tab页&#xff0c;实现多个页切换。 方案一、利用帆软自带切换 帆软自带的有Tab控件&#xff0c;可实现切换&a…

多线程案例(1) - 单例模式

目录 单例模式 饿汉模式 懒汉模式 前言 多线程中有许多非常经典的设计模式&#xff08;这就类似于围棋的棋谱&#xff09;&#xff0c;这是用来解决我们在开发中遇到很多 "经典场景"&#xff0c;简单来说&#xff0c;设计模式就是一份模板&#xff0c;可以套用。…

江西服装学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

江西服装学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

浅谈C++|STL之string篇

一.string的基本概念 本质 string是C风格的字符串&#xff0c;而string本质是一个字符串 string和char * 区别 char * 是一个指针string是一个类&#xff0c;类内部封装了char *&#xff0c;管理这个字符串&#xff0c;是一个char * 型容器。 特点 string类内部封装了很多成…

Unity技术手册-UGUI零基础详细教程-Canvas详解

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

1275MPaMJ螺纹螺栓 最新标准 学习记录

声明 本文是学习GB-T 42850-2023 1275MPaMJ螺纹螺栓. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 10 min&#xff5e;15 min。 A.1.5.8 水冲洗 表面清理后迅速将零件放在21℃~93℃自来水中冲洗&#xff0c;自来水应符合GB5749 的要求。 A.1.6 表…

【qiankun乾坤】从0到1搭建微前端

微前端是一种将一个大型单体应用拆分成多个小型应用的架构方式。它可以让不同的团队独立开发部署自己的应用,同时这些应用可以集成到一个统一的底座应用中,对用户来说就是一个完整的应用。 qiankun 是阿里开源的一个微前端实现框架,可以帮助我们比较容易地实现微前端架构。 下…

Linux中执行bash脚本报错/bin/bash^M: bad interpreter: No such file or directory

文章目录 参考博客&#xff1a; Linux中执行bash脚本报错/bin/bash^M: bad interpreter: No such file or directory 首先在此对这位博主表示感谢。 运行bash脚本会出现两个文件&#xff0c;1037.err和1037.out。 1037.err的文件内容如下&#xff1a; /data/home/user12/.lsbat…

5.11.Webrtc接口的设计原理

在上节课中呢&#xff0c;我向你介绍了web rtc的接口宏&#xff0c;那有很多同学会产生疑问啊&#xff0c;那觉得web rtc为什么要把接口设计的这么复杂&#xff1f;还非要通过宏来实现一个代理类&#xff0c;再通过代理类来调用到web rtc内部。 那为什么要这么设计呢&#xf…

Vulnhub系列靶机---HarryPotter-Fawkes-哈利波特系列靶机-3

文章目录 信息收集主机发现端口扫描dirsearch扫描gobuster扫描 漏洞利用缓冲区溢出edb-debugger工具msf-pattern工具 docker容器内提权tcpdump流量分析容器外- sudo漏洞提权 靶机文档&#xff1a;HarryPotter: Fawkes 下载地址&#xff1a;Download (Mirror) 难易程度&#xff…

SpringBoot/SpringCloud开源项目,快速开发提高效率80%

前言 SpringBoot 是一个非常流行的 Java 框架&#xff0c;它可以帮助开发者快速构建应用程序。他不仅继承了 Spring 框架原有的优秀特性&#xff0c;而且还通过简化配置来进一步简化了 Spring 应用的整个搭建和开发过程。下面我将来介绍若干个项目&#xff0c;带你来快速开发。…

ChatGPT OpenAI 完成Excel组合函数Vlookup+match多条件查找

ChatGPT OpenAI 现在已经助力职场办公。 我们现在有这样一个Excel需求: 根据姓名与科目查找对应的分数。可以使用Vlookup+match组合函数一起来实现 。 我们将公式复制到Excel中来进行验证。 ChatGPT生成的Excel函数公式可以直接进行使用。 更多实战内容。

找不到msvcp140_codevet_ids.dll,无法继续执行代码的解决方法分享

在使用 Photoshop&#xff08;简称 PS&#xff09;时&#xff0c;很多用户都遇到过找不到 msvcp140_codevet_ids.dll 的问题。这使得他们无法正常运行 PS&#xff0c;给工作和生活带来了诸多不便。本文将详细介绍 msvcp140_codevet_ids.dll 的相关知识&#xff0c;以及如何解决…

2023-09-13 LeetCode每日一题(检查骑士巡视方案)

2023-03-29每日一题 一、题目编号 2596. 检查骑士巡视方案二、题目链接 点击跳转到题目位置 三、题目描述 骑士在一张 n x n 的棋盘上巡视。在 有效 的巡视方案中&#xff0c;骑士会从棋盘的 左上角 出发&#xff0c;并且访问棋盘上的每个格子 恰好一次 。 给你一个 n x …