
Java开发笔记
文章平均质量分 82
pinlantu
这个作者很懒,什么都没留下…
展开
-
Java开发笔记(一百五十四)StringBuffer和StringBuilder的由来
本来String类已经能够完成字符串操作的所有功能,为何Java又提供了专门的StringBuffer和StringBuilder呢?这要从String类的设计说起了,查看String的源码,发现其内部采用字符数组保存字符串,如下所示:可是问题在于,这个字符数组被final修饰了,意味着数组大小不可改变。若想将现有字符串拼接一段字符形成新串(无论是加号拼接还是调用format方法),String类就无法扩充现有的字符数组,只能重新生成新的String对象。然而在需要频繁拼接字符串的场合,不断地重新生成原创 2022-07-08 09:17:13 · 399 阅读 · 0 评论 -
Java开发笔记(一百五十三)时间戳的获取和转换
日期时间是Java一个重要的数据类型,常见的日期时间格式通常为“yyyy-MM-dd HH:mm:ss”,但是计算机中存储的日期时间并非字符串形式,而是长整型的时间戳。因为字符串又占用空间又难以运算,相比之下,长整型只占用四个字节,普通的加减乘除运算更是不在话下,所以时间戳是最佳的日期时间存储方案。获取时间戳的代码很简单,只需调用System类的currentTimeMillis方法即可,如下所示: // 从System类获取当前的时间戳 long timeFromSy...原创 2020-07-25 11:43:00 · 774 阅读 · 1 评论 -
Java开发笔记(一百五十二)Date工具的时间格式
Java开发经常要把当前时间转为字符串,比如“2020-07-08 22:59:48”这样,此时会用到格式化工具SimpleDateFormat,该工具通过下列字符表示不同的时间单位:小写的yyyy:表示四位年份数字,如1949、2017等等。大写的MM:表示两位月份数字,如01表示一月份,12表示12月份。小写的dd:表示两位日期数字,如08表示当月八号,26表示当月二十六号。大写的HH:表示24小时制的两位小时数字,如19表示晚上七点。小写的mm:表示两位分钟数字,如30表示某个点钟的三十分。原创 2020-07-09 16:24:06 · 606 阅读 · 1 评论 -
《好好学Java 从零基础到项目实战》姗姗而来
梦里寻她千百度,千呼万唤始出来。从决定开始写这本书,到最终出版上市,数数已经是第三个夏天了。今年疫情有点紧,各行各业都受到影响,多亏出版社各位老师东奔西走,总算排除了万般艰难险阻,这才有了《好好学Java 从零基础到项目实战》的顺利上市。又是一本600页的编程书籍,拿在手中沉甸甸的,感觉两年的辛劳和等待终于没有白费。感谢这个伟大的时代给人激情澎湃,感谢清华社的老师在芸芸众生中发掘人才,让程序员也有机会成为技术作家,感谢我的家人始终如一的支持和关怀,使我能够集中精力写完本书。先来看看《好好学Java 从零基转载 2020-07-03 14:04:39 · 968 阅读 · 2 评论 -
Java开发笔记(一)第一个Java程序
安装完Java的开发环境Eclipse之后,正是初学者大展身手的时候了,接下来看看第一个Java程序是怎么跑起来的。 一开始双击桌面上的Eclipse图标,稍等片刻便弹出Eclipse的启动窗口,如下图所示。 单击窗口右边的Browse按钮,选中一个目录作为Eclipse的工作空间,然后单击窗口下方Launch按钮进入Eclipse的主界面,如下图所示。 果然是张白纸,除了顶部的一排...原创 2018-09-16 23:04:15 · 2399 阅读 · 1 评论 -
Java开发笔记(二)Java工程的帝国区划
上一篇文章介绍了如何运行了第一个Java程序“Hello World”。然而这个开发环境看起来那么陌生,一个个名字符号完全不知道它们是干啥的呀,对于初学者来说,好比天书一般,多看几眼感觉都要走火入魔了。因此接下来还是好好分析一下Java工程的总体结构,理清这些文字符号的来龙去脉才好。话说宇宙原本一片混沌,分不清天南地北,多亏了盘古开天辟地,轻且清的物质上浮成为天空,重且浊的物质下沉变做地壳,于是...原创 2018-09-19 23:01:53 · 1019 阅读 · 2 评论 -
Java开发笔记(四)Java帝国的度量衡
秦始皇统一中国之后,实行“书同文,车同轨”,把货币和各种度量衡都统一起来,从而缔造了一个秩序井然的帝国。既然统一度量衡是每个帝国都要做的事情,Java帝国也不例外,对于人生地不熟的初学者来说,只有认识了Java帝国的各种度量衡,才能更好地入乡随俗。Java帝国的人名称呼若想在一个国家与当地人沟通交流,首先要理解当地的语言以及对人的称呼。在计算机世界里,Java帝国的编程语言主要采用英文字母书写...原创 2018-09-25 23:05:39 · 730 阅读 · 1 评论 -
Java开发笔记(六)特殊数字的表达
之前的文章提到,Java语言不但支持大众熟知的十进制数,也支持计算机特有的二进制数、八进制数和十六进制数。可是在给数值变量赋值的时候,等号右边的数字明显属于十进制,那究竟要如何书写其它进制的数字呢?为此Java规定了几种数字前缀,以这些前缀开头的数字就表示特定进制的数值,二进制、八进制和十六进制及其对应的前缀说明如下:1、二进制,该进制的数值以0b或者0B开头,其后的数字只能是0和1。注意b是b...原创 2018-10-01 23:03:27 · 603 阅读 · 0 评论 -
Java开发笔记(七)强制类型转换的风险
编码过程中,不但能将数字赋值给某个变量,还能将一个变量赋值给另一个变量。比如下面代码把整型变量changjiang赋值给整型变量longRiver:// 长江的长度为6397千米int changjiang = 6397;System.out.println("changjiang="+changjiang);int longRiver = changjiang; // 把一个整型变量赋值...原创 2018-10-04 11:14:12 · 1340 阅读 · 1 评论 -
Java开发笔记(三)Java帝国的特种官吏
上一篇文章介绍了Java工程的帝国区划,末尾给出了一段Java代码例子,这个代码虽然勉强能看懂,但是有些细节令人不甚了了。比如说“// 参观朱雀台”为何能够直接跟在当前行后面?“System.out.println”又为何被点号绕了三道湾?显然这里面必定有一些规则需要遵守,好比到了一个国家就要入乡随俗,为了方便游客更好更快地适应当地的风俗,Java帝国特别设立了几个特殊官职,专门负责对内对外打交道...原创 2018-09-22 12:08:41 · 714 阅读 · 1 评论 -
Java开发笔记(十)一元运算符的技巧
前面讲到赋值运算符的时候,提到“x = x+7”可以被“x += 7”所取代,当然Java编程中给某个变量自加7并不常见,常见的是给某变量自加1,就像走台阶,一般都是一级一级台阶地走,犯不着一下子跳上七级台阶。那么对于变量自加1的情况,既可以写成“x = x+1”,也可以写成“x += 1”,但是早期的Java设计师嫌前面的语句不够简洁,故而创造了新的运算符“++”,该运算符表示给变量自加1,于是...原创 2018-10-13 12:44:06 · 455 阅读 · 0 评论 -
Java开发笔记(八)五种算术运算符
计算机科学起源于数学,早期的计算机也确实多用于数学运算,以至于后来的各路编程语言,仍然保留着古老的加减乘除四则运算。这四则运算在Java语言中有专门的运算符加以表示,像加法符号“+”对应Java的“+”,减法符号“-”对应Java的“-”,乘法符号“×”对应Java的“*”,除法符号“÷”对应Java的“/”,除此之外,还有一个求余数运算,在数学上使用mod表示,而Java对应的求余运算符为“%”...原创 2018-10-07 10:50:45 · 616 阅读 · 0 评论 -
Java开发笔记(五)数值变量的类型
如今个人电脑的配置越来越高,内存和硬盘的容量大小都是以G为单位,而1G=1024M=10241024K=102410241024字节。不过在PC的早期发展阶段,电脑的存储空间却是十分有限的,像2000年前后广泛使用的3.5寸软盘,其存储容量只有区区1.44M,当时流行的SDR内存容量也才32M和64M。所以早期的编程语言很注重节约存储,给每个变量分配内存都要精打细算,大环境如此,于是早在1996年...原创 2018-09-28 22:36:41 · 637 阅读 · 0 评论 -
Java开发笔记(十二)布尔变量论道与或非
在编程语言的设计之初,它们除了可以进行数学计算,还常常用于逻辑推理和条件判断。为了实现逻辑判断的功能,Java引入了一种布尔类型boolean,用来表示“真”和“假”。该类型的变量只允许两个取值,即true和false,其中true对应真值,而false对应假值。如同数值变量拥有加减乘除四则运算那样,布尔变量也拥有逻辑方面的四则运算,包括“非”、“与”、“或”、“异或”,下面分别加以介绍。1、...原创 2018-10-19 09:30:00 · 757 阅读 · 0 评论 -
Java开发笔记(十一)常见的数学函数
前面介绍了Java编程的四则运算,虽然提供了基础的加减乘除符号,但是数学上还有其它运算符号,包括四舍五入用到的约等号≈、求绝对值的“| |”、开平方的“√ ̄”,这些运算符形态各异,而且并非ASCII码的基本字符,也就意味着它们无法原样搬到Java来。为此,Java的设计师封装了一套数学函数库Math,把加减乘除以外的常见数学运算都纳入,然后作为Math库的函数方法提供给程序员调用。比如四舍五入变...原创 2018-10-16 22:59:09 · 485 阅读 · 0 评论 -
Java开发笔记(九)赋值运算符及其演化
前面的加减乘除四则运算,计算结果通过等号输出给指定变量,注意此时代码把变量放到等号左边。而在算术课本里,加法运算的完整写法类似于“1+1=2”这样,运算结果应该跟在等号右边。不过代数课本里的方程式存在“x=y+1”的写法,表示等号两边的结果数值是一样的,因此变量放在等号左边也是可以理解的。然而Java编程里的“=”并非数学上的相等涵义,而是一种赋值操作,所谓“赋值”,指的是将某一数值赋给某个变量的...原创 2018-10-10 22:31:31 · 371 阅读 · 0 评论 -
Java开发笔记(十三)利用关系运算符比较大小
前面在《Java开发笔记(九)赋值运算符及其演化》中提到,Java编程中的等号“=”表示赋值操作,并非数学上的等式涵义。Java通过等式符号“==”表示左右两边相等,对应数学的等号“=”;通过不等符号“!=”表示左右两边不等,对应数学的不等号“≠”。可是一个等式真的就一定成立吗?譬如半斤八两这个成语,用Java等式改写的话变为“半斤==八两”。话说当年秦始皇统一中国,不但推行“书同文、车同轨”,...原创 2018-10-21 12:40:39 · 939 阅读 · 0 评论 -
Java开发笔记(十四)几种运算符的优先级顺序
到目前为止,我们已经学习了Java语言的好几种运算符,包括算术运算符、赋值运算符、逻辑运算符、关系运算符等基础运算符,并且在书写赋值语句时都没添加圆括号,显然是默认了先完成算术、逻辑、关系等运算,最后才进行赋值操作。也就是说,在这四类运算符当中,赋值运算符的优先级最低,那么其他三种运算符的优先级顺序又是如何排列的呢?首先来看算术运算符,Java中的算术运算符主要包括正号负号、加减乘除,以及取余数...原创 2018-10-23 16:38:07 · 7413 阅读 · 0 评论 -
Java开发笔记(十五)短路逻辑运算的优势
前面提到逻辑运算只能操作布尔变量,这其实是不严谨的,因为经过Java编程实现,会发现“&”、“|”、“^”这几个逻辑符号竟然可以对数字进行运算。譬如下面的代码就直接对数字分别开展了“与”、“或”、“异或”运算:// 3的二进制为00000011,7的二进制为00000111int andNumber = 3&7; // 对两个数字进行“按位与”运算System.out.pri...原创 2018-10-25 22:57:09 · 699 阅读 · 0 评论 -
Java开发笔记(十七)各得其所的多路分支
前面提到条件语句的标准格式为“if (条件) { /* 条件成立时的操作代码 / } else { / 条件不成立时的操作代码 */ }”,乍看之下仿佛只有两个分支,一个是条件成立时的分支,另一个是条件不成立时的分支。很明显仅仅两个分支是不能满足复杂的业务需求的,自然Java代码也不会这么傻瓜到固步自封,为此else分支还允许嫁接别的if条件,形如“if (条件一) { } else if (条...原创 2018-10-29 21:45:39 · 570 阅读 · 0 评论 -
Java开发笔记(十八)上下求索的while循环
循环是流程控制的又一重要结构,“白天-黑夜-白天-黑夜”属于时间上的循环,古人“年复一年、日复一日”的“日出而作、日落而息”便是每天周而复始的生活。计算机程序处理循环结构时,给定一段每次都要执行的代码块,然后分别指定循环的开始条件和结束条件,就形成了常见的循环语句。最简单的循环结构只需一个while关键字设置循环条件即可,下面是根据输入数字决定循环次数的代码例子:System.out.print...原创 2018-10-31 22:43:52 · 370 阅读 · 0 评论 -
Java开发笔记(十六)非此即彼的条件分支
前面花了大量篇幅介绍布尔类型及相应的关系运算和逻辑运算,那可不仅仅是为了求真值或假值,更是为了通过布尔值控制流程的走向。在现实生活中,常常需要在岔路口抉择走去何方,往南还是往北,向东还是向西?在Java编程中,利用if语句可判断接下来要做什么,比如说:如果某个条件成立,就进行某种处理;否则的话,就进行另一种处理。if语句的具体格式为“if (条件) { /* 条件成立时的操作代码 / } else...原创 2018-10-27 11:52:55 · 520 阅读 · 0 评论 -
Java开发笔记(十九)规律变化的for循环
前面介绍while循环时,有个名叫year的整型变量频繁出现,并且它是控制循环进出的关键要素。不管哪一种while写法,都存在三处与year有关的操作,分别是“year = 0”、“year<limit”、“year++”。第一个“year = 0”用来给该变量初始赋值,第二个“year<limit”则为是否退出循环的判断条件,第三个“year++”用于该变量的自增操作。这三处语句结合...原创 2018-11-03 17:30:50 · 553 阅读 · 0 评论 -
Java开发笔记(二十二)神奇的冒号
Java中的标点符号主要有两类用途,一类是运算符,包括加号+、减号-、乘号*、除号/、取余号%、等号=、大于号>、小于号<、与号&、或号|、非号!、异或号^等等,另一类则是分隔符,包括区分代码块的花括号{}、容纳特定语句的圆括号()、标明数组元素的方括号[]、分隔长句的分号、分隔短句的逗号、分隔包名类名方法名的点号等等。当然还有几个特殊的分隔符,比如三元运算符“?:”,它的完整...原创 2018-11-09 23:07:10 · 631 阅读 · 0 评论 -
Java开发笔记(二十一)二维数组的扩展
前面介绍的数组容纳的是一串数字,仿佛一根线把这组数字串了起来,故而它只是一维数组。一维数组用来表示简单的数列尚可,要是表达复杂的平面坐标系,那就力不从心了。由于平面坐标系存在水平和垂直两个方向,因此可用二维数组来保存平面坐标系上的一组坐标顶点,其中第一维是顶点队列,第二维是顶点的横纵坐标。许多个平面组合起来变成一幅动画,每个平面都构成动画的一个帧,这样就形成了三维数组。二维数组、三维数组,乃至更多...原创 2018-11-07 22:32:23 · 488 阅读 · 0 评论 -
Java开发笔记(二十)一维数组的用法
之前介绍的各类变量都是单独声明的,倘若要求定义相同类型的一组变量,则需定义许多同类型的变量,显然耗时耗力且不宜维护。为此,编程语言引入了数组的概念,每个数组都由一组相同类型的数据构成,对外有统一的数组名称,对内通过序号区分每个数据元素。数组类型由基本的变量类型扩展而来,在基本类型后面加上一对方括号,便形成了该类型对应的数组类别。在Java代码中声明数组变量有两种形式,一种是在变量名称后面添加方括...原创 2018-11-05 22:39:42 · 497 阅读 · 0 评论 -
Java开发笔记(二十三)数组工具Arrays
数组作为一种组合形式的数据类型,必然要求提供一些处理数组的简便办法,包括数组比较、数组复制、数组排序等等。为此Java专门设计了Arrays工具,该工具包含了几个常用方法,方便程序员对数组进行加工操作。Arrays工具的方法说明如下:Arrays.equals(a1, a2); // 判断a1和a2两个数组是否相等,也就是每个元素是否都相等Arrays.fill(a, val); // 往数组...原创 2018-11-11 11:03:27 · 652 阅读 · 1 评论 -
Java开发笔记(序)章节目录
现将本博客的Java学习文章整理成以下笔记目录,方便查阅。第一章 初识JavaJava开发笔记(一)第一个Java程序Java开发笔记(二)Java工程的帝国区划Java开发笔记(三)Java帝国的特种官吏Java开发笔记(四)Java帝国的度量衡第二章 数值变量Java开发笔记(五)数值变量的类型Java开发笔记(六)特殊数字的表达Java开发笔记(七)强制类型转换的风险第三......原创 2018-11-11 12:37:56 · 10333 阅读 · 7 评论 -
Java开发笔记(二十四)方法的组成形式
经过前面的学习,我们发现演示的Java代码越来越复杂,而且每个例子的代码都堆在入口方法main内部,这会导致如下问题:1、一个方法内部堆砌了太多的代码行,看着费神,维护起来也吃力;2、部分代码描述的是通用算法,比如牛顿迭代法、二分查找法等等,这些通用的算法代码结构固定,很多地方会用到,倘若每次都复制粘贴无疑是苦大仇深;基于此,亟需对纷繁复杂的代码段加以梳理,一方面把代码行依据功能进行划分,这...原创 2018-11-13 22:56:47 · 411 阅读 · 0 评论 -
Java开发笔记(二十五)方法的输入参数
前面通过main方法介绍了方法的定义形式,对于方法的输入参数来说,还有几个值得注意的地方,接下来分别对输入参数的几种用法进行阐述。一个方法可以有输入参数,也可以没有输入参数,倘若无需输入参数,则方法定义的圆括号内部直接留空。以打印当前时间为例,下面的showTime方法没有输入参数也能正常实现:// 没有输入参数,则方法名称后面的圆括号内部留空。// showTime方法的用途是显示当前时间...原创 2018-11-15 22:38:22 · 455 阅读 · 0 评论 -
Java开发笔记(二十八)布尔包装类型
前面介绍了数值包装类型,因为不管是整数还是小数,它们的运算操作都是类似的,所以只要学会了Integer的用法,其它数值包装类型即可一并掌握。但是对于布尔类型boolean来说,该类型定义的是“true”和“false”的布尔值,并非123之类的数字,因此还需专门的包装类型Boolean来包装boolean。Boolean作为包装类型,与数值包装类型相似,它也拥有三种变量初始化方式。由于布尔包装类...原创 2018-11-21 22:44:31 · 483 阅读 · 0 评论 -
Java开发笔记(二十九)大整数BigInteger
早期的编程语言为了节约计算机的内存,给数字变量定义了各种存储规格的数值类型,比如字节型byte只占用一个字节大小,短整型short占用两个字节大小,整型int占用四个字节大小,长整型long占用八个字节大小。但是长整型也只能表达到负2的63次方~2的63次方-1,超出这个范围的巨大整数,竟连long类型也放不下。何况现在不管手机还是电脑的内存都是以GB计量,因此原先锱铢计较几个字节的数值类型便不合...原创 2018-11-23 23:13:32 · 630 阅读 · 0 评论 -
Java开发笔记(二十七)数值包装类型
方法的出现缘起优化代码结构,但它的意义并不局限于此,正因为有了方法定义,编程语言才更像一门能解决实际问题的工具,而不仅仅是只能用于加减乘除的计算器。在数学的发展过程中,为了表示四则运算,人们创造了加减乘除符号,对应Java编程的“+”、“-”、“*”、“/”。但是随着运算类型的增多,新的运算符号来不及创造了,于是出现了函数形式的运算操作,譬如三角函数sin、cos等等。这种数学函数就是方法的雏形,...原创 2018-11-19 22:33:00 · 470 阅读 · 0 评论 -
Java开发笔记(二十六)方法的输出参数
前面介绍了方法的输入参数,与输入参数相对应的则为输出参数,输出参数也被称作方法的返回值,意思是经过方法的处理最终得到的运算数值。这个返回值可能是整型数,也可能是双精度数,也可能是数组等其它类型,甚至允许不返回任何参数。与输入参数类似,输出参数也需要定义数据类型,它的返回值类型在方法名称前面定义,具体位置参见方法的定义形式“访问权限类型 可选的static 返回值的数据类型 方法名称(参数类型 参数...原创 2018-11-17 18:26:42 · 2683 阅读 · 0 评论 -
Java开发笔记(三十三)字符包装类型
正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character。初始化字符包装变量也有三种方式,分别是:直接用等号赋值、调用包装类型的valueOf方法、使用关键字new创建新变量。倘若要把字符包装变量转换成字符变量,则调用包装变量的charValue方法即可。甚至可以对字符包装变量做加减乘除运算,就像之前对待字符变量一般,字符包装类型的基本使用代码示例如下...原创 2018-12-02 10:57:41 · 493 阅读 · 0 评论 -
Java开发笔记(三十)大小数BigDecimal
前面介绍的BigInteger只能表达任意整数,但不能表达小数,要想表达任意小数,还需专门的大小数类型BigDecimal。如果说设计BigInteger的目的是替代int和long类型,那么设计BigDecimal的目的便是替代浮点型float和双精度型double了。正如它的兄弟BigInteger一般,BigDecimal不存在什么数值范围限制,无论是整数部分还是小数部分,只要你能写得出来,...原创 2018-11-25 14:47:27 · 672 阅读 · 0 评论 -
Java开发笔记(三十二)字符型与整型相互转化
前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行!// 字符允许直接赋值给整型变量private static void charToInt() {int a = ‘A’;System.out.println(“int a=”+a);int tian =...原创 2018-11-29 22:24:09 · 602 阅读 · 0 评论 -
Java开发笔记(三十一)字符类型的表达
前面介绍的Java编程,要么是与数字有关的计算,要么是与逻辑有关的推理,充其量只能实现计算器和状态机。若想让Java运用于更广阔的业务领域,就得使其支撑更加血肉丰满的业务场景,而丰满的前提是能够表达大众熟知的人类语言和文字。对于英文世界来说,除了数字之外,编程语言起码还要支持ABCD等大小写字母,以及常见的标点符号。由于现有的基本变量类型仅能表示各类数字与布尔值,因此要引入新的变量类型来存放字母和...原创 2018-11-27 22:30:38 · 319 阅读 · 0 评论 -
Java开发笔记(三十五)字符串格式化
前面介绍了字符串变量的四种赋值方式,对于简单的赋值来说完全够用了,即便是两个字符串拼接,也只需通过加号把两个目标串连起来即可。但对于复杂的赋值来说就麻烦了,假设现在需要拼接一个很长的字符串,字符串内部包含了各种类型的变量,有整型,有双精度型,有布尔型,有字符型,中间还夹杂着一些起粘合作用的子串,如此一来只能使劲地填写加号,把各种变量努力加加加加上去,就像有时打印日志调用System.out.pri...原创 2018-12-08 13:21:27 · 387 阅读 · 0 评论 -
Java开发笔记(三十四)字符串的赋值及类型转换
不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工。为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类型允许保存一整串字符,并对字符串进行各种处理。字符串类型不属于基本类型,它的用法与包装类型更为接近。例如给字符串变量赋初始值,就有多达四种的赋值形式(包装类型只有三种赋值),分别介绍如下:1、被双...原创 2018-12-05 22:16:13 · 631 阅读 · 0 评论