java 反射 成员变量_java基础--反射(成员变量)

这里介绍通过反射获取对象的成员变量,以及修改成员变量。

package Reflect.field;

public class Point {

int y;

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public Point(int y) {

super();

this.y = y;

}

}

package Reflect.field;

public class ReflectPoint extends Point {

protected int x; // 必须要用public修饰 否则反射取不到

public int y; // 必须要用public修饰 否则反射取不到

public String str1 = "hello";

public String str2 = "world";

public String str3 = "OK";

public ReflectPoint(int x, int y) {

super(10);

this.x = x;

this.y = y;

}

// 覆盖了此方法,就可以直接System.out.println(new ReflectPoint());

@Override

public String toString() {

return str1 + ":" + str2 + ":" + str3;

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

}

package Reflect.field;

import java.lang.reflect.Field;

/**

* 成员变量的反射

*

* @author xiaoyu

*

*/

public class Test {

public static void main(String[] args) throws Exception {

// 测试通过反射 获取对象的变量

ReflectPoint pt1 = new ReflectPoint(3, 5);

Point pt = new Point(99);

Field fieldY = pt1.getClass().getField("y"); // 这样只能取得public 修饰的y

Field allFieldY = pt.getClass().getDeclaredField("y"); // 这样所有的y,不管是什么修饰符

// fieldY不是对象上的变量,它是类上的。 fieldY.get(pt1)

System.out.println(fieldY.get(pt1)); // 5

System.out.println(allFieldY.get(pt)); // 99

Field fieldX = pt1.getClass().getDeclaredField("x");

// 暴力反射 ,不管x 是不是Public

// 修饰的,都可以取到(用了getDeclaredField("x"),setAccessible(true)可以不用写了)

// fieldX.setAccessible(true);

System.out.println(fieldX.get(pt1)); // 3

// 下面测试通过反射改变一个对象的变量的值

changeStringValue(pt1);

// 打印出pt1中的String类型的值

System.out.println(pt1);

}

/**

* 该方法可以改变对象obj中String类型的变量

*

* @param obj

*/

public static void changeStringValue(Object obj) throws Exception {

Field[] fileds = obj.getClass().getFields(); // 获取obj对象的所以变量

for (Field field : fileds) { // 循环找出是String类型的变量

// 字节码只有一份,所以可以==,而且比equals()方法更好

if (field.getType() == String.class) {// 如果是String类型的,则改变其值

String oldValue = (String) field.get(obj);

String newValue = oldValue.replace('o', 'h');

field.set(obj, newValue);// 当然你也可以设置成新的值 ;field.set(obj, "WWW");

}

}

}

}

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

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

相关文章

nohup 详解

转:https://www.cnblogs.com/jinxiao-pu/p/9131057.html nohup nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令&a…

java学习(30):巩固练习

/4使用Eclipse编写控制台应用程&#xff0c;利用for循环打印一个等腰三角图形/ public class test04 { public static void main(String[] args){ int x; int y; int z; for(x1;x<4;x)//外循环控制行数&#xff0c;总共四行 { for (y1;y<4-x ;y ) {//打印小星星前面的空格…

java get与post区别_HTTP请求(GET与POST区别)和响应

HTTP有两部分组成&#xff1a;请求与响应&#xff0c;下面分别整理。一&#xff0e;HTTP请求1&#xff0e;HTTP请求格式&#xff1a;[]在HTTP请求中&#xff0c;第一行必须是一个请求行(request line)&#xff0c;用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一…

07.用户故事与敏捷方法——优秀用户故事准则笔记

00.一个更好的办法是换一种方式编写故事&#xff0c;每个故事都提供某种程度的完整&#xff08;end-to-end&#xff09;的功能。 01.尽管不十分完美&#xff0c;即使只提供部分功能&#xff0c;但只要发布的功能可以跑&#xff0c;就可以放心地把应用程序发布给用户使用。 02.一…

java学习(31):for循环

/5使用Eclipse编写控制台应用程&#xff0c;利用for循环计算输入的两个整数的最大公约数和最小公倍数。/ import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner innew Scanner(System.in); System.out.println(“输入两个整数”);…

java jxl 写 excel文件_Java使用jxl写入Excel文件

首先添加jxl的maven依赖&#xff1a;net.sourceforge.jexcelapijxl2.6.12示例代码&#xff1a;import java.io.File;import java.io.IOException;import jxl.Workbook;import jxl.write.Label;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.wr…

kali BEEF-XSS启动报错解决

kali Linux自带BEEF框架&#xff0c;长时间搁置后启动报错&#xff1a; rootkali:/usr/share/beef-xss# ./beef Traceback (most recent call last): 14: from ./beef:32:in <main> 13: from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in require 12:…

java学习(32):巩固练习

/6使用Eclipse编写控制台应用程&#xff0c;利用循环模仿一个用户的注册&#xff0c; 输入用户名和密码&#xff0c;判断用户输入的用户名是否长度位于4到16个字符之间&#xff0c; 如果不满足要求则应能够让用户重写输入&#xff0c;判断密码长度是否在6到16个字符之间 &#…

java 注释引用_Eclipse java 注释 --引用

引用--设置注释模板的入口&#xff1a; Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素啦。现就每一个元素逐一介绍&#xff1a;文件(Files)注释标签&#xff1a;/** * Title: ${file_name} * Package ${pa…

CSS单位和颜色

CSS单位 尺寸 单位描述%百分比in英寸cm厘米mm毫米em 1em 等于当前的字体尺寸。 2em 等于当前字体尺寸的两倍。 例如&#xff0c;如果某元素以 12pt 显示&#xff0c;那么 2em 是24pt。 在 CSS 中&#xff0c;em 是非常有用的单位&#xff0c;因为它可以自动适应用户所使用的字体…

java学习(33):巩固练习

/7使用Eclipse编写控制台应用程&#xff0c;利用循环统计用户从控制台输入的N多个整数&#xff0c;对其进行依次判断&#xff0c; 对偶数进行累加&#xff0c;对奇数进行累加&#xff0c;最后比较奇数和与偶数的的差&#xff0c;输出如下信息 偶数个数15&#xff0c;奇数个数10…

java面向对象程序设计董小园_java面向对象程序设计(董小园版).doc

目 录TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc238553494" 第1章了解Java PAGEREF _Toc238553494 \h 2HYPERLINK \l "_Toc238553495" 第2章面向对象的“对象” PAGEREF _Toc238553495 \h 7HYPERLINK \l "_Toc238553496" 第3章对象的属…

[HAOI2008]糖果传递 结论题

题目描述 有\(n(n<1000000)\)个小朋友坐成一圈&#xff0c;每人有\(a_i\)个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为\(1\)&#xff0c;求使所有人糖果数相等的最小代价。 暴力的做法比较显然&#xff0c;有\(30\)分&#xff0c;这里就不再赘述了。 推…

java学习(34):巩固练习

/1 使用Eclipse编写控制台应用程, 提示老师预计输入&#xff1f;个学生成绩&#xff0c;接收此数后&#xff0c;最为创建int类型数组的大小限制&#xff0c; 使用循环统计包含N个元素的数组&#xff0c;对包含的成绩进行统计&#xff0c;计算如下&#xff1a; 共接收成绩数量是…

artTemplate/template.js模板将时间戳格式化为正常的日期

1&#xff1a;引用<script type"text/javascript" src"../js/artTemplate/template.js"></script> 2&#xff1a;在正常渲染中引入方法 | timestamp: yyyy-MM-dd hh:mm:ss <div>开始时间<span>{{value.endTime | timestamp: yyyy-…

java学习(35):巩固练习

/2使用Eclipse编写控制台应用程,将给定的如下数组进行互换存储&#xff0c;互换原则如下所示 源整型数组 { 56,28,15,999,30,65,12,77} 互换后数组元素排列 {77, 12,15,999,30,65, 28, 56}/ public class test04 { public static void main(String[] args){ int[] arr{56,28,15…

java 并发 主键_高并发数据库自增主键分析

在一般情况下&#xff0c;在新增领域对象后&#xff0c;都需要获取对应的主键值。使用应用层来维护主键&#xff0c;在一定程度上有利于程序性能的优化和应用移植性的提高。在采用数据库自增主键的方案里&#xff0c;如果JDBC驱动不能绑定新增记录对应的主键&#xff0c;就需要…

单实例数据库和多实例数据库

java持续学习中&#xff0c;暂时说说工作上学到的知识 单实例数据库模式 单实例模式下,一个数据库只能通过一个实例进行访问 RAC(Real Application Clusters)集群模式下,共享数据库文件,一个数据库生成多个相同的实例被用户访问。

java list 从0开始_Java从零开始学二十一(集合List接口)

package com.pb.demo1;import java.util.LinkedList;import java.util.List;public class PersonLinkedListTest {public static void main(String[] args) {/** 创建多个Person对象并赋值*/Person p1 new Person("张三",21);Person p2 new Person("李四"…

[Swift]LeetCode482. 密钥格式化 | License Key Formatting

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…