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 或 无修饰符。
- 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除外)
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类
Math.random() //生成[0.0,1.0)范围内的随机数
Random类
java.util.Random 可以更方便地生成各种随机数。
有两种可以生成随机数的方法:
随机输出四位大写字母验证码
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转化成格式化字符串。
DecimalFormat
使用Java.test.DecimalFormat可以更好地控制前0,后0,前缀,后缀,分组分隔符,十进制分隔符等。
一般都调用customFormat 方法。
字符串转数字
字符串转数字这个方法还是很常用的。
*************向上取整:Math.ceil();
向下取整: Math.floor();
四舍五入: Math.round();
使用包装类的ValueOf ()和 ParseInt()方法可以让字符串转数字。
两者的区别在于:
ValueOf返回的是Integer类型,而ParseInt返回的是Int类型。
还可以用十六进制解析字符串:
数字转字符串
使用字符串的valueOf方法、包装类的toString方法。
高精度计算
在很多编程语言中,float和double都是近似值,不是精确值。
所以如果要进行高精度计算,建议使用java.math.BigDecimal类。必须要用字符串来对BigDecimal进行初始化。
字符串
Java中用java.lang.String 类表示字符串。
所有字符串的字面量都是String类的一个实例。
java字符串的底层其实用的是char数组。
String对象一旦创建完毕,它的字符内容是不可以修改的。
字符串常量池SCP
字符串常量池储存在堆空间中。
当遇到字符串字面量时,会去字符串常量池中进行查看。如果字符串常量池中存在和字面量内容一样的字符串对象A时,就会返回A。
字符串的初始化
小作业:断点调试功能Debug
Intern方法
调用A.intern方法的作用:
1.如果SCP中存在和A内容一样的字符串对象C时,那么就返回C。如果没有,则将A加入到SCP中,返回A。
字符串的常用方法
补充一下:
//返回新的字符串在原来对象的位置: 也叫检索
"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类呢?
在进行大量字符串的改动操作时(比如拼接、替换),可以节省大量内存,提高程序性能。
append 就是拼接的意思。
测试代码块所耗时间:
StringBuilder的常用方法有:append,insert,delete,replace,reverse等。
StringBuilder和String都实现了CharSequence接口。
Date
java.util.Data 是开发中经常用到的日期处理类(注意:不是java.sql.Data)
如果想显示当前时间,可以直接通过Data去new一个新的类。
Date常用方法:
date2表示从1970年一月一日加2000毫秒.
SimpleDateFormat
java.text.SimpleDateFormat常用来进行日期的格式化处理。
调用对象.parse()方法去解析字符串
Calendar
java.util.Calendar也是开发中经常用到的日期处理类
Calendar中比较特别的一点是:
因为Calendar是一个抽象类,所以它不能使用new来新建一个对象,只能这样表示
通过get()方法来调用日期中的年月日
Calendar常用方法:
打印格式化(很少用)
System.out.Format()表示格式化

浙公网安备 33010602011771号