目录
| 数据类型操作类
Object
-
Object是所有类的父类。若一个类没有继承任何类,则会默认继承Object类
-
Object类的方法,任何对象都可以调用
obj.toString(); //如重写了,则返回一个String字符串,包含对象的内容。若未重写的话,返回的是类对象的地址
obj.equals(obj2); //如重写了,则比较的是内容(如String)。若未重写的话,比较的是对象的地址
Objects.requireNunNull(obj); //【特别】这是一个 Objects 的静态方法,参数是对象。作用:判断对象是否为null,是的话则抛异常
Objects.requireNunNull(obj,String str); //和上面作用一样,但是多了 str 异常的提示信息
String
str.equals(str2); //比较内容是否相同。若str是null则会报错。因此str和"abc"比较的话,推荐写成 "abc".equals(str)
str.equalsIgnoreCase(str2); //忽略大小写比较字符串内容
char[] charArrays = str.toCharArray(); //字符串转字符数组
byte[] byteArrays = str.toByteArray(); //字符串转字节数组
str.replace(oldString , newString); //替换字符串的子串
str.length(); //获取字符串长度
str.concat(str2); //拼接字符串(效率高于加法。但是要求两个都是String)
str.charAt(a); //返回索引a处的char
str.indexOf(String str); //查询子串第一次在字符串中出现的索引
str.substring(int a); //截取 [a,str.length()] 的子串
str.substring(int a1 , int a2); //截取[a1 , a2) 的子串
str.split(String str); //按str分割字符串,返回字符串数组
StringBuilder
-
StringBuilder能提高字符串处理效率的类,因为它在处理字符串的时候不用额外产生很多临时的匿名类
-
原理:StringBuilder有一个字符串缓冲区,可以提高字符串的操作效率
StringBuilder在内存中始终是一个数组,占用空间少,效率高。并且其底层数组的长度是固定的,若超出了长度容量,则其会自动扩容。
-
StringBuilder相比于String的优点:在处理较多字符串的拼接处理的时候,我们使用StringBuilder,能大大提高程序的运行效率。
//构造方法
StringBuilder bu = new StringBuilder(); //构造一个空Builder
StringBuilder bu = new StringBuilder(String str); //构造一个有初始内容的Builder
//成员方法
buNew = bu.append(String str); //拼接String,【原先的Builder也会变化!!】【并且也会返回一个新的Builder,可以选择接收或者不接受】
//实际上,返回的是 bu.this == bu,相当于把bu的地址赋值给了buNew。基于此,我们在调用append的时候无需接收返回值
bu.append(String str1).append(String str2).……; //链式拼接
String str = bu.toString(); //把StringBuilder 转为 String
包装类
//装箱(JDK1.5之后支持自动装箱)
Integer in1 = new Integer(1); //构造方法 + int参数 装箱
Integer in2 = new Integer("2"); //构造方法 + String参数(内容必须是纯数字) 装箱
Integer in3 = Integer.valueOf(3); //静态方法 + int参数 装箱
Integer in4 = Integer.valueOf("4");//静态方法 + String参数(内容必须是纯数字) 装箱
//拆箱(JDK1.5之后支持自动拆箱)
int num = Integer的对象.intValue();
-
自动拆箱的应用:
-
如list.add(1);会自动转为list.add(new Integer(1));。
-
再如包装类加减法运算,会先自动拆箱为基本类型再运算、装箱。(包装类是对象,对象是无法直接参与运算的)
-
| 各种数据类型的转换
基本类型和字符串的转换
//基本类型 → 字符串
String str = 基本数据类型 + ""; //方法一
String str2 = 包装类名.toString(int num); 如 String str2 = Integer.toString(2); //方法二
String str3 = String.valueOf(int num); //方法三
int[ ] → String
String s = "";
for(int i=0;i<arr.length;i++){
s = s + arr[i];//拼接成字符串,最终放在变量s中
}
String → int[ ]
String str="123456";
int[] a = new int[str.length()];
for(int i=0;i<str.length();i++) {
a[i] = str.charAt(i)-'0';
}
String → char[ ]
String str="123456";
char[] c = str.toCharArray() ;
System.out.println(c);
String → byte[ ]
byte[] a = str.getBytes();
char / array [ ] → String
char[] c = {'a','s','d','4','5',};
String str = new String(c);
System.out.println(str);
*不适用于int[ ]
char[ ] → int[ ]
char[] c = { '1', '2', '3', '4', '5', };
int[] a = new int[c.length];
for (int i = 0; i < 5; i++) {
a[i] = c[i] - '0';
System.out.println(a[i]);
}
int[ ] → char[ ]
int[] a = {1,2,3,4,5};
char[] c = new char[a.length];
for (int i = 0; i < 5; i++) {
c[i] = (char) (a[i]+'0');
System.out.println(c[i]);
}
int → String
String str = Integer.toString(i);
String s = String.valueOf(i);
String s = "" + i;
String → int
int i = Integer.valueOf(str).intValue();
int num = String.parseInt/Double/……(String str); 如 int num = String.parseInt("2");
String byte[ ] char[ ] 的转换
//byte[]转为String,对应的数字会变为对应ASCII字符
byte[] array = {61,62,63};
String a = new String(array,0,3);
//String转为char[],对应的字符原封不动
char[] array2 = str.toCharArray();
//String转为byte[],对应的字符会变为对应的ASCII码
byte[] array3 = str.getBytes();
| 系统类
System
-
System中的方法都是静态的,因此无需创建对象即可使用
System.currentTimeMills; //以毫秒为单位的当前时间。其差值可以用于计算程序段的运行时间。
System.arraycopy(Object src被复制的数组 , int srcPos原数组的起始位置 , Object dest被粘贴的数组(目标数组), int destPos目标数组起始位置, int length要复制的数组元素数量); //复制数组
| 数学类
Random
Random r = new Random();
int num = r.nextInt(); //返回[0,∞]
int num2 = r.nextInt(a); //返回[0,a) a必须大于0
Math
double num = Math.abs(double); //绝对值
double num = Math.ceil(double); //向上取整(无视小数)
double num = Math.floor(double); //向下取整(无视小数)
long num = Math.round(double); //按数学规则四舍五入。返回的是long
double Pi = Math.PI; //圆周率
| 日期类
Date
Date date = new Date(int time); //有参构造
System.out.pritln(date); //获取1970年 + time(ms) 的时间
Date date = new Date(); //无参构造
System.out.pritln(date); //获取现在的时间
date.getTime(); //获取1970年到如今的时间(ms) (只有毫秒值才能直接相减,Data是不能相减的)
DateFormat(Date的辅助类)
-
DateFormat的作用:对Date的格式进行自定义
-
DateFormat是一个抽象类!实际中都是使用其子类 SimpleDateFormat
-
DateFormat的有参构造str:指定输出的Date的格式,如:"yyyy年MM月dd日 HH时mm分ss秒"。详细的字母含义请参考 DateFormat详细介绍
SimpleDateFormat sdf = new SimpleDateFormat(String str); //有参构造:
String time = sdf.format(Date date); //获取date格式化后的字符串
Date date = sdf.parse(String time); //若字符串time符合sdf构造方法的格式,则根据这个时间字符串返回一个date对象
Calender(Date的辅助类)
-
Calender的作用:对Date的数字更便捷地进行计算
-
Calendar和DateFormat一样,也是一个抽象类。但是我们不用其子类GregorianCalendar创建Calender的对象,而是通过其子类的静态方法getInstance创建
-
Calender的get方法,常用的字段有:AM、DATE、MONTH、YEAR、DAY_OF_WEEK、DAY_OF_MONTH、DAY_OF_YEAR 等
Calendar c = Calendar.getInstance(); //通过子类的静态方法getInstance创建Calender对象(体现了多态)
int year = c.get(Calender.YEAR); //通过get方法,获取指定字段如YEAR的值
c.set(int field ,int value); //通过set方法,设置指定字段的值
c.set(yyyy , MM , dd); //set方法也可以直接设置年月日
c.add(int field ,int amount); //add方法可以为指定字段做加法
Date date = c.getTime(); //获取当前Calender对应日期的Date对象