Java·常用类型

枚举Enum

枚举的效果:保证取值只有固定的几种。

采用自定义类去实现枚举效果

1.构造方法私有化:意味着外面的对象就不能随便改变类中的方法了。

使用格式:类型 season=类名.预定义常量; //这一部分其实有些不明白

//Java的switch语句中只能使用数值,不能传入引用类型

Java中的枚举 Enum Type

如果一个变量的取值只是几个固定值,那么可以考虑使用枚举类型。

下面用季节来举例:

public enum Season{
    SPRING,SUMMER,FALL,WINTER       //常量的命名都是大写的,如果有多个单词,则在每个单词之间添加下划线_
}
Season s = Season.WINTER;
System.out.println(s.name());     //Winter
System.out.println(s.ordinal());  //3

可以使用switch语句,直接使用预定义常量,前面加不加 类名. 都无所谓。

枚举的使用注意:

1.枚举的本质是类,所有枚举类型最终都隐式继承自Java.lang.Enum;

2.枚举定义完常量后,可以再定义成员变量、方法等内容(这时最后一个常量要以分号结束)。

有一个疑问:为什么要定义get,set方法?为什么不能直接为它赋值?

当变量的权限是public时,不需要get 和 set 方法

3.枚举的构造方法的权限必须是 private 或 无修饰符。

  1. Java会主动调用构造方法初始化每一个常量,但是你不能主动调用构造方法。

包装类Wrapper Class

基本类型的缺陷:

1.无法表示不存在的值(null值)。 //String是引用类型

2.不能利用面向对象的方式去操作基本类型(比如直接用基本类型调用方法)。

3.当参数类型是引用类型时,基本类型是无法引用的。

解决方法:

1.将基本类型包装成引用类型。接下来拿营销额举例:

public class Main{
    public static void main(String[] args){
        String[] money ={"500","100",null};    //不能直接进行加减乘除,所以我们创建一个包装类
}
}

现在我们来创建一个包装类

public class IntObject{
    public int value;           //若此处权限为private,则需添加get和set方法
    public IntObject(int value){
        this.value = value;
    }
}

那么创建了包装类,该怎么用它呢?

public class Main{
    public static void main(String[] args){
        IntObject[] money ={
            new IntObject(500),
            new IntObject(100),
            null
        }; 
}
}

其实Java中已经内置了基本类型的包装类,都在java.lang的包中。

其中,数字类型的最终都继承自java.lang.Number.(char、boolean除外)

image-20220520203251872

public class Main{
    public static void main(String[] args){
        Integer[] money ={
            new Integer(500),
            new Integer(100),
            null
        }; 
     System.out.println(money[0].intValue() + 10);     //注意:Integer调用的方法是 intValue()
}
}

自动装箱、拆箱

自动装箱:Java编译器会自动调用valueOf 方法,将基本类型转化为包装类。

//Java语法糖????

//Integer[] money = {
//   Integer.valueOf(100),
//    Integer.valueOf(0),
//    null,
//    Integer.valueOf(500),
//    Integer.valueOf(-100),
//};
Integer[] money = {
    100,0,null,500,-100
};
System.out.println(money[0].intValue() + 10) ;

以后可以直接使用以上方法去 创建一个数组,需要注意的是:

这些数字并不是int类型,而是Java编译器自动生成了Integer对象,通过Integer.valueof()进行了调用。

自动拆箱:Java编译器会自动调用intValue 方法(假定为int型),将包装类转换为基本类型

Integer i1 = 10;
int i2 = i1 ;
//int i2 = i1.intValue();

System.out.println(i1 == 10);
//System.out.println(i1.intValue() == 10);

包装类的判等

Integer类中有一个IntegerCache类,是个静态嵌套类。

而IntegerCache类也有一个缓存区,缓存范围是[-128,127]。

因此不再缓存范围内的数会被IntegerCache类返回一个新的对象。

包装类的判等不要用==或者!=运算符进行判断,应该使用equals方法。

基本类型数组与包装类数组之间是不能自动装箱、拆箱的。

正确做法:需要遍历数组中的每一个元素,将它们依次进行转换。

Math类

image-20220524164645846

image-20220524164711783

Math.random() //生成[0.0,1.0)范围内的随机数

Random类

java.util.Random 可以更方便地生成各种随机数。

有两种可以生成随机数的方法:

image-20220524192210836

随机输出四位大写字母验证码

image-20220526143108604

public class Main{
    public static void main(String[] args){
        for(int i = 0;i < 4;i++){
            int c = 'A' + new Random().nextInt(26);   //其实表示的是[0,25]
            System.out.print((char)c);                //65656565
        }
    }
}

如果想要让char类型转换为int类型,可以直接使用加号。

public class Main{
    public static void main(String[] args){
        for(int i = 0;i<4;i++){
            char c = 'A' ;
            System.out.print(+c);                //65656565
        }
    }
}

UUID

UUID,是通用唯一标识符。

UUID的目的是让分布式系统中的所有元素都能有唯一的标识符,而不需要通过中央控制端来做标识符的指定。

主要会在后端开发中用到。

数字格式化

可以使用system.out.print 或者 system.out.format 来输出格式化的字符串。

也可以使用String.format转化成格式化字符串。

image-20220527151110271

DecimalFormat

使用Java.test.DecimalFormat可以更好地控制前0,后0,前缀,后缀,分组分隔符,十进制分隔符等。

一般都调用customFormat 方法。

字符串转数字

字符串转数字这个方法还是很常用的。

*************向上取整:Math.ceil();

​ 向下取整: Math.floor();

​ 四舍五入: Math.round();

使用包装类的ValueOf ()和 ParseInt()方法可以让字符串转数字。

两者的区别在于:

ValueOf返回的是Integer类型,而ParseInt返回的是Int类型。

还可以用十六进制解析字符串:

image-20220601192758099

数字转字符串

使用字符串的valueOf方法、包装类的toString方法。

image-20220601193135215

高精度计算

在很多编程语言中,float和double都是近似值,不是精确值。

所以如果要进行高精度计算,建议使用java.math.BigDecimal类。必须要用字符串来对BigDecimal进行初始化。

image-20220601194457905

字符串

Java中用java.lang.String 类表示字符串。

所有字符串的字面量都是String类的一个实例。

java字符串的底层其实用的是char数组。

String对象一旦创建完毕,它的字符内容是不可以修改的

image-20220601200853221

字符串常量池SCP

字符串常量池储存在堆空间中。

当遇到字符串字面量时,会去字符串常量池中进行查看。如果字符串常量池中存在和字面量内容一样的字符串对象A时,就会返回A。

字符串的初始化

image-20220601205410267

小作业:断点调试功能Debug

Intern方法

调用A.intern方法的作用:

1.如果SCP中存在和A内容一样的字符串对象C时,那么就返回C。如果没有,则将A加入到SCP中,返回A。

字符串的常用方法

image-20220601211736999

补充一下:

//返回新的字符串在原来对象的位置:  也叫检索
"abcdefg".indexOf("cd");    //若没有找的,返回负1
"abcdefg".lastIndexOf("cd");
//比较字符串的字子串和另一个字符串的子字符串是否相等
"abcdefgh".regionMatches(2,"bcdefghi",1,6);   //字符串的第一个位置是0
//从某一位置开始截取一段字符串       遵循左闭右开原则
"abcdef".substring(2);   //cdef
"abcdef".substring(2,5);   //cde

抽取方法快捷键:alt + shift + M

StringBuilder类

什么时候会用到StringBuilder类呢?

在进行大量字符串的改动操作时(比如拼接、替换),可以节省大量内存,提高程序性能。

image-20220602211643531

append 就是拼接的意思。

测试代码块所耗时间:

image-20220602212022716

StringBuilder的常用方法有:append,insert,delete,replace,reverse等。

StringBuilder和String都实现了CharSequence接口。

Date

java.util.Data 是开发中经常用到的日期处理类(注意:不是java.sql.Data)

如果想显示当前时间,可以直接通过Data去new一个新的类。

Date常用方法:

image-20220602215611957

image-20220603143608135

date2表示从1970年一月一日加2000毫秒.

SimpleDateFormat

java.text.SimpleDateFormat常用来进行日期的格式化处理。

image-20220602220125752

调用对象.parse()方法去解析字符串

image-20220602220352834

image-20220602220555305

Calendar

java.util.Calendar也是开发中经常用到的日期处理类

Calendar中比较特别的一点是:

因为Calendar是一个抽象类,所以它不能使用new来新建一个对象,只能这样表示

image-20220603145916320

通过get()方法来调用日期中的年月日

image-20220603150346116

Calendar常用方法:

image-20220603180253719

打印格式化(很少用)

image-20220603180859030

System.out.Format()表示格式化

posted @ 2022-06-03 18:22  xiaobailing  阅读(68)  评论(0)    收藏  举报