2022-07-28 第二小组 张鑫 学习笔记

实训二十天 API

1.学习重点

1.值传递
2.API

2.学习心得

今天主要学习了一些常用的API,知识点十分复杂散乱。关于一些用法和写法还需要深入理解,学会使用。

3.学习内容

值传递

Java的值传递和所谓的引用传递

本质上Java只有值传递,所有的赋值传参都是一次值的拷贝
引用数据类型拷贝的就是引用地址基本数据类型拷贝的是值,不会传入实例对象本身。

示例
public class Ch01 {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public static void change(Ch01 ch01) {
        ch01 = new Ch01("jerry");
        ch01.name = "jerry";
    }
    }
    public static void main(String[] args) {
        Ch01 ch01 = new Ch01("tom");
        change(ch01);
        System.out.println(ch01);
    }
}
//输出结果为tom

public class Ch01 {
    private String name;
    public Ch01(String name) {
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public static void change(Ch01 ch01) {
        ch01.setName("jerry");
    }
    @Override
    public String toString() {
        return "Ch01{" +
                "name='" + name + '\'' +
                '}';
    }
    public static void main(String[] args) {
        Ch01 ch01 = new Ch01("tom");
        change(ch01);
        System.out.println(ch01);
    }
}
//输出结果为jerry

API

****API(Application Programming Interface)应用程序接口
JDK给我们提供的一些已经写好的类,我们可以直接调方法来解决问题

我们类的方法,在宏观上都可以称为接口

api文档,介绍api


时间相关api

时间戳:1970.1.1 00:00:00到2022.7.28 09:29:30的毫秒数

//获取时间戳
 long start = System.currentTimeMillis();
 int i = 0;
        while(i < 10000000){
            if(i % 100 == 0){
                System.out.println(i);
            }
            i++;
        }
        long end = System.currentTimeMillis();
//计算程序运行时间        
        System.out.println(end - start);

日期类 Date
// 获取系统当前日期时间
Date date = new Date();
System.out.println(date);
//获取时间戳
long millis = System.currentTimeMillis();
//输入时间戳获取日期
date = new Date(1658974415756L);
System.out.println(date);
Date date1 = new Date(1658974415756L); 
Date date2 = new Date();
//判断时间先后
System.out.println(date2.after(date1));
 /*
     当返回负数时,说明调用者时间是在参数时间之前
     当返回0时,说明调用者时间和参数时间相同
     当返回正数时,说明调用者时间在阐述时间之后
  */
System.out.println(date1.compareTo(date2));
//比较当前时间与1900年相差多少年(已过时)
System.out.println(date1.getYear());

日历类:日期时间

Calendar是一个抽象类

初始化:
提供了一组对“年月日时分秒星期”等信息的操作函数。操作不同时区的信息。
JDK1.1版本开始,在处理时间和日期时,系统推荐使用Calendar类。

Calendar要比Date强大的多

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.DATE));
//当前月(比正常少1)
System.out.println(calendar.get(Calendar.MONTH));
//今天的第几个小时(24h)
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
//12h
System.out.println(calendar.get(Calendar.HOUR));
//运行时间
System.out.println(calendar.get(Calendar.MILLISECOND));

时区
System.out.println(new Date());
Calendar calendar = Calendar.getInstance();
//给给定时区值设置时区
calendar.setTimeZone(TimeZone.getTimeZone("GNT-08:00"));
System.out.println(calendar.get(Calendar.HOUR));
//输出结果为2
ZoneId
//从id获取实例
ZoneId zoneId = ZoneId.of("America/New_York");
System.out.println(TimeZone.getTimeZone(zoneId));

日期格式化
SimpleDateFormat

format:格式化Date类型,把Date类型转成String类型
我们要展示数据到客户端。
parse:把String类型的时间,转成Date类型
从客户端传过来的时间,一般都是String类型,存入数据库。

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");
String s = sdf.format(date);
System.out.println(s);

JDK8的日期时间类

在JDK8之前,处理日期和时间,基本上就是用我们上面的几个类。
Date和Calendar,获取到的月份都是0-11,而不是我们生活中的1-12。

阿里巴巴规约明确要求
如果是jdk8的应用,可以使用
Instant代替Date
LocalDateTime代替Calendar
DateTimeFormatter代替SimpleDateFormat

新的实践类:

Instant
LocalDate
LocalTime
LocalDateTime
DateTimeFormatter


Instant instant = Instant.now();
System.out.println(instant.atZone(ZoneId.systemDefault())

//结果:2022-07-28T19:21:25.223840300+08:00[Asia/Shanghai]

//获取秒数
System.out.println(instant.getEpochSecond());

//获取毫秒数
System.out.println(instant.toEpochMilli());
//提取时间
long millis = System.currentTimeMillis();
System.out.println(Instant.ofEpochMilli(millis));

String text = "2020-07-28T14:06:50.147Z";
//从一个文本字符串获取一个Instant的实例 
Instant parse = Instant.parse(text);
System.out.println(parse);

持续时间Duration
Instant instant = Instant.now();
Instant plus = instant.plus(Duration.ofDays(5));
System.out.println(plus);
//结果:2022-08-02T11:31:15.591497100Z(五天后的时间)

LocalDate:获取当前日期
LocalDate now = LocalDate.now();
System.out.println(now);
System.out.println(now.getMonth());
System.out.println(now.getDayOfWeek());
System.out.println(now.getDayOfMonth());
/
    *2022-07-28
    JULY
    THURSDAY
    28
*/
LocalDate of = LocalDate.of(2024, 9, 10);
System.out.println(of);
// 判断是否为闰年
System.out.println(of.isLeapYear());

LocalTime:本地时间
LocalTime now = LocalTime.now();
System.out.println(now);

//结果:19:37:37.130478600

LocalDateTime:获取日期和时间
System.out.println(LocalDateTime.now());
 //结果:2022-07-28T19:38:19.806810100

DateTimeFormatter
处理日期的格式化问题
LocalDate now = LocalDate.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
System.out.println(now.format(dateTimeFormatter));
//结果:2022年07月28日

Instant和Date的转换
Instant和LocalDate转换
Date和LocalDateTime转换
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() double
  • 向上取整 ceil() double
  • 向下取整 floor() double
  • 四舍五入 round() long
  • Math.E
  • Math.PI
// 生成13-26的随机整数
// (int)(Math.random()*(max-min)+min)
System.out.println((int)(Math.random() * (26 - 13) + 13));

BigDecimal统计类
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(bigDecimal3.add(bigDecimal4));

Arrays数组的工具类
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类
//确定当前的系统属性
Properties properties = System.getProperties();
System.out.println(properties);

Objects
//判断非空
System.out.println(Objects.isNull(""));
//false

StringBuffer和StringBuilder

可变的字符序列,和String是有本质区别的
StringBuffer是同步的。安全,效率低
StringBuilder是异步的。不安全。效率高

StringBuffer stringBuffer = new StringBuffer("你好");
stringBuffer.append(",我好").append(",大家好");
stringBuffer.delete(4,7);
stringBuffer.deleteCharAt(0);
stringBuffer.insert(1,"哈哈");
stringBuffer.reverse();
System.out.println(stringBuffer);
posted @   菜鸡成长记  阅读(29)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示