首页 > 编程语言 >Java基础 —— 反射

Java基础 —— 反射

时间:2024-12-08 15:54:05浏览次数:7  
标签:反射 Java 对象 基础 Class 获取 static public 加载

动态语言

 动态语言,是指程序在运行时可以改变其结构(新函数可以引进,已有的函数可以被删除等结构上的变化)。如:JavaScript、Python就属于动态语言,而C、C++则不属于动态语言,从反射的角度说,Java属于半动态语言。

反射

 反射就是在运行状态时,对任意一个类,都能知道类中的属性和方法,对任意一个对象,都能调用它的任意属性和方法(动态获取信息、动态获取对象)。

框架 = 反射 + 注解 + 设计模式

Class对象

 程序运行时,编写的每一个类都会被编译成.class文件,当我们new对象或者类加载器加载时,JVM会将.class文件加载到内存中,即当一个类加载器完成之后,在堆内存的方法区中生成了一个该类唯一的class对象。

获取Class对象的四种方式

  • 通过Object类中的getClass()方法获取
  • 通过类名.class直接获取
  • 通过Class类中的forName()方法获取(推荐)
public class Main {
    public static void main(String[] args) throws ClassNotFoundException {
        Class<?> name = Class.forName("reflect.Person");
        //获取类中所以方法信息
        Class<?>[] declaredClasses = name.getDeclaredClasses();
        for (Class<?> declaredClass : declaredClasses) {
            System.out.println(declaredClass.toString());
        }
        //获取类中所有属性信息
        Field[] fields = name.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field.toString());
        }
        //获取类中所有构造方法信息
        Constructor<?>[] declaredConstructors = name.getDeclaredConstructors();
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println(declaredConstructor.toString());
        }
    }
}
  • 通过类加载器ClassLoader获取

创建对象的两种方式

  • Class对象的newInstance()方法

这种方法要求该Class对象对应的类有空参构造

  • Constructor对象的newInstance()方法

先调用Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法创建Class对象对应类的实例

应用场景

  • 加载数据库驱动

在我们做项目时,底层数据库有时用MySQL,有时用Oracle,这时候我们就需要动态的去加载数据库驱动类;如:使用JDBC连接数据库时,利用Class.forName()方法通过反射加载数据库。

public class JDBCUtils {
    public static final String url = "jdbc:mysql://localhost:3306/crm";
    public static final String username = "root";
    public static final String password = "root";
    //3.加载驱动  反射技术
    //静态代码块 优先于任何程序运行,并且只运行一次
    static{
        try {//异常体系
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    //4.由驱动管理器获取连接
    //静态方法  无须创建对象直接使用类名来调用
    //静态方法不能调用普通属性
    public static Connection getConnection() throws SQLException {
        Connection connection = DriverManager.getConnection(url, username, password);
        return connection;
    }
}
  • 加载配置文件

像Spring框架中的IOC容器

标签:反射,Java,对象,基础,Class,获取,static,public,加载
From: https://www.cnblogs.com/codyxz/p/18593466

相关文章

  • 如何设置 Java 开发环境
    如果你在这里,可能是想学习如何为Java开发设置环境。第一步是安装SDK(软件开发工具包),它是一组由硬件和软件供应商提供的工具和库。对于Java,我们使用JDK(Java开发工具包)。JDK是一组实用工具,帮助你为Java平台构建应用程序。它包含编译器、库和基本工具。请记住,Java不仅仅是......
  • 2024-2025-1 20241411王思棋《计算机基础与程序设计》第十一周学习总结
    作业信息|这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP||-- |-- ||这个作业要求在哪里|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP||这个作业的目标|计算机网络、网络拓扑,云计算,网络安全,Web,HTML,CSS,Javascript,XML||作业正......
  • Python语言基础(三):基本数据类型
    前言:在Python的编程世界中,基本数据类型是构建程序的基石。掌握这些核心概念,将为你的编程之路打下坚实的基础。本章,我们将深入探讨这些关键元素,为你的Python之旅提供必要的导航。基本数据类型在内存里存储的数据可以有多种类型。例如:一个人的姓名可以用字符串类型存储,年龄使用数......
  • JSON 全面解析:从基础到实战,带你玩转前端数据交互
    文章目录前言一、什么是JSON?二、JSON的基本语法三、JSON与JavaScript的互操作四、JSON实战案例案例2:JSON字符串转换为对象案例3:数组与JSON的互操作总结前言在现代Web开发中,JSON(JavaScriptObjectNotation)已成为最流行的数据交换格式之一。......
  • 学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第十一周学习总结
    学期(2024-2025-1)学号(20241420)《计算机基础与程序设计》第十一周学习总结作业信息这个作业属于哪个课程<班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2024-2025-1计算机基础与程序设计第十一周作业)这个作业的目标<计算机科......
  • 重拾Java:穿越最具多功能性的编程语言之旅
    你知道Java是世界上最广泛使用的编程语言之一吗?无论是用于Web应用、企业系统,还是Android开发,Java始终是各级开发者的可靠选择。在完成SESISENAI的系统开发技术培训后,我决定重新学习这门语言。现在,我将其与我正在学习的React、Node.js和JavaScript相结合。在这个空间里,我将分享我......
  • Kali Linux核心命令与基础概念(Kali Linux Core Commands and Basic Concept)
     ......
  • 高阶数据结构--B树&&B+树实现原理&&B树模拟实现--Java
    目录一、B-树概念二、B-树插入分析1.用序列{53,139,75,49,145,36,101}构建B树的过程如下:2.插入过程总结三、B树插入实现四、B+树1.B+树概念2.B+树的特性 五、B+树应用1.索引 2.Mysql索引3.InnoDB一、B-树概念1970年,R.Bayer和E.mccreight提出了......
  • 蓝桥杯 | 报数游戏 - 第十五届蓝桥杯大赛软件赛省赛Java 大学 B 组真题
    问题描述小蓝和朋友们在玩一个报数游戏。由于今年是2024年,他们决定要从小到大轮流报出是20或24倍数的正整数。前10个被报出的数是:20,24,40,48,60,72,80,96,100,120。请问第202420242024个被报出的数是多少?解题思路方案一importjava.util.Scanner;//1:......
  • 反射机制
    '''反射机制:通过字符串驱动代码,基于字符串找到对应模块之中的方法或属性。通过反射机制可以极大的简化代码逻辑,也可以让我们的程序具备一定的动态运行过程中自我修改的能力python中的反射机制主要是四种方法的调用:getattr()setattr()......