/
根据实例化对象获取对象的全部属性
@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中一个类里有一个数据成员是一个类,要如何赋值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)