
OnJava
是聪聪黄吖
道阻且长,行则将至!
展开
-
04 异常与构造器
一般的资源清理会放置在finally块中(例如文件关闭),但是如果在构造器中对象的初始化失败(例如文件未找到),那么就不存在所谓的资源清理。因此,应该从逻辑上保证资源的正确初始化,然后可以在finally块中完成清理工作。总结出的基本规则是:在创建需要清理的对象之后,立即进入一个语句块。当然,最好不要创建抛出异常的构造器。原创 2023-04-18 20:19:35 · 257 阅读 · 1 评论 -
03 使用 finally 进行清理
无论try块中的异常是否抛出,finally中的雨具都会执行。原创 2023-04-15 20:15:35 · 252 阅读 · 0 评论 -
02 捕获所有异常
通过Exception捕获所有异常,并调用它从其基类Throwable继承的方法进一步了解当然异常的类型。原创 2023-04-15 17:13:26 · 519 阅读 · 0 评论 -
01 自定义异常
JavaJava。原创 2023-04-15 16:38:12 · 128 阅读 · 0 评论 -
04 终端操作
终端操作()总是我们在流管道中所做的最后一件事。原创 2023-04-14 20:18:49 · 422 阅读 · 0 评论 -
02 中间操作
中间操作用于从一个流中获取对象,并将对象作为另一个流从后端输出,以连接到其他操作。原创 2023-04-14 15:54:19 · 409 阅读 · 0 评论 -
01 流创建
Java 8通过在接口中添加被default(默认)修饰的方法,进而将流式(stream)方法平滑地嵌入到现有类中。流操作的类型有三种:创建流,修改流元素(中间操作,),消费流元素(终端操作,原创 2023-04-14 14:24:56 · 472 阅读 · 0 评论 -
04 闭包
如果一个Lambda表达式使用了函数作用域之外的变量,会发生什么?分以下情形讨论:(1)变量定义在类中(共享变量存储空间)。(2)变量定义在方法中(局部变量)上述makeFun中的变量i,在每次调用方法时都会重新初始化。然而,makeFun方法中变量x和i都不能改变,即:被Lambda表达式引用的局部变量必须是final或者是等同final效果的,要不然会编译报错。即便变量i因为每次调用makeFun()时,其实都会创建并返回一个全新而非共享的ArrayList。也就是说,每个闭包都有自己独立的。原创 2023-04-12 16:21:18 · 561 阅读 · 0 评论 -
03 函数式接口
使用注解将接口标注为函数式接口(当然,如果该接口仅有一个方法。那么,省略注解同样可以)。然后,将方法引用或Lambda表达式赋值给函数式接口(类型需要匹配),Java会自动适配赋值到目标接口。包旨在创建一组完整的目标接口,使得我们一般情况下不需再定义自己的接口。一旦将方法引用赋值给函数接口,我们就可以调用与该接口关联的函数方法。在此示例中为get()compare()accept()apply()和test()。原创 2023-04-12 15:00:22 · 208 阅读 · 0 评论 -
01 Lambda 表达式
根据方法参数个数的不同、方法体内语句数量的不同,Lambda 表达式的形式呈现多种多样。原创 2023-04-07 17:11:01 · 121 阅读 · 0 评论 -
03 集合与迭代器
如果所编写的方法接受一个Collection,那么该方法可以应用于任何实现了Collection的类——这也就使得一个新类可以选择去实现Collection接口,以便该方法可以使用它。集合之间的所有共性都是通过迭代器实现的。原创 2023-04-05 14:57:27 · 109 阅读 · 0 评论 -
02 迭代器
迭代器统一了对集合的访问方式。注意迭代器在集合层次中的位置。原创 2023-04-04 16:42:17 · 288 阅读 · 0 评论 -
01 添加元素组
利用为集合类型添加元素组。原创 2023-04-04 16:10:12 · 146 阅读 · 0 评论 -
03 接口适配
接口最吸引人的原因之一是相同的接口可以有多个实现。在简单情况下体现在一个方法接受接口作为参数,该接口的实现和传递对象则取决于方法的使用者。编写一个方法执行某些操作并接受一个指定的接口作为参数。可以说:“只要对象遵循接口,就可以调用方法”,这使得方法更加灵活,通用,并更具可复用性。原创 2023-04-03 15:18:57 · 169 阅读 · 0 评论 -
02 多接口结合
可以扩展一个接口,但是得到的是另一个接口。当想创建一个对象时,所有的定义必须首先都存在。的定义,是由于该方法在类。中已经定义过,这样才使得创建。方法签名相同,而在类。原创 2023-04-01 19:02:00 · 114 阅读 · 0 评论 -
01 接口中的默认方法和静态方法
Java 8为关键字default增加新的用途,即为接口添加默认方法(又称守卫方法或虚拟扩展方法)。其主要功能:在不破坏已使用接口的代码的情形下,为接口增加新的方法(接口的实现类都可以使用)。原创 2023-04-01 17:25:01 · 115 阅读 · 0 评论 -
02 构造器内部多态方法的行为
② 如前所述调用基类构造器。此时调用重写后的draw() 方法(是的,在调用RoundGraph 构造器之前调用),由步骤1 可知,radius 的值为0。② 如果构造器只是构造对象过程中的一个步骤,且构造的对象所属的类是从构造器所属的类派生出的,那么派生部分在当前构造器被调用时还没有初始化。① 在所有事发生前,分配给对象的存储空间会被初始化为二进制 0。① 如果在构造器中调用动态绑定方法,就会用到该方法的重写定义。④ 最终调用派生类的构造器。③ 按声明顺序初始化成员。原创 2023-04-01 14:32:17 · 92 阅读 · 0 评论 -
01 多态与“重写”私有方法、属性、静态方法
私有方法是不能重写的,因此明面上的私有方法“重写”仅仅是因为父类与子类中方法名相同而已。此外,若存在多态现象,调用的是父类中的同名方法。原创 2023-03-29 21:34:20 · 190 阅读 · 0 评论 -
02 继承与初始化
初始化顺序:父类静态变量、子类静态变量、父类非静态变量、父类构造方法、子类非静态变量、子类构造方法。原创 2023-03-29 12:44:24 · 98 阅读 · 0 评论 -
01 继承语法
继承是复用的一种重要形式,子类会直接获得父类的公有属性和方法。然而,子类不能继承父类的私有属性,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的。原创 2023-03-29 10:55:38 · 113 阅读 · 0 评论 -
02 构造器初始化
在类中变量定义的顺序决定了它们初始化的顺序。即使变量定义散布在方法定义之间,它们仍会在任何方法(包括构造器)被调用之前得到初始化。即:变量的初始化与该变量在类中定义的先后顺序相关(暂不理会静态变量),但是都会在方法被调用前初始化。原创 2023-03-28 16:01:44 · 129 阅读 · 0 评论 -
01 重载与基本类型
方法重载():方法名相同,方法参数不同。这里方法参数不同可以是参数类型不同、参数个数不同、参数顺序不同。原创 2023-03-27 22:11:33 · 137 阅读 · 0 评论 -
01 switch 语句
switch语句支持char以及byteshort和int等整数类型(包括其所对应的包装类型),但是并不支持long类型以及float和double等浮点类型。其根本原因在于switch语句的底层和只支持int类型(charbyteshort可以隐式的转换成int),longfloat和double等类型在转换成int类型时可能会丢失精度。原创 2023-03-27 21:31:06 · 158 阅读 · 0 评论