随笔分类 -  Java

摘要:前面介绍的几种异常(不包含错误),编码的时候没认真看还发现不了,直到程序运行到特定的代码跑不下去了,程序员才会恍然大悟:原来这里的代码逻辑有问题。像这些在运行的时候才暴露出来的异常,又被称作“运行时异常”,与之相对的另一类异常叫做“非运行时异常”。所谓非运行时异常,指的是在编码阶段就被编译器发现这里 阅读全文
posted @ 2019-03-23 10:36 pinlantu 阅读(1069) 评论(0) 推荐(1) 编辑
摘要:前面介绍的几种异常,其实都存在这样那样的逻辑问题,属于程序员的编码手误。还有一大类系统错误,表面上看不出什么问题,但是程序仍然运行不下去,兹举二例说明。第一个例子且看下列的测试代码: 执行测试代码中的testUnlimitedString方法,一开始程序正常打印日志,然而不一会儿就报错退出了,错误信 阅读全文
posted @ 2019-03-21 22:01 pinlantu 阅读(612) 评论(0) 推荐(0) 编辑
摘要:一个程序开发出来之后,无论是用户还是程序员,都希望它稳定地运行,然而程序毕竟是人写的,人无完人哪能不犯点错误呢?就算事先考虑得天衣无缝,揣着一笔巨款跑去岛国买了栋抗震性能良好的海边别墅,谁料人算不如天算,碰到猴年马月遇上了一场大海啸,整个别墅被冲到山上去了。计算机程序也是如此,不管是人为的错误,还是 阅读全文
posted @ 2019-03-19 10:51 pinlantu 阅读(506) 评论(0) 推荐(0) 编辑
摘要:通过前面几篇文章的学习,大家应能掌握几种容器类型的常见用法,对于简单的增删改和遍历操作,各容器实例都提供了相应的处理方法,对于实际开发中频繁使用的清单List,还能利用Arrays工具的asList方法给清单对象做初始化赋值,另外提供了专门的Collections工具进行排序、求最大元素、求最小元素 阅读全文
posted @ 2019-03-15 21:59 pinlantu 阅读(662) 评论(0) 推荐(0) 编辑
摘要:由于泛型存在某种不确定的类型,因此很少直接运用于拿来即用的泛型类,它更经常以泛型接口的面目出现。例如几种基本的容器类型Set、Map、List都被定义为接口interface,像HashSet、TreeMap、LinkedList等等只是实现了对应容器接口的具体类罢了。泛型的用途各式各样,近的不说, 阅读全文
posted @ 2019-03-11 21:44 pinlantu 阅读(1185) 评论(1) 推荐(0) 编辑
摘要:前面从泛型方法的用法介绍到了泛型的起源,既然单个方法允许拥有泛化的参数类型,那么一个类也应当支持类级别的泛化类型,例如各种容器类型ArrayList、HashMap等等。一旦某个类的定义代码在类名称后面添加“<T>”这种泛型声明,该类就变成了泛型类(也称模板类)。况且泛型类不单单支持一种泛型参数,还 阅读全文
posted @ 2019-03-09 10:33 pinlantu 阅读(887) 评论(0) 推荐(0) 编辑
摘要:前面介绍各种容器之时,通过在容器名称后面添加包裹数据类型的一对尖括号,表示该容器存放的是哪种类型的元素。这样一来总算把Java当中的各类括号都凑齐了,例如包裹一段代码的花括号、指定数组元素下标的方括号、容纳方法输入参数的圆括号,还有最近跟在容器名称之后的尖括号。可是为什么尖括号要加到容器后面呢?它还 阅读全文
posted @ 2019-03-06 22:05 pinlantu 阅读(394) 评论(0) 推荐(0) 编辑
摘要:前面介绍了集合与映射两类容器,它们的共同特点是每个元素都是唯一的,并且采用二叉树方式的类型还自带有序性。然而这两个特点也存在弊端:其一,为啥内部元素必须是唯一的呢?像手机店卖出了两部Mate20,虽然这两部手机一模一样,但理应保存两条销售记录才是。其二,不管是哈希类型还是二叉类型,居然都不允许按照加 阅读全文
posted @ 2019-03-04 21:19 pinlantu 阅读(464) 评论(0) 推荐(0) 编辑
摘要:前面介绍了两种集合的用法,它们的共性为每个元素都是唯一的,区别在于一个无序一个有序。虽说往集合里面保存数据还算容易,但要从集合中取出数据就没那么方便了,因为集合居然不提供get方法,没有get方法怎么从一堆数据之中挑出你想要的东西呢?难道只能从头遍历集合的所有元素,再逐个加以辨别吗?显然这个缺陷是集 阅读全文
posted @ 2019-03-02 10:05 pinlantu 阅读(436) 评论(0) 推荐(0) 编辑
摘要:对于相同类型的一组数据,虽然Java已经提供了数组加以表达,但是数组的结构实在太简单了,第一它无法直接添加新元素,第二它只能按照线性排列,故而数组用于基本的操作倒还凑合,若要用于复杂的处理就无法胜任了。为此Java设计了一大类的数据类型名叫容器,它们仿佛容纳物品的器皿一般,可大可小,既能随时往里塞入 阅读全文
posted @ 2019-02-27 14:38 pinlantu 阅读(513) 评论(0) 推荐(0) 编辑
摘要:前面介绍了方法引用的概念及其业务场景,虽然在所列举的案例之中方法引用确实好用,但是显而易见这些案例的适用场合非常狭窄,因为被引用的方法必须属于外层匿名方法(即Lambda表达式)的数据类型,像isEmpty、contains、startsWith、endsWith、matches、compareTo 阅读全文
posted @ 2019-02-25 21:53 pinlantu 阅读(1055) 评论(0) 推荐(0) 编辑
摘要:前面介绍了如何自己定义函数式接口,本文接续函数式接口的实现原理,阐述它在数组处理中的实际应用。数组工具Arrays提供了sort方法用于数组元素排序,可是并未提供更丰富的数组加工操作,比如从某个字符串数组中挑选符合条件的字符串并形成新的数组。现在就让我们从零开始,利用函数式接口实现数组元素筛选的功能 阅读全文
posted @ 2019-02-23 13:13 pinlantu 阅读(606) 评论(0) 推荐(0) 编辑
摘要:前面介绍了Lambda表达式的用法,从实践中发现它确实极大地方便了开发者,然而不管是匿名内部类还是Lambda表达式,所举的例子都离不开各类数组的排序方法,倘使Lambda表达式仅能用于sort方法,无疑限制了它的应用范围。那么除了sort方法,还有哪些场景能够将Lambda表达式派上用场呢?既然匿 阅读全文
posted @ 2019-02-21 22:53 pinlantu 阅读(697) 评论(0) 推荐(0) 编辑
摘要:前面介绍了匿名内部类的简单用法,通过在sort方法中运用匿名内部类,不但能够简化代码数量,还能保持业务代码的连续性。只是匿名内部类的结构仍显啰嗦,虽然它省去了内部类的名称,但是花括号里面的方法定义代码一字不落,依然生生占据了好几行代码。比如下面排序方法的调用代码例子: 尽管这种匿名内部类的代码有点别 阅读全文
posted @ 2019-02-18 16:39 pinlantu 阅读(492) 评论(0) 推荐(0) 编辑
摘要:前面依次介绍了简单接口和扩展接口,给出的范例都是自定义的接口代码,其实Java系统本身就自带了若干行为接口,为了更好地理解系统接口的详细用法,接下来还是从一个基础的例子出发,抽丝剥茧地逐步说明接口的几种调用方式。早在阐述如何使用数组的时候,就提到Java提供了Arrays工具可用于数组变量的常见处理 阅读全文
posted @ 2019-02-16 12:39 pinlantu 阅读(580) 评论(0) 推荐(0) 编辑
摘要:前面介绍了接口的基本用法,有心的朋友可能注意到这么一句话“在Java8以前,接口内部的所有方法都必须是抽象方法”,如此说来,在Java8之后,接口的内部方法也可能不是抽象方法了吗?之所以Java8对接口的定义规则发生变化,是因为原来的接口定义存在先天不足导致的,例如下列几点需求就难以满足:1、Jav 阅读全文
posted @ 2019-02-13 21:32 pinlantu 阅读(1265) 评论(0) 推荐(1) 编辑
摘要:前面介绍了抽象方法及抽象类的用法,看似解决了不确定行为的方法定义,既然叫唤动作允许声明为抽象方法,那么飞翔、游泳也能声明为抽象方法,并且鸡类涵盖的物种不够多,最好把这些行为动作扩展到鸟类这个群体,于是整个鸟类的成员方法都可以如法炮制了。可是这种做法也带来了一些弊端,包括但不限于:1、能飞的动物不仅仅 阅读全文
posted @ 2019-02-10 10:25 pinlantu 阅读(1125) 评论(0) 推荐(1) 编辑
摘要:前面介绍了类的常见用法,令人感叹面向对象的强大,几乎日常生活中的所有事物,都可以抽象成Java的基类及其子类。然而抽象操作也有副作用,就是某个抽象而来的行为可能是不确定的,比如半夜鸡叫,如果是公鸡则必定“喔喔喔”地叫,如果是母鸡则必定“咯咯咯”地叫,可要是不能确定这只鸡是公鸡还是母鸡抑或小鸡,系统怎 阅读全文
posted @ 2019-02-07 18:34 pinlantu 阅读(492) 评论(2) 推荐(0) 编辑
摘要:前面介绍了联合利用final和static可实现常量的定义,该方式用于简单的常量倒还凑合,要是用于复杂的、安全性高的常量,那就力不从心了。例如以下几种情况,final结合static的方式便缺乏应对之策:1、虽然常量的名称以大写字母拼写,但是对应的取值基本为1、2、3之类的整数,如果把1、2、3直接 阅读全文
posted @ 2019-02-03 09:42 pinlantu 阅读(543) 评论(0) 推荐(0) 编辑
摘要:前面介绍嵌套类的时候讲到了关键字static,用static修饰类,该类就变成了嵌套类。从嵌套类的用法可知,其它地方访问嵌套类之时,无需动态创建外层类的实例,直接创建嵌套类的实例就行。其实static不光修饰类,还能用来修饰方法、修饰属性等等,例如大家学习Java一开始就遇到的main方法,便为st 阅读全文
posted @ 2019-01-31 21:52 pinlantu 阅读(461) 评论(0) 推荐(0) 编辑