`
hubin4
  • 浏览: 97170 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

for java beginner10 java 反射 Field类

    博客分类:
  • JAVA
阅读更多
java 反射 Field类

-------用到一个bean
package com.ncs;

public class Point {

	private int x;
	public int y;
	
	public Point(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	
}

--------------------
package com.ncs;

import java.lang.reflect.Field;

//need another bean Point
public class ReflectTest {
	//★这里说的Field都是 类 身上的,不是实例上的
	public static void main(String[] args) throws Exception {
		
		Point pt1 = new Point(3,5);
		
		//得到一个字段
		Field fieldY = pt1.getClass().getField("y"); //y 是变量名
		//fieldY的值是5么?? 大错特错
		//fieldY和pt1根本没有什么关系,你看,是pt1.getClass(),是 字节码 啊
		//不是pt1对象身上的变量,而是类上的,要用它取某个对象上对应的值
		//要这样
		System.out.println(fieldY.get(pt1)); //这才是5
		
		//现在要x了
		
		/* 
		Field fieldX = pt1.getClass().getField("x"); //x 是变量名
		System.out.println(fieldX.get(pt1)); 
		*/
		
		//运行 报错 私有的,找不到
		//NoSuchFieldException
		//说明getField 只可以得到 公有的
		//怎么得到私有的呢??
		
		/*
		Field fieldX = pt1.getClass().getDeclaredField("x"); //这个管你公的私的,都拿来
		//然后轮到这里错了
		// java.lang.IllegalAccessException:
		//Class com.ncs.ReflectTest can not access a member of class com.ncs.Point with modifiers "private"
		System.out.println(fieldX.get(pt1));
		*/
		
		//三步曲 一是不让你知道我有钱 二是把钱晃一下,不给用  三是暴力抢了
		
		//暴力反射  
		Field fieldX = pt1.getClass().getDeclaredField("x"); //这个管你公的私的,都拿来
		fieldX.setAccessible(true);//上面的代码已经看见钱了,开始抢了
		System.out.println(fieldX.get(pt1)); 
		
		//out 3 OK!!
		
		
	}
}

---------------------------下面做的小实验,把一个类里所有String类型的字段里的值 b 变 a

package com.ncs;

public class Point {

	private int x;
	public int y;
	
	public  String s1 ="ball";
	public String s2="hubin";
	public String s3="zhangxiaoxiang";
	//做实验而已,字段不可能是 public 的
	
	public Point(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	
}

----------------------------
package com.ncs;

import java.lang.reflect.Field;

//need another bean Point
public class ReflectTest {
	
	public static void main(String[] args) throws Exception {
		
		Point pt1 = new Point(3,5);
		
		//get all fields
		Field[] fields = pt1.getClass().getFields(); 
		
		for(Field field : fields ) {
			//我说的是String 类型的字段,当然要选择一下
			//if(field.getType().equals(String.class)) {
			//字节码都是一份的,干什么用equals啊
			if(field.getType()== String.class) {
				String oldValue = (String)field.get(pt1);
				String newValue = oldValue.replace('b', 'a');
				//改 对象的字段
				field.set(pt1, newValue);
				
			}
		}
		
		System.out.println(pt1.s1);
		System.out.println(pt1.s2);
		System.out.println(pt1.s3);
		
		//aall
		//huain
		//zhangxiaoxiang

	}
}

---------------------------------
分享到:
评论

相关推荐

    java for the beginner

    introduce in english

    Java A Beginner's Guide(6th) 无水印pdf

    Java A Beginner's Guide(6th) 英文无水印pdf 第6版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系...

    JAVA A beginner's guide sixth edition

    2. Java初学者指南:《JAVA A beginner's guide sixth edition》是一本专门为Java初学者编写的入门教材。该书全面介绍了Java的基础知识,适合那些没有编程经验的读者。 3. 作者Herbert Schildt:Herbert Schildt是...

    Java: A Beginner's Guide 5th Edition

    Fully updated to cover Java Platform, Standard Edition 7 (Java SE 7), Java: A Beginner's Guide, Fifth Edition starts with the basics, such as how to compile and run a Java program, and then discusses...

    Java and Algorithmic Thinking for the Complete Beginner – Compact Edition

    So many books out there can teach you those skills in Java, C++, or C#. Many of them even claim that they can teach you in 24 hours! Don’t laugh! They probably can do that, but all of them take one ...

    Java A Beginner's guide

    这本《Java A Beginner’s Guide》第六版是由著名作者赫伯特·席尔德特撰写,席尔德特在编程领域有近三十年的经验,并且是Java语言领域的权威专家。他的书籍销量超过数百万册,被翻译成世界上的所有主要外语。他的...

    Pentaho 8 Reporting for Java Developers azw3

    Pentaho 8 Reporting for Java Developers 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java-Programming-for-Beginner:书

    这本书《Java-Programming-for-Beginner》将引领你走进这个充满无限可能的世界。Java以其“一次编写,到处运行”的特性,使得开发者可以在多种平台上无缝地运行代码,极大地提高了开发效率。 1. **Java基础知识**:...

    Java A Beginner's Guide(6th) epub

    Java A Beginner's Guide(6th) 英文epub 第6版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java A Beginner's Guide(6th) mobi

    Java A Beginner's Guide(6th) 英文mobi 第6版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java A Beginner’s Guide(7th) epub

    Java A Beginner’s Guide(7th) 英文epub 第7版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java 7 A Beginner’s Tutorial, 3rd Edition.pdf

    - `for` 循环的不同形式,包括传统 `for` 循环和增强型 `for` 循环。 - 如何使用循环遍历数组或集合。 - **控制流语句:** - `break` 和 `continue` 语句的用途。 - `switch` 语句及其在选择结构中的作用。 ##...

    Java_Programming_for_the_Absolute_Beginner.rar_absolute java_jav

    10. **JVM和内存管理**:理解Java虚拟机(JVM)的工作原理,包括类加载、垃圾收集等,有助于优化程序性能。 11. **单元测试**:JUnit是Java常用的单元测试框架,通过编写测试用例来验证代码的正确性,它是持续集成...

    Java A Beginner’s Guide(7th) azw3

    Java A Beginner’s Guide(7th) 英文azw3 第7版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java2:A Beginner's Guide Second Edition 原版 pdf

    《Java2: A Beginner's Guide Second Edition》是学习Java编程语言的经典教材,尤其适合初学者。这本书详尽地介绍了Java的基础知识,旨在帮助读者从零开始掌握Java编程技能。PDF版本方便了读者在线查阅和学习。 ...

    Java Programming for the Absolute Beginner

    10. **API和库的使用**:学习如何利用Java的标准库和第三方库,如处理XML、JSON数据,进行数据库操作等。 11. **调试与测试**:介绍如何使用IDE(如Eclipse、IntelliJ IDEA或NetBeans)进行代码调试,以及单元测试...

    Java - Java A Beginner's Guide 9th edition

    ### Java - Java A Beginner's Guide 9th edition #### Java基础知识概述 本书旨在为初学者提供全面、深入的Java编程入门指导。Java是一种广泛使用的面向对象编程语言,它以其跨平台性、安全性以及丰富的类库支持...

    Java Game Development with LibGDX: From Beginner to Professional.pdf

    Learn to design and create video games using the Java programming language and the LibGDX software library. Working through the examples in this book, you will create 12 game prototypes in a variety ...

Global site tag (gtag.js) - Google Analytics