常用类

发布于 2022-04-07  130 次阅读


包装类的分类

1.针对八种基本定义相应的引用类型-包装类

2.有了类的特点,就可以调用类中的方法

基本数据类型包装类
booleanboolean
charCharacter
byteByte
shortShort
intlnteger
longLong
floatFloat
doubleDouble

包装类和基本数据的转换

1.jdk5前的手动装箱和拆箱方式,装箱:基本类型->包装类型,反之,拆箱

2.jdk5以后(含jdk5)的自动装箱和拆箱方式

3.自动装箱底层调用的是ValueOf方法,比如lnteger.valueOf()

例子

public static void main(String[] args) {
        //手动装箱
        int n1 = 100;
        Integer integer = new Integer(n1);
        Integer integer1 = Integer.valueOf(n1);
        //手动拆箱
        int i = integer.intValue();
//自动装箱
        int n2 = 200;
        //自动装箱
        Integer integer2 = n2;//底层使用的是 Integer.valueOf(n2);
//自动拆箱
        int n3 = integer2;//底层仍然使用的是intValue()方法
    }

包装类型和String类型的相互装换

以lnteger和String转换为例,其它类似:

包装类型————>String类型

Integer i=10;

//方式1

String S1=i.toString();

//方式2

String n2=String.valueOf(i)

//方式3

String n3=i+"";

SYstem.out.println(n3);

//String ————>包装类

方式1:

lnteger j=new lnteger(n1);

方式2

lnteger j2=lnteger.velueOf(n2);

lnteger类和Charcter类的常用方法;

System.out.println(Integer.MIN_VALUE);//返回最小值

   System.out.println(Integer.MAX_VALUE);//返回最大值


    System.out.println(Character.isDigit('a'));//判断是不是数字

    System.out.println(Character.isLetter('a'));//判断是不是字母

    System.out.println(Character.isUpperCase('a'));//判断是不是大写

    System.out.println(Character.isLowerCase('a'));//判断是不是小写


    System.out.println(Character.isWhitespace('a'));//判断是不是空格
    System.out.println(Character.toUpperCase('a'));//转成大写
    System.out.println(Character.toLowerCase('A'));//转成小写

String类

String类的理解和创建对象

1.String 对象用于保存字符串,也就是一组字符数列

2.字符串常量对象是用双引号括起的字符序列,例如:“你好”、“12.97”等

3.字符串的字符使用Unicode字符编码,一个字符占2字节

4.String类较常用构造方法:

String s1=new String();

String s2=new String(String original);

String s3=new String(char[] a);

String s4=new String(char[] a,int Startlndex,int count);

创建String对象的两种方式

1.方式一:直接赋值 String s=“hspedu”;

2.方式二:调用构造器 String s=new String(“hspedu”);

两种创建String对象的区别

1.方式一:先从常量池查看是否有‘hspedu“的数空间,如果有,直接指向;如果没有则重写创建,然后指向。s最终指向的是常量池的空间地址

2.方式二:先在堆中创建空间,里面维护了value属性,指向常量池的hspedu空间。如果常量池没有”hspedu“,重新创建,如果有,直接通过value指向,最终指向的是堆中的空间地址,

Stting类的常见方法

说明

String类是保存字符串常量的,每次更新都需要新开辟空间,效率低下,因此java设计者还提供了StringBuidder和StringBuffer来增强String的功能,并提高效率。

String s=new String("");

for(int i=0;i<8000;i++){
s+="hello";

}

String类的常见方法一览

equals //区分大小写,判断内容是否相等

equalslgnoreCase //忽略大小写的判断内容是否相等

length //获取字符的个数,字符串的长度

indexOf //获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到返回-1

lastlndexOf //获取字符在字符串中最后一次出现的索引,索引从0开始,如找不到返回-1

substring //截取指定范围的字串

trim //去前后空格

charAt:获取某处的字符 //获取某索引处的字符,注意不能使用Str[index]这种方式

toUpperCase //转化成大写

toLowerCase //转换成小写

concat //拼接字符串

replace //替换字符串中的字符

split //分割字符串,对于某些分割字符,我们需要转义比如 | \\等1

compareTo //比较2个字符串的大小

toCharArray //转换成字符数组

format //格式化字符串,%s字符串 %c字符 %d整型 %.2f浮点型

StringBuffer类

基本介绍

java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。

很多方法与String相同,但StringBuffer是可变长度的。

StringBuffer是个容器。

String vs StringBuffer

1.String保存的是字符串常量,里面的值不能更改,每次String类的更新实际是就是更改地址,效率较低

2.StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高

StringBuffer的构造器

StringBuffer()

构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。

StringBuffer(CharSequence seq)

构造一个字符串缓冲区,它包含与指定的CharSequence相同的字符

StringBuffer(int capacity) //capacity[容量]

构造一个不带字符,但具有指定初始容量的字符串缓冲区,即对char[]大小进行指定

StringBuffer(String str)

构造一个字符串缓冲区,并对其内容初始化为指定的字符串内容

String和StringBuffer相互转换

String——>StringBuffer

String s="hello";

//方式1;

StringBuffer b1=new StringBuffer(s);

//方式2;

StringBuffer b2=new StringBuffer();

b2.append(s);

StringBuffer——>String

//方式1:

String s2=b1.toString();

//方式2;

String s3=new String(b1);

StringBuffer类常见方法

1.增 append

2.删 delete(start,and)

3.改 replace(start,end,String)//将start---end间的内容替换掉,不含end

4.查 indexOf//查找字串在字符串第1次出现的索引,如果找不到返回-1

5.插 insert

6.获取长度 length

StringBuilder类

基本介绍

1.一个可变的字符序列。此类提供一个与Stringbuffer兼容的APl,但不保证同步。此类被设计用作Stringbuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大部分实现中,他比Strngbuffer要快

2.在StringBuffer上的主要操作是addend和insert方法,可重载这些方法,以接受任意类型的数据。

StringBuilder常用方法和StringBuffer是一样的;

String、StringBuffer和StringBuilder的比较

1.StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样

2.String:不可变字符序列,效率低,但复用率高。

3.StringBuffer:可变字符序列、效率较高(增删)、线程安全

4.StringBuilder:可变字符序列、效率最高。线程不安全

5.String使用注意说明:

String s=“a”;//创建了一个字符串

s+=“b”;//实际上原来的“a”字符串对象已经丢弃了,现在又产生了一个字符串s+“b”(也就是“ab”)。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放在循环中,会极大影响程序的性能=》结论:如果我们对String做大量修改,不要使用String

String、StringBuffer和StringBuiler的选择

使用的原则,结论:

1.如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuiler

2.如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder

3.如果字符串存在大量的修改操作,并在多线程的情况。使用StringBuffer

4.如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等

StringBuilder的方法使用和StringBuffer一样

Math类

基本介绍

Math类包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数

方法一览(均为静态方法)

1.abs 绝对值

2.pow 求幕

3.ceil 向上取整

4.floor 向下取整

5.round 四舍五入

6.sqrt 求开方

7.random 求随机数

8.max 求两个数的最大值

9.min 求两个数的最小值

Arrays类

Arrays里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索)

1.toString 返回数组的字符串形式

Arrays.toString(arr)

2.sort排序(自然排序和定制排序) lnteger arr[]={1,-1,7,0,89};

3.binarySearch 通过二分搜索法进行查找,要求必须排好序

int index=Arrays.binarySearch(arr,3)

4.copyOf数组元素的复制

Integer[] newArr=Arrays.copyOf(arr,arr.length);

fill数组元素的填充

Integer[] num=new Integer[]{9,3,2}

Arrays.fill(num,99)

6.equals 比较两个数组元素内容是否完全一致

boolean equals=Arrays.equals(arr,arr2)

7.asLIst 将一组值,转换成list

List<Integer>asList=Arrays.aSList(2,3,4,5,6,1)

System.out.println(“asList=”+asLIst)

System类

1.exit退出当前程序

2.arraycopy:复制数组元素,比较合适底层调用,一般使用Arrays.copyOf完成复制数组

int [] src ={1,2,3}

int [] dest =new int[3]

System.arraycopy(src,0,dest,0,3)//源数组,从源数组的哪个索引位置开始拷贝,目标数组,把源数组的数据拷贝到目标数组的哪个索引,从源数组拷贝多少个数据到目标数组

3.currentTimeMillens:返回当前时间距离1970-1-1的毫秒数

4.gc:运行垃圾回收机制System.gc();

BigInteger和BigDecimal类

介绍

1.BigInteger适合保存比较大的整型

2.BigDecimal适合保存精度更高的浮点型(小数)

BigInteger和BigDecimal常见方法

1.add 加

2.subtract 减

3.multiply 乘

4.divide 除(BigDecimal要声明精度BigDecimal.ROUND_CEILING)

日期类

第一代日期类

1.Date:精确到毫秒,代表特定的瞬间

2.SimpleDateFormat 格式化和解析日期的具体类。它允许进行格式化(日期->文本)、解析(文本->日期)和规范化(“yyyy年MM月dd日 hh:mm:ss E”)

    public static void main(String[] args) throws ParseException {
        Date d=new Date();//获取系统时间
        System.out.println(d);
        SimpleDateFormat sf=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
        String fe=sf.format(d);
        System.out.println(fe);
        String s="2002年03月02日 10:20:30 星期一";
        Date p=sf.parse(s);//抛出异常
        System.out.println(p);
        
        //输出结果
        //Fri Apr 08 15:59:00 CST 2022
        //2022年04月08日 03:59:00 星期五
        //Sat Mar 02 10:20:30 CST 2002
    }

第二代日期类

1.第二代日期类,主要就是Calender类(日历)

2.Calender 类就是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法

    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();//实例化日历类对象
System.out.println(cal);
//2.获取日历对象的某个日历字段
        System.out.println("年:"+cal.get(Calendar.YEAR));
        System.out.println("月:"+(cal.get(Calendar.MONTH)+1));//加一是因为返回的时候从0开始
        System.out.println("日:"+cal.get(Calendar.DAY_OF_MONTH));
        System.out.println("小时:"+cal.get(Calendar.HOUR));
        System.out.println("分钟:"+cal.get(Calendar.MINUTE));
        System.out.println("秒:"+cal.get(Calendar.SECOND));
        //Calender没有专门的格式化方法,所以需要自己组合显示
    }

第三代日期类

前二代的不足

jdk1.0中包含了一个java.util.Date类,但是它的大多数方法已经在jdk1.1引入了Calender类之后被弃用了,而Calender也存在问题:

1.可变性:像日期和时间这样的类应该是不可变的

2.偏移性:Date中的年份是从1900开始的,而月份都从0开始

3.格式化:格式化只对Date有用,Calender则不行

4.此外,它们也不是线程安全的;不能处理润秒(每隔2天,多出1s);

第三代日期类常见方法

1.LocalDate(日期)、LocalTime(时间)、LocalDateTime(日期时间)

LocalDate只包含日期,可以获取日期字段

LocalTime只包含时间,可以获取时间字段

LocalDateTime包含日期+时间,可以获取日期和时间字段

    public static void main(String[] args) {
     LocalDateTime ldt= LocalDateTime.now();//LocalDate.now();//LocalTime.now()
System.out.println(ldt);
ldt.getYear();ldt.getMonth();ldt.getMonthValue();ldt.getDayOfMonth();ldt.getHour();ldt.getMinute();ldt.getSecond();
    }

DateTimeFormatter格式日期类

类似于SimpleDateFormat

DateTimeFormat dtf=DateTimeFormatter.ofPattern(格式);

String str=dtf.format(日期对象);

    public static void main(String[] args) {
    LocalDateTime ldt=LocalDateTime.now();
        DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");
        String strDate =dtf.format(ldt);
        System.out.println(strDate);
    }