当前位置: 首页 > 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

相关文章:

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

9.Class <?> class1 Myclass.class 为什么要有通配符&#xff1f;传给谁用的&#xff1f; 首先&#xff0c;这里的class特指某个对象在JVM中的元数据集合。 有普通、接口、数组、基本类型、 void 类型、局部类、匿名类、枚举、注解 1.类型安全&#xff1a;通配符允许…...

寒假学习总结

整个寒假都走在数据结构与算法的路上&#xff0c;深入学习了其中多个板块&#xff0c;刷了一些与之对应的题目&#xff0c;下面来一期总结&#xff08;c&#xff09; &#xff08;emmm&#xff0c;主播在寒假试着去学习了几大语言的语法基础&#xff08;丢丢&#xff09; 如Ja…...

Java Web开发实战与项目——用户认证与授权模块开发

Web应用中&#xff0c;用户认证与授权是至关重要的功能&#xff0c;确保只有合法用户才能访问受保护的资源。Spring Security作为一个强大的安全框架&#xff0c;支持多种认证与授权方式。在本章节中&#xff0c;我们将深入探讨三种常见的用户认证与授权方案&#xff1a;基于To…...

力扣每日一题【算法学习day.129】

前言 ###我做这类文章一个重要的目的还是记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&#xff01;&#xff01;&#xff01; 习题 1.数组列表中的最大距离 题目链接…...

uni-app发起网络请求的三种方式

uni.request(OBJECT) 发起网络请求 具体参数可查看官方文档uni-app data:请求的参数; header&#xff1a;设置请求的 header&#xff0c;header 中不能设置 Referer&#xff1b; method&#xff1a;请求方法&#xff1b; timeout&#xff1a;超时时间&#xff0c;单位 ms&a…...

字节火山云DeepSeek接入教程,支持联网,速度超快。

大家好&#xff0c;我是苍何。 在使用 DeepSeek 官网&#xff0c;实在是卡的我差点学猪叫&#xff0c;于是我一直在寻找替代方案。 要求就 2&#xff1a;满血&#xff0c;速度快。&#xff08;当然能联网更好&#xff09;。 我也一度使用了如硅基流动 API&#xff0c;发现也开…...

C语言指针学习笔记

1. 指针的定义 指针&#xff08;Pointer&#xff09;是存储变量地址的变量。在C语言中&#xff0c;指针是一种非常重要的数据类型&#xff0c;通过指针可以直接访问和操作内存。 2. 指针的声明与初始化 2.1 指针声明 指针变量的声明格式为&#xff1a;数据类型 *指针变量名…...

FreeRTOS-rust 编译分析

目录介绍 FreeRTOS-rust ├── .cargo # 对 cargo 本身的配置 │ └── config.toml ├── Cargo.toml # 对当前工作空间的配置 ├── freertos-cargo-build # 负责对 freertos 源码进行编译 │ ├── Cargo.toml # 对当前 package 进行配置 │ └…...

【解决方法】vite-plugin-svg-icons使用中出现问题[vite] Cannot find package ‘fast-glob‘

问题长这样&#xff1a; 参考文章&#xff1a;https://medium.com/wumeng9028/vite-plugin-svg-icons-error-cannot-find-package-fast-glob-8cb03d19c0ac 解决方法&#xff1a;pnpm add fast-glob -D package.json {"vite-plugin-svg-icons": "2.0.1"…...

[Qt] 使用QUndoStack运行到cmd->isObsolete()崩溃

redo/undo中又push了 崩溃情况崩溃原因解决方法 崩溃情况 在正常调用QUndoStack的redo/undo时&#xff0c;崩溃在了这里 unknown:0 QWidget: Cannot create a QWidget without QApplication. 崩溃原因 在正常调用QUndoStack的redo/undo时&#xff0c;因为自身的逻辑处理&a…...

大白话实战Sentinel

Sentinel是SpringCloudAlibaba提供的用来做服务保护的框架,而服务保护的常见手段就是限流和熔断降级。在大型分布式系统里面,由于微服务众多,所以服务之间的稳定性需要做特别关注,Sentinel的核心包就提供了从多个维度去保护服务稳定的策略,而且这些保护策略都可以连接上Se…...

DL/CV领域常见指标术语(FLOPS/mIoU/混淆矩阵/F1-measure)------一篇入门

1. FLOPS、FLOPs和GFLOPs FLOPS: floating-point operations per second&#xff0c;每秒浮点运算次数&#xff0c;用来衡量硬件性能。 FLOPs&#xff1a;floating point of operations&#xff0c;是浮点运算次数&#xff0c;用来衡量算法、模型的复杂度。 GFLOPS&#xff…...

SprutCAMX16数控软件介绍

SprutCAM X 16 是一款功能强大的CAM&#xff08;计算机辅助制造&#xff09;软件&#xff0c;专为数控机床编程和制造过程优化设计。它广泛应用于机械加工、模具制造、3D打印等领域&#xff0c;支持多轴加工、车铣复合、机器人加工等多种加工方式。以下是SprutCAM X 16的主要特…...

Miniconda + VSCode 的Python环境搭建

目录&#xff1a; 安装 VScode 安装 miniconda 在VScode 使用conda虚拟环境 运行Python程序 1.安装 vscode 编辑器 官网链接&#xff1a;Visual Studio Code - Code Editing. Redefined 下载得到&#xff1a;&#xff0c;双击安装。 安装成功…...

TRELLIS 部署笔记

目录 依赖项安装 kaolin安装&#xff1a; 安装和运行报错解决 u2net.onnx 下载 解决方法&#xff0c;就是自行下载&#xff0c;然后拷贝到目录/root/.u2net bash测试u2net&#xff1a; 报错GaussianRasterizationSettings.__new__() got an unexpected keyword argument…...

深入解析Qt事件循环

在Qt开发中&#xff0c;QApplication::exec()这行代码是每个开发者都熟悉的“魔法咒语”。为什么GUI程序必须调用它才能响应操作&#xff1f;为何耗时操作会导致界面冻结&#xff1f;本文将以事件循环为核心&#xff0c;揭示Qt高效运转的底层逻辑&#xff0c;探讨其设计哲学与最…...

Visual Studio Code 集成 Baidu Comate

文章目录 安装Baidu Comate插件 安装Baidu Comate插件 从左主侧栏中 点击 【扩展】这个图标&#xff0c;然后在上方输入栏中输入 baidu comate —>选中列出的Bai Comate —>点击 【安装】按钮&#xff0c;等待安装完毕…...

「正版软件」PDF Reader - 专业 PDF 编辑阅读工具软件

PDF Reader 轻松查看、编辑、批注、转换、数字签名和管理 PDF 文件&#xff0c;以提高工作效率并充分利用 PDF 文档。 像专业人士一样编辑 PDF 编辑 PDF 文本 轻松添加、删除或修改 PDF 文档中的原始文本以更正错误。自定义文本属性&#xff0c;如颜色、字体大小、样式和粗细。…...

Kafka消息服务之Java工具类

注&#xff1a;此内容是本人在另一个技术平台发布的历史文章&#xff0c;转载发布到CSDN&#xff1b; Apache Kafka是一个开源分布式事件流平台&#xff0c;也是当前系统开发中流行的高性能消息队列服务&#xff0c;数千家公司使用它来实现高性能数据管道、流分析、数据集成和关…...

迪威模型网:免费畅享 3D 打印盛宴,科技魅力与趣味创意并存

还在为寻找优质3D打印模型而发愁&#xff1f;快来迪威模型网&#xff08;https://www.3dwhere.com/&#xff09;&#xff0c;一个集前沿科技与无限趣味于一体的免费3D打印宝藏平台&#xff01; 踏入迪威模型网&#xff0c;仿佛开启一场未来科技之旅。其“3D打印”专区&#xff…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...