
Java基础知识
介绍java相关的基础知识
Gratitute_林腾
努力学习的程序员,菜就多练!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JavaSE-增强for遍历
这样,就快速生成了增强for的遍历。原创 2024-11-13 14:07:39 · 265 阅读 · 0 评论 -
JavaSE-HashSet
对于Set系列集合来说,HashSet没有新增的方法,因此我们只需了解它的底层实现原理即可。原创 2024-11-07 10:16:05 · 327 阅读 · 0 评论 -
JavaSE-Set系列集合
目录集合体系结构Set系列集合的特点Set集合的实现类回顾-Collection注意: 接口中的方法基本上继承自 接口,因此它的 API 与 接口大体一致。原创 2024-11-07 09:41:48 · 226 阅读 · 0 评论 -
JavaSE-HashMap的基本使用
目录HashMap的特点HashMap的底层原理总结原创 2024-11-06 08:58:16 · 206 阅读 · 0 评论 -
JavaSE-Map集合常用的API
在双列集合中,Map是最顶层的接口,在Map接口中定义了双列集合所有的共性方法。而HashMap、TreeMap是Map的实现类,LinkedHashMap是HashMap的子类。下面对一些稍微复杂的方法进行代码演示,其他简单的方法就不演示了。原创 2024-11-01 09:52:55 · 258 阅读 · 0 评论 -
JavaSE-双列集合的特点
目录双列集合的特点总结单列集合一次添加一个元素,而双列集合一次添加一对元素:在这一对对的元素当中,左边的列叫做键,右边的列叫做值:其中,一个键和一个值组成的整体,称为键值对,即键值对对象,也叫Entry对象:双列集合的特点:原创 2024-11-01 09:07:14 · 226 阅读 · 0 评论 -
JavaSE-Stream流的终结方法_collect
因为toMap接收的参数是函数式接口,所以可以使用Lambda表达式进行简化。如果我们要收集到Map集合中,键不能重复,否则会报错。关于toMap中的参数。原创 2024-10-31 10:33:19 · 358 阅读 · 0 评论 -
JavaSE-Lambda表达式
目录Lambda表达式初体验函数式编程Lambda表达式的标准格式Lambda表达式的省略写法总结原创 2024-10-31 09:30:20 · 224 阅读 · 0 评论 -
JavaSE-匿名内部类
比如现在有一个接口,叫做Inter,该接口中有一个叫做show的抽象方法,那么我们就可以写如下的匿名内部类:比如现在有一个Student类实现了Swim接口如果转换成匿名内部类,就变成:图中紫色线条框住的部分才是匿名内部类。new Swim() {.....}这个整体是匿名内部类的对象。注:Animal是一个抽象类所以,使用下面的方式,就不用单独定义一个类了:原创 2024-10-30 16:16:20 · 146 阅读 · 0 评论 -
JavaSE-Stream流的终结方法_forEach_count_toArray_collect
【代码】JavaSE-Stream流的终结方法_forEach_count_toArray。原创 2024-10-30 15:15:40 · 167 阅读 · 0 评论 -
JavaSE-Stream流的中间方法
【代码】JavaSE-Stream流的中间方法。原创 2024-10-30 14:32:54 · 216 阅读 · 0 评论 -
JavaSE-Stream流的思想_获取Stream流
关于Stream接口中的静态方法of(),该方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组,但是数组里的元素必须是引用数据类型的,如果数组里的元素是基本数据类型,则会把整个数组当成一个元素,放到Stream流中。ls.keySet().stream()的作用就是获取一条Stream流,并将ls的所有键(key)放到Stream流上。ls.entrySet().stream()的作用就是获取一条Stream流,并将ls的所有键值对放到Stream流上。获取Stream流的代码演示。原创 2024-10-28 15:32:42 · 290 阅读 · 0 评论 -
JavaSE-Stream流的初体验
可以看到,在不使用Stream流的情况,我们能够实现案例需求,但是代码书写起来其实也挺麻烦的。可以看到,使用Stream流后,需求的实现只需一行代码即可搞定,大大简化了代码编写的复杂度。原创 2024-10-28 14:29:36 · 229 阅读 · 0 评论 -
JavaSE-接口
在Java中,接口的应用主要包括以下几个方面:定义规范:接口可以定义一组方法,这些方法可以被不同的类实现。这样,接口就为类提供了一个统一的行为规范。实现多态:通过接口,Java支持多态性。不同的类可以实现同一个接口,调用时可以使用接口类型的引用,这样可以在运行时决定具体调用哪个类的实现。支持松耦合:使用接口可以降低类之间的耦合度。实现类只需实现接口定义的方法,而不需要关心其他类的具体实现细节。接口和抽象类在Java中都用于定义某种规范或行为,但它们之间有一些重要的异同点:相同点:不同点:实现方式:继承关系:原创 2024-10-24 09:18:13 · 404 阅读 · 0 评论 -
JavaSE-static_静态变量和静态方法
static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。原创 2024-10-17 21:15:08 · 235 阅读 · 0 评论 -
设计模式-工厂模式
理解:比如代码中创建了很多个对象,如果没有使用工厂模式,当创建对象的方式发生改变,比如 new Student()变为new Student(18,"男"),就需要将程序中所有创建对象的代码一个个更改,但如果使用工厂模式,只需要在工厂中修改创建对象的方式即可。原创 2024-10-17 14:13:52 · 335 阅读 · 0 评论 -
设计模式-单例模式
以下是一个简单的 Java 单例模式的实现示例:说明:可以在类中创建本类的实例,这是实现单例模式的一种方式。使用静态变量来存储类的实例,然后通过一个静态方法提供访问,这样就确保了整个应用程序中只有一个实例。将实例变量设置为 静态,意味着这个变量属于类本身,而不是某个对象。如果 不是静态的,那么每个 对象都有自己的 成员变量。这就意味着,当你 时,它会创建一个新的 对象,并拥有一个新的 变量。如果每次都用不同的 对象调用 ,那将会创建多个不同的实例。举个例子,假设代码如下: 创建了原创 2024-10-17 10:33:33 · 870 阅读 · 0 评论 -
idea的Debug断点调试
方法内部实际上会带你深入到 Java 库的实现细节,比如 IO 操作、同步机制等,这通常不是开发者在调试应用程序逻辑时所关心的。调试器会选择在用户编写的代码中步入,而跳过这些常见的库方法。这样的标准库方法,调试器通常不会进入其内部。在对应行的左侧点击鼠标左键,会出现一个小红点,有小红点说明在该行打上了断点。再点击一次步入按钮,就会执行test1()方法内的打印123的操作。包),并且大多数调试器默认会跳过标准库的内部实现。点击该按钮后,会执行该断点处的代码,并停在下一行。的效果类似,也是逐行执行代码。原创 2024-10-14 16:25:54 · 1475 阅读 · 0 评论 -
JavaSE-集合的基本使用
目录为什么要有集合?集合存储数据类型的特点集合和数组的对比集合介绍集合的创建ArrayList成员方法在Java中,集合()是用于存储和操作一组对象的数据结构,类似于数组,但具有更多灵活性和功能。Java提供了集合框架(Java Collections Framework, JCF),它包括接口、实现类和算法,来处理动态大小的数据集。使用集合的原因有以下几个方面:1. 动态大小2. 多样性的数据结构集合不能直接存基本数据类型,如果一定要存,需要转换成对应的包装类才行:在java中,规定了很多种集合,每一种集原创 2024-10-07 15:23:50 · 406 阅读 · 0 评论 -
JavaSE-正则表达式
正则表达式(Regular Expression,简称正则或regex)是一种用于匹配字符串的强大工具,主要用来搜索、编辑或操作文本。它通过一组特定的字符规则定义一个匹配模式,能够用来识别字符串中的特定子串,验证输入格式,或进行文本替换等操作。原创 2024-10-07 14:48:58 · 255 阅读 · 0 评论 -
JavaSE-StringBuilder和StringBuffer的区别
可以发现,StringBuffer里面的每个成员方法上都有synchronized,而StringBuiler里面都没有synchronized,则就说明StringBuffer是线程安全的,因为使用synchronized的方法是同步方法。如果代码是单线程的,不需要考虑多线程中数据安全的情况,就使用StringBuilder即可。左边是StringBuiler的源码,右边是StringBuffer的源码。左边的是StringBuilder,右边的是StringBuffer。原创 2024-09-15 21:15:23 · 301 阅读 · 0 评论 -
JavaSE-多线程之同步方法
锁对象是this,这个this就是测试类中创建的mr,在整个代码中,mr是唯一的,所有此时锁对象就是唯一的,没有问题。MyRunnable对象是作为参数让线程去执行的,所以只会创建一次对象,ticket就没有必要加上static了。把同步代码块里面所有的代码都放到方法当中。选中里面所有的代码,原创 2024-09-15 20:56:56 · 206 阅读 · 0 评论 -
JavaSE-多线程之线程的安全问题及其解决方案
线程的安全问题(Thread Safety Issue)是指在多线程编程中,多个线程同时访问共享资源时,可能会引发的数据不一致、死锁、竞争条件等问题。原创 2024-09-10 15:17:15 · 559 阅读 · 0 评论 -
JavaSE-多线程之线程的生命周期
线程的生命周期描述了线程从创建到终止所经历的各个状态和阶段。在多线程编程中,线程会根据其执行状态处于不同的生命周期阶段。原创 2024-09-10 14:07:42 · 229 阅读 · 0 评论 -
JavaSE-多线程之插入线程
在t线程启动之前,按顺序执行main线程中的代码。在t线程启动后,如果不加join(),main线程会与t线程抢夺CPU;如果加了join(),t线程一定在main线程的前面执行。方法将一个线程插入到另一个线程的执行过程中,确保当前线程在另一个线程执行完毕之前不会继续执行。它不是一个Java的正式术语,但指的是这种通过。的线程执行完成后,才会继续执行。这种机制通常用于线程间的同步控制,确保某些操作在另一个线程完成后才开始。当一个线程调用另一个线程的。方法时,调用线程会等待被。实现的线程插入机制。原创 2024-09-07 10:10:54 · 376 阅读 · 0 评论 -
JavaSE-多线程之礼让线程
对于飞机这个线程,当该线程打印完之后,就会出让当前CPU的执行权,在下一次的cpu抢夺时,飞机和坦克就会重新抢夺CPU的执行权。所以就有可能会让打印的结果尽可能均匀一点。但也只是尽可能均匀一点,虽然飞机出让了CPU的执行权,但是再次抢夺时,飞机有可能再次抢夺到CPU。时,当前线程会将自己从“运行状态”暂时切换到“可运行状态”,并且让操作系统的线程调度器重新选择一个可运行的线程来执行。方法,主动让出当前线程的执行时间片,允许其他线程获得CPU执行机会。具体来说,当一个线程调用。原创 2024-09-07 09:40:13 · 318 阅读 · 0 评论 -
JavaSE-多线程之守护线程
守护线程(Daemon Thread)是一种特殊的线程,它在后台运行,为其他非守护线程提供支持或执行辅助任务。守护线程与普通的用户线程(非守护线程)不同,守护线程的生命周期依赖于用户线程,当所有用户线程都执行完毕后,JVM会自动退出,不论守护线程是否还在运行。原创 2024-09-03 15:29:39 · 258 阅读 · 0 评论 -
JavaSE-多线程之线程的优先级
是一种主动的调度方式,操作系统会控制线程的执行时间,并根据一定的策略强制切换线程。即使当前线程还没有完成执行,当系统判断它的运行时间已经到了或有更高优先级的线程需要执行时,系统会暂停该线程的运行,切换到另一个线程。在Java中,采用的是抢占式调度,强调随机性。而线程的优先级就跟随机性有关,优先级越大,该线程抢占到CPU的概率就越大。所以该执行结果是有可能的,虽然飞机的优先级低,但它也有可能比坦克先执行完毕,只是出现这种情况的概率比较低。在Java中,线程的优先级分为10档,最小的是1,最大的是10。原创 2024-09-03 15:04:21 · 265 阅读 · 0 评论 -
JavaSE-多线程之多线程中常用的成员方法
除了使用setName()为线程命名,也可以通过构造方法的方式为线程命名,虽然MyThread类继承Thread类,但是构造方法是无法继承的,而子类想使用父类的构造方法,需要编写利用super关键字去调用父类的构造方法。在MyThread类中,按住alt+Insert(关闭Fn),选择构造函数,并选择如图,再点击确定。该代码的效果就是:控制台打印了11111后,等待了5秒,再打印了22222.注:MyThread类是自己创建的类,继承Thread类。图中是main方法中的代码。接下来演示图中框出的部分。原创 2024-09-03 14:37:11 · 322 阅读 · 0 评论 -
JavaSE-多线程之多线程三种实现方式的对比
原创 2024-09-01 14:58:37 · 145 阅读 · 0 评论 -
JavaSE-多线程之多线程的第三种实现方式_利用Callable接口和Future接口
这种方式可以获取到多线程运行的结果。原创 2024-09-01 14:52:55 · 297 阅读 · 0 评论 -
JavaSE-多线程之多线程的第二种实现方式_实现Runnable接口
程序运行后,控制台打印的结果如下从结果上来看,我们可以发现,两个线程是交替执行的。原创 2024-09-01 14:24:21 · 283 阅读 · 0 评论 -
JavaSE-多线程之多线程的第一种实现方式_继承Thread类
启动程序后,控制台的打印结果。原创 2024-09-01 09:54:57 · 305 阅读 · 0 评论 -
JavaSE-多线程之并发和并行
目录并发并行并发和并行的切换总结图中,右手就可以看作cpu,而鼠标、烟、可乐就可以看作是三条线程。cpu就是在这三条线程之间交替执行。这个过程就是并发如上图,两条线程,由两个CPU同时执行。虽然电脑只有一个CPU,但是CPU有多种类型而线程的数量,就表示该电脑能同时运行多少条线程。2核4线程可以同时运行4条线程,如果计算机中只有4条线程,则不需要切换。但是,如果计算机中的线程越来越多,那么这4条红线就会在多个线程之间随机地进行切换所以,在计算机中,并发和并行有可能同时发生。如上图,四条线同时执行,此为并行,原创 2024-09-01 09:25:36 · 284 阅读 · 0 评论 -
JavaSE-什么是多线程
进程是程序的基本执行实体线程是操作系统能够进行运算调度的最小单位。它被包含在进程中,是进程的实际运作单位360软件运行时本身是一个进程而360软件中的相关功能就可以看作若干个线程。如果功能很多,就是多线程cpu可以在多个程序之间进行切换,把等待的空闲时间充分地利用起来,可以提高程序的运行效率原创 2024-08-31 21:03:16 · 207 阅读 · 0 评论 -
java基础-创建对象时类内部的初始化顺序
结合上面两点,创建对象时类内部的初始化顺序为:先按静态数据的先后顺序初始化(如果它们尚未因前面的对象创建过程而被初始化),然后是变量(成员变量)的先后顺序初始化,最后是任何方法(包括构造器)的先后顺序初始化。原创 2024-08-18 19:33:45 · 373 阅读 · 0 评论 -
try...catch捕获异常
目的:当代码出现异常时,可以让程序继续往下执行。原创 2024-06-08 09:13:42 · 202 阅读 · 0 评论 -
JVM虚拟机默认处理异常的方式
把异常的名称,异常原因及异常出现的位置等信息输出在了控制台(以红色字体打印)把异常的名称,异常原因及异常出现的位置等信息输出在了控制台(以红色字体打印)程序停止执行,下面的代码不会再执行了。程序停止执行,下面的代码不会再执行了。JVM默认的处理方式。原创 2024-06-08 09:04:29 · 159 阅读 · 0 评论 -
异常在代码中的两个作用
作用2:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况。作用1:异常是用来查询bug的关键参考信息。原创 2024-06-08 08:57:40 · 189 阅读 · 0 评论 -
编译时异常和运行时异常
目录案例区别总结原创 2024-06-07 16:07:25 · 203 阅读 · 0 评论