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

Java 基础知识

一.泛型编程

1. 泛型的概念和作用是什么?

  • 概念:泛型(Generics)是在 JDK 5.0 引入的新特性,允许在定义类、接口和方法时使用类型参数。类型参数在使用时被具体的类型替换。
  • 作用
    • 类型安全性:避免了强制类型转换,减少了运行时的 ClassCastException
    • 代码复用性:通过泛型可以编写通用的类和方法,减少重复代码。

2. 泛型的高级用法有哪些?

  • 泛型通配符
    • 无界通配符?,表示未知类型。
    • 上界通配符<? extends T>,表示类型为 T 或 T 的子类。
    • 下界通配符<? super T>,表示类型为 T 或 T 的父类。
  • 类型擦除:编译器在编译时会将泛型类型擦除,替换为最具体的类型(通常是 Object)。

4. 泛型在编译时和运行时的行为有何不同?

  • 编译时:编译器检查类型安全,进行类型擦除。
  • 运行时:泛型信息被擦除,无法通过反射获取泛型信息。

项目案例分析

在开发一个日志管理系统时,使用泛型来创建一个通用的日志记录器类:

public class Logger<T> {private Class<T> clazz;public Logger(Class<T> clazz) {this.clazz = clazz;}public void log(T message) {System.out.println(clazz.getSimpleName() + ": " + message);}
}// 使用示例
Logger<String> stringLogger = new Logger<>(String.class);
stringLogger.log("This is a log message.");

二.反射机制

1. 反射机制的概念和作用是什么?

  • 概念:反射(Reflection)是 Java 运行时的一种强大机制,允许程序在运行时动态地获取类的信息并操作对象。
  • 作用
    • 动态加载类:可以在运行时加载并实例化类。
    • 调用方法:可以动态地调用类的方法。
    • 访问字段:可以动态地访问类的字段。

2. 如何通过反射获取类的信息?

Class<?> clazz = Class.forName("com.example.MyClass");
Field[] fields = clazz.getDeclaredFields();
Method[] methods = clazz.getDeclaredMethods();
Constructor<?>[] constructors = clazz.getDeclaredConstructors();

3. 反射的性能开销和安全问题有哪些?

  • 性能开销:反射操作通常比直接操作慢,因为需要进行额外的类型检查和安全验证。
  • 安全问题:反射可以绕过访问控制,可能导致安全漏洞。

三.注解处理

1. 注解的概念和作用是什么?

  • 概念:注解(Annotation)是 Java 5.0 引入的一种元数据形式,用于提供有关程序元素(类、方法、变量等)的附加信息。
  • 作用
    • 代码生成:可以用于生成额外的代码或配置文件。
    • 配置管理:可以用于替代 XML 配置文件,简化配置管理。
    • 编译时检查:可以用于编译时的类型检查和代码验证。

2. 如何定义和使用自定义注解?

自定义注解可以通过 @interface 关键字定义,并可以指定保留策略(如 @Retention)和目标(如 @Target)。使用时,可以在类、方法或字段上添加自定义注解。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {String value() default "";
}public class MyClass {@MyAnnotation(value = "Hello")public void myMethod() {// 方法体}
}

项目案例分析

在开发一个日志记录框架时,使用注解来标记需要记录日志的方法:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Loggable {
}public class Logger {public void logMethodInvocation(Method method, Object[] args) {System.out.println("Method: " + method.getName());for (Object arg : args) {System.out.println("Argument: " + arg);}}
}public class MyService {@Loggablepublic void doSomething(String param) {// 方法体}
}public class Main {public static void main(String[] args) throws Exception {MyService service = new MyService();Method method = MyService.class.getMethod("doSomething", String.class);if (method.isAnnotationPresent(Loggable.class)) {Logger logger = new Logger();logger.logMethodInvocation(method, new Object[]{"Hello"});}service.doSomething("Hello");}
}

相关文章:

Java 基础知识

一.泛型编程 1. 泛型的概念和作用是什么&#xff1f; 概念&#xff1a;泛型&#xff08;Generics&#xff09;是在 JDK 5.0 引入的新特性&#xff0c;允许在定义类、接口和方法时使用类型参数。类型参数在使用时被具体的类型替换。作用&#xff1a; 类型安全性&#xff1a;避…...

深入探索 React Hooks:原理、用法与性能优化全解

一、引言 在现代 React 开发领域,Hooks 已成为不可或缺的一部分,赋予函数组件强大功能,使其能胜任复杂任务。本文将全面剖析 React Hooks,助您深入理解并熟练运用。 二、React Hooks 是什么 (一)Hooks 出现的背景 早期 React 主要依赖类组件,其通过this.state管理状…...

python中父类和子类继承学习

python为啥要使用继承 1. **代码复用**&#xff1a;子类可以继承父类的方法和属性&#xff0c;避免了重复编写相同的代码&#xff0c;提高了代码的复用性。 2. **建立层次结构**&#xff1a;通过继承可以清晰地表示类之间的层次关系&#xff0c;使代码结构更有条理。 3. **扩展…...

Linux——GPIO输入输出裸机实验

学习了正点原子Linux环境下的GPIO的输入输出的裸机实验学习&#xff0c;现在进行一下小结&#xff1a; 启动文件start.S的编写 .global _start .global _bss_start _bss_start:.word __bss_start.global _bss_end _bss_end:.word __bss_end_start:/*设置处理器进入SVC模式*/m…...

华为鸿蒙HarmonyOS NEXT升级HiCar:打造未来出行新体验

随着科技的不断进步&#xff0c;智能出行已成为我们生活中不可或缺的一部分。华为凭借其在智能科技领域的深厚积累&#xff0c;推出了全新的鸿蒙HarmonyOS NEXT系统&#xff0c;旨在为用户打造一个“人车家”的无缝协同出行体验。这一系统的核心亮点之一&#xff0c;就是其内置…...

【项目组件】第三方库——websocketpp

目录 第三方协议&#xff1a;websocket websocket简介 websocket特点 websocket协议切换 websocket协议格式段 websocketpp库介绍 endpoint server connection websocketpp库搭建服务器流程 基本框架实现 业务处理回调函数的实现 http_callback open_callback …...

计算机23级数据结构上机实验(第3-4周)

A 二叉树删除子树 编写程序对给定二叉树执行若干次删除子树操作&#xff0c;输出每次删除子树后剩余二叉树的中根序列。二叉树结点的数据域值为不等于0的整数。每次删除操作是在上一次删除操作后剩下的二叉树上执行。 输入格式: 输入第1行为一组用空格间隔的整数&#xff0c;表…...

【大数据学习 | HBASE高级】region split机制和策略

1. region split机制 ​ HRegionServer拆分region的步骤是&#xff0c;先将该region下线&#xff0c;然后拆分&#xff0c;将其子region加入到hbase:meta表中&#xff0c;再将他们加入到原本的HRegionServer中&#xff0c;最后汇报Master。 split前&#xff1a;hbase:meta表有…...

flink实战 -- flink SQL 实现列转行

在 SQL 任务里面经常会遇到一列转多行的需求,下面就来总结一下在 Flink SQL 里面如何实现列转行的,先来看下面的一个具体案例. 需求 原始数据格式如下: namedatatest[{"content_type":"flink","url":"111"},{"content_type&quo…...

React中右击出现自定弹窗

前言 在react中点击右键,完成阻止浏览器的默认行为,完成自定义的悬浮框(Menu菜单). 版本 "react": "^18.2.0", "umijs/route-utils": "^4.0.1", "antd": "^5.18.1", "ant-design/pro-components": &q…...

Unity类银河战士恶魔城学习总结(P128 Switch UI with KeyBoard用键盘切换UI)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了用键盘切换角色UI&#xff0c;技能树UI&#xff0c;合成面板UI和设置UI UI.cs 1. 变量与字段 characterUI&#xff0c;skill…...

基于Springboot+微信小程序的急救常识学习系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 该系统…...

【云计算解决方案面试整理】3-7主流云计算平台、云计算架构、安全防护

准备面云计算解决方案的岗位,整理了一些,也请大佬们指点。 文档分为 云计算基础概念、云计算技术原理、主流云计算平台(以天翼云为例)、云计算架构(弹性设计、高可用设计、高性能设计)、安全防护几个方面。 三、主流云计算平台 1.阿里云云计算平台 强大的计算能力:拥有…...

数据库范式、MySQL 架构、算法与树的深入解析

一、数据库范式 在数据库设计中&#xff0c;范式是一系列规则&#xff0c;用于确保数据的组织和存储具有良好的结构、完整性以及最小化的数据冗余。如果不遵循范式设计&#xff0c;数据可能会以平铺式罗列&#xff0c;仅使用冒号、分号等简单分隔。这种方式存在诸多弊端&#…...

设计模式之责任链模式(Chain Of Responsibility)

一、责任链模式介绍 1、责任链模式介绍 职责链模式(chain of responsibility pattern) 定义: 避免将一个请求的发送者与接收者耦合在 一起&#xff0c;让多个对象都有机会处理请求。将接收请求的对象连接成一条链&#xff0c;并且沿着这条链 传递请求&#xff0c;直到有一个对…...

SQLite 全文检索:快速高效的文本查询方案

文章目录 什么是全文检索&#xff1f;如何启用 FTS&#xff1f;插入数据执行全文检索关联原始表与 FTS 表数据更新结论 说明: 本文以博客内容全文检索为例。 什么是全文检索&#xff1f; 全文检索是指对文本数据进行索引和查询的一种技术。与常规的 LIKE 查询不同&#xff0c…...

【微信小程序】报修管理

一、报修管理 报修管理是为方便业主联系维修师傅的一个服务&#xff0c;业主确认需要维修的房到后&#xff0c;再指定维修项目以及上门的时间待待师傅联系上门服务即可。 1.1 在线报修 业主通过在线的方式填写报修的信息&#xff0c;包括房屋信息、维修项目、联系电话、上门…...

C++——视频问题总结

1、C和C的区别 CC面向过程对象注重程序的实现逻辑程序的整体设计内容C语言采用了一种有序的编程方法——结构化编程&#xff1a;将一个大型程序分解为一个个小型的&#xff0c;易于编写的模块&#xff0c;所有模块有序调动&#xff0c;形成了一个程序的完整的运行链C将问题分解…...

Ubuntu24.04 network:0 unclaimed wireless adapter no found

前言&#xff1a; 所遇问题原因在于&#xff0c;折腾显卡cuda版本&#xff0c;导致nvidia驱动没了&#xff0c;使用sudo ubuntu-drivers autoinstall后&#xff0c;驱动有了&#xff0c;但是reboot后无线网卡无法识别&#xff0c;此外usb无线网络也无法使用&#xff0c;ifconfi…...

Java 使用MyBatis-Plus数据操作关键字冲突报错You have an error in your SQL syntax问题

问题 这个报错是出现在Java Spring boot项目中&#xff0c;使用MyBatis-Plus通过创建的实体类对数据库的操作过程中&#xff0c;通过实体创建数据库表是没有问题的&#xff0c;而在接口调用服务类操作数据库的时候&#xff0c;会出现报错。报错详情如下&#xff1a; 服务请求异…...

Arduino步进电机控制:按键调速与定时器中断实现

1. 项目概述与核心需求解析最近在捣鼓一个自动化小装置&#xff0c;核心需求就是通过几个物理按键来控制步进电机的动作&#xff0c;比如正转、反转、加速、减速或者停止。这听起来像是很多创客项目、小型自动化设备或者教学演示里最基础的一环。我猜你可能是电子爱好者、学生&…...

技术人的职业健康:保护身体,持续前行

技术人的职业健康&#xff1a;保护身体&#xff0c;持续前行 引言 作为一名技术人&#xff0c;我们常常长时间坐在电脑前&#xff0c;忽略了身体健康。今天就来分享一下职业健康的重要性和保护方法。 常见健康问题 颈椎问题 长时间低头看电脑会导致颈椎问题&#xff1a; 症状&a…...

YOLOv8模型家族全解析:P2、P6、标准版到底该选哪个?一张图帮你搞定选择困难症

YOLOv8模型家族全解析&#xff1a;P2、P6、标准版到底该选哪个&#xff1f; 在计算机视觉项目的初期&#xff0c;模型选型往往是最令人头疼的环节。面对GitHub仓库中琳琅满目的YAML配置文件&#xff0c;即便是经验丰富的工程师也难免陷入选择困难。YOLOv8作为当前最先进的目标检…...

对抗攻击下SGD收敛性分析与量子计算优化

1. 对抗攻击下的随机梯度下降收敛性解析随机梯度下降&#xff08;Stochastic Gradient Descent, SGD&#xff09;作为机器学习优化的核心算法&#xff0c;其鲁棒性在对抗环境下显得尤为重要。当梯度估计被恶意扰动时&#xff0c;传统收敛理论需要重新审视。我们通过引入攻击误差…...

NV170D语音芯片在智能锁离线语音交互中的工程实践

1. 项目概述&#xff1a;当智能锁“开口说话”智能锁这东西&#xff0c;现在家里、公寓、办公室基本都普及了。从最早的密码、指纹&#xff0c;到现在的刷脸、手机NFC&#xff0c;解锁方式越来越花哨。但不知道你有没有过这样的体验&#xff1a;大晚上回家&#xff0c;楼道灯暗…...

从Pooling到MetaFormer:深入解析PoolFormer如何用极简算子重塑视觉Transformer架构

1. 为什么说PoolFormer是Transformer的"极简主义革命"&#xff1f; 第一次看到PoolFormer的论文时&#xff0c;我正坐在咖啡馆调试一个复杂的Vision Transformer模型。当读到"用平均池化替代注意力机制"的设计时&#xff0c;差点把咖啡喷在键盘上——这简…...

Kindle Comic Converter终极指南:解锁电子墨水屏漫画阅读体验

Kindle Comic Converter终极指南&#xff1a;解锁电子墨水屏漫画阅读体验 【免费下载链接】kcc KCC (a.k.a. Kindle Comic Converter) is a comic and manga converter for ebook readers. 项目地址: https://gitcode.com/gh_mirrors/kc/kcc 你是否曾尝试在Kindle或Kobo…...

大模型应用开发指南:从入门到实践,收藏这份从Demo到生产落地的完整攻略

本文分享了AI应用开发中从Demo到生产落地的完整实践&#xff0c;涵盖技术选型、架构设计、核心算法优化及部署经验。通过LangGraph、RAGFlow和Langfuse等工具&#xff0c;解决上下文超限、Prompt管理混乱等问题&#xff0c;最终实现准确率提升25%的工业级AI系统。适合程序员和小…...

163MusicLyrics:重新定义跨平台音乐歌词生态的技术实践

163MusicLyrics&#xff1a;重新定义跨平台音乐歌词生态的技术实践 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 在数字化音乐消费的今天&#xff0c;歌词不仅仅是歌曲…...

ubuntu服务器部署ai应用如何通过taotoken实现多模型稳定调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Ubuntu 服务器部署 AI 应用如何通过 Taotoken 实现多模型稳定调用 在 Ubuntu 服务器上部署 AI 应用时&#xff0c;开发者常常面临一…...