Java笔记042-反射章节练习

反射章节练习

  • 练习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的nameSystem.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的运行类型就是FileSystem.out.println(file.getClass());System.out.println("创建文件成功~~~~" + fileAllPath);}
}

运行结果

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法 数据结构 递归冒泡算法 java冒泡算法 优化递归冒泡 数据结构(九)

使用递归算法实现冒泡&#xff1a; package com.nami.algorithm.study.day06;import java.util.Arrays;/*** beyond u self and trust u self.** Author: lbc* Date: 2023-09-05 15:36* email: 594599620qq.com* Description: keep coding*/ public class BubbleSort2 {// p…

Java项目---图片服务器

图片服务器--->服务器&#xff08;图床&#xff09; 核心功能&#xff1a;上传图片、展示图片等 比如&#xff1a;编写博客时我们会插入图片&#xff0c;本质上是往文章中放了一个链接&#xff08;URL&#xff09;&#xff0c;这个URL资源在另外一个服务器上。 核心知识点…

关闭训练过程中的wandb

训练的过程中反复提醒wandb的账户&#xff0c;自动化执行的话&#xff0c;不是很方便&#xff0c;因此需要关闭这个wandb的功能 提醒的方式是这样的&#xff1a; 解决办法1、注释掉wandb相关的代码&#xff0c;并且添加关闭命令&#xff1a;wandb None 参考&#xff1a; 训…

Redis使用原生命令搭建集群

1.Redis版本及下载 找到安装的redis版本&#xff0c;redis3.0以上版本才支持集群 下载对应的版本 2.安装redis集群 解压上传编译 [hadoophost152 opensource]$ tar -xvf redis-3.2.11.tar.gz [hadoophost152 opensource]$ cd redis-3.2.11/ [hadoophost152 redis-3.2.11]$ ma…

关于 Resolution(分辨率、解析力)各单位的意义及相互之间的换算

1、问题背景 最近在调试的项目&#xff0c;有关于对解析力的要求&#xff0c;用 imatest 软件测试 MTF50 的值&#xff0c;如下图所示&#xff0c;可以看到他有不同的单位表示&#xff0c;LW/PH、Cycles/pixel 。另外关于解析力的单位还有LP/mm、L/mm、Cycles/mm、LP/PH&#…

Java8实战-总结27

Java8实战-总结27 用流收集数据分区分区的优势将数字按质数和非质数分区 用流收集数据 分区 分区是分组的特殊情况&#xff1a;由一个谓词(返回一个布尔值的函数)作为分类函数&#xff0c;它称分区函数。分区函数返回一个布尔值&#xff0c;这意味着得到的分组Map的键类型是B…

Springboot 集成 Ehcache操作数据库显示SQL语句设置

Springboot 集成 Ehcache操作数据库显示SQL语句设置 2023-09-13 23:33:35.030 INFO 6124 --- [ task-1] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2023-09-13 23:33:35.124 INFO 6124 --- [ …

linux安装nacos2.2.0

1、使用docker拉取镜像&#xff1a;docker pull nacos/nacos-server:v2.2.0 2、下载官方配置文件&#xff1a;https://github.com/alibaba/nacos/releases 3、修改配置文件的数据库连接信息&#xff0c;修改完成后将配置文件移至挂载目录/home/shixp/docker/nacos/conf&#xf…

PHP8中删除数组中的重复元素-PHP8知识详解

在 php 8 中&#xff0c;你可以使用array_unique()函数来删除数组中的重复元素。该函数将返回一个新的数组&#xff0c;其中包含原始数组中的唯一元素&#xff0c;而重复的元素只保留第一个出现的。 array_unique()函数返回具有唯一性元素的数组&#xff0c;语法格式如下&#…

Microsoft Excel 101 简介

什么是 Microsoft Excel&#xff1f; Microsoft Excel 是一个电子表格程序&#xff0c;用于记录和分析数值数据。 将电子表格想像成构成表格的列和行的集合。 字母通常分配给列&#xff0c;数字通常分配给行。 列和行相交的点称为像元。 单元格的地址由代表列的字母和代表行的…

Rsync远程同步inotify监控

Rsync 简介 rsync&#xff08;Remote Sync&#xff0c;远程同步&#xff09; 是一个开源的快速备份工具&#xff0c;可以在不同主机之间镜像同步整个目录树&#xff0c;支持增量备份&#xff0c;并保持链接和权限 在远程同步任务中&#xff0c;负责发起rsync同步操作的客户机…

《向量数据库指南》——“插件版”向量数据库与Milvus Cloud原生向量数据库之间的区别?

我一直坚持一个观点&#xff0c;即并非所有基于向量的解决方案都应被统称为向量数据库&#xff0c;尽管它们的能力在某些方面可以与之匹敌。从我的观点来看&#xff0c;例如 pgvector 或 Elasticsearch&#xff0c;它们都是非常出色且成熟的产品&#xff0c;在特定场景下&#…