以下内容摘自:  https://www.cnblogs.com/crazylqy/p/4172324.html import java.sql.Timestamp; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.u…
Java的变量.常量.变量的类型及使用规则 每一种语言都有一些具有特殊用途的词,Java也不例外,它们被称为关键字.关键字对 Java 的编译器有着特殊的意义. 一:Java中的关键字: 注:Java的关键字是区分大小写的 二:Java中的标识符: 标识符是给Java程序中的变量.类.方法等命名的符号,是用户编程时使用的名字如下图所示 使用标识符,需要遵守以下几条规则; 1.  标识符可以由字母.数字.下划线’_‘.美元符 ‘$’ 组成,但不能包含 @.%.空格等其它特殊字符,不能以数字开头.譬…
前面介绍的BigInteger只能表达任意整数,但不能表达小数,要想表达任意小数,还需专门的大小数类型BigDecimal.如果说设计BigInteger的目的是替代int和long类型,那么设计BigDecimal的目的便是替代浮点型float和双精度型double了.正如它的兄弟BigInteger一般,BigDecimal不存在什么数值范围限制,无论是整数部分还是小数部分,只要你能写得出来,BigDecimal就能表达出来,从此不必担心基本数字类型的精度问题了.既然同为大数字家族,BigD…
前面介绍的Java编程,要么是与数字有关的计算,要么是与逻辑有关的推理,充其量只能实现计算器和状态机.若想让Java运用于更广阔的业务领域,就得使其支撑更加血肉丰满的业务场景,而丰满的前提是能够表达大众熟知的人类语言和文字.对于英文世界来说,除了数字之外,编程语言起码还要支持ABCD等大小写字母,以及常见的标点符号.由于现有的基本变量类型仅能表示各类数字与布尔值,因此要引入新的变量类型来存放字母和符号,这个新的类型被称作字符型char.有别于其它的基本类型,一个具体的字符值必须用单引号包起来,这…
不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类型允许保存一整串字符,并对字符串进行各种处理.字符串类型不属于基本类型,它的用法与包装类型更为接近.例如给字符串变量赋初始值,就有多达四种的赋值形式(包装类型只有三种赋值),分别介绍如下:1.被双引号包裹着的字符串,可直接用等号赋值给字符串变量,代码示例如下: // 第一种方式:用双引号把字符串括起…
前面介绍了字符串变量的四种赋值方式,对于简单的赋值来说完全够用了,即便是两个字符串拼接,也只需通过加号把两个目标串连起来即可.但对于复杂的赋值来说就麻烦了,假设现在需要拼接一个很长的字符串,字符串内部包含了各种类型的变量,有整型,有双精度型,有布尔型,有字符型,中间还夹杂着一些起粘合作用的子串,如此一来只能使劲地填写加号,把各种变量努力加加加加上去,就像有时打印日志调用System.out.println就非常痛苦,加号多到让你眼花缭乱.为了不让加号如此横行霸道,String类型从Java5开始…
不管是给字符串赋值,还是对字符串格式化,都属于往字符串填充内容,一旦内容填充完毕,则需开展进一步的处理.譬如一段Word文本,常见的加工操作就有查找.替换.追加.截取等等,按照字符串的处理结果异同,可将这些操作方法归为三大类,分别说明如下.一.判断字符串是否具备某种特征该类方法主要用来判断字符串是否满足某种条件,返回true代表条件满足,返回false代表条件不满足.判断方法的调用代码示例如下: String hello = "Hello World. "; // isEmpty方法判…
前面介绍了处理字符串的常用方法,还有一种分割字符串的场景也很常见,也就是按照某个规则将字符串切割为若干子串.分割规则通常是指定某个分隔符,根据字符串内部的分隔符将字符串进行分割,例如逗号.空格等等都可以作为字符串的分隔符.正好String类型提供了split方法用于切割字符串,只要字符串变量调用split方法,并把分隔符作为输入参数,该方法即可返回分割好的字符串数组.下面的split调用代码例子演示了如何按照逗号和空格切割字符串: // 通过逗号分割字符串 private static void…
前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了上述规则的所有字符串.正则表达式的保留字符主要有:圆括号.方括号.花括号.竖线.横线.点号.加号.星号.反斜杆等等,这些保留字符的作用详见前一篇博文,下面再简单总结一下它们的用途:圆括号“()”:把圆括号内外的表达式区别开来.方括号“[]”:表示方括号内部的字符互相之间是或的关系.花括号“{}”:花…
Date是Java最早的日期工具,编程中经常通过它来获取系统的当前时间.当然使用Date也很简单,只要一个new关键字就能创建日期实例,就像以下代码示范的那样: // 创建一个新的日期实例,默认保存的是系统时间 Date date = new Date(); 有了这个日期实例,再来调用getYear(获取年份).getMonth(获取月份).getDate(获取日子).getDay(获取星期几).getHours(获取时钟).getMinutes(获取分钟).getSeconds(获取秒钟)等方…
前面介绍了多线程并发之时的资源抢占情况,以及利用同步.加锁.信号量等机制解决资源冲突问题,不过这些机制只适合同一资源的共享分配,并未涉及到某件事由的前因后果.日常生活中,经常存在两个前后关联的事务,像雇员和雇主这两个角色,他们之间的某些工作就带有因果关系.比如要等雇主接到了项目,雇员才有活干:又如每月末员工都等着老板发工资,这样才有钱逛街和吃大餐,此时员工的消费行为便依赖于老板的发薪水动作.如此看来,两个线程之间理应建立某种消息通路,每当线程A完成某个事项,就将完成标志通知线程B,线程B收到通知…
前面介绍了文件通道的读写操作,其中用到字节缓存ByteBuffer,它是位于通道内部的存储空间,也是通道唯一可用的存储形式.ByteBuffer有两种构建方式,一种是调用静态方法wrap,根据输入的字节数组生成对应的缓存对象:另一种是调用静态方法allocateDirect,根据输入的数值分配指定大小的空缓存.字节缓存又是一种特殊的存储空间,因为它可能会被多次读写,所以为了有效地控制读写操作,Java给它设计了下列五种概念:容量.当前限制量.当前位置.本次剩余空间.标记位置,分别说明如下:1.容…
不管是AWT还是Swing,都把选择框分成两类:复选框和单选按钮,这两类控件无论是外观上还是功能上均有显著差异.例如,在外观方面,复选框是在方框内打勾,而单选按钮是在圆圈内画圆点:在功能方面,复选框允许多选,而同组的单选按钮只能选择其中一个.然而AWT的复选框和单选按钮统统采用Checkbox类型,区别之处在于是否加入了单选组CheckboxGroup.这不可避免又带来困惑,同样是Checkbox类型,代码该如何区分某个选择框到底是复选框还是单选按钮?显然AWT的控件设计很不合理,非常容易引起混…
前面介绍了选择框的用法,当时为了方便用户勾勾点点,无论是复选框还是单选按钮,统统把所有选项都摆在界面上.倘若只有两三个选项还好办,要是选项数量变多比如超过五个,这么多的选择框一齐在界面罗列,不光程序员排版费劲,用户瞅着也容易眼花.鉴于这些选择框往往选完一次就了事,难得有重新选择第二次的机会,因而在界面上全部铺开这些选择框实属浪费.更好的做法是在选择的时候才展开所有选项,选完之后就缩回只显示选中的那一项,一伸一缩之间才能充分利用有限的屏幕界面.以单选按钮的组合为例,许多个单选按钮只能选择其中一个,…
前面介绍了程序界面上一些简单控件的组合排列,它们用来表达相互之间联系较弱的信息倒还凑合,要是用来表达关联性较强的聚合信息就力不从心了.倘若只是简单信息的罗列,例如商品名称列表.新闻标题列表.学生姓名列表等,尚可使用列表框JList予以展示:倘若要求罗列复杂的排列信息,例如商品订单列表.新闻分类列表.学生成绩列表等等,像这种存在多项细节的信息列表就无法通过列表框表达,而应通过Swing的表格类型JTable加以描述.JTable如其名字所言,它的面貌正是分行分列的表格,每行是一条完整的信息,而每列…
传统的桌面程序基本是对某种类型的文件进行加工,例如Window自带的记事本用来读写文本文件,自带的画图程序用来查看和修改位图文件.为了方便用户切换各种操作,这些程序在窗口顶端放了一排菜单栏,单击菜单栏上的每个菜单,又会在下方弹出一列菜单项,就像下图所示的记事本菜单那样. 然后单击某个菜单项,比如“新建”.“打开”.“保存”等,记事本程序便会执行相应的处理操作.这组菜单在Swing中被分解为三种控件,首先是顶部的一整条菜单栏,对应的控件叫JMenuBar:其次是菜单栏上的每个菜单,对应的控件叫JM…
桌面程序在运行过程中,时常需要在主界面之上弹出小窗,把某种消息告知用户,以便用户及时知晓并对症处理.这类小窗口通常称作对话框,依据消息交互的过程,可将对话框分为三类:消息对话框.确认对话框.输入对话框,分别介绍如下: 1.消息对话框这类对话框仅仅向用户展示一段文本,告诉用户发生了什么事情.它起到了提示的作用,但不支持用户干预事务.不管用户同意与否,都无法改变事件的进展.在Swing框架中,消息对话框由消息的标题.内容.确定按钮组成.调用JOptionPane工具的静态方法showMessageD…
虽然Java自诞生之初就推出了AWT,紧接着第二版又推出升级后的Swing,打算在桌面开发这块大展拳脚:可是后来Java在服务器开发上大放异彩,在桌面开发上反而停滞不前,可谓失之J2SE收之J2EE.至于手机开发方向的J2ME,也因为安卓的异军突起而逐渐凋零,尽管安卓开发仍以Java语言为主,但谷歌公司却转去拥抱Kotlin,致使手机端的Java天下岌岌可危.为今之计,既然服务器开发的Java霸主地位牢不可撼,只能在桌面开发这边攻城略地了.不过原先的AWT与Swing实在太古老,难堪大用,唯有另…
前面介绍了JavaFX的窗口框架,其中舞台.场景.窗格都能与AWT/Swing体系的相关概念一一对应,不仅如此,JavaFX的常见控件也能在Swing中找到相应的控件.比如JavaFX的按钮控件名叫Button,对应Swing的JButton,两种按钮提供的方法也类似,下面是Button控件的常用方法说明:setText:设置按钮的文本.setPrefSize:设置按钮的推荐宽高.setAlignment:设置按钮的对齐方式.setOnAction:设置按钮的单击事件.单击事件的类型为Event…
循着Swing的旧例,JavaFX仍然提供了三种文本输入框,分别是单行输入框TextField.密码输入框PasswordField.多行输入框TextArea.这些输入框都由抽象类TextInputControl派生而来,因此拥有共同的编辑方法,常用的主要有下列两个:setEditable:设置输入框能否编辑.为true表示能够编辑,为false表示不能编辑.setPromptText:设置输入框的提示语,用来提示用户可以输入什么样的文本.文本输入框与文本标签的区别在于,输入框内的文字允许编辑…
前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允许直接赋值给整型变量 private static void charToInt() { int a = 'A'; System.out.println("int a="+a); int tian = '田'; System.out.println("int tian="…
正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character.初始化字符包装变量也有三种方式,分别是:直接用等号赋值.调用包装类型的valueOf方法.使用关键字new创建新变量.倘若要把字符包装变量转换成字符变量,则调用包装变量的charValue方法即可.甚至可以对字符包装变量做加减乘除运算,就像之前对待字符变量一般,字符包装类型的基本使用代码示例如下: // 声明一个包装字符变量 Character character = 'A'; System.…
除了常规的提示对话框,还有一种对话框也很常见,它叫做文件对话框.文件对话框又分为两小类:打开文件的对话框.保存文件的对话框,但在Swing中它们都用类型JFileChooser来表达.下面是JFileChooser的常用方法说明:setDialogTitle:设置文件对话框的标题.setApproveButtonText:设置确定按钮的文本.setCurrentDirectory:设置文件对话框的初始目录.setMultiSelectionEnabled:设置是否支持选择多个文件.取值true表…
前面介绍了JavaFX标签控件的用法,其中提到Label文本支持中文字体,那么它到底支持哪些中文字体呢?自然要看当前的操作系统都安装了哪些字体才行,对于中文的Windows系统,默认安装了黑体“SimHei”.宋体“NSimSun”.仿宋“FangSong”与楷体“KaiTi”.在AWT与Swing的体系中,Font工具支持填入中文字体的名称:但在JavaFX编程之中,Font工具则要填写中文字体的拼音.除了这四种基础字体以外,只要系统安装了中文Office,则还会增加下述的中文字体,这些字体也…
现将本博客的Java学习文章整理成以下笔记目录,方便查阅. 第一章 初识JavaJava开发笔记(一)第一个Java程序Java开发笔记(二)Java工程的帝国区划Java开发笔记(三)Java帝国的特种官吏Java开发笔记(四)Java帝国的度量衡 第二章 数值变量Java开发笔记(五)数值变量的类型Java开发笔记(六)特殊数字的表达Java开发笔记(七)强制类型转换的风险 第三章 算术运算Java开发笔记(八)五种算术运算符Java开发笔记(九)赋值运算符及其演化Java开发笔记(十)一元…
前面介绍了许多数据类型,除了基本类型如整型int.双精度型double.布尔型boolean之外,还有高级一些的如包装整型Integer.字符串类型String.本地日期类型LocalDate等等,那么这些数据类型为何会分成基本和高级两种呢?这与编程语言的发展历程息息相关,像中文.英文这些是人类社会的自然语言,而计算机能够识别的是机器语言,但是机器语言全为以0和1表达的二进制串,看起来仿佛天书一般,读都读不懂,更别说写出来了.为了方便程序员也能操纵计算机,科学家把机器语言所表达的一些常见操作归纳…
有些时候,开发者想把程序运行过程中的数据临时保存到文件,可是前面介绍的字符流和字节流,要么用来读写文本字符串,要么用来读写字节数组,并不能直接保存某个对象信息,因为对象里面包括成员属性和成员方法,单就属性而言,每个属性又有各自的数据类型及其具体数值,这些复杂的信息既不能通过字符串表达,也不能通过简单的字节数组表达.虽然现有手段不容易往文件中写入对象信息,但是该想法无疑极具吸引力,倘若能够自如地对文件读写某个对象数据,必定会给程序员的开发工作带来巨大便利,况且内存都能存放对象信息,为何磁盘反而无法…
文件输出流FileOutputStream跟FileWriter同样有个毛病,每次调用write方法都会直接写到磁盘,使得频繁的写操作性能极其低下.正如FileWriter搭上了缓存兄弟BufferedWriter那样,FileOutputStream也有自己的缓存兄弟BufferedOutputStream,这个缓存输出流的用法与缓存写入器非常相似,主要体现在如下三点:1.每次创建缓存输出流对象之前,都要先构建文件输出流对象,然后据此构建缓存输出流对象:2.它的write方法先把数据写到缓存,…
前面介绍了字符流读写文件的两种方式,包括文件字符流和缓存字符流,但是它们的写操作都存在一个问题:不管是write方法还是append方法,都只能从文件开头写入,而不能追加到文件末尾或者在文件中间某个位置写入.这个问题真不好办,它意味着每次写操作都会覆盖掉原来的文件内容,注意是直接覆盖而非局部修改,可大多数的业务场景需要在原文件基础上追加或者修改的.倘若坚持使用字符流修改文件内容,也不是不可以,那样得把原来的文件内容全部读到某个字符串,再对该字符串进行修改操作,最后把改后的字符串重新写入原文件.这…
前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作“字符流I/O”,其中字母I代表输入Input,字母O代表输出Output.可是FileWriter的读操作并不高效,缘由在于FileWriter每次调用write方法都会直接写入文件,假如某项业务需要多次调用write方法,那么程序就会写入文件同样次数.因为写文件本质是写磁盘,磁盘的速度远不如内存,所以频繁地写文件必然严重降低程序的运行效率.为此Ja…