第八章 Java常用类

第一节 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输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值