Java的值传递和所谓的引用传递
本质上Java只有值传递,所有的赋值传参都是一次值的拷贝
引用数据类型其实拷贝的就是引用地址(虚地址)
基本数据类型拷贝的是值,不会传入实例对象本身
面试题:打印输出的结果是?
输出结果Tom
常用API
API(Application Programming Interface)应用程序接口
JDK给我们提供的一些已经写好的类,我们可以直接调方法来解决问题
String(可以叫API接口)
我们类的方法,在宏观上都可以称为接口
API文档,用来介绍API
时间相关的API
时间:格林尼治天文台
时区:东八区:北京时间
时间戳:格林尼治时间1970.1.1 00:00:00 到现在的毫秒数
1s = 1000ms , 1min = 60s , 1h = 60min , 1day =24h。
时间戳在全世界都是固定的。忽略了时区等
日期类
Date
compareTo
当返回负数时,说明调用者时间是在参数时间之前。
当返回0时,说明调用者时间和参数时间相同。
当返回正数时,说明调用者时间在阐述时间之后。
日历类:日期、时间
Calendar是一个抽象类,能new不能创建对象
初始化;
提供了一组对“年月日、时分秒、星期”等信息的操作函数。可以操作不同时区的信息。
JDK1.1版本开始,在处理时间和日期时,系统推荐使用Calendar类
Calendar要比Date强大的多
除非要获取的年月日时分秒一次性拿取,否则一律用calendar
时区
ZoneId
日期格式化
SimpleDateFormat
format:格式化Date类型,把Date类型转成String类型
我们要展示数据到客户端
parse:把String类型的时间,转成Date类型
从客户端传过来的时间,一般都是String类型,存入数据库。
yyyy代表年,yy代表年的后两位
MM代表月
dd代表日
HH代表小时(24小时制) hh代表小时(12小时制)
mm代表分
ss代表秒
SSS代表毫秒
工具类的方法都是静态
JDK8的日期时间类
在JDK8之前,处理日期和时间,基本上就是用我们上面的几个类
Date和Calendar,获取到的月份都是0-11,而不是我们生活中的1-12
阿里巴巴规约的明确要求:
如果是JDK8的应用,可以使用Instant来代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替SimpleDateFormat
新的时间类
Instant
LocalDate
LocalTime
DateTimeFormatter
持续时间Duration
获取当前的日期 LocalDate
判断是否为闰年
本地时间 LocalTime
获取日和时间 LocalDateTime
处理日期的格式化问题 DateTimeFormatter
把Instant转成Date
把Date转成Instant
把Instant转成LocalDateTime
把LocalDateTime转成Instant
把Date转成LocalDateTime
把LocalDateTime转成Date
Math 数学类
随机数 random() double
向上取整 ceil() double
向下取整 floor()double
四舍五入 round()long
BigDecimal统计类
随机类 Random
Arrays——数组的工具类
数组的排序
数组的查找
数组拷贝
数组的比较
System类——系统类
Objects(工具类)JDK1.7
判断是不是空
StringBuffer和StringBuilder——可变的字符序列
和String是有本质区别的
StringBuffer不能直接用等号赋值
追加
删除
删除指定位置
插入
反转(面试会问)
String怎么反转?
1.
2.
StringBuffer是(线程)同步的。安全,效率低
StringBuilder是异步的。不安全,效率高
面试题:三个字符串的区别