- 博客(33)
- 收藏
- 关注
原创 Java练习——day2(集合嵌套)
调用 Collections.sort 方法,并传入一个自定义的 Comparator,比较两个 Student 对象的分数,从而实现按分数从高到低(降序)排序。给定一个字符串列表List words,统计每个单词出现的次数,并用Map<String, Integer>存储结果。实现一个LRU(最近最少使用)缓存,使用LinkedHashMap或其他集合,确保插入和查询的时间复杂度为O(1)。创建一个Student类(含name和score字段),将多个Student对象存入List,按分数从高到低排序。
2025-04-16 21:56:18
477
原创 Java练习——day1(反射)
在调试或诊断复杂系统时,反射可以帮助开发者查看对象的真实内部状态,以便更迅速地定位问题。调用 String.class.getMethods() 能获取 String 类中所有的公共方法,包括从父类继承的方法。实现一个简易的“对象拷贝工具”,通过反射将源对象的所有字段值复制到目标对象的同名字段中(支持不同类的兼容字段)。创建一个包含私有字段private int value的类Secret,通过反射修改该字段的值并验证结果。编写代码,通过反射获取String类的所有公共方法名称,并按字母顺序打印。
2025-04-15 21:11:14
991
原创 Java学习——day30(Lambda表达式与 StreamAPI)
Lambda 表达式是 Java 8 引入的一种语法形式,用于实现函数式接口(即只有一个抽象方法的接口)的匿名实现。它使得代码更加简洁,支持函数式编程风格。(参数列表) -> {语句块}参数列表可以为空(“()”)或一个或多个参数;->是 Lambda 箭头,分隔参数与函数体;函数体可以是单个表达式,也可以是一段代码块(若使用代码块则需使用花括号并显式 return)。Stream API 提供了一种声明性、函数式的方式来处理集合数据。
2025-04-14 19:20:23
705
原创 Java学习——day29(并发控制高级工具与设计模式)
作用CountDownLatch 用于让一个或多个线程等待其他线程完成某些操作。使用方式创建时指定计数值,每当某个线程调用 countDown() 后,计数器减一;调用 await() 的线程会阻塞,直到计数器归零。示例场景等待所有工作线程启动完毕后,再同时开始执行后续流程。高级并发工具的应用通过 CountDownLatch、CyclicBarrier、Semaphore,我们可以对线程的启动顺序、周期性同步以及并发访问控制进行更精细的管理,为复杂场景下的并发编程提供有力支持。设计模式。
2025-04-13 20:30:47
935
原创 Java学习——day28(Java并发工具类与线程池)
作用:ExecutorService 是 Java 并发包中一个用于管理线程池的接口,封装了线程的创建、执行和销毁过程。特点:1.能动态分配线程资源;2.能安排任务的执行,并且支持有返回结果的任务;3.提供 shutdown()/shutdownNow() 方法用于平滑关闭线程池。使用表明任务返回的是一个 String 类型的结果。循环提交 5 个任务,每个任务模拟了 500 毫秒的工作,并返回 “任务 i 执行完毕”。
2025-04-12 15:35:28
602
原创 Java学习——day27(线程间通信与死锁防范)
通过·wait()notify()和实现线程间的协调,确保在临界区内的线程能够互相告知状态变化,从而达到数据共享和顺序控制。学习了死锁的四个必要条件,并通过设计合理的同步代码(避免不必要的嵌套锁定和严格的锁获取顺序)来防止死锁的发生。编写协作代码时,应尽量缩小 synchronized 块的范围,确保及时释放锁。
2025-04-11 21:24:22
649
原创 Java学习——day26(线程同步与共享资源保护)
通过引入同步措施(例如 关键字或接口实现)可以确保在同一时刻只有一个线程访问共享资源,从而保证数据一致性。原理:synchronized 利用对象的内部锁(Monitor)来确保同步,只有获得锁的线程才能进入临界区。用法:优点:语法简单,适合大部分场景。缺点:颗粒度较粗,灵活性不如 Lock。我们通过一个简单示例来比较两种同步方式在多线程计数器实现中的使用。示例一:使用 synchronized 关键字创建一个使用 synchronized 保护自增操作的计数器,确保在多个线程中并发更新时结果正确。示例
2025-04-10 21:19:15
1021
原创 Java学习——day25(多线程基础与线程创建方式)
*线程基本概念:掌握线程的创建、运行及生命周期状态,有助于理解并发编程模型。继承 Thread 的实现方式适合简单任务,但受限于单继承;实现 Runnable 接口更灵活,有利于任务重用和资源共享。在实际开发中,根据具体需求选择合适的线程创建方式。同时注意线程安全、同步等问题,确保多线程程序运行可靠。
2025-04-09 16:37:31
831
原创 Java学习——day24(反射进阶:注解与动态代理)
/ 定义一个自定义注解@Target(ElementType.METHOD) // 这个注解应用在方法上@Retention(RetentionPolicy.RUNTIME) // 运行时可以反射获取String value() default "日志记录";// 应用自定义注解@Log(value = "执行sayHello方法")");try {// 获取 sayHello 方法的 Class 对象// 判断该方法是否有 Log 注解// 获取注解的值。
2025-04-08 16:41:28
521
原创 Java学习——day23(反射的对象创建与方法调用)
让代码具备了动态性,能在运行时操作类、方法和属性。适合做框架开发和插件机制等对扩展性要求高的场景。依赖注入:如 Spring 中的 @Autowired。动态代理:如 AOP(面向切面编程)。通用工具类:如 Bean 拷贝、ORM 映射(MyBatis、Hibernate 等)。反射往往会带来一定的性能开销,频繁调用需谨慎。对私有成员的访问需设置 setAccessible(true),可能存在安全风险。
2025-04-07 21:06:03
282
原创 Java学习——day22(Java反射基础入门)
反射是什么?Java反射是一种在运行时动态获取类的结构信息并操作对象的机制。通过反射,你可以:获取类信息:在程序运行时动态加载类,检查类的属性、方法和构造函数。动态操作:可以动态调用对象的方法、修改对象的属性(即使是私有成员),甚至创建新的对象实例。应用场景:框架开发(如Spring、Hibernate)常常利用反射实现依赖注入、动态代理和数据绑定。插件化开发:根据配置动态加载类,实现模块化扩展。创建一个名为Personname(String)、age(int)。
2025-04-06 19:42:43
845
原创 Java学习——day21
今日学习目标:第 7 天:复习 & 小项目目标巩固本周所学的文件 I/O 知识。完成一个 日志记录系统 项目。实践任务日志记录系统:编写一个 Logger 类,每次程序运行时,记录当前时间和操作日志到 log.txt 文件中。允许用户查询日志历史记录。(昨天忘记发了,今早补发一下)
2025-03-14 09:04:01
557
原创 Java学习——day20
通过使用try-catch以及finally你可以有效地处理文件读写过程中出现的各种异常,并确保资源得到正确释放。改进后的文件管理工具更健壮当用户输入了错误路径或在读写文件时遇到问题时,程序能给出清晰的提示,并且不会造成资源泄漏。后续学习方向更深入的异常体系:自定义异常、异常链等更复杂的文件操作:如多线程读写、大文件分块处理等。
2025-03-12 22:27:35
592
原创 Java学习——day19
理论与实践结合今天的学习内容不仅涵盖了文件管理工具设计的基本原理,还通过具体的 Java 实践任务将理论应用到实际编程中。全面的异常处理能力通过处理和,学会了如何在面对文件操作中的常见问题时,给予用户明确的错误提示,并保证程序的健壮性。实践反馈编写实际代码并调试过程中,将更深刻体会到文件操作中细节的重要性,例如资源管理、用户输入校验以及异常处理等。
2025-03-11 16:15:13
1027
原创 Java学习——day18
序列化与反序列化:是对象在存储和传输中的关键技术。ObjectOutputStream 与 ObjectInputStream:分别用于写入和读取对象数据。实现 Serializable 接口:是确保一个类的对象能够被序列化的必要条件。实践任务:通过编写代码练习,将理论知识转化为实战技能。
2025-03-07 18:09:49
781
原创 Java学习——17
和 **FileOutputStream **是字节流的两种常见实现类,用于二进制数据的读取和写入。使用 **read() **方法可以逐字节读取文件内容,使用write()方法可以逐字节写入文件。在实践中,字节流常用于处理图片、音频、视频等二进制文件。
2025-03-06 21:20:14
574
原创 Java学习——day16
提供缓冲功能,提高读取速度。常用方法方法作用readLine()读取一行文本,返回null表示文件结束close()关闭流提供缓冲功能,提高写入速度。常用方法方法作用写入字符串newLine()换行flush()刷新缓冲区close()关闭流理解字符流与字节流的区别(文本 vs. 二进制)。掌握** 读取文件**(按行读取,提高效率)。掌握写入文件(支持换行、追加模式)。
2025-03-05 18:45:57
626
原创 Java学习——day15
(1) File 类的作用File 类不负责文件的内容读写,仅用于管理文件和目录。可以用于:创建、删除文件/目录检查文件是否存在获取文件信息(大小、路径、名称等)列出目录中的文件列表导包:掌握 File 类的基本操作(创建、删除、检查文件和目录)。了解路径操作(绝对路径 vs. 相对路径)。实践练习:实现基本文件和目录管理。
2025-03-04 15:48:12
233
原创 Java学习——day14
集合框架使用 HashMap<String, Student> 存储学生信息。(List 和 Set 可用于扩展功能(如 ArrayList 存储多个成绩)。异常处理输入异常:NumberFormatException(防止用户输入非数字)。自定义异常:InvalidScoreException(确保成绩合法)。逻辑异常:IllegalArgumentException(防止重复或无效学号)。面向对象设计Student 类 代表学生信息。
2025-03-03 19:44:42
634
原创 Java学习——day13
throw new InvalidScoreException("成绩必须在 0 到 100 之间");代码执行流程步骤操作1调用 checkScore(105),105 > 100,触发 throw new InvalidScoreException(“成绩必须在 0 到 100 之间”)2InvalidScoreException 被抛出,程序终止执行该方法3调用者需要 捕获异常(try-catch) 或 继续声明 throws作用(自定义异常)继承Exception。
2025-03-02 17:22:55
1144
原创 Java学习——day12
Java 内置的异常不能涵盖所有场景,有时需要创建自己的异常来处理特定的业务逻辑错误。限制用户输入的范围验证数据合法性业务逻辑错误(例如:银行账户余额不足)自定义异常需要继承Exception(受检异常)或(未受检异常)。1.继承Exception(受检异常,必须处理)// 创建自定义异常2.继承(未受检异常,可以选择处理)// 创建自定义运行时异常throw new AgeException("年龄必须大于或等于 18 岁");如果age小于 18,就抛出异常。使用throws。
2025-03-01 18:20:57
627
原创 Java学习——day11
1.异常处理机制:通过try-catch语句块捕获并处理程序中的异常,可以防止程序因异常崩溃,并为用户提供错误信息。2.异常的分类已检查异常(Checked Exception):如,编译时强制要求处理。未检查异常(Unchecked Exception):如,可以选择不处理。3.多重catch语句:使用分隔符可以在一个catch块中捕获多个异常类型。
2025-02-28 18:10:10
852
原创 Java学习——day10
Map是一个键值对集合,表示一个映射关系。它的基本特点是将一个** 键**(key)映射到一个值(value),每个键在 Map 中是唯一的,但可以有多个不同的值与不同的键相关联。键值对:Map 中的每个元素是一个键值对(键(key)是用于查找的唯一标识,值(value)是与该键相关联的数据。Map 的常见实现类HashMap:基于哈希表实现,元素是无序的,查询效率高(O(1)),不保证顺序。TreeMap。
2025-02-27 20:28:59
652
原创 Java学习——day9
Set 是 Java 集合框架中的一个接口,继承自 Collection 接口,表示一组不重复的元素集合。与 List 接口不同,Set 集合中不允许出现重复元素,并且它不保证元素的存储顺序(即元素是无序的,除非使用特定的实现类如 TreeSet)。因此,Set 主要用于存储那些希望元素唯一且不关心顺序的数据。Set 接口的特点:1)无序性:Set 接口并不保证元素的顺序,特别是像 HashSet 和 TreeSet 这样实现类的集合。在 HashSet 中,元素的存储顺序是不确定的。
2025-02-26 23:07:58
764
原创 Java学习——day8
Java 集合框架提供了一套性能优良,使用方便的接口和类,java集合框架位于java.util包中, 所以当使用集合框架的时候需要进行导包。
2025-02-25 17:49:19
827
原创 Java学习——day7
有返回值和无返回值的方法:有返回值:例如计算两个数的和、差、积、商。示例代码:无返回值(void):用于执行任务但不返回值。示例代码:// 成员变量int age;// 自定义构造方法// 成员方法// 创建对象并初始化成员变量// 输出:Name: Alice, Age: 25Person是一个类名**,不是方法名。greet是一个方法名**,它的参数类型是Person类类型。Person在这里是参数类型,表示greet方法接受一个Person对象作为参数。
2025-02-24 19:43:00
803
原创 Java学习——day6
在 Java 中,类是创建对象的模板或蓝图。类定义了对象的属性和行为。通过类,你可以创建任意多个对象。类名:类的名字。按照 Java 的命名规范,类名通常使用大写字母开头(如 Person)。成员变量:类中定义的变量,用来表示对象的属性。成员方法:类中定义的函数,用来描述对象的行为。构造方法:一个特殊的方法,用来初始化对象的成员变量。构造方法:构造方法是一个特殊的方法,用来初始化对象的成员变量。构造方法与类名相同,并且没有返回类型。
2025-02-23 17:04:12
649
原创 对day4做的一个复习
即使方法的参数类型和数量相同,参数的顺序不同,也可以认为是重载的方法。即使方法名相同,只要参数的数量不同,Java 也会识别为不同的方法。当方法的参数类型不同(即使数量相同)时,Java 也会将它们视为不同的方法。实例方法属于类的对象,调用时需要先创建对象,再通过该对象调用实例方法。这些方法带有一个或多个参数,执行时会根据传入的参数进行不同的处理。例子3:计算圆的面积,接受不同数量的参数。例子1:加法方法,接受不同数量的参数。例子1:加法方法,接受不同类型的参数。例子1:计算两个数的和的方法。
2025-02-22 20:37:25
904
原创 Java学习——day5
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,…,number99。// 定义数组的两种方式// 定义并初始化一个包含5个整数的数组// 静态初始化第一种方法 new int[5] 定义了一个大小为 5 的整数数组,所有元素的初始值为 0。
2025-02-22 16:47:40
879
原创 Java学习——day4
方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:test<MethodUnderTest>_<state>,例如 testPop_emptyStack。
2025-02-21 17:49:32
721
原创 Java学习——day3
for 循环:适用于已知循环次数的情况,常用来遍历数组或进行数值计算。while 循环:适用于不确定循环次数的情况,循环体在每次执行前判断条件是否满足。break 和 continue:控制循环流,break 用于退出循环,continue 用于跳过当前循环的剩余部分。do-while:类似于 while 循环,但至少执行一次循环体。
2025-02-20 17:08:40
1011
原创 Java学习———day2
if/else 语句用于条件判断。else if 语句可以链接多个条件,逐一判断。== 和!= 用于判断两个值是否相等或不相等。switch 语句用于替代多个 if/else,根据不同的条件执行不同的代码。break 用于退出 switch,default 用于没有匹配到 case 时执行的默认代码块。布尔运算符(&&、||、!)用于组合多个条件表达式,在复杂的条件判断中非常有用。
2025-02-19 17:51:04
745
原创 Java学习——day1
官网地址:[Java Downloads | Oracle 中国](https://www.oracle.com/cn/java/technologies/downloads/#jdk23-windows "Java Downloads | Oracle 中国")访问官方网站:打开浏览器,访问 [JetBrains 官网](https://www.jetbrains.com/idea/ "JetBrains 官网")。// M 代表男性,F 代表女性。// 浮点型:用于存储身高。// 整型:用于存储年龄。
2025-02-18 19:35:01
315
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人