java基础-常用类-day10

发布时间 2023-09-17 22:45:27作者: chenwen0511

1. 包装类

基础数据类型 进行封装 产生一个新的类 (属性 方法 构造器)

基本数据类型 包装类 继承关系
byte Byte Number-->Object
short Short Number-->Object
int Integer Number-->Object
long Long Number-->Object
float Float Number-->Object
double Double Number-->Object
char Character Object
boolean Boolean Object

为什么要有封装类
java是面型对象语言 操作类对象方便

可以放引用数据类型
数组 int[] String[] Student[]
集合 只能装引用数据类型

2. Integer类

public class Test {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);

        System.out.println("物极必反");
        System.out.println(Integer.MAX_VALUE+1);
        System.out.println(Integer.MIN_VALUE-1);
    }
}

Integer构造器

public class Test {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);

        System.out.println("物极必反");
        System.out.println(Integer.MAX_VALUE+1);
        System.out.println(Integer.MIN_VALUE-1);

        Integer i1 = new Integer(12);
        System.out.println(i1);
    }
}

入参为String的构造器

    public Integer(String s) throws NumberFormatException {
        this.value = parseInt(s, 10);
    }

包装类的 装箱 与拆箱
装箱:int 自动转 Integer
拆箱: Integer --> int

如何快速使用快捷键 变量接收
new 类()
alt+enter
再按一次enter

打断点阅读源码

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

-128--127之间会去cache缓存里面取 之外的才会new对象

compareTo方法

    public static int compare(int x, int y) {
        return (x < y) ? -1 : ((x == y) ? 0 : 1);
    }

x<y -1
x==y 0
x>y 1

public class Test04 {
    public static void main(String[] args) {
        //compareTo
        Integer integer = new Integer(6);
        Integer integer2 = new Integer(12);

        System.out.println(integer.compareTo(integer2));
    }
}

package com.msb2;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 16:54
 * @Description: com.msb2
 * @version: 1.0
 */
public class Test04 {
    public static void main(String[] args) {
        //compareTo
        Integer integer = new Integer(6);
        Integer integer2 = new Integer(12);

        System.out.println(integer.compareTo(integer2));

        Integer integer3 = new Integer(12);
        Integer integer4 = new Integer(12);
        System.out.println(integer3 == integer4);//对地址的比较 两个不同的对象 返回false
        System.out.println(integer3.equals(integer4));//对封装的value的比较 true

        //自动装箱 int-->Integer
        //装箱 int自动转Integer对象可以具备很多方法
        //只有装箱后才有 equal... 才具有很多类的很多方法 供调用
        Integer i5 = 4;
        Integer i6 = 4;
        System.out.println(i5 == i6);//这里为啥返回true 在 -128--127之间 指向的是缓存里面的同一个对象
        System.out.println(i5.equals(i6)); //true

        Integer i7 = 130;
        Integer i8 = 130;
        System.out.println(i7 == i8);//这里为啥返回false  // 不在 -128--127之间
        System.out.println(i7.equals(i8)); //true
        
    }
}

Integer --> int 拆箱 只保留里面有用的value 其他的都不要扒掉 仅仅暴露本原

        
        Integer i9 = 130; //装箱
        int i10 = i9.intValue(); //方式1
        
        int i11 = Integer.parseInt("120");//方式2

        System.out.println(i9.toString());

3.util.date

public class Test {

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

        System.out.println(date.getYear());//1200开始
        System.out.println(date.getMonth());//开始月为0

        System.out.println(date.getTime());// 1970-1-1 00:00:00 到现在的时间 ms为单位
        System.out.println(System.currentTimeMillis());//系统时间

        // 常用的还是System.currentTimeMillis()
        // 计算代码的运行时间
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            System.out.println(i);
        }
        long endTime = System.currentTimeMillis();
        System.out.println(endTime-startTime);


    }
}

4. java.sql.Date

package com.msb;

import java.sql.Date;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 17:20
 * @Description: com.msb
 * @version: 1.0
 */
public class Test02 {
    public static void main(String[] args) {
        // java.sql.Date
        Date d = new Date(1592055964263L);

        System.out.println(d);
        /*
        1. java.sql.Date extends java.util.Date
        2. 输出
            sql.Date 年月日
            util.Date 年月日 时分秒

        */
        java.util.Date d2 = new java.util.Date();
        System.out.println(d2.toLocaleString());


        //转换 向下 转型 util.Date--sql.Date 父类转子类
        java.util.Date d3 = new Date(1592055964263L);// 多态 父类指向子类的引用
        Date d4 = (Date)d3;  // Date 为java.sql.Date;

        /*
        Animal a = new Dog();
        Dog d = (Dog) a;
        * */
        Date d5 = new Date(d3.getTime());// d3 为util.Date对象


        Date d6 = new Date(1592055964263L);// sql.Date
        java.util.Date d7 = d6;

        Date d9 = Date.valueOf("2023-09-17");
        System.out.println(d9);
    }
}

5. SimpleDateFormat

String --> java.util.Date

package com.msb;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 21:36
 * @Description: com.msb
 * @version: 1.0
 */
public class Test03 {

    public static void main(String[] args) {
        // java.sql.Date d = java.sql.Date.valueOf("2023-09-17 19:01:01");
//         java.sql.Date d = java.sql.Date.valueOf("2023/09/17");
        java.sql.Date d = java.sql.Date.valueOf("2023-09-17");
        java.util.Date d2 = d;

        System.out.println(d2.toString());
    }
}

注:上面的代码有局限性 只能转 yyyy-MM-dd 这样的形式的日期

学习新的类 SimpleDateFormat
见名知意 用于日期的简单转换

package com.msb;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 21:43
 * @Description: com.msb
 * @version: 1.0
 */
public class Test04 {

    public static void main(String[] args) {
        // SimpleDateFormat 继承 DateFormat-抽象类
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //String --> Date
        Date d = null;
        try {
            d = simpleDateFormat.parse("2023-10-01 10:00:00");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(d);

        // Date-->String
        String s = simpleDateFormat.format(new Date());
        System.out.println(s);

        Date d2 = new Date();
        System.out.println(d2.toString());
        System.out.println(d2.toLocaleString());
        System.out.println(d2.toGMTString());

    }
}

5. Calendar

package com.msb;

import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 21:49
 * @Description: com.msb
 * @version: 1.0
 */
public class Test05 {

    public static void main(String[] args) {
        // Calendar 是一个抽象类 不能实例化对象
        // new Calendar()
        // GregorianCalendar 是Calendar的子类 extends Calendar
        Calendar cal = new GregorianCalendar();
        Calendar cal2 = Calendar.getInstance();

        System.out.println(cal.get(Calendar.YEAR));//年  2023
        System.out.println(cal.get(Calendar.MONTH));// 月  8 (从0开始)
        System.out.println(cal.get(Calendar.DATE));// 日  17
        System.out.println(cal.get(Calendar.DAY_OF_WEEK));//星期中的第几天   1
        System.out.println(cal.get(Calendar.DAY_OF_MONTH));// 月里面的第几天  17
        System.out.println(cal.getActualMaximum(Calendar.DATE));//日期的最大天数 30
        System.out.println(cal.getActualMinimum(Calendar.DATE));//日期的最小天数  1

        // set
        cal.set(Calendar.YEAR, 1900);
        cal.set(Calendar.MONTH, 2);
        cal.set(Calendar.DATE, 20);
        System.out.println(cal);

        // String转Calendar
        java.sql.Date d = java.sql.Date.valueOf("2023-09-17");
        cal.setTime(d);
        System.out.println(cal);


    }
}

练习:输入日志 按格式 输出日历

package com.msb;

import java.util.Calendar;
import java.util.Scanner;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 22:03
 * @Description: com.msb
 * @version: 1.0
 */
public class Test06 {

    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入日期,格式:2019-3-7");
        String strDate = sc.next();
//        java.sql.Date d = java.sql.Date.valueOf("2023-09-16");
        java.sql.Date d = java.sql.Date.valueOf(strDate);
        cal.setTime(d);

        System.out.println("日\t一\t二\t三\t四\t五\t六");
        int maxDate = cal.getActualMaximum(Calendar.DATE);
        int nowDay = cal.get(Calendar.DATE);

        // 把一号对应 星期的第几天求出来
        cal.set(Calendar.DATE, 1);
        int weekNum = cal.get(cal.DAY_OF_WEEK);
//        System.out.println("ss:"+weekNum);
        int num = weekNum-1;
        for (int i = 0; i < num; i++) {
            System.out.print("\t");
        }
        int count = 0;
        count = count + num;
        for (int i = 1; i < maxDate+1; i++) {
            if (count % 7 ==0){
                System.out.print("\n");
            }

            if (i == nowDay){
                System.out.print(i+"*"+"\t");
            }else{
                System.out.print(i+"\t");
            }
            count ++;


        }
    }
}