第6章Java基础类库

6.1 与用户互动

6.1.1 运行Java程序的参数

下面详解main()方法为什么采用这个方法签名。

  • public修饰符:Java类由JVM调用,为了让JVM可以自由调用这个main()方法,所以使用public修饰符把这个方法暴露出来。
  • static修饰符:JVM调用这个主方法时,不会先创建该主类的对象,然后通过对象来调用该主方法。JVM直接通过该类来调用主方法,因此使用static修饰主方法。
  • void返回值:因为主方法被JVM调用,该方法的返回值将返回给JVM,这没有任何意义,因此main()方法没有返回值。

6.1.2 使用Scanner获取键盘输入

Scanner主要提供了两个方法来扫描输入:

  • hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果只是判断包含下一个字符串,则直接使用hasNext()。
  • nextXxx():获取下一个输入项。Xxx的含义与前一个方法中的Xxx相同。
import java.util.Scanner;public class ScannerKeyBoardTest {public static void main(String[] args) {//System.in 代表标准输入,就是键盘输入Scanner sc = new Scanner(System.in);//增加下面一行将只把回车作为分隔符// sc.useDelimiter("\n")// 判断是否还有下一个输入项while (sc.hasNext()){//输出输入项System.out.println("键盘输入的内容是:" +sc.next());}}
}

事实上,Scanner提供了两个简单的方法来逐行读取。

  • boolean hasNextLine():返回输入源中是否还有下一行。
  • String nextLine():返回输入源中下一个的字符串。
import java.util.Scanner;public class ScannerLongTest {public static void main(String[] args) {// System.in 代表标准输入,就是键盘输入Scanner sc = new Scanner(System.in);// 判断是否还有下一个long型整数while (sc.hasNextLong()){// 输出输入项System.out.println("键盘输入的内容是:"+ sc.nextLong());}}
}

6.2 系统相关

6.2.1 System类

6.2.2 Runtime类

6.3 常用类

6.3.1 Object类

Object类提供了如下几个常用方法:

  • boolean equals(Object obj):判断指定对象与该对象是否相等。
  • protected void finalize():当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。
  • Class<?>getClass():返回该对象的运行时类。
  • int hashCode():返回该对象的hashCode值。
  • String toString():返回该对象的字符串表示。

6.3.2 Objects类

6.3.3 String、StringBuffer、StringBuilder类

6.3.4 Math类

6.3.5 ThreadLocalRandom类与Random类

6.4 Java 8 的日期、时间类

6.4.1 Date类

Date类的两个构造器:

  • Date():生成一个代表当前日期的Date对象。
  • Date(long date):根据指定的long型整数来生成一个Date对象。

Date类的方法:

  • boolean after(Date when):测试该日期是否在指定日期when之后。
  • boolean before(Date when):测试该日期是否在指定日期when之前。
  • long getTime():返回该时间对应的long型整数。
  • void setTime(long time):设置该类Date对象的时间。

总体来说,Date是一个设计相当糟糕的类,因此Java官方推荐尽量少用Date的构造器和方法。

6.4.2 Calendar类

Calendar类提供了大量访问、修改日期时间的方法,常用方法如下:

  • void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
  • int get(int field):返回指定日历字段的值。
  • int getActualMaximum(int field):返回指定日历字段可能拥有的最大值。
  • int getActualMinimum(int field):返回指定日历字段可能拥有的最小值。
  • void roll(int field, int amount):与add()方法类似,区别在于架上amount后超过了该字段所能表示的最大范围时,也不会向上一个字段进位。
  • void set(int field, int value):将给定的日历字段设置为给定值。
  • void set(int year, int mouth, int date):设置Calendar对象的年、月、日三个字段的值。
  • void set(int year, int mouth, int date, int hourOfDay, int minute, int second):设置Calendar对象的年、月、日、时、分、秒6个字段的值。

如下程序示范了Calendar类的常规用法:

import java.util.Calendar;public class CalendatTest {public static void main(String[] args) {Calendar c = Calendar.getInstance();// 取出年System.out.println(c.get(Calendar.YEAR));// 取出月System.out.println(c.get(Calendar.MONTH));// 取出日System.out.println(c.get(Calendar.DATE));c.set(2003, 10, 23, 12, 32, 23);System.out.println(c.getTime());// 将Calendar的年前推一年c.add(Calendar.YEAR, -1);System.out.println(c.getTime());// 将Calendar的月前推8个月c.roll(Calendar.MONTH, -8);System.out.println(c.getTime());}
}

Calendar类还有如下几个注意点
1.add和roll的区别
(1)add有如下两条规则:
①当被修改的字段超出它允许的范围时,会发生进位,即上一级字段也会增大。
②如下下一级字段也需要改变,那么该字段会修正到变化最小的值。
(2)roll()的规则与add()处理规则不同,当修改的字段超出了它允许的范围时,上一级字段不会增大。
(3)下一级字段的处理规则与add()相似。
2.设置Calendar的容错性

import java.util.Calendar;public class LenientTest {public static void main(String[] args) {Calendar cal = Calendar.getInstance();// 结果是YEAR字段加1,MONTH字段为1(2月)cal.set(Calendar.MONTH, 13);System.out.println(cal.getTime());// 关闭容错性cal.setLenient(false);// 导致程序运行时异常cal.set(Calendar.MONTH, 13);System.out.println(cal.getTime());}
}

3.set方法延迟修改

import java.util.Calendar;public class LazyTest {public static void main(String[] args) {Calendar cal = Calendar.getInstance();cal.set(2003, 7, 31);// 将月份设为9,但9月31日不存在// 如果立即修改,系统将会把cal自动调整到10月1日cal.set(Calendar.MONTH, 8);// 下面代码输出10月1日// System.out.println(cal.getTime());// 设置DATE字段为5cal.set(Calendar.DATE, 5);System.out.println(cal.getTime());}
}

6.4.3 Java 8 新增的日期、时间包

Java 8 专门新增了一个java.time包,该包下包含了如下常用的类:

  • Clock:该类用于回去指定时区的当前日期、时间。
  • Duration:该类代表持续时间。
  • Instant:代表一个具体的时刻,可以精确到纳秒。
  • LocalDate:该类不带时区的日期,例如2003-12-03。
  • LocalTime:该类代表不带时区的时间,例如10:15:30。
  • LocalDateTime:该类代表不带时区的日期、时间,例如2007-12-03T10:15:30。
  • MonthDay:该类仅代表月日,例如–04-12。
  • Year:该类仅代表年。
  • YearMonth:该类仅代表年月。
  • ZonedDateTime:该类代表一个时区化的日期。
  • Zoneld:该类代表一个时区。
  • DayOfWeek:这是一个枚举类,定义了周日到周六的枚举值。
  • Month:这也是一个枚举类,定义了一月到十二月的枚举值。

6.5 Java 8 新增的日期、时间格式器

获取DateTimeFormatter对象有如下三种常见的方式:

  • 直接使用静态常量创建DateTimeFormatter格式器。
  • 使用达标不同风格的枚举值来创建DateTimeFormatter格式器。
  • 根据模式字符串来创建DateTimeFormatter格式器。

6.5.1 使用DateTimeFormatter完成格式化

使用DateTimeFormatter将日期、时间(LocalDate、LocalDateTime、LocalTime等实例)格式化为字符串,可通过如下两种方式:

  • 调用DateTimeFormatter的format(TemporalAccessor temporal)方法执行格式化,其中LocalDate、LocalDateTime、LocalTime等类都是TemporalAccessor接口的实现类。
  • 调用LocalDate、LocalDateTime、LocalTime等日期、时间对象的format(DateTimeFormatter formatter)方法执行格式化。

6.5.2 使用DateTimeFormatter解析字符串

本章练习

1.定义一个长度为10的整数数组,可用于保存用户通过控制台输入的10个整数。并计算它们的平均值、最大值、最小值。
2.将字符串“ABCDEFG”中的“CD”截取出来;再将“B”、“F”截取出来。
3.将A1B2C3D4E5F6G7H8拆分开来,并分别存入int[]和String[]数组。得到的结果为[1,2,3,4,5,6,7,8]和[A,B,C,D,E,F,G,H]。

疯狂Java讲义(读书笔记)(第六章--Java基础类库)相关推荐

  1. 深入Java虚拟机读书笔记第五章Java虚拟机

    Java虚拟机 Java虚拟机之所以被称之为是虚拟的,就是因为它仅仅是由一个规范来定义的抽象计算机.因此,要运行某个Java程序,首先需要一个符合该规范的具体实现. Java虚拟机的生命周期 一个运行 ...

  2. 《疯狂的JAVA讲义》笔记-第8章集合

    <疯狂的JAVA讲义>笔记-第8章集合 Iterator .ListIterator接口 Iterator迭代时是将元素的值返回,并不是将元素本身返回,所以迭代时无法更改元素的值.但是可以 ...

  3. java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略

    java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略 GC需要完成的三件事情:哪些内存需要回收.什么时候回收.如何回收 垃圾回收器在对堆进行回收前,首先要确定那些对象存活,哪些对象已经死去,判断的 ...

  4. 《Python从入门到实践》读书笔记——第六章 字典

    <Python从入门到实践>读书笔记--第六章 字典 1. 一个简单的字典 alien_0 = {'color': 'green', 'points': 5}print(alien_0[' ...

  5. 李刚 疯狂Python讲义 读书笔记

    疯狂Python讲义 李刚 这不一定是最好的python入门书,我买它纯粹是因为遇到公众号的推销.对入门教材不需要太纠结,基础知识部分大家都是互相借鉴的,买最近出版的就行. 我是经历了很长时间的碎片化 ...

  6. Entity Framework 4 in Action读书笔记——第六章:理解实体的生命周期(三)

    objectstatemanager更改跟踪管理 ObjectStateManager组件(从现在开始称之为 state manager)负责与上下中对象追踪有关的一切: 1.当添加,附加到上下文或者 ...

  7. 《C++ Primer》读书笔记—第六章 函数

    声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程 一.函数基础 1.一个典型的函数定义包括以下内容:返回 ...

  8. 财务自由之路 读书笔记 第六章 债务

    第六章 债务 25 绝不要用短期方法解决长期问题 ​ -丹尼尔·s<交易与收益> "赢家一生只做头等舱". 第一节 坏债是如何产生的 好债和坏债  个人认为,使用消费贷 ...

  9. 强化学习(RLAI)读书笔记第六章差分学习(TD-learning)

    第六章:Temporal-Difference Learning TD-learning算法是强化学习中一个独具特色而又核心的想法,结合了蒙特卡洛算法和动态规划的想法.和MC一样不需要环境模型直接从s ...

  10. 《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(3)

    <Microsoft Sql server 2008 Internals>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397 ...

最新文章

  1. emacs按键绑定详解
  2. Python知识总结
  3. springboot+IntelliJ IDEA实现热部署
  4. mongoengine.NotUniqueError
  5. 【spark系列3】spark开发简单指南
  6. PyTorch官方教程中文版
  7. python预测股票价格_python用线性回归预测股票价格
  8. Hive窗口函数(over/partition by/order by/window/序列函数)总结与实践
  9. Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
  10. 【Matlab学习笔记】【函数学习】nargin 参数
  11. 局域网ip冲突检测工具_python 小工具实现 windows笔记本与 ipad数据互传
  12. 汽车UDS诊断详解及Vector相关工具链使用说明——总述
  13. 维修手册 html 打开,戴尔Dell Latitude E6410/E6510官方拆机图解维修手册
  14. 瑞芯微Rockchips RK3368对比晶晨Amlogic S905
  15. 中兴手机数据通道打不开_中兴td-lte无线数据终端闪着绿灯 但是上不了网是怎么回事...
  16. DB2 元换算成万元 (除以/10000)
  17. 高并发系统设计二十六(配置中心)
  18. 某银行存储瘫痪、缺失6个小时数据,只能人工补录
  19. 作为程序员,哪些技能是必须要掌握的?
  20. 微信公众号文章批量下载成网页和PDF格式-真正完全免费工具

热门文章

  1. Boost库异步IO
  2. 【php基础入门】细说PHP中的函数声明与使用详解(重要)
  3. 2005计算机编程入门教学,Micro:bit教程05—小bit编程入门教程
  4. 使用sklearn不同方法在digits手写数字数据集上聚类并用matplotlib呈现
  5. 【C语言】俄罗斯方块的源代码
  6. matlab 函数取整函数,MATLAB取整函数
  7. ERROR Error loading vue.config.js: ERROR Error: Command failed: git describe --always报错可能的原因
  8. 一种自适应模拟退火粒子群优化算法-附代码
  9. html怎么防止扒站点,扒站工具-扒取站点js css的工具
  10. JAVA实现网页版斗地主_Java实现斗地主案例