2022-07-28 第五组 张明敏 学习笔记

目录

一、值传递

二、API

1. 概念

2.时间相关api

3.Date类

4. 日期类 Data

5.日历类:日期时间

6.时区: 一般用上海时间

ZoneId:

7. 日期格式化 ***SimpleDateFormat

小测试1:

小测试2:

三.JDK8 的日期时间类

1.持续时间Duration

2.LocalDate:获取当前的日期

3.LocalTime:本地时间

4.LocalDateTime

5.DateTime 格式化

6.数学类Math:

7.BigDecimal统计类

8.随机 Random

9.Arrays 数组

10.System类 系统类

11.Objects

12.StringBuffer和StringBuilder

四、心得体会


一、值传递

是指在调用函数时将参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数


private String name;

    public ch01(String name){
        this.name=name;
    }

    public static void change(ch01 c){
        c=new ch01("hh");
        //没有返回值
    }

 public static void main(String[] args) {
        ch01 c=new ch01("hhh");
        change(c);//混淆,有无都可
        System.out.println(c);
    }

 结果:hhh

基本类型作为参数传递时, 是传递值的拷贝, 无论你怎么改变这个拷贝,原值是不会改变的 。

 引用传递

是指在调用函数时将参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数

private String name;

    public ch01(String name){
        this.name=name;
    }

    public static void change(ch01 c){
        c=new ch01("hh");
        //没有返回值
    }

 public static void main(String[] args) {
        ch01 c=new ch01("hhh");
        change(c);//混淆,有无都可
        System.out.println(c);
    }

结果:hh

引用类型作为参数, 传递的是对象的引用, 改变会影响原值。

总结:Java参数传递不管基本类型还是引用类型, 都是值传递。

二、API

1. 概念

API (Application Programming Interface) :应用程序编程接口。

2.时间相关api

 注册时间 最后一次修改的时间 必须有

时区:东八区(格林尼治天文台,伦敦)

时间戳:

 public static void main(String[] args) {
        //获取时间戳
        //可以通过时间戳转换成我们当地所在地的具体时间和日期
        System.out.println(System.currentTimeMillis());
        long  start=System.currentTimeMillis();
        for (int i = 0; i <100000 ; i++) {
            if (i%100==0){
                System.out.println(i);
            }
        }
        long end=System.currentTimeMillis();
    }

3.Date类

表示特定的时刻,精度为毫秒

  • 构造方法

           Date():分配 Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒;

           Date(long date):分配 Date对象并初始化它以表示自标准基准时间以来的指定毫秒数,即1970年1月1日00:00:00;

 public static void main(String[] args) {
        Date data=new Date() ;
        System.out.println(data);
        
    }

4. 日期类 Data

public static void main(String[] args) {
        Date data=new Date() ;
        System.out.println(data);

    }

结果:Thu Jul 28 11:39:27 CST 2022

实例:

/*
使用Date类
打印输出7天以后的日期和时间
 */
public class test1 {
    public static void main(String[] args) {

        Date data = new Date();
        long mills=data.getTime()+1000*60*60*24*7;
        System.out.println(mills);

    }
}

结果:1659584412380

5.日历类:日期时间

  • calendar是一个抽象类
  • 初始化: 提供一组对“年月日分秒星期”等信息的操作函数。操作不同时区的信息。
  • 1.1版本开始  系统推荐Calendar ,Calendar 比Date强大的多

  public static void main(String[] args) {
        Calendar calendar =Calendar.getInstance();
        System.out.println(calendar.get(Calendar.YEAR));
        System.out.println(calendar.get(Calendar.DATE));
        System.out.println(calendar.get(Calendar.MONTH));
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println(calendar.get(Calendar.MILLISECOND));
    }

结果:2022
           28
           6
           11
           855

6.时区: 一般用上海时间

public static void main(String[] args) {
//        System.out.println(TimeZone.getDefault());
        System.out.println(new Date());
        Calendar calendar=Calendar.getInstance();
        calendar.setTimeInMillis(calendar.getTimeInMillis());
        System.out.println();
    }

结果:Thu Jul 28 11:54:17 CST 2022

ZoneId:

ZoneId zoneId= ZoneId.of("America/New_York");
 System.out.println(TimeZone.getTimeZone(zoneId));

7. 日期格式化 ***
SimpleDateFormat

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


    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 simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String s=simpleDateFormat.format(date);
        System.out.println(s);

    }

小测试1:

使用Date类
打印输出7天以后的日期和时间
 public static void main(String[] args) {

        Date data = new Date();
        long mills=data.getTime()+1000*60*60*24*7;
        System.out.println(mills);

    }

结果:1659607945117

小测试2:

设计一个工具类:
可以对Date类型的日期进行格式化,转成String
format方法参数是Date:返回值是String可以对String类型的日式进行格式转换,转换成Date
parse方法 参数是String,返回值是Date
public  class DateUtils {


   public static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    public static final String dateToString(Date date) {

        return simpleDateFormat.format(date);
    }

    public  static final Date stringToDate(String dateSty) throws ParseException{
        return simpleDateFormat.parse(dateSty);


    }

    public static void main(String[] args) {
        Date date=new Date();
        System.out.println(date);
    }
}

三.JDK8 的日期时间类

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

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

新的实践类:
Instant
LocalDate
LocalTime
LocalDateTime
DateTimeFormatter
public static void main(String[] args) {
        Instant instant=Instant.now();

        //atZone(ZoneId.systemDefault()  获取当前地区的时间
        System.out.println(instant.atZone(ZoneId.systemDefault()));
        //获取时间戳:秒数
        System.out.println(instant.getEpochSecond());
        //获取毫秒数
        System.out.println(instant.toEpochMilli());

        long millis=System.currentTimeMillis();
        System.out.println(Instant.ofEpochMilli(millis));

        System.out.println("------------------");
        String text ="2022-07-28T06:06:51.935Z";
        Instant parse=Instant.parse(text);
        System.out.println(parse);

    }

结果:

2022-07-28T18:17:08.251+08:00[Asia/Shanghai]
1659003428
1659003428251
2022-07-28T10:17:08.320Z
------------------
2022-07-28T06:06:51.935Z

1.持续时间Duration

public static void main(String[] args) {
        Instant instant=Instant.now();
        Instant instant1=instant.plus(Duration.ofDays(5));
        System.out.println(instant1);
    }

结果:2022-08-02T10:20:16.388Z

2.LocalDate:获取当前的日期

 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(2022,9,10);
        System.out.println(of);

        //判断是否为闰年
        System.out.println(now.isLeapYear());

    }

结果:

2022-07-28
JULY
THURSDAY
28
2022-09-10
false

3.LocalTime:本地时间

public static void main(String[] args) {

        LocalTime now = LocalTime.now();
        System.out.println(now);
    }

结果:18:22:30.162

4.LocalDateTime

public static void main(String[] args) {
        LocalDateTime now=LocalDateTime.now();
        System.out.println(now);
    }

结果:2022-07-28T18:23:33.541

5.DateTime 格式化

public static void main(String[] args) {
        LocalDate now=LocalDate.now();
        DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy/MM/dd");

        System.out.println(now.format(dateTimeFormatter));
    }

结果:2022/07/28

6.数学类Math:

随机数 random() double

向上取整 ceil() 返回值 double

向下取整 floor() double

四舍五入 round () long

public static void main(String[] args) {
        //生成0-1的随机数
        //Math.random()*(max-min)+min
        System.out.println(Math.random());

    }

结果:0.7924773411336467

7.BigDecimal统计类

使用bigDecimal构造器,传入的必须是字符串

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 bigDecimal3=new BigDecimal("0.7");
        BigDecimal bigDecimal4=new BigDecimal("0.1");


        System.out.println(bigDecimal1.add(bigDecimal2));
        System.out.println(bigDecimal3.add(bigDecimal4));
    }

结果:

0.7999999999999999611421941381195210851728916168212890625
0.8

8.随机 Random

public static void main(String[] args) {
        Random random=new Random();
        System.out.println(random.nextInt(20));
    }

结果:17

9.Arrays 数组

ic 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(arr));

    }

结果:

[1, 2, 3, 4, 5]
3
[1, 2, 3, 4, 5]

10.System类 系统类

public static void main(String[] args) {
        System.out.println("1");
        System.err.println("错误信息");

    }

结果:

1
错误信息

11.Objects

public static void main(String[] args) {
        System.out.println(Objects.isNull(""));

    }

结果:false

12.StringBuffer和StringBuilder

可变的字符序列,和String是有本质区别的

String 不可变
StringBuffer 同步的, 安全,效率低
StringBuilder 异步的,不安全,同事处理多个请求(效率高)***
  public static void main(String[] args) {
        StringBuffer stringBuffer=new StringBuffer("你好");
        System.out.println(stringBuffer);
        //追加
        stringBuffer.append(",我好").append(",大家好");
        System.out.println(stringBuffer);

        String string="hello";
        String s=string.concat(",word!");
        string.concat(",word!");
        System.out.println("string="+string);
        System.out.println("s="+s);

        stringBuffer.delete(4,7);
        System.out.println(stringBuffer);

        stringBuffer.deleteCharAt(4);
        System.out.println(stringBuffer);

        stringBuffer.insert(1,"hh");
        System.out.println(stringBuffer);

        //翻转
        stringBuffer.reverse();
        System.out.println(stringBuffer);
    }

结果:

你好
你好,我好,大家好
string=hello
s=hello,word!
你好,我家好
你好,我好
你hh好,我好
好我,好hh你

面试题: 三个字符串区别?
  • 区别一:String是final类不能被继承且为字符串常量,而StringBuilder和StringBuffer均为字符串变量。
  • 区别二:在String类中使用“+”作为数据的连接操作,而在StringBuffer类中使用append()方法(方法定义:public StringBuffer append(数据类型 变量))进行数据连接。
  • 区别三:类的定义不同
  • 区别四:String类和StringBuilder、StringBuffer类的转换。

       1.String类通过apend()方法转换成StringBuilder和StringBuffer类。

       2.StringBuffer类和StringBuilder类通过to.String()方法转换成String类型

  • 区别五:String类、StringBuffer和StringBuilder类中定义的常用方法,三类的大部分方法(下例)可以互补。
  • 区别六:线程安全性方面

      1.StringBuilder(非线程安全)

      2.StringBuffer(线程安全的)

四、心得体会

知识点倒是好理解,就是习题有点难搞,又是疲累的一天!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值