Java之反射机制一:获取及其操作类的属性
1.实体类
public class Dog { private String color; public boolean hasTail; public boolean isHasTail() { return hasTail; } public void setHasTail(boolean hasTail) { this.hasTail = hasTail; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } @Override public String toString() { return "Dog{" + "color='" + color + '\'' + '}'; } }
2.通过java反射机制获取类的属性的值
@Test public void test1(){ Dog dog = new Dog(); dog.setColor("白"); Class clazz = dog.getClass(); try { Field color = clazz.getDeclaredField("color"); //设置即使该属性是private,也可以进行访问(默认是false) color.setAccessible(true); String c = color.get(dog).toString(); System.out.println(dog); }catch (Exception e){ e.printStackTrace(); } }
运行结果:
3.通过java反射机制设置类的属性
@Test public void test2(){ Dog dog = new Dog(); Class clazz = dog.getClass(); try{ Field color = clazz.getDeclaredField("color"); color.setAccessible(true); color.set(dog,"黑"); System.out.println(dog); }catch (Exception e){ e.printStackTrace(); } }
运行结果:
4.getField方法和getDeclaredField方法两者区别(getFields和getDeclaredFields同理)
getField:只能获取类和其父类的public属性
getDeclaredField:该方法只可以获取类本身的属性(private public protected default),但不包括父类
实体类BigDog.java继承于Dog.java
public class BigDog extends Dog { private Integer age; public String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "BigDog{" + "age=" + age + '}'; } }
测试getFields方法:
@Test public void test(){ BigDog dog = new BigDog(); Class dogClass = dog.getClass(); //只能获取类及其父类的公有属性 Field[] fields = dogClass.getFields(); for (Field field : fields) { System.out.println(field); } }
运行截图:
测试getDeclaredFields方法:
@Test public void test3(){ BigDog dog = new BigDog(); Class dogClass = dog.getClass(); //能获取该类中所有的属性,但是不能获取父类的属性 Field[] fields = dogClass.getDeclaredFields(); for (Field field : fields) { System.out.println(field); } }
运行截图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix