【自用】JavaSE学习笔记(二)
常用API
Math类
工具类,提供数学计算的方法。
里面的方法都是静态的。
常用方法:
- abs 获取绝对值
- absExact 获取绝对值
- ceil 向上取整
- floor 向下取整
- round 四舍五入
- max 获取最大值
- min 获取最小值
- pow 获取a的b次幂
- sqrt 开平方根
- cbrt 开立方根
- random 获取 [0.0, 1.0) 之间的随机数
System类
工具类,提供一些与系统相关的方法的。
时间原点:1970年1月1日,是C语言的生日
(中国在东八区,有8h时差,所以是1970年1月1日 08:00:00)
1s = 1000ms
常用方法:
- exit 停止虚拟机
- currentTimeMillis 获取当前时间的毫秒值
- arraycopy 拷贝数组
Runtime类
表示当前虚拟机的运行环境。
常用方法:
- getRuntime 当前系统的运行环境对象
- exit 停止虚拟机
- available 获得CPU的线程数
- maxMemory JVM能从系统中获取总内存大小(单位byte)
- totalMemory JVM已经从系统中获取总内存大小(单位byte)
- freeMemory JVM剩余内存大小(单位byte)
- exec 运行cmd命令
Object类
是Java中的顶级父类。所有的类都直接或间接地继承于Object类。
Object的构造方法:public Object() 无参构造
顶级父类中只有无参构造方法。
Object的3个成员方法(总共有11个):
- toStrin 返回对象的字符串表示形式。一般重写。
- equals 比较两个对象是否相等。比较对象时重写。
- clone 对象克隆。默认浅克隆,如果需要深克隆要重写方法或使用第三方工具类。
对象克隆
浅克隆 aka 浅拷贝
不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来。深克隆 aka 深拷贝
基本数据类型拷贝过来
字符串复用
引用数据类型重新创建新的
Objects类
工具类,提供一些操作对象的方法
常用方法:
- equals(对象1, 对象2) 先做非空判断,比较两个对象
- isNull(对象) 判断对象是否为空
- nonNull(对象) 判断对象是否非空
BigInteger
BigInteger表示一个大整数。
获取BigInteger的对象:
1 | BigInteger b1 = BigInteger.valueOf(0.1); |
1 | BigInteger b1 = new BigInteger("整数"); |
Java中有四种整数类型:byte, short, int, long
整数类型 | byte | short | int | long |
---|---|---|---|---|
在底层占用字节数 | 1 | 2 | 4 | 8 |
构造方法
- BigInteger(int num, Random rnd) 获取随机大整数
- BigInteger(String) 获取指定的大整数
- BigInteger(String val, int radix) 获取指定进制的大整数
- valueOf(long val) 静态方法获取BigInteger的对象,内部有优化
- 如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取。
- 如果BigInteger表示的数字超出long,可以用构造方法获取。
- 对象一旦创建,BigInteger内部记录的值不能发生改变。
- 只要进行计算都会产生一个新的BigInteger对象。
常见方法
- add
- subtract 减
- multiply 乘
- divide 除,获取商
- divideAndRemainder 除,获取商和余
- equals 比较是否相同
- pow 次幂
- max / min 返回较大值 / 较小值
- intValue 转为int类型整数(超出数据范围会报错)
底层存储方式
- 对于计算机而言,没有数据类型的概念,都是0101010101。
- 数据类型是编程语言自己规定的。
BigDecima
类型 | 占用字节数 | 总bit位数 | 小数部分bit位数 |
---|---|---|---|
float | 4个字节 | 32个bit位 | 23个bit位 |
double | 8个字节 | 64个bit位 | 52个bit位 |
用于表示较大的小数和解决小数运算精度失真的问题。
获取BigDecimal的对象:
1 | BigDecimal bd1 = new BigDecimal("较大的小数"); |
1 | BigDecimal bd2 = BigDecimal.valueOf(0.1); |
常见方法
- add 加
- subtract 减
- multiply 乘
- divide 除(四舍五入:RoundingMode.HALF_UP)
- divide(BigDecimal val, 精确几位, 舍入模式) 除
正则表达式
可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性。
找到Pattern类,查文档。
爬虫(略)
JDK7时间类
Date类
创建日期对象:
1
Date date = new Date();
1
Date date = new Date(指定毫秒值);
修改对象中的毫秒值:
1
setTime(毫秒值);
获取时间对象中的毫秒值:
1
getTime();
SimpleDateFormat类
两个作用:
- 格式化:把时间变成我们喜欢的格式。
- 解析:把字符串表示的时间变成Date对象。
如何指定格式:
yyyy年MM月dd日 HH:mm:ss
常用方法:
Calendar类
表示一个时间的日历对象
获取对象:
通过getInstance方法获取。
常见方法:
setXxx:修改
getXxx:获取
add:在原有的基础上进行增加或减少
细节点:
日历类中月份的范围:0~11
日历类中星期的特点:星期日是一周中的第一天
JDK8时间类
为什么要学JDK8新增的时间相关类?
ZoneId时区
Instant时间戳
ZoneDateTime带时区的时间
Calendar日历类
工具类
包装类
即基本数据类型对应的引用类型,即对象。
byte | Byte |
---|---|
short | Short |
cahr | Charactor |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
JDK5获取Integer对象的方式(了解):
JDK5以后对包装类新增的特性:自动装箱、自动拆箱。
以后如何获取包装类对象:不需要new,不需要调用方法,直接赋值即可。
1 | Integer i1 = 10; |
Integer成员方法:
Arrays
操作数组的工具类
Lambda(JDK8开始)
用来简化匿名内部类的书写。
函数式编程(Functional programming)
忽略面向对象的复杂语法,强调做什么,而不是谁去做。
Lambda表达式就是函数式思想的体现。
标准格式
1 | () -> { |
()对应着方法的形参;{}对应着方法的方法体。
注意:
- Lambda表达式只能简化函数式接口的匿名内部类的写法。
- 函数式接口:有且只有一个抽象方法的接口叫做函数式接口,接口上方可以加@FunctionalInterface注解。