Java反射机制

简介: java反射机制给我们在开发中带来了很多的便利,下面是我在imooc上看到的一些知识点的总结,第一个代码:package com.tiger.reflect;public class ExampleOne { public static void main(...

java反射机制给我们在开发中带来了很多的便利,下面是我在imooc上看到的一些知识点的总结,第一个代码:

package com.tiger.reflect;

public class ExampleOne {
    public static void main(String[] args)  {

        //方法1:当已知类的名称的时候,可以直接获得其实例
        Class model1=Model.class;

        //方法2:当已知一个该类的对象的时候
        Class model2=model1.getClass();

        System.out.println(model1==model2);

        //方法3:当已知该类的一个实例的时候,使用该方法也可以直接获取该类的一个实例
        Class model3=null;
        try {
            model3=Class.forName("com.tiger.reflect.Model");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println("不管是哪种方式获得的类的实例,他们其实都是类类型(class type)的表现"
        +"一个类仅仅是java.lang.Class的对象,它不可能有两种类型,所以获得的只是同一个实例:");
        System.out.println("model1==model2?"+(model1==model2));
        System.out.println("model1==model3?"+(model2==model3));
    }

}

class Model {}

2、我们在编写java代码的时候一般会经过先编译,再运行的过程,但是这就会导致一个问题,那就是使用new 方式只能够静态的加载,这样就会有一个弊端,那就是假如说我有N个类,但是中间只有一个是错误的,或者说没有这个类,那么采用new方式就不能编译通过,那么我所有的类都将不能正常的使用,这就不好了。所以可以采用反射机制,进行动态的加载我们所需要的类,这样就不会出现我们遇到这种情况了。那就是Class c=Class.forName(“类的全名”);然后进行强制的类型(前提是这个类型是我们要用的类的implements的共同遵守的一个标准,这也为今后的功能添加,子类添加奠定了基础)转换即可。

3、对于成员变量,其实它(们)也是对象,万事万物在java中全是对象,至于成员变量就是Field的对象,我们可以使用
Class c=c.class;
Field[] fields=c.getDeclaredFields();
field.getName(),field.getType();
就可以了。

4、对于成员函数,其实它也是对象。我们可以使用
Class c=obj,getClass();
c.getDeclaredMethods();

5、小总结:只要想获取类信息,就要获得类类型如,Class c=object.getClass();

6、方法的获得:思路就是,要是获得某个方法的具体的信息,就要先获取该方法所在的类的类类型,然后使用method.invoke,由此可以获得方法的具体信息了。
Class c=object.getClass();
c.getMethod(name,params);//只是public 方法,也可以使用getDeclaredMethods();
例如,我们有一个叫print的方法,里面有两个int int参数,
就可以如下写:Method method=c.getDeclaredMethods(“print”,new Class[]{int.class,int.class});
或者:
method=c.getDeclaredMethods(“print”,int.class,int.class);//有几个参数就写几个参数,这样也是可以的。
方法反射调用函数的方式就是使用method来进行操作的
当有返回值的时候,Object object=method.invoke(obj,params);//效果和obj.print(10,12);效果是一样的。没有返回值时,返回null;
其中参数obj就是我们要反射的类的实例,是不是并不是那么难啊。

最后一个知识点就是反射操作和泛型的操作是绕过编译阶段的。

目录
相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
98 2
|
2月前
|
Java 编译器
探索Java中的异常处理机制
【10月更文挑战第35天】在Java的世界中,异常是程序运行过程中不可避免的一部分。本文将通过通俗易懂的语言和生动的比喻,带你了解Java中的异常处理机制,包括异常的类型、如何捕获和处理异常,以及如何在代码中有效地利用异常处理来提升程序的健壮性。让我们一起走进Java的异常世界,学习如何优雅地面对和解决问题吧!
|
1月前
|
Java 程序员
深入理解Java异常处理机制
Java的异常处理是编程中的一块基石,它不仅保障了代码的健壮性,还提升了程序的可读性和可维护性。本文将深入浅出地探讨Java异常处理的核心概念、分类、处理策略以及最佳实践,旨在帮助读者建立正确的异常处理观念,提升编程效率和质量。
135 1
|
1月前
|
Java 开发者 UED
深入探索Java中的异常处理机制##
本文将带你深入了解Java语言中的异常处理机制,包括异常的分类、异常的捕获与处理、自定义异常的创建以及最佳实践。通过具体实例和代码演示,帮助你更好地理解和运用Java中的异常处理,提高程序的健壮性和可维护性。 ##
57 2
|
1月前
|
Java 开发者
Java中的异常处理机制深度剖析####
本文深入探讨了Java语言中异常处理的重要性、核心机制及其在实际编程中的应用策略,旨在帮助开发者更有效地编写健壮的代码。通过实例分析,揭示了try-catch-finally结构的最佳实践,以及如何利用自定义异常提升程序的可读性和维护性。此外,还简要介绍了Java 7引入的多异常捕获特性,为读者提供了一个全面而实用的异常处理指南。 ####
59 2
|
1月前
|
开发框架 安全 Java
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
56 4
|
2月前
|
运维 Java 编译器
Java 异常处理:机制、策略与最佳实践
Java异常处理是确保程序稳定运行的关键。本文介绍Java异常处理的机制,包括异常类层次结构、try-catch-finally语句的使用,并探讨常见策略及最佳实践,帮助开发者有效管理错误和异常情况。
114 5
|
1月前
|
Java 程序员 UED
深入理解Java中的异常处理机制
本文旨在揭示Java异常处理的奥秘,从基础概念到高级应用,逐步引导读者掌握如何优雅地管理程序中的错误。我们将探讨异常类型、捕获流程,以及如何在代码中有效利用try-catch语句。通过实例分析,我们将展示异常处理在提升代码质量方面的关键作用。
47 3
|
1月前
|
Java 数据库连接 开发者
Java中的异常处理机制:深入解析与最佳实践####
本文旨在为Java开发者提供一份关于异常处理机制的全面指南,从基础概念到高级技巧,涵盖try-catch结构、自定义异常、异常链分析以及最佳实践策略。不同于传统的摘要概述,本文将以一个实际项目案例为线索,逐步揭示如何高效地管理运行时错误,提升代码的健壮性和可维护性。通过对比常见误区与优化方案,读者将获得编写更加健壮Java应用程序的实用知识。 --- ####
|
2月前
|
Java API 数据库
Java 反射机制:动态编程的 “魔法钥匙”
Java反射机制是允许程序在运行时访问类、方法和字段信息的强大工具,被誉为动态编程的“魔法钥匙”。通过反射,开发者可以创建更加灵活、可扩展的应用程序。
50 2