java中如何通过反射获取类的属性

java中如何通过反射获取类的属性,第1张

/

根据实例化对象获取对象的全部属性

@param obj 实例化对象

@return 全部属性

@throws Exception

/

public static String[] getFileNameFromObj(Object obj) throws Exception{

if (obj == null) {

return null;

}

Field[] fields = objgetClass()getDeclaredFields();

String[] fieldNames = new String[fieldslength];

for (int i = 0; i < fieldslength; i++) {

fieldNames[i] = fields[i]getName();

}

return fieldNames;

}

注意:前提是对象可以实例化。

e==e2是对象比较,比较的是e/e2的引用地址,就是堆栈,eequals(e2)是用eat的equals方法比较,没有重写的话默认==。而egetName()与e2getName()的 == 相对复杂,在栈中查找有没有存放值为egetName(),即"花花"的地址,如果没有,则开辟一个存放字面值为"花花"的地址,字符串值指向这个地址。如果已经有了值为"花花"的地址,则返回其地址。所以当栈中存在你想创建的变量的值的时候,其实是引用已经存在栈中的地址,不是新建的。egetName()equals(e2getName())则是直接比较值,与引用地址无关。

程序代码:

import javautilScanner;

public class Employer extends Person1{

public String office;

public double salary;

public MyDate date;

public Employer(String office,double salary,MyDate date)

{

thisoffice=office;

thissalary=salary;

thisdate=date;

}

@Override

public String toString() {

return "Employer [office=" + office + ", salary=" + salary + ", date="

+ date + "]";

}

public static void main(String s[])

{

Scanner input=new Scanner(Systemin);

String office=inputnext();

double salary=inputnextDouble();

int year=inputnextInt();

int month=inputnextInt();

int day=inputnextInt();

       Employer em=new Employer(office,salary,new MyDate(year,month,day));

Systemoutprintln(em);

}

}

class Person1{}

class MyDate{

public int year;

public int month;

public int day;

public MyDate(int year, int month, int day) {

thisyear = year;

thismonth = month;

thisday = day;

}

@Override

public String toString() {

return "MyDate [year=" + year + ", month=" + month + ", day=" + day

+ "]";

}

}

运行结果:

错误有这么几点,第一赋值问题,是把a赋值给name,因为name是我们需要的的变量,而a是传值的参数。 第二,不知道楼主怎么运行,可能改过,反正主方法必须要是static的

正确如下:

public class person {

private String name;

private int age;

void talk(){

Systemoutprintln("姓名"+name+"年纪"+age);

}

public void say(){

talk();

}

public void setName(String a){

name=a;

}

public void setAge(int b){

if(b>0){

age=b;

}

}

public String getName(){

return name;

}

public int getAge(){

return age;

}

public static class demo{

public static void main(String[] args) {

person p=new person();

psetName("aaaaaaaaaaaaa");

psetAge(12);

psay();

}

}

}

Field[] fields = per1getClass()getFields();

这句只能取到声明为public的属性,而你的name,age都是使用默认的private属性。

所以取出来的fields为空。

String newvalue = oldvaluereplaceAll("小红", "小白");

这句代码不知是不是你手误了,不存在小红,就不可能转变为小白。

以上就是关于java中如何通过反射获取类的属性全部的内容,包括:java中如何通过反射获取类的属性、在java中实例化一个类,调用属性赋值 此属性存在于内存哪里、java中一个类里有一个数据成员是一个类,要如何赋值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10197592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存