JavaSE8基础 Class 获取与设置非静态私有成员变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE8基础 Class 获取与设置非静态私有成员变量相关的知识,希望对你有一定的参考价值。

礼悟:
           好好学习多思考,尊师重道存感恩。叶见寻根三返一,活水清源藏于零。
           虚怀若谷良心主,皓月当空自在王。愿给最苦行无悔,诚劝且行且珍惜。


 

    os :windows7 x64
    jdk:jdk-8u131-windows-x64
    ide:Eclipse Oxygen Release (4.7.0)



被解析类的代码:

package blog.jizuiku2;

/**
 * 
 * 
 * @author jizuiku
 * @version V17.10.02
 */
public class Person {
	// 成员变量
	public    int age;
	private   String password;
	protected String name;
			  int score;
	
	public    static   int ageStatic=13;
    private   static String passwordStatic="hello world";
	protected static String nameStatic;
			  static int scoreStatic;
			  
	// 构造方法
	
	public    Person(int age) {System.out.println("public GZ:int");}
	public    Person(int age,int score) {System.out.println("public GZ:int,int");}
	private   Person() {System.out.println("private GZ:");}
	protected Person(String name) {System.out.println("protected GZ:String");}
			  Person(int age,String name){this.age=age;this.name=name;System.out.println("default GZ:int,String");}
	
	// 成员方法
			  
	public void sayHello(String name) {}
	private int sayHello() {return 1;}
	protected String sayHello(int age) {return "";}
			  void	sayHello(int age,String name) {}
	
			  
	public void sayHelloStatic(String name) {}
	private int sayHelloStatic() {return 1;}
	protected String sayHelloStatic(int age) {return "";}
			  void	sayHelloStatic(int age,String name) {}
	
	@Override
	public String toString() {
			return "Person [age=" + age + ", password=" + password + ", name=" + name + ", score=" + score + "]";
	}
	
	
}

 
演示类:

package blog.jizuiku2;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

/**
 * Class 非静态成员变量的获取与设置
 * 
 * @author jizuiku
 * @version V17.10.02
 */
public class ClassGetNormalFieldDemo {
	public static void main(String[] args) throws Exception {
		String className = "blog.jizuiku2.Person";
		Class c = Class.forName(className);
		
		// 获取所有的成员变量
		System.out.println("该类中所有的成员变量如下:");
		Field[] fs = c.getDeclaredFields();
		for (Field field : fs) {
			System.out.println(field);
		}
		
		System.out.println();
		
		// 获取所有的构造方法
		System.out.println("该类中所有的构造函数如下:");
		Constructor[] cons = c.getDeclaredConstructors();
		for (Constructor constructor : cons) {
			System.out.println(constructor);
		}
		
		System.out.println();
		
		// 使用 blog.jizuiku0.Person(int,java.lang.String) 构造函数
		Constructor con = c.getDeclaredConstructor(int.class,java.lang.String.class);
		// 设置访问权限
		con.setAccessible(true);
		Object obj = con.newInstance(1,"hello");
		System.out.println((blog.jizuiku2.Person)obj);
		
		// 获取某一成员变量 并 对其赋值
		Field passwordField = c.getDeclaredField("password");
		// 设置为可以访问
		passwordField.setAccessible(true);
		// 对obj对象的password进行赋值
		passwordField.set(obj, "javaer");
		System.out.println(passwordField.get(obj));
		
	}
}

 
结果:
技术分享




Java优秀,值得学习。
学习资源:itcast和itheima视频库。如果您有公开的资源,可以分享给我的话,用您的资源学习也可以。
博文是观看视频后,融入思考写成的。博文好,是老师讲得好。博文坏,是 给最苦 没认真。














以上是关于JavaSE8基础 Class 获取与设置非静态私有成员变量的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE8基础 Class 获取一个类的Class对象的三种方法

JavaSE8基础 Class getConstructors 获取一个类的public级别构造方法

JavaSE8基础 Class getDeclaredFields 获取一个类中所有的成员变量

JavaSE8基础 Class getDeclaredMethods 获取类的所有方法(不包括父类的)

JavaSE8基础 父子类中都有静态代码块与构造代码块,执行顺序的简单示例

JavaSE8基础 静态代码块 简单示例