package com.zkn.reflect.classinfo; import java.lang.reflect.Field; import java.lang.reflect.Type; import com.zkn.reflect.scope.Company; import com.zkn.reflect.scope.People; /** * <p>Title: </p> * * <p>Description: </p> * * * @since:2015-5-25 下午07:02:09 * */ public class ClassInfo { public static void getParameters(Class<?> clazz) { Field[] fields = clazz.getDeclaredFields(); for(Field f : fields){ System.out.println(f.getName()); } } public static void getFieldsValue(Object obj) { Field[] fields = obj.getClass().getDeclaredFields(); /** * 基本类型、包装类型、String类型 */ String[] types = {"java.lang.Integer", "java.lang.Double", "java.lang.Float", "java.lang.Long", "java.lang.Short", "java.lang.Byte", "java.lang.Boolean", "java.lang.Character", "java.lang.String", "int","double","long","short","byte","boolean","char","float"}; for(Field f : fields){ f.setAccessible(true); try { for(String str : types) { if(f.getType().getName().equals(str)) System.out.println("字段:"+f.getName()+" 类型为:"+f.getType().getName()+" 值为:"+ f.get(obj)); } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } public static void main(String[] args) throws Exception { People people = new People(); people.setAge(12); people.setSex("男"); Company company = new Company(); company.setAddress("北京"); company.setName("科技股份有限公司"); people.setCompany(company); people.setMoney(1000.00); getFieldsValue(people); } } package com.zkn.reflect.scope; /** * <p>Title: </p> * * <p>Description: </p> * * * @since:2015-5-25 下午07:04:22 * */ public class People { /** * 姓名 */ private String name; /** * 性别 */ private String sex; /** * 年龄 */ private int age; /** * 地址 */ private String address; /** * 学校 */ public String school; /** * 公司 */ private Company company; /** * 金额 */ private Double money; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } public Company getCompany() { return company; } public void setCompany(Company company) { this.company = company; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } } package com.zkn.reflect.scope; /** * <p>Title: </p> * * <p>Description: </p> * * * @since:2015-5-28 下午12:52:55 * */ public class Company { /** * 公司名称 */ private String name; /** * 公司地址 */ private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Company [name=" + name + ", address=" + address + "]"; } } 输出结果: 字段:name 类型为:java.lang.String 值为:null 字段:sex 类型为:java.lang.String 值为:男 字段:age 类型为:int 值为:12 字段:address 类型为:java.lang.String 值为:null 字段:school 类型为:java.lang.String 值为:null 字段:money 类型为:java.lang.Double 值为:1000.0
相关推荐
4. **Field.get()**:获取指定对象的字段值。 #### 实现细节与注意事项 - **异常处理**:使用反射时应谨慎处理异常,例如`NoSuchFieldException`和`IllegalAccessException`。 - **性能影响**:反射操作比普通方法...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...
字段的操作也类似,通过`getField(String name)`或`getFields()`获取字段,然后使用`set(Object obj, Object value)`或`get(Object obj)`来设置或获取字段值。 现在,回到描述中的“封装了一个反射帮助类”。这样的...
通过这些方法,不仅可以查看类的信息,还能在运行时动态创建对象、调用方法和修改字段值。例如,`Constructor.newInstance(Object... args)`用于创建对象,`Method.invoke(Object obj, Object... args)`用于调用方法...
在本主题中,我们将深入探讨如何使用Java反射机制将Map转换为Java对象,同时支持Boolean和Date类型的数据。这种转换在处理JSON到对象的映射或者数据库查询结果到对象的映射时非常有用。 首先,我们需要了解Java中的...
- 基本类型的包装类提供的`TYPE`属性:例如`Integer.TYPE`表示`int`类型。 #### 五、实例化对象 通过反射可以实例化对象,主要有两种方式: 1. **Class类的newInstance()方法**:直接通过`Class`对象创建实例。 ...
Java反射机制是Java语言提供的一种强大的工具,它允许我们在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性在处理不确定类型的对象或者实现动态代理等场景中非常有用。...
- 对于基本数据类型的包装类(如`Integer`),可以使用`TYPE`字段来获取对应的`Class`对象。 - **`Constructor`**: `Constructor`对象代表了类的构造器,用于创建类的新实例。可以通过`Class`对象的`get...
`Class`类是Java反射的核心,每当JVM加载新的类型时,就会在堆中创建一个`Class`实例来表示该类型。通过`Class`实例,可以访问该类型的基本信息。例如: - `getName()`:获取类的全限定名。 - `getSuperclass()`:...
Java SE编程入门教程涵盖了许多Java基础知识,其中包括对Java反射机制的讲解。反射是Java中一个强大的功能,它允许程序在运行时动态地获取类的信息并进行操作。这使得Java能够实现一些灵活的功能,如动态加载类、...
5. **使用基本类型包装类的TYPE语法**:这种方式适用于获取基本类型的Class对象。例如: ```java Class<?> c = int.class; Class<?> d = double.class; ``` #### 五、动态生成实例 在反射机制中,有几种不同的...
1. **类与对象**:Java中的基本构建块是类,它代表了现实世界中的事物或概念。对象则是类的实例,具有类定义的属性和行为。学习如何创建和使用类及对象,是理解Java面向对象编程的关键。 2. **封装**:封装是面向...
Java中的Field类和Method类是Java反射机制的重要组成部分,它们提供了对类的字段(属性)和方法的动态访问和操作能力。在Java编程中,反射允许我们在运行时检查类的信息,包括类的结构、方法、字段,甚至可以修改类...
Java反射机制是Java语言提供的一种强大工具,允许程序在运行时动态地获取类的信息并调用其方法。在Java中,`final`关键字用于声明一个不可改变的变量或常量,通常用来保证数据的安全性和不可篡改性。然而,有时在...
* Field类:用于描述类的字段,提供了get()和set()方法,可以获取和设置类的字段值。 动态代理机制 动态代理机制是Java反射机制中的一个重要概念,允许在运行时动态地生成代理类。动态代理机制可以用来实现AOP...
- **`Field`类**:代表类或接口中的单个字段,可用于读写对象的字段值。 - **`Method`类**:代表类中的单个方法,可用于调用对象的方法。 - **`Constructor`类**:代表类中的单个构造函数,可用于创建类的新实例。 ...
Java反射机制允许在运行时获取类的信息并操作类的对象。反射的主要作用包括: - 获取类的所有属性和方法。 - 在运行时构造并初始化对象。 - 调用类的指定方法。 反射的缺点主要有: - 性能开销大,反射涉及类型...
Java 数据类型分为基本类型和引用类型(包装类型)。基本类型包括 byte、char、short、int、float、long、double 和 boolean,它们在内存中直接存储值。包装类型如 Integer、Character 等是基本类型的对象形式,提供...