当前位置: 首页 > news >正文

每日学习Java之一万个为什么

9.Class <?> class1 = Myclass.class 为什么要有通配符?传给谁用的?

首先,这里的class特指某个对象在JVM中的元数据集合
普通、接口、数组、基本类型、 void 类型、局部类、匿名类、枚举、注解

1.类型安全:通配符允许你编写更通用的代码,同时保持类型安全。通过使用 Class<?>,你可以表示任何类型的 Class 对象,而不需要指定具体的类型。

2.灵活性:通配符使得代码可以处理多种类型的 Class 对象,而不需要为每种类型编写特定的代码。

3.避免类型转换:使用通配符可以减少不必要的类型转换,因为你不必在代码中指定具体的类型。

泛型给谁用的?

方法参数:当你编写一个方法,且该方法需要接受任何类型的 Class 对象时,你可以使用 Class<?> 作为参数类型。例如:

public void printClassName(Class<?> clazz) {
    System.out.println(clazz.getName());
}

这个方法可以接受任何类型的 Class 对象,并打印其类名。

泛型类或方法:在泛型类或方法中,当你不需要指定具体的类型参数时,可以使用通配符。例如:

public <T> void processClass(Class<T> clazz) {
    // 处理逻辑
}

这个方法可以处理任何类型的 Class 对象。

集合类型:在处理泛型集合时,通配符可以帮助你编写更通用的代码。例如:


public void printList(List<?> list) {
    for (Object item : list) {
        System.out.println(item);
    }
}

这个方法可以接受任何类型的 List,并打印其中的元素。

总结:
通配符 ? 在 Class<?> 中的使用是为了提高代码的通用性和灵活性,使得你可以编写能够处理多种类型的代码,而不需要为每种类型编写特定的逻辑。它主要用于方法参数、泛型类和方法的定义中,以及处理泛型集合时。

11.为什么要有方法引用?应用场景?

13.为什么还要学JDBC?

  1. 深入理解底层机制

JDBC 是Java与数据库交互的标准API,几乎所有Java数据库访问框架(包括JdbcTemplate)都是基于JDBC构建的。掌握JDBC可以帮助你更深入地理解数据库连接、事务管理、预编译语句、结果集处理等核心概念。

连接管理:了解如何手动打开和关闭数据库连接。
事务控制:学习如何显式地开始、提交和回滚事务。
异常处理:熟悉SQL异常及其处理方式。
资源管理:理解如何正确释放数据库资源(如Connection, Statement, ResultSet)以避免内存泄漏。
  1. 调试和问题排查

当你遇到复杂的问题时,直接使用JDBC可以帮助你更好地理解和定位问题。例如,某些高级的SQL查询或性能调优可能需要对底层数据库操作有更细致的控制。

日志记录:通过查看原始SQL语句和参数,更容易进行调试。
性能优化:直接操作JDBC可以让你更好地控制批量操作、结果集大小等细节,从而优化性能。
  1. 灵活性和定制化需求

虽然JdbcTemplate提供了很多便捷的功能,但在某些特定场景下,你可能需要更多的灵活性和定制化能力,这时直接使用JDBC会更加合适。

复杂的查询和更新:某些复杂的SQL操作(如存储过程、动态SQL生成)可能需要更精细的控制。
非标准功能:一些数据库提供的扩展功能(如特定数据库的特性或优化)可能无法通过JdbcTemplate直接支持。
  1. 学习曲线和迁移成本

如果你已经掌握了JDBC的基础知识,那么学习和使用JdbcTemplate会更加容易。反之,如果你从未接触过JDBC,直接上手JdbcTemplate可能会在某些情况下感到困惑,因为你不知道它背后的工作原理。

快速上手:如果你已经熟悉JDBC,那么学习JdbcTemplate只需要了解其简化和封装的部分。
平滑过渡:在某些项目中,可能需要从传统的JDBC代码逐步迁移到Spring框架,了解两者之间的关系有助于顺利完成过渡。
  1. 全面掌握技术栈

作为一个开发人员,全面掌握相关技术栈是非常重要的。了解JDBC不仅可以帮助你在不同项目中灵活切换,还可以增强你的技术储备,提升解决问题的能力。

多语言支持:如果你未来需要在其他编程语言或环境中工作,理解数据库连接的基本原理将非常有用。
面试准备:在许多面试中,JDBC仍然是一个常见的考察点,尤其是在涉及数据库操作的岗位中。

示例对比
使用JDBC的传统方式


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JdbcExample {
    private static final String URL = "jdbc:mysql://localhost:3306/mydb";
    private static final String USER = "username";
    private static final String PASSWORD = "password";

    public void queryUsers() throws SQLException {
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try {
            // 获取数据库连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);

            // 创建PreparedStatement对象
            String sql = "SELECT id, name FROM users WHERE age > ?";
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1, 18);

            // 执行查询并处理结果集
            rs = stmt.executeQuery();
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                System.out.println("User ID: " + id + ", Name: " + name);
            }
        } finally {
            // 关闭资源
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
            if (conn != null) conn.close();
        }
    }
}

使用Spring的JdbcTemplate

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;

public class JdbcTemplateExample {

    public static void main(String[] args) {
        DataSource dataSource = getDataSource();

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        String sql = "SELECT id, name FROM users WHERE age > ?";
        jdbcTemplate.query(sql, new Object[]{18}, (rs, rowNum) -> {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            System.out.println("User ID: " + id + ", Name: " + name);
            return null;
        });
    }

    private static DataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
        dataSource.setUsername("username");
        dataSource.setPassword("password");
        return dataSource;
    }
}

总结

JDBC 提供了对数据库操作的细粒度控制,适合需要高度自定义和优化的场景。
JdbcTemplate 简化了数据库操作,减少了样板代码,提高了开发效率,适合大多数日常开发任务。

因此,建议开发者同时掌握这两种技术:

先学JDBC,理解数据库连接和操作的基本原理。
再学JdbcTemplate,利用其便捷性和高效性来加速开发。

14.JUC 和 JVM 适合什么时候学?需要什么基础?

有空就学,学好408-OS

相关文章:

  • 论文笔记-WSDM2024-LLMRec
  • 【核心算法篇十三】《DeepSeek自监督学习:图像补全预训练方案》
  • leetcode_位运算 67.二进制求和
  • 关于 BK3633 上电时受串口 UART2 影响而无法启动的问题说明
  • 开发一个交易所需要哪些技术
  • 分布式之分布式ID
  • C语言(21)
  • 掌握 ElasticSearch的 _source 过滤
  • LLM 学习2
  • 服务器创建conda环境并安装使用jupyter
  • ChromeDriver下载
  • 2.19c++练习
  • 鸿蒙5.0实战案例:关于图像撕裂、掉帧等异常现象的原理以及优化方案
  • express-validator 数据校验详解
  • Redis未授权访问漏洞原理
  • 《Real-IAD: 用于基准测试多功能工业异常检测的真实世界多视角数据集》学习笔记
  • 【NLP算法面经】字节跳动算法岗四面详细面经(★附面题总结★)
  • 《GB∕T 43206-2023 信息安全技术 信息系统密码应用测评要求》介绍,4月1日起正式施行
  • pandas连接mysql数据库
  • JavaScript 异步编程:Promise 与 await 的关联与使用
  • 中国-拉共体成员国重点领域合作共同行动计划(2025-2027)
  • 落实中美经贸高层会谈重要共识,中方调整对美加征关税措施
  • 金价大跌!足金饰品每克一夜便宜14元,涨势是否已终结?
  • 全球前瞻|特朗普访问中东三国,印巴军方将于12日再次对话
  • 韩德洙成为韩国执政党总统大选候选人
  • 上海第四批土拍成交额97亿元:杨浦宅地成交楼板单价半年涨近7000元