2022-07-28 第八组 卢睿 学习心得
JAVA(api)
今日重点
- API
- Date
- Calender
- ZoneId
- SimpleDateFormat
- Math数学类
- BigDecimal统计类
- Arrays数组的工具类
- StringBuffer和StringBuilder
学习内容
java的值传递和所谓的引用传递
本质上java只有值传递,所有的赋值传参都是一次值的拷贝
引用数据类型拷贝的就是引用地址,基本数据类型拷贝的是值,不会传入实例对象本身的
API(Application Programing Interface)应用程序接口
JDK给我们提供一些已经写好的类,我们可以直接调方法来解决问题
我们类的方法,在宏观上都可以称为接口
api文档,介绍api
时间相关的api
时间:
格林尼治天文台,伦敦
时区:东八区
北京时间:+8
时间戳: 格兰尼治时间1970.1.1 00:00:00 到今天2022.7.28 9:29:30 的毫秒数
时间戳全世界都是固定的
时间戳应用
public class Ch03 {
public static void main(String[] args) {
//获取时间戳
//可以通过时间戳转换成我们当前所在地的具体时间和日期
System.out.println(System.currentTimeMillis());
long start = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}
日期类 Date
获取系统当前日期时间
public class Ch04 {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
long millis = System.currentTimeMillis();
System.out.println(millis);
}
}
日期前后比较
public class Ch05 {
public static void main(String[] args) {
Date date1 = new Date(1658974443876L);
Date date2 = new Date();
// System.out.println(date2.after(date1));
/*
当返回负数时,说明调用者时间是在参数时间之前
当返回0时,说明调用者时间和参数时间相同
当返回正数,说明调用者时间是在参数时间之后
*/
System.out.println(date1.compareTo(date2));
}
}
日历类:日期、时间,Calender
- 初始化:
- 提供了一组对“年月日时分秒星期”等信息的操作函数、操作不同时区的信息。
- JDK1.1版本开始,在处理时间和日期时,系统推荐使用Calendar类。
- Calendar要比Date强大的多
public class Ch06 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.HOUR));
}
}
时区
public class Ch07 {
public static void main(String[] args) {
// System.out.println(TimeZone.getDefault());
System.out.println(new Date());
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("GMT-08:00"));
System.out.println(calendar.get(Calendar.HOUR));
}
}
ZoneId
public class Ch08 {
public static void main(String[] args) {
ZoneId zoneId = ZoneId.of("America/New_York");
System.out.println(TimeZone.getTimeZone(zoneId));
}
}
日期格式化SimpleDateFormat
format:格式化Date类型,把Date类型转成String类型(一般是我们要展示数据到客户端)
parse:把String类型的时间,转成Date类型(从客户端传过来的时间,一般都是String类型,存入数据库)
public class Ch09 {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
/*
yyyy:年
yy:年的后两位
MM:月
dd:日
HH:小时,24小时制
hh:小时,12小时制
mm:分
ss:秒
sss:毫秒
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss:sss");
String s = sdf.format(date);
System.out.println(s);
}
}
设计一个工具类
可以对Date类型的日期进行格式化,转成String
format方法 参数是Date,返回值是String
可以对String类型的日式进行格式转换,转换成Date
parse方法 参数是String,返回值是Date
思考:
1.这个类要不要留个口
2.方法,要不要用final
public class DateUtils {
private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
public static final String dateToString(Date date){
return SDF.format(date);
}
public static final Date stringToDate(String dateStr) throws ParseException {
return SDF.parse(dateStr);
}
}
JDK8的日期时间类
在JDK8之前,处理日期和时间,基本上就是用我们上面的几个类
Date和Calendar,获取到的月份都是0-11,而不是我们生活中的1-12
阿里巴巴规约明确要求
如果是jdk8的应用,可以使用Instant代替Date
LocalDateTime代替Calendar
DateTimeFormatter代替SimpleDateFormat
新的实践类
- Instant
- LoaclDtae
- LocalTime
- LoaclDateTime
- DateTimeFormatter
public class Ch01 {
public static void main(String[] args) {
Instant instant = Instant.now();
System.out.println(instant.atZone(ZoneId.systemDefault()));
//获取秒数
System.out.println(instant.getEpochSecond());
//h获取毫秒数
System.out.println(instant.toEpochMilli());
long mills = System.currentTimeMillis();
System.out.println(Instant.ofEpochMilli(mills));
System.out.println("------------------------------------------------------------");
String text = "2022-07-28T06:05:41.475Z";
Instant parse = Instant.parse(text);
System.out.println(text);
}
}
持续时间Duration
输出5天后时间
public class Ch02 {
public static void main(String[] args) {
Instant instant = Instant.now();
Instant plus = instant.plus(Duration.ofDays(5));
System.out.println(plus);
}
}
LocalDate:获取当前的日期
public class Ch03 {
public static void main(String[] args) {
LocalDate now = LocalDate.now();
System.out.println(now);
System.out.println(now.getMonth());
System.out.println(now.getDayOfWeek());
System.out.println(now.getDayOfMonth());
LocalDate of = LocalDate.of(2024, 9, 10);
System.out.println(of);
//判断是否为闰年
System.out.println(of.isLeapYear());
}
}
LocalTime 获取本地时间
public class Ch04 {
public static void main(String[] args) {
LocalTime now = LocalTime.now();
System.out.println(now);
}
}
LocalDateTime:获取日期和时间
public class Ch05 {
public static void main(String[] args) {
System.out.println(LocalDateTime.now());
}
}
DateTimeFormatter 处理日期格式化问题
public class Ch06 {
public static void main(String[] args) {
LocalDate now = LocalDate.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
System.out.println(now.format(dateTimeFormatter));
}
}
转换
- Instant和Date的转换
- Instant和LocalDate转换
- Date和LocalDateTime
public class Ch07 {
public static void main(String[] args) {
Instant instant = Instant.now();
// 把Instant转成Date
Date date = Date.from(instant);
// 把Date转成Instant
Instant toInstant = date.toInstant();
// 把Instant转成LocalDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
// 把LocalDateTime转成Instant
Instant instant1 = LocalDateTime.now().toInstant(ZoneOffset.UTC);
// 把date转成LocalDateTime
Date date1 = new Date();
Instant instant2 = date.toInstant();
LocalDateTime localDateTime1 = LocalDateTime.ofInstant(instant2, ZoneId.systemDefault());
// 把LocalDateTime转成Date
LocalDateTime now = LocalDateTime.now();
Instant instant3 = now.atZone(ZoneId.systemDefault()).toInstant();
Date date2 = Date.from(instant3);
}
}
Math数学类
- 随机数 random()
- 向上取整 ceil()
- 向下取整 floor()
- 四舍五入 round()
- Math.E
- Math.PI
- 看api文档
public class Ch08 {
public static void main(String[] args) {
// 生成0-1的随机数
// 生成1-100的随机整数
// 生成13-26的随机整数
// (int)(Math.random()*(max-min)+min)
System.out.println(Math.random());
System.out.println((int)(Math.random() * (26 - 13) + 13));
}
}
BigDecimal统计类
在钱这方面,可以用BigDecimal,Double的精度问题可以用BigDecimal来解决
public class Ch09 {
public static void main(String[] args) {
double d1 = 0.7;
double d2 = 0.1;
BigDecimal bigDecimal1 = new BigDecimal(d1);
BigDecimal bigDecimal2 = new BigDecimal(d2);
//使用BigDecimal的构造器,开发中,传入的参数必须是字符串
BigDecimal bigDecimal3 = new BigDecimal("0.7");
BigDecimal bigDecimal4 = new BigDecimal("0.1");
System.out.println(bigDecimal1.add(bigDecimal2));
System.out.println(bigDecimal3.add(bigDecimal4));
}
}
随机:Random
public class Ch10 {
public static void main(String[] args) {
Random random = new Random();
System.out.println(random.nextInt(7));
}
}
Arrays数组的工具类
public class Ch11 {
public static void main(String[] args) {
int [] arr = new int[]{1,2,3,4,5};
System.out.println(Arrays.toString(arr));
Arrays.sort(arr);
System.out.println(Arrays.binarySearch(arr, 4));
int[] ints = Arrays.copyOf(arr, 2);
System.out.println(Arrays.toString(ints));
System.out.println(Arrays.equals(arr, ints));
}
}
输出结果:
[1, 2, 3, 4, 5]
3
[1, 2]
false
System类(系统类)
public class Ch12 {
public static void main(String[] args) {
// System.exit(-1);
// System.out.println();
// System.err.println("错误信息");
// System.currentTimeMillis();
Properties properties = System.getProperties();
System.out.println(properties);
}
}
Objects
public class Ch13 {
public static void main(String[] args) {
//判断是不是空
System.out.println(Objects.isNull(""));
}
}
StringBuffer和StringBuilder
可变的字符序列,和String是有本质区别的
String怎么反转
StringBuffer是同步的。安全。效率低
StringBuilder是异步的。不安全。效率高
面试题:
三个字符串的区别?
public class Ch14 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer("你好");
// System.out.println(stringBuffer);
stringBuffer.append(",我好").append(",大家好");
// System.out.println(stringBuffer);
// stringBuffer.delete(4,7);
// stringBuffer.insert(1,"哈哈");
stringBuffer.reverse();
System.out.println(stringBuffer);
// String str = "hello";
// String s = str.concat(",world!");
// System.out.println("str=" + str);
// System.out.println("s=" + s);
}
}
反转
public class Demo01 {
public static void main(String[] args) {
long start = System.currentTimeMillis();
String str = "abcdefg";
char[] array = str.toCharArray();
String str2 = "";
for (int i = array.length- 1;i >= 0; i--) {
str2 += array[i];
}
str = str2;
System.out.println(str);
long end = System.currentTimeMillis();
System.out.println(end - start); // 23
}
}
public class Demo3 {
public static void main(String[] args) {
long start = System.currentTimeMillis();
String str = "abcdefg";
StringBuffer stringBuffer = new StringBuffer(str);
stringBuffer.reverse();
str = stringBuffer.toString();
System.out.println(str);
long end = System.currentTimeMillis();
System.out.println(end - start); // 1
}
}

浙公网安备 33010602011771号