Java_常用类

第10章 常用类

包装类

引入

  1. 什么是包装类
    1. 以前定义变量,经常使用基本数据类型
    2. 对于基本数据类型来说,他就是一个数,加属性、方法、构造器,
    3. 将基本数据类型对应进行了一个封装,产生了一个新的类,包装类。
    4. Int byte :基本数据类型
    5. 包装类:引用数据类型
  2. 对应关系:基本数据类型对应的包装类

基本数据类型

对应的包装类

继承关系

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

  1. 已经有数据类型了,为什么要封装为包装类?
    1. Java语言面向对象的语言,最擅长的操作各种各样的类;
    2. 以前学习装数据的:数组,int[],String[],double[] Student[]
    3. 以后学习的装数据的:集合,特点:只能装引用数据类型的数据;
  2. 是不是有了包装类以后就不用基本数据类型了?
    1. 不是。

Integer

  1. 直接使用无需导包,
    1. Java.lang
    2. 类 Integer
  2. 类的继承关系
    1. Java.lang.Object>Java.lang.Number>java.lang.Integer
  3. 实现接口
    1. 所有已实现的接口
      1. Serializable,Comparable<Integer>
  4. 这个类被final修饰,那么这个类不能有子类,不能被继承
  5. 包装类是对基本数据类型的封装:对int类型封装产生了Integer
    1. Integer类在对象中包装了一个基本类型int的值,Integer类型的对象包含一个int类型的字段。
  6. 类的历史
    1. 从JDK1.0开始
  7. 属性
  8. 构造器(发现没有空参构造器)
  9. 包装类特有的机制:自动装箱 自动拆箱

//        自动装箱:int --->Integer
       
Integer i = 12;
       
System.out.println(i);
//        自动拆箱:Integer --->int
       
Integer i2 = new Integer(12);
        int
num = i2;
       
System.out.println(num);

    1. 自动装箱 自动拆箱 是从JDk1.5以后,新出的特性;
    2. 自动装箱 自动拆箱:将基本数据类型和包装类进行快速的自动转换
    3. 可以断点进入valueof方法
  1. 常用方法

compareTo 、==、equals

compareTo

        
Integer i3 = new Integer(6);

Integer i4 = new Integer(12);

System.out.println(i3.compareTo(i4));//return (x < y) ? -1 : ((x == y) ? 0 : 1);

valueOf方法的底层:

转换

日期相关方法

Java.util.Date类方法

(3)该方法的作用

Java.sql.Date类方法

  1. String ---> java.util.Date 类型转换:
    1. String --->java.sql.Date
    2. java.sql.Date ---> java.util.Date

上述代码有局限性,字符串的格式只能是年-月-日拼接的形式,换成其他类型,就会出现异常:

  1. 日期转换类,引入新的类 SimpleDateFormat

package com.ymj.test06;

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

public class
Test01 {
   
public static void main(String[] args) {
//        日期和转换
//        SimpleDateFormat(子类) extends DateFormat(父类是一个抽象类)
//       
格式化的标准已经定义好了
       
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
       
//String -> Date
       
try {
            Date d = df.
parse("2021-11-8 20:36");
           
System.out.println(d);
       
} catch (ParseException e) {
            e.printStackTrace()
;
       
}
//        Date -> String
       
String format = df.format(new Date());
       
System.out.println(format);

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

Calendar类

练习题

代码

package com.ymj.test06;

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

public class
Test02_Calendar {
   
public static void main(String[] args) {
//        Calendar是一个抽象类,不可创建对象
       
//录入日期的String
       
Scanner sc = new Scanner(System.in);
       
System.out.println("请输入你想要查看的如期:(提升:请按照例如2021-11-8的格式书写)");
       
String st = sc.next();
//        System.out.println(st);
        //String -> Calendar
        //String -> Date
       
java.sql.Date date = java.sql.Date.valueOf(st);
       
//Date -> calendar
       
Calendar cal = Calendar.getInstance();
       
cal.setTime(date);

       
//星期提示:
       
System.out.println("\t\t\t\t\t\t\t");

       
//获取本月最大天数
       
int maxDay = cal.getActualMaximum(Calendar.DATE);
       
//获取当前日期中的日
       
int nowDay = cal.get(Calendar.DATE);
       
//将日期调为本月的1
       
cal.set(Calendar.DATE, 1);
       
//获取1号为本周的第几天
       
int no = cal.get(Calendar.DAY_OF_WEEK);
//        System.out.println(no);
       
for (int i = 0; i < no-1; i++) {
            System.
out.print(" \t");
       
}
       
//遍历:从1号开始到maxDay号进行遍历
       
for (int i = 1; i <= maxDay; i++) {
           
if (i == nowDay)
                System.
out.print(i + "*\t");
            else
               
System.out.print(i + "\t");

            if
((i+no-1) % 7 == 0)
                System.
out.println();
       
}
    }
}

第三批日期API

LocalDate/LocalTime/LocalDateTime

方法2:of()

格式化类:DateTimeFormatter

Math类

       常用方法

静态导入

Random类

Math.random() 实际上还是调用了Random.nextDouble();

String类

equals方法

compareTo方法

substring方法

String的内存分析

  1. 字符串的拼接

  1. new关键字创建对象

  1. 有变量参与的字符串拼接:

反汇编

StringBuilder类

      1. 字符串的分类:
        1. 不可变字符串:String
        2. 可变字符串:StringBuilder,StringBuffer
      2. Stringbuilder底层:非常重要的两个属性:
      3. 对应内存分析及代码

package com.ymj.test07StringBuilder;

public class
Test01_StringBuilder {
   
public static void main(String[] args) {
       
//表面上调用StringBuilder的空构造器,实际底层是对value数组进行初始化,长度为16
       
StringBuilder sb3 = new StringBuilder();
       
//表面上调用有参构造器,传入一个int类型的数,实际底层是对value数据进行初始化,长度为传入的数字;
       
StringBuilder sb2 = new StringBuilder(3);
       
StringBuilder sb = new StringBuilder("abc");
       
sb.append("def").append("aaaaaaaa").append("bbb").append("ooooooo");//
   
}
}

内存分析

可变与不可变

  1. String 不可变
    1. 不可变:在地址不变的情况下,想把“abc”变成“abcdef”是不可能的
  2. StringBuilder 可变
    1. 可变,在StringBuilder这个对象的地址不变的情况下,想把“abc”变成“def”时可能的,直接追加即可;

StringBuilder常用方法

StringBuffer常用方法:

和StringBuilder一样

String、StringBuffer、StringBuilder区别与联系

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值