Java中反射机制的使用场景

简介: Java中反射机制的使用场景

文章目录

1.反射

反射在平时的开发中很少用,但是在处理代码的灵活性上非常具有帮助,反射获取对应类的字节码,动态代理也利用了反射的机制。如spring中xml的配置模式,转载bean,springboot中在properties或者yml中配置属性转化为对应的实体。

2.反射的三种方式

新建一个User.

public class User {

   private String UserName;

   private int age;

   private String address;

}

2.1 通过new对象实现反射机制

User user = new User("elite",12,"XX");

     Class userClass = user.getClass();

       Constructor[] constructors = userClass.getConstructors();

       for(Constructor c:  constructors){

           User o = (User) c.newInstance("elite",12,"xx");

           System.out.println(o.showUserInfo());

       }

2.2 通过路径实现反射机制

  @Test

   public void Test2() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {

       Class clazz= Class.forName("com.elite.java.reflection.User");

       System.out.println(clazz.getName());

       Constructor<User> constructor = clazz.getConstructor(new Class[]{String.class,Integer.class,String.class});

       User user = constructor.newInstance("elite2", 12, "xxxx");

       System.out.println(user.showUserInfo());

   }

2.3 通过类名实现反射机制

   @Test

   public void Test3() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {

     

       Class clazz= User.class;

       System.out.println( clazz.getName());

       Constructor<User> constructor = clazz.getConstructor(new Class[]{String.class,Integer.class,String.class});

       User user = constructor.newInstance("elite3", 12, "xxxx");

       System.out.println(user.showUserInfo());

   }

3.利用反射减少代码量

实际开发中,特别是银行类支付参数串,大部分需要填补位置,填充0或者空格之类的。

比如金额字段,10位,两位小数,不足10位前面补充0填位。这个自定义注解,利用反射来实现想要的结果。

自定义注解

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.FIELD)

public @interface BankPayParams {

   //其他的可以自己定义

   int Length();

}

定义请求参数对象

/**

* 银行支付请求参数

*/

public class BankPayRqInfo {

   /**

    * 支付金额

    */

   @BankPayParams(Length = 10)

   public BigDecimal money;

}

组织参数测试

/**

    * 测试反射

    */

   @Test

   public void Test4() throws IllegalAccessException {

       //设置构造请求参数对象

       BankPayRqInfo rqInfo = new BankPayRqInfo(new BigDecimal("10.00"));

       String params = FormatParams(rqInfo);

       System.out.println(params);

   }

   private String FormatParams(BankPayRqInfo rqInfo) throws IllegalAccessException {

       StringBuilder sb = new StringBuilder();

       for(Field field:rqInfo.getClass().getDeclaredFields()){

           //获取字段对应的注解

           BankPayParams p = field.getDeclaredAnnotation(BankPayParams.class);

           if(p!=null){

               // 获取Field的值:

               Object value = field.get(rqInfo);

               // 如果值是String:

               if (value instanceof BigDecimal) {

                   String s = value.toString();

                   if (s.contains("."))  s = s.replace(".","");

                   int Length = p.Length();

                   String format = StringUtils.leftPad(s,Length,"0");

                   sb.append(format);

               }

           }

       }

       return sb.toString();

   }

相关文章
|
6天前
|
Java
深入理解Java中的异常处理机制
【9月更文挑战第34天】在Java的世界里,异常处理是代码健壮性的守护神。本文将带你探索Java异常处理的奥秘,从基础语法到高级技巧,我们一步步揭开异常处理的面纱。你将学会如何捕获、声明和处理异常,以及如何自定义异常类型。让我们开始这段旅程,让代码更加稳健和可靠吧!
|
3天前
|
Java
深入浅出Java异常处理机制
【9月更文挑战第37天】在Java编程的世界里,异常处理是一项基础而重要的技能。它就像是我们生活中的急救箱,遇到意外时能及时救治,避免程序崩溃。本文将通过生动的例子和易于理解的语言,带你了解Java中的异常处理机制,从基本的try-catch语句到自定义异常的创建,让你的程序更加健壮和可靠。准备好了吗?让我们一起走进Java异常处理的大门,探索它的奥秘吧!
|
9天前
|
Java 程序员 开发者
深入理解Java中的异常处理机制
【9月更文挑战第31天】在Java编程中,异常处理是维护程序健壮性的关键。本文将通过浅显易懂的语言和生动的例子,带你了解Java异常处理的基本概念、分类以及如何优雅地处理它们。从初学者到资深开发者,每个人都能从中获得新的洞见和技巧,让你的代码更加健壮和易于维护。
12 4
|
8天前
|
Java 编译器 开发者
Java中的异常处理机制:从基础到进阶
本文深入探讨Java编程语言中的异常处理机制,从基础知识出发,逐步解析异常的分类、捕获和处理方法。通过实际案例分析,展示如何在开发过程中有效利用异常处理提高代码的稳定性和可维护性。进一步探讨了自定义异常的创建和使用场景,以及在Java中进行异常处理的最佳实践。文章旨在为Java开发者提供一个全面而详细的异常处理指南,帮助开发者更好地理解和运用Java的异常处理机制。
|
12天前
|
Java 数据库连接
深入理解Java异常处理机制
【9月更文挑战第28天】在Java编程中,异常处理是确保程序健壮性的关键。本文通过浅显易懂的语言和生动的例子,带你一步步了解Java的异常处理机制。从try-catch-finally的基本用法,到自定义异常类,再到异常处理的最佳实践,我们将一起探索如何在代码中优雅地处理那些不期而遇的小插曲。
16 4
|
14天前
|
Java 程序员 数据库连接
Java中的异常处理机制:理解与实践
本文将深入探讨Java语言中异常处理的核心概念、重要性以及应用方法。通过详细解析Java异常体系结构,结合具体代码示例,本文旨在帮助读者更好地理解如何有效利用异常处理机制来提升程序的健壮性和可维护性。
|
14天前
|
Java 开发者 UED
Java中的异常处理机制:理解与应用
本文深入探讨Java的异常处理机制,通过实例解析如何有效使用try-catch-finally块、throws关键字及自定义异常,以提升代码的健壮性和可维护性。我们将从基础概念入手,逐步过渡到高级应用,为Java开发者提供全面指导。
|
12天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
30 2
|
4天前
|
Java 数据库 UED
Java的多线程有什么用
Java的多线程技术广泛应用于提升程序性能和用户体验,具体包括:提高性能,通过并行执行充分利用多核CPU;保持响应性,使用户界面在执行耗时操作时仍流畅交互;资源共享,多个线程共享同一内存空间以协同工作;并发处理,高效管理多个客户端请求;定时任务,利用`ScheduledExecutorService`实现周期性操作;任务分解,将大任务拆分以加速计算。多线程尤其适用于高并发和并行处理场景。
|
16天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理