第一节 Java类库概述
包名以Java开始的包是Java的核心包(Java Core Package)
包名以Javax开始的包是Java扩展包(Java Extension Package)
第二节 数字相关类
Java数字类
- 整数 Short, Int, Long
- 浮点数 Float, Double
- 大数类 BigInteger(大整数), BigDecimal(大浮点数)
- 随机数类 Random
- 工具类 Math
大整数类 BigInteger:支持无限大的整数运算
大浮点数 BigDecimal:支持无限大的小数运算,注意精度和截断,尽量使用字符串赋值更精确。
Random随机数:
- nextInt() 返回一个随机int
- nextInt(int a) 返回一个[0, 1)之间的随机int
- nextDouble()返回一个[0.0, 1.0]之间的double
- ints方法批量返回随机数数组
Math.random()返回一个 [0.0, 1.0] 之间double。
Java.lang.Math
- 绝对值函数 abs
- 对数函数 log
- 比较函数 max,min
- 幂函数 pow
- 四舍五入函数round等
- 向下取整 floor
- 向上取整 ceil
第三节 字符串相关类
String:Java中使用频率最高的类,是一个不可变对象,加减操作性能较差。
可变字符串:
- StringBuffer(字符串加减,同步,性能好)
- StringBuilder(字符串加减,不同步,性能更好)
StringBuffer/StringBuilder:方法一样,区别在于同步
- append / insert / delete / replace / substring
- length 字符串实际大小,capacity 字符串占空间的大小
- trimToSize(): 去除空隙,将字符串存储压缩到实际大小
- 如有大量append,事先预估大小,再调用相应构造函数
字符串拼接速度:StringBuilder > StringBuffer > String
//StringBuffer的初始大小为(16+初始字符串长度)即capacity=16+初始字符串长度
//length实际长度,capacity存储空间大小
StringBuffer sb1 = new StringBuffer();
System.out.println(“sb1 length: “ + sb1.length());
//sb1 length: 0
System.out.println(“sb1 capacity: “ + sb1.capacity());
// sb1 capacity: 16
=======================================================
StringBuffer sb2 = new StringBuffer(“123”);
Sb2.append(“456”);
System.out.println(“sb2 length: “ + sb2.length());
//sb1 length: 6
System.out.println(“sb2 capacity: “ + sb2.capacity());
// sb1 capacity: 19
=======================================================
Sb2.append(“7890123456789”);
System.out.println(“sb2 length: “ + sb2.length());
//sb1 length: 19
System.out.println(“sb2 capacity: “ + sb2.capacity());
// sb1 capacity: 19
=======================================================
Sb2.append(“0”);
//一旦length大于capacity时,capacity便在前一次的基础上加1后翻倍
System.out.println(“sb2 length: “ + sb2.length());
//sb1 length: 20
System.out.println(“sb2 capacity: “ + sb2.capacity());
// sb1 capacity: 40
=======================================================
Sb2.append(“12345678901234567890123456789012345678901234567890 12345678901234567890”);
//当前sb2 length 20 capacity 40 再append70个字符(超过加一再翻倍)
System.out.println(“sb2 length: “ + sb2.length());
//sb1 length: 90
System.out.println(“sb2 capacity: “ + sb2.capacity());
// sb1 capacity: 90
// 如果append对象很长,超过加一翻倍,直接以最新的length更换
=======================================================
Sb2.append(“0”);
System.out.println(“sb2 length: “ + sb2.length());
//sb1 length: 91
System.out.println(“sb2 capacity: “ + sb2.capacity());
// sb1 capacity: 182
Sb2.trimToSize();
//释放多余的空闲内存,但不利于下一次扩张
System.out.println(“sb2 length: “ + sb2.length());
//sb1 length: 91
System.out.println(“sb2 capacity: “ + sb2.capacity());
// sb1 capacity: 91
第四节 时间相关类
java.until.Date (DEPRECATED)
- getTime(), 返回自1970.1.1以来的毫秒数
java.sql.Date (和数据库对应的时间类)
Calendar 是目前程序中最常用的,但是是抽象类
- Calendar gc = Calendar.getInstance();
- Calendar gc = new GregorianCalendar();
- 简单工厂模式
Calendar:
- get (Field) 来获取时间中每个属性的值,月份0-11
- getTime (), 反会相应的Date对象
- getTimeInMillis(), 返回自1970.1.1以来的毫秒数
- set(Field) 设置时间字段
- add(field, around) 根据指定字段增加/减少时间
- roll(field, amount) 根据指定字段增加/减少时间,但不影响上一级的时间段,没有进位
Java 8 推出新的时间API
- java.time包
- 旧的设计不好(重名的类,线程不安全)
- 新版本优点:不变性,遵循设计模式,可扩展性强
Java 8 时间包概述
- java.time 包:新的java日期/时间API的基础包
- java.time.chrono包:为非ISO的日历系统定义了一些泛化的API
- java.time .format包:格式化和解析日期时间对象的类
- java.time.temporal包:包含一些时态对象,可以用其找出关于日期/时间对象的莫哥特定日期或时间
- java.time.zone包:包含支持不同时区以及规则的类
Java 8 java.time包主要类:
- LocalDate: 日期类
- LocalTime: 时间类(时分秒 - 纳秒)
- LocalDateTime:LocalDate + LocalTime
- Instant:时间戳
LocalDate today = LocalDate.now();
//判断是否是闰年
System.out.println(“Year “ + today.getYear() + “ Is Leap Year “ + today.isLeapYear());
//今天和01/01/2015比较
System.out.println(“Today is before 01/01/2015 “ + today.isBefore(LocalDate.of(2015,1,1));
//当前时分秒
System.out.println(“Current time = “ + today.atTime(localTime.now()));
//加减时间
System.out.println(“10 day after today will be “ + today.plusDays(10));
//调整时间
LocalDate lastDatOfYear = today.with(TemporalAdjusters.lastDayOfYear());
System.out.println(“Last date of this year = “ + lastDayOfYear);
//时间段计算
Period period = today.until(lastDayOfYear);
System.out.println(“Period Format = “ + period);
System.out.println(“Months remaining in the year = “ + period.getMonths());
当前很多程序还是使用Calendar类处理时间。
第五节 格式化 (format) 相关类
java.text包 java.text.Format的子类
- NumberFormat: 数字格式化,抽象类
- MessageFormat: 字符串格式化
- DateFormat: 日期/时间格式化,抽象类
java.time.format.DateFormatter:时间格式化
- JDK8发布,线程安全(vs DimpleDateFormat 线程不安全)
- ofPattern:设定时间格式
- parse:将字符串格式化为时间对象
- format:将时间对象格式化为字符串
- 如将当前时间转化为YYYY-MM-DD HH24:MI:SS输出