使用java反射机制读取任意类内部细节

简介: 使用java反射机制读取任意类内部细节

首先我们模拟一个学生类来做一个实验,接下来部分是源码:


package com.sise.lh.reflect.domain;
/**
 * @author:idea
 * @date:2018/1/4
 * @version: 1.0
 */
public class Student{
    public int age;
    public Student(){}
    public Student(String name,int age){
        this.age=age;
    }
    public String test01(){
        return "null";
    }
    public String test02(){
        return "null";
    }
    public String test03(){
        return "null";
    }
    public String test04(){
        return "null";
    }
}
然后便是通过java的一系列反射来读取这个类的信息:
闲话不多说,直接上源码:
package com.sise.lh.reflect;
import java.lang.reflect.*;
import java.lang.reflect.Field;
import java.util.Date;
/**
 * @author:idea
 * @date:2018/1/4
 * @version: 1.0
 */
public class FieldTest {
    //打印出一个类里面的所有属性和属性修饰符,以及构造函数和构造函数的修饰符及参数,还有所有方法的修饰符和所有方法的名称及参数
    public static void getField(Class c){
        getParameter(c);
        getConstruction(c);
        getDeclaredFields(c);
    }
    //获取构造函数的所有内容
    public static void getConstruction(Class c){
        Constructor[] constructors=c.getDeclaredConstructors();
        for (Constructor constructor : constructors) {
            System.out.print(Modifier.toString(constructor.getModifiers())+" ");//后去构造函数的修饰符
            System.out.print(constructor.getName()+"(");  //获取构造函数的名称
            Class[] p=constructor.getParameterTypes();
            for(int k=0;k<p.length;k++){
                System.out.print(p[k].getName()+" ");
            }
            System.out.println(" );");
        }
    }
    //获取相应类的所有属性
    public static void getParameter(Class c){
        Field field[]=c.getDeclaredFields();
        for (Field field1 : field) {
            System.out.print(Modifier.toString(field1.getModifiers())+ " "); //修饰符
            System.out.print(field1.getType()+" "+field1.getName()); //属性类型和属性名称
        }
        System.out.println("");
    }
    //获取相应类里面的所有申明的方法
    public static void getDeclaredFields(Class c){
        Method field[]=c.getDeclaredMethods();
        for (Method method : field) {
            System.out.print(Modifier.toString(method.getModifiers())+" "); //获取函数的修饰符权限
            System.out.print(method.getReturnType()+" "+method.getName()+"("); //获取函数的名称
            Class type[]= method.getParameterTypes();
            for (Class aClass : type) {
                System.out.print(aClass.getName()+" ");
            }
            System.out.println(");");
        }
    }
    public static void main(String[] args) throws ClassNotFoundException {
        System.out.println("获取类里面的所有信息");
        String name="com.sise.lh.reflect.domain.Student";
        Class c1=Class.forName(name);
        System.out.println("class "+name+"\n{");
        getField(c1);
        System.out.println("}");
    }
}
最后检测获取内容:
    获取类里面的所有信息
class com.sise.lh.reflect.domain.Student
{
public int age
public com.sise.lh.reflect.domain.Student( );
public com.sise.lh.reflect.domain.Student(java.lang.String int  );
public class java.lang.String test02();
public class java.lang.String test01();
public class java.lang.String test03();
public class java.lang.String test04();
}
  虽然java的反射机制在web应用中出现的影子并不是很多,但是在商业的java组件里面的开发过程中,反射机制是众多流行框架实行的基础,其中就包括了spring,hibernate等


目录
相关文章
|
1月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
148 57
|
4天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
22天前
|
Java 程序员
深入理解Java异常处理机制
Java的异常处理是编程中的一块基石,它不仅保障了代码的健壮性,还提升了程序的可读性和可维护性。本文将深入浅出地探讨Java异常处理的核心概念、分类、处理策略以及最佳实践,旨在帮助读者建立正确的异常处理观念,提升编程效率和质量。
108 1
|
23天前
|
Java 开发者 UED
深入探索Java中的异常处理机制##
本文将带你深入了解Java语言中的异常处理机制,包括异常的分类、异常的捕获与处理、自定义异常的创建以及最佳实践。通过具体实例和代码演示,帮助你更好地理解和运用Java中的异常处理,提高程序的健壮性和可维护性。 ##
47 2
|
23天前
|
Java 开发者
Java中的异常处理机制深度剖析####
本文深入探讨了Java语言中异常处理的重要性、核心机制及其在实际编程中的应用策略,旨在帮助开发者更有效地编写健壮的代码。通过实例分析,揭示了try-catch-finally结构的最佳实践,以及如何利用自定义异常提升程序的可读性和维护性。此外,还简要介绍了Java 7引入的多异常捕获特性,为读者提供了一个全面而实用的异常处理指南。 ####
48 2
|
26天前
|
Java 程序员 UED
深入理解Java中的异常处理机制
本文旨在揭示Java异常处理的奥秘,从基础概念到高级应用,逐步引导读者掌握如何优雅地管理程序中的错误。我们将探讨异常类型、捕获流程,以及如何在代码中有效利用try-catch语句。通过实例分析,我们将展示异常处理在提升代码质量方面的关键作用。
34 3
|
26天前
|
Java 数据库连接 开发者
Java中的异常处理机制:深入解析与最佳实践####
本文旨在为Java开发者提供一份关于异常处理机制的全面指南,从基础概念到高级技巧,涵盖try-catch结构、自定义异常、异常链分析以及最佳实践策略。不同于传统的摘要概述,本文将以一个实际项目案例为线索,逐步揭示如何高效地管理运行时错误,提升代码的健壮性和可维护性。通过对比常见误区与优化方案,读者将获得编写更加健壮Java应用程序的实用知识。 --- ####
|
27天前
|
运维 Java 编译器
Java 异常处理:机制、策略与最佳实践
Java异常处理是确保程序稳定运行的关键。本文介绍Java异常处理的机制,包括异常类层次结构、try-catch-finally语句的使用,并探讨常见策略及最佳实践,帮助开发者有效管理错误和异常情况。
86 4
|
26天前
|
开发框架 安全 Java
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
41 2
|
1月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
53 8