Java第十五次作业

一、包装类

1. 什么是包装类

以前定义变量,经常使用基本数据类型,对于基本数据类型,它就是一个数。加点属性,加点方法,加点构造器,对基本数据类型对应进行了封装产生了一个新的类,这种类叫包装类(改造基本数据类型的的类)。

int, byte...-->基本数据类型

包装类 -->引用数据类型

2. 基本数据类型对应的包装类

基本数据类型包装类继承关系
byteByte--->Number--->Object
shortShort--->Number--->Object
intInteger--->Number--->Object
longLong--->Number--->Object
floatFloat--->Number--->Object
doubleDouble--->Number--->Object
charCharacter--->Object
booleanBoolean--->Object

3.为什么要把基本数据类型封装为包装类

  1. Java语言,面向对象的语言,最擅长的操作各种各样的类
  2. 以前学习装数据的---> 数组,int[] String[] double[] Student[]
  3. 以后学习装数据的---> 集合,有一个特点,只能装引用数据类型的数据

4. 有了包装类以后用基本数据类型吗?

并不是。

5. Integer学习(其他包装类学习同理)

打开Java api文档,搜索Integer开始学习

二、日期相关类

1. util.Date 

Date d = new Date();
System.out.println(d);
System.out.println(d.toGMTString());//有横线花掉的是过失、过期、废弃方法
System.out.println(d.toLocaleString());
System.out.println(d.getTime());
System.out.println(System.currentTimeMillis());//效果一样,但是用第二个,因为是静态方法,快!第一个因为要创建对象,所以不够第二个效率高
//currentTimeMillis()是本地方法,没有方法体,因为方法体的实现不是通过Java写的
//这俩方法的作用,测试算法速度

2. sql.Date

Date d = new Date(1592055964263L);
System.out.println(d);
/*
1. 区别
    java.util.Date:年月日 时分秒
    java.sql.Date:年月日
2. 联系
    sql.Date 继承自 util.Date
3. 转换
 */
//util-->sql
java.util.Date d1 = new Date(1592055964263L);
Date d11 = (Date) d1;//方式一,强制转换 util-->sql
Date d12 = new Date(d1.getTime());//借助构造器
//sql-->util
d1 = d;//父类指向子类
//String --> sql.Date
Date d13 = Date.valueOf("2017-7-3");

3. SimpleDateFormat

从前台过来的日期数据一般都是有格式的String,需要转换成util.Date类型

  1. String-->sql.Date

  2. sql.Date-->util.Date

  3. 局限性:日期必须是规定格式!

  4. 引入新类DateFormat

java.sql.Date sdate = java.sql.Date.valueOf("2017-7-7");//String-->sql.Date,字符转只能是YYYY-MM-DD格式
Date ud = sdate;//sql.Date-->util.Date
//局限性:日期必须是规定格式!


//日期转换
//public class SimpleDateFormat(子类) extends DateFormat(父类)
DateFormat df = new SimpleDateFormat("yyyy MM dd");//转化标准已经定好(对标前台)
//String ---> Date
try {//需要try/catch才能使用
    Date d = df.parse("2017 03 07");//parse,根据给定字符串和格式生成日期
    System.out.println(d.toLocaleString());
} catch (ParseException e) {
    e.printStackTrace();
}


//Date ---> String
String format = df.format(new Date());//根据日期给出格式
System.out.println(format);

 

4. Calendar

  1. Calendar是一个抽象类,不能直接创建对象,使用子类实现

  2. 可以使用静态方法Calendar.getInstance()创建。

  3. 常用方法:get(),set()

  4. 如何从String转换为Calendar

  5. 练习:给出一个日期,打印出那一月正确的日历,且在给定日期标星号,如下图。

package com.xiaowei9s.commonuse.dateclass;

import java.sql.Date;
import java.util.Calendar;
import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {

        //获取日期
        System.out.println("请输入日期(格式为YYYY-MM-DD):");
        Scanner sc = new Scanner(System.in);
        String strDate = sc.next();
        Date date = Date.valueOf(strDate);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        //打印信息
        int nowday = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println("日\t一\t二\t三\t四\t五\t六");
        for (int i = 0; i < cal.get(Calendar.DAY_OF_MONTH); i++) {//对齐一号是星期几
            System.out.print("\t");
        }

        for (int i = 1; i <= cal.getActualMaximum(Calendar.DATE); i++) {//遍历该月
            String day = i+"";
            if(i<=9){               //为了对齐一位数两位数
                day = i+" ";
            }
            if (i==nowday){ //在指定日期打星号
                day = i+"";
                System.out.print(day+"*"+"\t");
                continue;
            }
            cal.set(Calendar.DATE,i);
            if (cal.get(Calendar.DAY_OF_WEEK)==7){  //在换行时换行
                System.out.println(day+"\t");
                continue;
            }
            System.out.print(day+"\t");             //正常日期
        }

    }
}

4) Demo

package com.xiaowei9s.commonuse.dateclass;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalField;

public class Demo06 {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();//LocalDate获取当前日期
        LocalTime localTime = LocalTime.now();//LocalTime获取当前时间
        LocalDateTime localDateTime = LocalDateTime.now();//LocalDateTime获取当前时间日期
        System.out.println(localDateTime);
        System.out.println(localTime);
        System.out.println(localDate);
        LocalTime localTime1 = LocalTime.of(13,14);//获取指定时间
        LocalDate localDate1 = LocalDate.of(1999,9,3);//获取指定日期
        LocalDateTime localDateTime1 = LocalDateTime.of(2021,9,3,15,13,22,33);//获取指定时间日期
        System.out.println(localDateTime1);
        System.out.println(localDate1);
        System.out.println(localTime1);


        //下面只讲LocalDateTime
        //get方法
        System.out.println(localDateTime1.get(ChronoField.MONTH_OF_YEAR));
        System.out.println(localDateTime1.getYear());
        System.out.println(localDateTime1.getMonth());
        System.out.println(localDateTime1.getMonthValue());
        System.out.println(localDateTime1.getDayOfMonth());
        System.out.println(localDateTime1.getDayOfWeek());
        System.out.println(localDateTime1.getDayOfYear());
        System.out.println(localDateTime1.getHour());
        System.out.println(localDateTime1.getMinute());
        System.out.println(localDateTime1.getSecond());
        //with,不是set
        LocalDateTime localDateTime2 = localDateTime1.withHour(3);//不可变性,即使把时间变成三点,也不会将本来的时间替换,而是新给出除了时间变成3点的一个对象
        System.out.println(localDateTime1);
        System.out.println(localDateTime2);
        //加减操作
        LocalDateTime localDateTime3 = localDateTime1.plusDays(3);
        LocalDateTime localDateTime4 = localDateTime1.minusHours(5);
        System.out.println(localDateTime1);
        System.out.println(localDateTime3);
        System.out.println(localDateTime4);

    }
}

 

6. DateTimeFormatter 自定义格式

用于转换LocalDateTime等与String转换的定义和规范.

方法1

//方法一:预定义的标准格式
DateTimeFormatter df1 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;//df可以帮助转换String和LocalDateTime
LocalDateTime localDateTime = LocalDateTime.now();
String str = df1.format(localDateTime);
System.out.println(str);

TemporalAccessor parse = df1.parse("2021-09-04T11:25:23.5");
System.out.println(parse);

 方法2

//方式二:本地相关的格式
//FormatStyle.FULL
//FormatStyle.LONG
//FormatStyle.MEDIUM
//FormatStyle.SHORT
DateTimeFormatter df2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);//df可以帮助转换String和LocalDateTime
String str1 = df2.format(localDateTime);
System.out.println(str1);

TemporalAccessor parse1 = df2.parse("2021-9-4 11:41:50");//格式不对会有异常
System.out.println(parse1);

方法3

//方式三:自定义格式
DateTimeFormatter df3 = DateTimeFormatter.ofPattern("yyyy MM dd");//df可以帮助转换String和LocalDateTime
String str2 = df3.format(localDateTime);
System.out.println(str2);
TemporalAccessor parse2 = df3.parse("2021 09 04");
System.out.println(parse2);

三、Math类

 

  1. Math内部所有的属性和方法都是static,都是静态的,可以通过类名直接调用。
  2. 常用属性
  3. System.out.println(Math.PI);System.out.println(Math.E);
    

  4. 常用方法
  5. System.out.println("随机数:"+Math.random());
    System.out.println("绝对值:"+Math.abs(-5.6));
    System.out.println("进一:"+Math.ceil(9.1));
    System.out.println("舍一:"+Math.floor(9.9));
    System.out.println("四舍五入:"+Math.round(9.9));
    System.out.println("取最大:"+Math.max(3,9));
    System.out.println("取最小:"+Math.min(9,28));
    

 四、Random类

package com.xiaowei9s.commonuse.mathclass;import java.util.Random;public class Demo02 {
	public static void main(String[] args) {
		System.out.println("Math随机数:"+Math.random());//math中生成随机数:底层还是用了Random类        
		//Random类学习        
		//带参数构造的Random        
		Random random = new Random(1858858L);//只要种子固定,则每次启动都会是同一个随机数开始,只有next后才是不同的随机数,并且几次都是一样        
		//解决办法:给出每次都不一样的种子        
		Random random1 = new Random(System.currentTimeMillis());        
		System.out.println(random.nextInt());        
		System.out.println(random1.nextInt());        //空参数构造的Random:表面无参,实际底层还是调用带参        
		Random random2 = new Random();        
		System.out.println(random2.nextInt(10));        
		System.out.println(random2.nextDouble());       
		System.out.println(random2.nextFloat());    
	}
}

五、String类

1. String类的本质

  1. 将字符串起来,就是字符串,是不可变类
  2. 所有的字符串都是一个实例化出来的对象,例如"abc","你好世界","helloworld"等。
  3. 字符串内容不可变,类比LocalDateTime类的不可变性
  4. String底层是一个char类型的数组

2. String的常用方法

  1. String()空参构造器,给出一个空的value。

  2. String(String original),将original的value和hash给到正构造的String对象。

  3. String(char value[]),将value数组中的值复制到正构造的String对象的属性value中。

  4. length(),字符串底层数组长度。

  5. isEmpty(),字符串底层数组是否为空。

  6. charAt(int index),字符串中底层数组相对应下标的对应值。

  7. equals(Object object),比较两个字符串是否值相等,已被重写。

3. String内存分析

String在常量池中放置了一个变量,如果后续有结果相同的变量那就不会在增加一个变量,比如String s = "abc";后续如果再来了一个String s1 = "ab"+"c",常量池中也只会有一个"abc",不会有两个。但是注意使用String(String original)构造的String对象则不同。

 

4. StringBuilder类

可变字符串类有:StringBuilder类,StringBuffer类

不可变字符串类:String类

疑问:

  1. 可变和不可变啥意思啊?
  2. 本笔记重点:StringBuilder类。
  3. StringBuilder和StringBuffer类。

1. 在API文档中查看基本概述,和基本方法,和String区别不大

2. 查看父类AbstractStringBuilder

有两个属性,和String底层差不多,也有char value[]数组,有int count属性,用于数组中被使用的长度。

6. StringBuffer概述

  1. 基本方法和StringBuilder基本一样,包括追加和构造基本一样。
  2. synchronized,按下不表,多线程部分重点。

7. String,StringBuilder,StringBuffer的区别与联系

  1. String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁。
  2. StringBuffer类则代表一个字符序列可变的字符串,可以通过append、insert、reverse、setChartAt、setLength等方法改变其内容。一旦生成了最终的字符串,调用toString方法将其转变为String
  3. JDK1.5新增了一个StringBuilder类,与StringBuffer相似,构造方法和方法基本相同。
  4. 不同是StringBuffer是线程安全的,而StringBuilder是线程不安全的,所以性能略高。通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder
  5. StringBuilder:JDK1.5开始效率高线程不安全
  6. StringBuffer:JDK1.0开始效率低瞭线程安全

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值