前面提到条件语句的标准格式为“if (条件) { /* 条件成立时的操作代码 */ } else { /* 条件不成立时的操作代码 */ }”,乍看之下仿佛只有两个分支,一个是条件成立时的分支,另一个是条件不成立时的分支.很明显仅仅两个分支是不能满足复杂的业务需求的,自然Java代码也不会这么傻瓜到固步自封,为此else分支还允许嫁接别的if条件,形如“if (条件一) { } else if (条件二) { } else if (条件三) { } else { }”这样,不管来几个条件分支,都…
现将本博客的Java学习文章整理成以下笔记目录,方便查阅. 第一章 初识JavaJava开发笔记(一)第一个Java程序Java开发笔记(二)Java工程的帝国区划Java开发笔记(三)Java帝国的特种官吏Java开发笔记(四)Java帝国的度量衡 第二章 数值变量Java开发笔记(五)数值变量的类型Java开发笔记(六)特殊数字的表达Java开发笔记(七)强制类型转换的风险 第三章 算术运算Java开发笔记(八)五种算术运算符Java开发笔记(九)赋值运算符及其演化Java开发笔记(十)一元…
前面介绍了集合与映射两类容器,它们的共同特点是每个元素都是唯一的,并且采用二叉树方式的类型还自带有序性.然而这两个特点也存在弊端:其一,为啥内部元素必须是唯一的呢?像手机店卖出了两部Mate20,虽然这两部手机一模一样,但理应保存两条销售记录才是.其二,不管是哈希类型还是二叉类型,居然都不允许按照加入时间的先后排序,要知道现实生活中不乏各种先来后到的业务场景.为了更方便地应对真实场景中的各类需求,Java又设计了清单List这么一种容器,用来处理集合与映射所不支持的业务功能.提到清单,脑海里顿时…
前面从泛型方法的用法介绍到了泛型的起源,既然单个方法允许拥有泛化的参数类型,那么一个类也应当支持类级别的泛化类型,例如各种容器类型ArrayList.HashMap等等.一旦某个类的定义代码在类名称后面添加“<T>”这种泛型声明,该类就变成了泛型类(也称模板类).况且泛型类不单单支持一种泛型参数,还支持同时声明多种泛型参数,像“<T>”表示当前类存在唯一一种泛型参数:若想声明当前类拥有两种泛型参数,则可使用“<T, R>”这种以逗号隔开的泛型列表:同时声明三种泛型参数的…
每个程序员都希望自己的程序稳定运行,不要隔三岔五出什么差错,可是程序运行时冒出来的各种异常着实烦人,令人不胜其扰.虽然可以在代码中补上try/catch语句捕捉异常,但毕竟属于事后的补救措施.与其后知后觉地亡羊补牢,不如一开始就未雨绸缪,只要防患于未然,必能收到事半功倍的成效.就编码时的常见异常而言,绝大多数异常都能通过适当的校验加以规避,也就是事先指定可让程序正常运行的合法条件,只有条件满足才开展业务逻辑处理,否则进行失败情况的处理.这样用于异常捕捉的try/catch语句便转换为了条件分支的…
前面在介绍清单用法的时候,讲到了既能使用for循环遍历清单,也能通过stream流式加工清单.譬如从一个苹果清单中挑选出红苹果清单,采取for循环和流式处理都可以实现.下面是通过for循环挑出红苹果清单的代码例子: // 通过简单的for循环挑出红苹果清单 private static void getRedAppleWithFor(List<Apple> list) { List<Apple> redAppleList = new ArrayList<Apple>()…
对于相同类型的一组数据,虽然Java已经提供了数组加以表达,但是数组的结构实在太简单了,第一它无法直接添加新元素,第二它只能按照线性排列,故而数组用于基本的操作倒还凑合,若要用于复杂的处理就无法胜任了.为此Java设计了一大类的数据类型名叫容器,它们仿佛容纳物品的器皿一般,可大可小,既能随时往里塞入新物件,又能随时从中取出某物件.当然,依据不同的用途,容器也分为好几类,包括集合Set.映射Map.清单List等等,本文先从最基础的集合开始介绍.所谓集合,指的是一群同类聚集在一起,集合的最大特点就…
前面介绍各种容器之时,通过在容器名称后面添加包裹数据类型的一对尖括号,表示该容器存放的是哪种类型的元素.这样一来总算把Java当中的各类括号都凑齐了,例如包裹一段代码的花括号.指定数组元素下标的方括号.容纳方法输入参数的圆括号,还有最近跟在容器名称之后的尖括号.可是为什么尖括号要加到容器后面呢?它还能不能用于其它场合?若想对尖括号的来龙去脉究根问底,就得从泛型的概念说起了.不管是方法还是类,都支持输入指定类型的参数,其中方法的输入参数在调用方法时填写,而类的输入参数可通过构造方法传递.在这两种参…
每启动一个程序,操作系统的内存中通常会驻留该程序的一个进程,进程包含了程序的完整代码逻辑.一旦程序退出,进程也就随之结束:反之,一旦强行结束进程,程序也会跟着退出.普通的程序代码是从上往下执行的,遇到分支语句则进入满足条件的分支,遇到循环语句总有跳出循环的时候,遇到方法调用则调用完毕仍然返回原处,之后继续执行控制语句或者方法调用下面的代码.总之一件事情接着一件事情处理,前一件事情处理完了才能处理后一件事情,这种运行方式被称作"串行处理".串行处理的代码结构清晰,但同一时刻只能执行某段代…
虽然Java自诞生之初就推出了AWT,紧接着第二版又推出升级后的Swing,打算在桌面开发这块大展拳脚:可是后来Java在服务器开发上大放异彩,在桌面开发上反而停滞不前,可谓失之J2SE收之J2EE.至于手机开发方向的J2ME,也因为安卓的异军突起而逐渐凋零,尽管安卓开发仍以Java语言为主,但谷歌公司却转去拥抱Kotlin,致使手机端的Java天下岌岌可危.为今之计,既然服务器开发的Java霸主地位牢不可撼,只能在桌面开发这边攻城略地了.不过原先的AWT与Swing实在太古老,难堪大用,唯有另…