常用类
文章目录
一、封装类
为了在实际应用中便于操作,我们会将基本数据转换为对象来随时通过该对象调对应的方法
- 基本数据类型——存储数据的容器
- 封装类型—— 1、存储数据,2、调用封装类中的属性与方法
基本数据类型与封装类型
public static void main(String[] args) {
//1.自动装箱
Integer i = 10;
Integer i1 = Integer.valueOf(10);
//2.自动拆箱
Integer j = 10;
int j1 = j;
int j2 = j.intValue();
//2.== equals
Integer in3 = new Integer(56); Integer in4 = new Integer(56);
System.out.println(in3==in4); //false
System.out.println(in3.equals(in4));//true
Integer in5 = 25;
Integer in6 = 25;
System.out.println(in5 ==in6);//true
System.out.println(in5.equals(in6));//true
Integer in7 = 256;
Integer in8 = 256;
System.out.println(in7 ==in8);//false
System.out.println(in7.equals(in8));//true
}
封装类在自动装箱时为了提高效率,对于-128~127之间的值会进行缓存处理。超过范围后,对象之间不能再使用==进行数值的比较,而是使用equals方法。
二、自动装箱&&自动封箱
- 🌟 自动装箱——自动调用 valueOf() (会在其中先判断是否在-128~127之间,若在该缓冲池中,则返回静态数组中返回已存在的值得地址,否则会 调用new方法,所以这种情况下每次会返回不一样的地址)基本数据类型自动转换为封装数据类型
- 🌟 自动拆箱——自动调用 intValue() (intValue 只是例子,若是double就是doubleValue)将封装数据类型转换为基本数据类型
三、字符串相关类
方法摘要
char | charAt(int index) 返回指定索引处的 char 值。 |
---|---|
int | compareTo(String anotherString) 按字典顺序比较两个字符串。 |
String | concat(String str) 将指定字符串连接到此字符串的结尾。 |
boolean | contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true。 |
boolean | endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 |
boolean | equals(Object anObject) 将此字符串与指定的对象比较。 |
boolean | equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。 |
int | hashCode() 返回此字符串的哈希码。 |
int | indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 |
int | [indexOf](#indexOf(int, int))(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 |
int | indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。 |
int | [indexOf](#indexOf(java.lang.String, int))(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 |
boolean | isEmpty() 当且仅当 length() 为 0 时返回 true。 |
int | lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。 |
int | [lastIndexOf](#lastIndexOf(int, int))(int ch, int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,从指定索引处开始进行反向搜索。 |
int | lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。 |
int | [lastIndexOf](#lastIndexOf(java.lang.String, int))(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。 |
int | length() 返回此字符串的长度。 |
String | [replace](#replace(char, char))(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
String | [replace](#replace(java.lang.CharSequence, java.lang.CharSequence))(CharSequence target, CharSequence replacement) 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 |
String | [replaceAll](#replaceAll(java.lang.String, java.lang.String))(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
String[] | split(String regex) 根据给定正则表达式的匹配拆分此字符串。 |
boolean | startsWith(String prefix) 测试此字符串是否以指定的前缀开始。 |
boolean | [startsWith](#startsWith(java.lang.String, int))(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 |
String | substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。 |
String | [substring](#substring(int, int))(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。 |
String | toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 |
String | toString() 返回此对象本身(它已经是一个字符串!)。 |
String | toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 |
String | trim() 返回字符串的副本,忽略前导空白和尾部空白。 |
StringBuilder&&StringBuffer
可变长字符串,主要用于字符串的操作
- String 类:
底层使用 final 修饰的 byte[] 存储字符串的值
不可变字符序列
例如:“a” + “b” 输出,其实是开辟了三个空间 ,a 一个, b一个,a+b 一个
- StringBuilder:
底层使用byte [] 存储字符串的值
可变字符序列
StringBuilder:线程不安全,数组无锁,但是效率更高,使用率更高
- StringBuffer:
底层使用 byte [] 存储字符串的值
可变字符序列
StringBuffer:线程安全,数组带锁,但是效率不高,使用率较高
三、日期类
在计算机世界,我们把1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一)
如图所示:
我们用long类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。如果想获得现在时刻的“时刻数值”,可以使用:
long now = System.currentTimeMillis();
这个“时刻数值”是所有时间类的核心值,年月日都是根据这个“数值”计算出来的。
我们工作学习涉及的时间相关类有如下这些:
3.1 Date类
在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。在网上商城下单时,在对报销单进行审核时,都需要获取当前的时间,通过Date类就可以完成。
Date date = new Date();
无参构造中,会调用有参构造方法,传输 long 数据类型的当前时刻值
3.1.1 Date类的使用
- java.util.Date 可以返回年月日、时分秒、星期
- java.sql.Date 可以返回年月日,并且其中只有年月日,无法newDate来调取其中的年月日以外的属性(只提供了有参构造,需要提供时刻值,一般System.currentTime
- java.sql.Time 可以返回时分秒
- java.sql.Date与 java.util.Date 可以根据时刻值来互相转换, 主要是凭借
getTime()
方法获得的时刻值进行转换
public static void main(String[] args) {
//获取当前的时间
Date now = new Date();
//输出当前的时间
System.out.println(now.toString());
System.out.println(now.toLocaleString());
System.out.println(now.getYear()); // 1900+122=2022
System.out.println(now.getMonth());// 0---11
System.out.println(now.getDate());//日
//星期几 星期日是0,一周是从星期日开始
System.out.println(now.getDay());
System.out.println(now.getHours());
System.out.println(now.getMinutes());
System.out.println(now.getSeconds());
//其他的方法
long l = now.getTime();
// 1970年1月1日 00:00:00 GMT以来的毫秒数。
System.out.println(l);
System.out.println(System.currentTimeMillis());
//java.sql.Date
java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
System.out.println(date);
java.sql.Date date1 = java.sql.Date.valueOf("2022-1-1");
System.out.println(date1);
//java.sql.Date 转化为 java.util.Date
java.sql.Date date2 = new java.sql.Date(System.currentTimeMillis());
Date date3 = new Date(date2.getTime());
//java.util.Date 转化为 java.sql.Date
java.sql.Date date4 = new java.sql.Date(date3.getTime());
}
查看API文档大家可以看到其实Date类中的很多方法都已经过时了。JDK1.1之前的Date包含了:日期操作、字符串转化成时间对象等操作。JDK1.1之后,日期操作一般使用Calendar类,而字符串的转化使用DateFormat类。
3.2 DataFormat
DataFormat 抽象类不能直接new
SimpleDateFormat 是DataFormat的子类
日期格式化类
-
将日期类型转换为字符串类型
使用
format
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd E hh : mm : ss"); java.util.Date date3 = new java.util.Date(); //2022-08-08 周一 04 : 54 : 58 System.out.println(simpleDateFormat.format(date3));
-
将字符串类型转换为日期类型
使用
parse
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd hh : mm : ss"); String str1 = "2022-10-10 10 : 10 : 10"; java.util.Date parse = simpleDateFormat1.parse(str1); System.out.println(parse); //Mon Oct 10 10:10:10 CST 2022
- yyyy:年
- MM:月份
- dd:日
- hh、HH:12时、24时
- mm:分
- ss:秒
- E:星期几
下面的看看得了
字母 | 日期或时间元素 | 表示 | 示例 |
---|---|---|---|
G | Era 标志符 | Text | AD |
y | 年 | Year | 1996; 96 |
M | 年中的月份 | Month | July; Jul; 07 |
w | 年中的周数 | Number | 27 |
W | 月份中的周数 | Number | 2 |
D | 年中的天数 | Number | 189 |
d | 月份中的天数 | Number | 10 |
F | 月份中的星期 | Number | 2 |
E | 星期中的天数 | Text | Tuesday; Tue |
a | Am/pm 标记 | Text | PM |
H | 一天中的小时数(0-23) | Number | 0 |
k | 一天中的小时数(1-24) | Number | 24 |
K | am/pm 中的小时数(0-11) | Number | 0 |
h | am/pm 中的小时数(1-12) | Number | 12 |
m | 小时中的分钟数 | Number | 30 |
s | 分钟中的秒数 | Number | 55 |
S | 毫秒数 | Number | 978 |
z | 时区 | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z | 时区 | RFC 822 time zone | -0800 |
四、Calendar类
Calendar类是一个抽象类,提供了关于 日期计算 的功能
GregorianCalender 是 Calendar的一个具体子类
- Calender.YEAR——年
- Calender.Month——月(从0开始)
- Calender.Date——日
- Calender.hour ——小时
当用calender的get()方法获得
public static void main(String[] args) {
//创建Calendar对象
Calendar cal = new GregorianCalendar();
//输出日期中的各个部分
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH));
System.out.println(cal.get(Calendar.DATE));
System.out.println(cal.get(Calendar.HOUR));
System.out.println(cal.get(Calendar.MINUTE));
System.out.println(cal.get(Calendar.SECOND));
System.out.println(cal.get(Calendar.DAY_OF_WEEK));//一周中的第几天
//一个月中最大的天数
System.out.println(cal.getActualMaximum(Calendar.DATE));
//修改日期中各个部分
cal.set(Calendar.YEAR,2000);
cal.set(Calendar.MONTH,1);
cal.set(Calendar.DATE,1);
//操作日期
cal.add(Calender.YEAR,1);//+1年
cla.add(Calender.MONTH,2);//+2月
cla.add(Calender.HOUR,2);//+2小时
//Date--Calendar之间的转换
//Date ---->Calendar
Date now = new Date();
cal.setTime(now);
//Calendar---->Date
Date now2 = cal.getTime();
}
将字符串类型设置到日历类中
字符串转为Date,Date再转为Calendar
- String -> Date 使用 SimpleDateFormat 的 parse(str)
- Date -> Calender 使用 GregorianCalendar 的setTime(date)
String str = "2022-8-8 17:12:10";
//getDate String->Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
//Date -> Calendar
GregorianCalendar gcr = new GregorianCalendar();
gcr.setTime(date);
五、Math类
java.lang.Math ,
其方法的参数和返回值类型一般为 double 型,
如果需要更强大的数学运算功能,
可以使用 apache commons 下面的 Math 类库
- round —— 四舍五入
- sqrt —— 开根号
- pow —— 平方
- abs —— 绝对值
- max —— 最大值
- min —— 最小值
//sout π 3.141592653589793
System.out.println(Math.PI);
//sout the rounding(si she wu ru) Integer of x 4
System.out.println(Math.round(3.54));
//sout the greater double than x 4.0
System.out.println(Math.ceil(3.54));
//sout the lower double than x 3.0
System.out.println(Math.floor(3.54));
//sout the sqrt of x 8.0
System.out.println(Math.sqrt(64));
//sout the x^y (x,y) 32.0
System.out.println(Math.pow(2, 5));
//sout the |x| 5
System.out.println(Math.abs(-5));
//sout the largest number 40
System.out.println(Math.max(30, 40));
//sout the lowest number 30
System.out.println(Math.min(30, 40));
// souta a random double between [0.0,1.0)
System.out.println(Math.random());
六、Random 类
Random random = new Random();
System.out.println(rand.nextInt());
System.out.println(rand.nextInt(10));//[0,10)
System.out.println(rand.nextDouble());
System.out.println(rand.nextFloat());
System.out.println(rand.nextBoolean());
七、枚举
JDK1.5引入枚举类型,
定义枚举需要使用 enum 关键字,
默认枚举类中属性都是使用 public static final 的,
可以直接使用枚举类型名使用,
当需要定义一组有限常量时,比如月份,星期,季节,性别等,
推荐使用枚举类型
性别
- 定义和使用性别枚举类
public enum Gender {
男,女
}
- 自定义类型
public class Person {
String name;
//String sex;
Gender sex; //枚举类型
int age;
}
- 测试
public static void main(String[] args) {
Person person = new Person();
person.sex = Gender.男;
System.out.println(person.getSex());
}
季节
- 定义枚举类型
public enum Season {
春,夏,秋,冬
}
- 使用枚举类型
public static void main(String[] args) {
Season season = Season.夏;
switch(season){
case 春 :
System.out.println("春暖花开 踏青 春游 ");
break;
case 夏 :
System.out.println("夏日炎炎 吃雪糕 游泳");
break;
case 秋 :
System.out.println("秋高气爽 收庄稼 赏月");
break;
case 冬 :
System.out.println("冬雪皑皑 泡温泉 打雪仗");
break;
}
}