Java SE
文章平均质量分 84
卷到起飞的数分
这个作者很懒,什么都没留下…
展开
-
Java SE入门及基础(62)& 线程池 & 执行器
线程池启动后,核心线程就已经启动,当一个新的任务提交到线程池时,首先会检测当前是否存在空闲的核心线程,如果存在,就将该任务交给这个空闲核心线程执行。如果队列满了,此时线程池会检测当前工作线程数是否达到最大线程数,如果没有达到最大线程数,那么将由线程工厂创建新的工作线程来执行队列中的任务,这样,队列中就有空间能够容纳这个新任务。//关闭线程池,等待线程池中的任务执行完成,但是不会接收新的线程。2,//非核心线程的工作线程存活时间。//创建一个给定核心线程数以及最大线程数的线程池,该线程池队列非常大。原创 2024-07-02 18:58:00 · 345 阅读 · 0 评论 -
Java SE入门及基础(61)& 死锁 & 死锁发生条件
线程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他线程占有,此时请求线程被阻塞,但对自己已获得的资源保持不放。线程要求对所分配的资源进行排他性控制,即在一段时间内某资源仅为一个线程所占有。线程所获得的资源在未使用完毕之前,不能被其他线程强行夺走,即只能由获得该资源的线程自己来释放(只能是主动释放)。System.out.println(name + "锁定对象o2");存在一种线程资源的循环等待链,链中每一个线程已获得的资源同时被链中下一个线程所请求。被阻塞在外,等待对象o2。原创 2024-07-02 18:50:47 · 593 阅读 · 0 评论 -
Java SE入门及基础(60)& 线程的实现(下) & 线程的同步(synchronized 和 Lock 的实现) & 线程通信 & 线程状态
按照约定,需要对对象的字段进行独占且一致的访问的线程必须在访问对象之前先获取对象的内在锁,然后在完成对它们的使用后释放该内在锁。只要一个线程拥有一个内在锁,其他任何线程都无法获得相同的锁。当线程调用同步方法时,它会自动获取该方法对象的内在锁,并在方法返回时释放该内锁。锁对象的工作方式非常类似于同步代码所使用的隐式锁。)内在锁在同步的两个方面都起作用:强制对对象状态的独占访问并建立对可见性至关重要的事前关联。当线程释放内在锁时,该动作与任何随后的相同锁获取之间将建立事前发生的关系。与隐式锁相比,Lock。原创 2024-06-30 17:30:03 · 905 阅读 · 0 评论 -
Java SE入门及基础(59)& 线程的实现(上) & 线程的创建方式 & 线程内存模型 & 线程安全
从结果中可以看出,同一张火车票被卖了多次,这是由于线程之间获取信息不同步导致。同时Runable 接口的实现可以被多个线程重用,但继承。实例的应用程序必须提供将在该线程中运行的代码。接口更具有优势,在实现接口的同时还可以继承自其他的父类,避免了Java。Runnable接口实现的线程。暂停当前运行的线程,然后再与其他线程争抢资源,称。使当前线程睡眠给定的时间(单位毫秒、纳秒)根据给定的线程任务和名称创建一个线程。使当前线程睡眠给定的时间(单位毫秒)根据给定的线程任务创建一个线程。创建一个依据名称的线程。原创 2024-06-30 17:10:44 · 992 阅读 · 0 评论 -
Java SE入门及基础(58)& 并发 & 进程与线程概念
这极大地增强了系统同时执行进程和线程的能力-但即使在没有多个处理器或执行核心的简单系统上,并发也是可能的。进程拥有自己独立的内存空间,换言之就是计算机分配内存的单位是进程。线程是在进程中,可以共享进程的资源比如内存。单个执行核心是通过操作系统的时间分片功能来进行进程和线程之间的处理时间的分配。在并发编程中,有两个基本的执行单元:进程和线程。线程共享进程的资源,包括内存和打开的文件。该线程具有创建其他线程的能力,我们将在下一部分中进行演示。仅用于同一系统上的进程之间的通信,而且还用于不同系统上的进程。原创 2024-06-28 12:00:47 · 780 阅读 · 0 评论 -
Java SE入门及基础(57)& Java常用API & 日期时间
当然可以,首先我们需要将日期按照我们熟悉的日期格式转换为一个字符串日期,然后再打印。//时间单位一般是毫秒,当然更精确的是纳秒。打印的日期不好看懂,能否按照我们熟悉的方式来打印?带参构造,表示根据给定的时间数字来构建一个日期对象,精确到毫秒。判断当前对象表示的日期是否在给定日期之前。判断当前对象表示的日期是否在给定日期之后。根据给定的日期格式构建一个日期格式化对象。获取日期对象中的时间数字,精确到毫秒。将给定的字符串格式日期解析为日期对象。设置日历表示的日期对象。获取日历表示日期对象。原创 2024-06-28 11:52:30 · 1259 阅读 · 0 评论 -
Java SE入门及基础(56)& 包装类
期望获取一个基本数据类型的值,但赋值时给定的是一个引用数据类型的对象,此时编译器会将这个引用数据类型。如果你在期望一个对象的地方使用原始数据类型,则编译器会为你将原始数据类型放入其包装类中。类似地,如果在期望使用基本数据类型的情况下使用包装类型,则编译器会为你解包该象。将字符串类型的数字转换为单精度浮点数。将字符串类型的数字转换为双精度浮点数。将字符串类型的布尔值转换为布尔值。将字符串类型的数字转换为长整数。将字符串类型的数字转换为短整数。将字符串类型的数字转换为整数。将字符串类型的数字转换为字节。原创 2024-06-19 15:45:59 · 362 阅读 · 0 评论 -
Java SE入门及基础(55)& Stream流及常用API
通过外部迭代,你的应用程序既可以确定要迭代的集合,又可以确定迭代的方式。它可以更轻松地利用并行计算的优势,这涉及将问题分为子问题,同时解决这些问题,然后将解决方案的结果组合到子问题中。)会产生非流结果,例如原始值(如双精度值),集合,或者在forEach的情况下根本没有任何值。它们处理流中的元素:聚合操作从流中而不是直接从集合中处理元素。流将一个基本数据类型的数组转换为包装类型的数组,再将包装类型的数组转换基本数据类型数组。筛选器操作返回一个新流,该流包含与筛选条件(此操作的参数)匹配的元素。原创 2024-06-19 15:39:10 · 654 阅读 · 0 评论 -
Java SE入门及基础(54)& 函数式接口
由于一个函数式接口仅包含一个抽象方法,因此在实现该方法时可以省略该方法的名称。Predicate 是条件的意思,可以检测给定数据是否满足条件,也可以与其他条件进行衔接。Function 是功能的意思,可以将一种数据类型的对象转换为另一种数据类型的对象,至于如何转换,就需要看这个接口被如何实现。可以消费一个被接收到的数据,至于如何消费,就需要看这个接口被如何实现。//不会打印任何信息,但是此时已经完成了字符串的组装,这是属于性能上的浪费。,该注解只能使用在接口类型的定义上,表明这是一个函数式接口,原创 2024-05-25 20:52:36 · 1175 阅读 · 0 评论 -
Java SE入门及基础(53)& 方法引用
它们是紧凑的,对于已经具有名称的方法lambda。表达式可以根据实现的接口方法推导省略,方法引用也可以根据实 现的接口方法进行推导省略。方法中带有一个字符串类型的参数,public void println(String x) 方法来实现时就可以接收这个字符串参数。表达式赋值的方法已经在某个类中有具体的实现,那么则可以通过双冒号来引用该方法作为Lambda。方法,这个方法已经有具体的实现,如果能够直接引用这个方法,那么代码将变得更为简洁。为方法引用符,而它所在的表达式被称为方法引用。表达式创建匿名方法。原创 2024-05-23 17:12:38 · 854 阅读 · 0 评论 -
Java SE入门及基础(53)& Set 接口
此链表定义了迭代顺序,即将元素插入到集合中的顺序(插入顺。请注意,如果将元素重新插入到集合中,则插入顺序不会受到影响。集合是一个集合,不能包含重复的元素。在哈希表中,是性能最好的实现。但是,它不能保证迭代的顺序。是,它不能保证顺序会随着时间的推移保持恒定。接口的哈希表和链表实现,具有可预测的迭代顺序。定,即使它们的实现类型不同,也可以有意义地比较。它不保证集合的迭代顺序。元素使用其自然顺序或在集合创建时提供的。的方法,并增加了禁止重复元素的限制。序,具体取决于所使用的构造方法。实例包含相同的元素,则它。原创 2024-05-20 10:57:24 · 549 阅读 · 0 评论 -
Java SE入门及基础(52)& Map 接口
此链表定义了迭代顺序,通常是将键插入映射的顺序(插入顺序)。存储的是一组无序的键值对。存储时是根据键的哈希码来计算存储的位置,因为对象的哈希码。集合是将键映射到值的对象。映射不能包含重复的键:每个键最多可以映射到一个值。此实现提供所有可选的映射操作,并允许空值和空键。接口的哈希表和链表实现,具有可预测的迭代顺序。根据集合存储的键的自然排序或在映射创建时提供的。采用的是数组加单向链表加红黑树的组合来存储数据。别是,它不能保证顺序会随着时间的推移保持恒定。采用的是数组、链表以及红黑树来存储数据。原创 2024-05-20 10:48:41 · 804 阅读 · 0 评论 -
Java SE入门及基础(51)& Queue 接口 & 比较器接口
QueueQueue队列是用于在处理之前保存元素的集合。除了基本的收集操作外,队列还提供其他插入,移除和检查操作。队列通常但不是必须以FIFO(先进先出)的方式对元素进行排序。优先队列除外,它们根据元素的值对元素进行排序(有关详细信息,请参见“对象排序部分)。无论使用哪种排序,队列的开头都是将通过调用remove或poll删除的元素。在FIFO队列中,所有新元素都插入到队列的尾部。其他种类的队列可能使用不同的放置规则。每个Queue实现必须指定其排序属性。原创 2024-05-15 14:12:04 · 931 阅读 · 0 评论 -
Java SE入门及基础(50)& Java实现LinkedList(单向链表、双向链表)& Java实现栈
ListList列表是有序的集合(有时称为序列)。列表可能包含重复的元素。Java平台包含两个常用的List实现。ArrayList通常是性能较好的实现,而LinkedList在某些情况下可以提供更好的性能。List接口常用方法Egetintindex//获取给定位置的元素EsetintindexE element//修改给定位置的元素voidaddintindexE element//在给定位置插入一个元素Eremoveint。原创 2024-04-28 11:42:11 · 1523 阅读 · 0 评论 -
Java SE入门及基础(49)
泛型来自官方的说明简言之,泛型在定义类,接口和方法时使类型(类和接口)成为参数。与方法声明中使用的更熟悉的形式参数非常相似,类型参数为你提供了一种使用不同输入重复使用相同代码的方法。区别在于形式参数的输入是值,而类型参数的输入是类型。原创 2024-04-12 10:37:04 · 471 阅读 · 0 评论 -
Java SE入门及基础(48)
集合是用来存储元素的,存储元素的目的是为了对元素进行操作,最常用的操作就是检索元素。为了满足这种需要,JDK提供了一个Iterable接口(表示可迭代的),供所有单列集合来实现。CollectionEextendsIterableE可以看出,Collection接口是Iterable接口的子接口,表示所有的单列集合都是可迭代的。Iterable接口中有一个约定:IteratorTiterator();//获取集合的迭代器。原创 2024-04-10 10:46:25 · 861 阅读 · 0 评论 -
Java SE入门及基础(47)
集合来自官方的说明。回想我们之前所学的数组,数组也能存储元素,也能对元素进行增删改查操作。那么数组与集合之间有什么区别呢使用数组实现增删改查.集合接口体系中有两个顶层接口 Collection 和 Map , Collection 接口属于单列集合(可以理解为一次存储一个元素), Map 接口属于双列集合(可以理解为一次存入两个相关联的元素)。原创 2024-04-04 15:34:44 · 965 阅读 · 0 评论 -
Java SE入门及基础(46)
匿名类的一个问题是,如果匿名类的实现非常简单,比如仅包含一个方法的接口,则匿名类的语法可能看起来笨拙且不清楚。在这些情况下,你通常试图将功能作为参数传递给另一种方法,例如,当某人单击按钮时应采取什么措施。Lambda表达式使你能够执行此操作,将功能视为方法参数,或将代码视为数据。示例Actorvoid();//表演节目TestvoidmainString[]args) {newActor() {@Overridepublicvoid() {Systemout。原创 2024-04-04 15:10:38 · 638 阅读 · 0 评论 -
Java SE入门及基础(45)
与实例方法和变量一样,内部类与其所在类的实例相关联,并且可以直接访问该对象的方法和字段。另外,由于内部类与实例相关联,因此它本身不能定义任何静态成员。内部类对象创建语法外部类类名内部类类名 对象名new外部类类名().new内部类类名();示例使用内部类描述一辆汽车拥有一台发动机。Car//汽车privatedoubleprice;private;原创 2024-03-31 19:42:48 · 688 阅读 · 0 评论 -
Java SE入门及基础(44)
Java编程语言允许你在一个类中定义一个类。这样的类称为嵌套类嵌套类分为两类:静态和非静态。声明为静态的嵌套类称为静态嵌套类。非静态嵌套类称为内部类。嵌套类是其外部类的成员。非静态嵌套类(内部类)可以访问外部类的其他成员,即使它们被声明为私有的也可以访问。静态嵌套类无权访问外部类的其他成员。作为OuterClass的成员,可以将嵌套类声明为私有,公共,受保护或包私有。(回想一下,外部类只能声明为公共或包私有。当一个事物内部还有其他事物时,使用内部类来描述就显得更加合理。原创 2024-03-31 19:32:10 · 648 阅读 · 0 评论 -
Java SE入门及基础(46)
数据流来自官方的说明数据流支持原始数据类型值(布尔值,char,字节,shortintlongfloat和double)以及String值的二进制I / O。所有数据流都实现DataInput接口或DataOutput接口。本节重点介绍这些接口的最广泛使用的实现,即DataInputStream和。DataOutput接口常用方法voidbooleanvthrows;//将布尔值作为1个字节写入底层输出通道voidwriteByte。原创 2024-03-19 19:57:28 · 625 阅读 · 0 评论 -
Java SE入门及基础(45)
字符流来自官方的说明Java平台使用Unicode约定存储字符值。字符流I / O会自动将此内部格式与本地字符集转换。在西方语言环境中,本地字符集通常是ASCII的8位超集。所有字符流类均来自Reader和Writer。与字节流一样,也有专门用于文件I / O的字符流类:FileReader和FileWriter。Writer常用方法publicvoidwriteintcthrows;//写一个字符publicvoidwrite。原创 2024-03-18 11:09:37 · 943 阅读 · 0 评论 -
Java SE入门及基础(44)
在使用计算机时,你可能遇到过如下场景:当你在编写一个文档时,突然断电了或者计算机蓝屏了,而文档又没有保存。当你重启计算机后,发现文档中修改的那部分内容丢失了,但保存过的内容依然还在。这是为什么呢?因为我们编写文档的时候,编写的内容是存储在计算机的内存中,这些内容属于临时数据,当我们保存文档后,这些临时数据就写进了磁盘,得以保存。过程分析编写文档内容存储在内存,换言之,就是向内存写数据保存文档内容至磁盘,换言之,就是将内存中的数据取出来存储到磁盘I / O的来源I / O是Input和。原创 2024-03-18 10:52:54 · 1025 阅读 · 0 评论 -
Java SE入门及基础(43)
java.io.File 类是对存储在磁盘上的文件信息的一个抽象表示。主要用于文件的创建、查找和删除。常用构造方法publicFileStringpathname//通过将给定的字符串路径名转换为抽象路径名来创建File实例publicFileStringparentStringchild//通过给定的字符父级串路径和字符串子级路径来创建File实例publicFileStringchild//通过父级抽象路径名和字符串子路径创建File实例。原创 2024-03-15 15:11:48 · 937 阅读 · 0 评论 -
Java SE入门及基础(42)
类位于java.lang包中,无需引入,直接使用即可。类是由final修饰的,表示是一个最终类,不可能被继承类构建的对象,可以实现字符序列的追加,但不会产生新的对象,只是将这个字符序列保存在字符数组中。原创 2024-03-14 16:28:26 · 644 阅读 · 0 评论 -
Java SE入门及基础(41)
String类位于java.lang包中,无需引入,直接使用即可。String类是由final修饰的,表示String类是一个最终类,不能够被继承。String类构建的对象不可再被更改示例packagecomwestring;Example1voidmainString[]args) {//当使用一个字面量给字符串赋值时,首先会去字符串常量池中检测是否存在这个字面量。如果存在,//则直接使用这个字面量的地址赋值即可。原创 2024-03-14 16:19:10 · 945 阅读 · 0 评论 -
Java SE入门及基础(40)
在Java中,异常的类型非常的多,要想使用这些异常,首先必须要熟悉它们。这无疑是一个巨大的工作量,很耗费时间。如果我们可以自定异常,则只需要熟悉 RuntimeExceptionException和Throwable 即可。这大大缩小了熟悉范围。自定义异常还可以帮助我们快速的定位问题。自定义运行时异常语法类名extends{}自定义检查异常语法类名extendsException{}示例在登录时经常会看到提示:"用户名不存在或者账号或密码错误。原创 2024-03-13 14:28:50 · 1001 阅读 · 0 评论 -
Java SE入门及基础(39)
如果方法的调用者未处理,则异常将持续向上一级调用者抛出,直。中,异常的种类很多,如果每一种异常类型我们都需要去记住,这无疑是一件很困难的事。可以声明方法执行时可能抛出的异常类型,但需要注意的是:方法执行过程中只能抛出声明的。关键字均没有对异常进行处理,这可能会导致程序终止。能够有一套机制来处理异常,那么将减少程序员在开发时的耗时。结构来对抛出异常进行捕获处理,从而保证程序能够正常运行。结构中的代码块,如果执行过程中抛出了异常,则交给。对可能抛出的异常类型进行声明,自身不会对异常。异常类型的其中一个异常。原创 2024-03-13 14:20:49 · 831 阅读 · 0 评论 -
Java SE入门及基础(38)
异常来自官方的说明异常是在程序执行期间发生的事件,该事件中断了程序指令的正常流程。当方法内发生错误时,该方法将创建一个对象并将其交给运行时系统。该对象称为异常对象,包含有关错误的信息,包括错误的类型和发生错误时程序的状态。创建异常对象并将其交给运行时系统称为抛出异常。示例packagecomweexception;原创 2024-03-12 15:45:17 · 828 阅读 · 0 评论 -
Java SE入门及基础(37)
面试题:请描述==和equals方法的区别基本数据类型使用 ==比较的就是两个数据的字面量是否相等。引用数据类型使用==比较的是内存地址。equals方法来自Object类,本身实现使用的就是==,此时它们之间没有区别。但是Object类中的equals方法可能被重写,此时比较就需要看重写逻辑来进行。原创 2024-03-12 15:38:14 · 789 阅读 · 0 评论 -
Java SE入门及基础(36)
多态来自官方的说明多态性的字典定义是指在生物学原理,其中的生物体或物质可具有许多不同的形式或阶段。该原理也可以应用于面向对象的编程和Java语言之类的语言。一个类的子类可以定义自己的独特行为,但可以共享父类的某些相同功能。从上面的描述中我们可以得出:继承、接口就是多态的具体体现方式。多态主要体现在类别、做事的方式上面。多态是面向对象的三大特征之一,多态分为编译时多态和运行时多态两大类。方法重载在编译时就已经确定如何调用,因此方法重载属于编译时多态。案例计算任意两个数的和。package。原创 2024-03-11 17:19:09 · 905 阅读 · 0 评论 -
Java SE入门及基础(35)
语法publicinterface接口名数据类型 变量名变量的值;//接口中定义变量,该变量是静态常量,在定义的时候必须赋值返回值类型 方法名([参数列表]);//定义接口方法default返回值类型 方法名([参数列表]){//接口中定义的默认方法,必须在JDK8及以上版本使用return返回值;static返回值类型 方法名([参数列表]){//接口中定义的静态方法,必须在JDK8及以上版本使用return返回值;原创 2024-03-11 17:09:32 · 1129 阅读 · 0 评论 -
Java SE入门及基础(34)
几何图形packagecomcyxshape;ShapeNumberperimeter();//知道几何图形能算周长,但不知道怎么算Numberarea();//知道几何图形能算面积,但不知道怎么算packagecomcyxshape;RectangleextendsShapeprivateintwidth;privateintlength;publicRectangleintwidthintlength) {this。原创 2024-03-10 14:10:57 · 885 阅读 · 0 评论 -
Java SE入门及基础(33)
final 修饰符应该使用在类、变量以及方法上注意,你也可以声明整个类的final。声明为final的类不能被子类化。例如,当创建不可变类(如String类)时,这特别有用。如果一个类被final修饰,表示这个类是最终的类,因此这个类不能够在被继承,因为继承就是对类进行扩展。示例packagecomwe_final;//final修饰的类不能够被继承FinalClasspublicvoidshow(){Systemoutprintln这是最终类里面的方法。原创 2024-03-10 14:00:27 · 1342 阅读 · 0 评论 -
Java SE入门及基础(32)
来自官方的说明子类中的一个成员方法与父类中的成员方法有相同的签名(方法名加上参数数量和参数类型)和返回值类 型的实例方法重写了父类的方法子类重写方法的能力使类可以从行为足够近的父类继承,然后根据需要修改行为。重写方法与被重写的方法具有相同的名称,数量和参数类型,并且返回类型相同。重写方法还可以返回重写方法返回的类型的子类型。此子类型称为协变返回类型。重写方法时,您可能需要使用@Override注解,该注释指示编译器您打算重写父类中的方法。原创 2024-03-09 11:09:35 · 1166 阅读 · 0 评论 -
Java SE入门及基础(31)
继承来自官方的说明继承的概念很简单但是很强大:当你要创建一个新类并且已经有一个包含所需代码的类时,可以从现有类中派生新类。这样,你可以重用现有类的字段和方法,而不必自己编写(和调试!)它们。子类从其父类继承所有成员(字段,方法和嵌套类)。构造方法不是成员,因此它们不会被子类继承,但是可以从子类中调用父类的构造方法。从一个类派生的类称为子类(也可以是派生类,扩展类或子类)。派生子类的类称为超类(也称为基类或父类)。继承也是面向对象的三大特征之一。语法子类名extends父类名示例。原创 2024-03-09 11:01:28 · 834 阅读 · 0 评论 -
Java SE入门及基础(30)
static 修饰符只能用来修饰类中定义的成员变量、成员方法、代码块以及内部类(内部类有专门章节进行讲解)。static 修饰的成员变量称之为类变量。属于该类所有成员共享。示例packagecnwechapter;//使用static修饰的成员变量称为类变量,不会随着成员变化而变化,属于所有成员共享Stringcountry中国;原创 2024-03-08 23:39:54 · 865 阅读 · 0 评论 -
Java SE入门及基础(29)
访问修饰符就是控制访问权限的修饰符号类的访问修饰符只有两种:public修饰符和默认修饰符(不写修饰符就是默认)示例packagecnwechapter;//使用默认修饰符修饰类时,该类只能在同一个包的其他类中使用classTeacherpackagecnwechapter;//可以访问Teacher类packagecnwechaptertest;importcnwe。原创 2024-03-08 23:30:04 · 952 阅读 · 0 评论 -
Java SE入门及基础(28)
包是Java中的一个专业词汇,包的本质就是一个文件夹。为什么要使用包因此包可以对我们编写的类进行分类、可以防止命名冲突和访问权限控制3. 如何创建包语法package 包名;包名的命名规范:包名一般都是由小写字母和数字组成,每个包之间使用'.'隔开,换言之,每出现一个'.',就是一个包包名一般都含有前缀。比如个人/组织通常都是 org.姓名 ,公司通常都是 com.公司名称简写 或者 cn.公 司名称简写如果一个类中有包的定义,那么这个类的第一原创 2024-03-07 13:07:43 · 818 阅读 · 0 评论 -
Java SE入门及基础(27)
封装就是将类的部分属性和方法隐藏起来,不允许外部程序直接访问,只能通过该类提供的公开的方法来访问类中定义的属性和方法。封装是面向对象的三大特征之一。原创 2024-03-07 13:01:01 · 958 阅读 · 0 评论