Java常用类基础
Object类
对象.getClass() (返回一个Class类)
对象.hashCode() (内存地址经过特定算法得到的序列)
对象.toString() (类名@十六进制地址,子类重写)
对象.equals() (与==一样比较内存地址,子类重写)
// 手写一个 Student类
// 1. getClass 方法(返回一个Class类)
Student s1 = new Student("zhangsan", 19);
Student s2 = new Student("lisi", 25);
Class c1 = s1.getClass();
Class c2 = s2.getClass();
System.out.println("s1和s2是同一个对象:" + (c1 == c2));
// 2. hashCode方法,内存地址经过特定算法的到的序列
s1.hashCode();
s2.hashCode();
// 3. toString方法
s1.toString();
s2.toString();
// 4. equals方法:
Student s3 = new Student("jack", 15);
Student s4 = new Student("jack", 15);
s3.equals(s4);
包装类
基本数据类型对应的引用数据类型
整数缓冲区:
Java预先创建了256个常用的整数包装类型对象(就是int类型, 创建在堆里)
类型转换
装箱:基本类型转换成引用类型的过程
拆箱:引用类型转换为基本类型的过程
装箱与拆箱
XXX:包装类
xxx:八大基本类型
装箱:
new Integer(int num)
XXX.valueOf(String str或int i),(返回XXX)
拆箱:
- XXX对象.xxxValue(),包装类 ==> xxx
int num = 15;
Integer i1 = new Integer(num); // 构造器
Integer i2 = Integer.valueOf(num); // 装箱
Integer i3 = new Integer(100);
int num2 = i3.intValue(); // 拆箱
// JDK1.5之后,提供自动装箱和拆箱
//自动装箱
Integer i4 = 25;
//自动拆箱
int age2 = i4;
基本类型与String类的转换
基本类型 --> 字符串:
"" + num;
包装类.toString(基本类型)
字符串 --> 基本类型:
- 包装类.parse基本类型(str)
// 1. 基本类型 ==> 字符串
int n = 100;
// 1.1使用+号
String s1 = n +"";
// 1.2使用Integer的toString()方法
String s2 = Integer.toString(n);
// 2. 字符串 ==> 基本类型
String str = "140";
// 使用Integer.parseXXX();
int n2 = Integer.parseInt(str);
// boolean字符串形式转成基本类型,"true --> true(非"true"或"false",结果总为false)
String str2 = "true";
boolean b = Boolean.parseBoolean(str2);
String类
String类的本质就是char[]数组
构造方法:
String name = "";
new String("");
特点:
字符串是常量,创建后不可改变
字面值保存在字符串池中可共享
字符串重新赋值,在方法区的字符串池里重新开辟空间
String name = "hello"; // "hello"常量存储在字符串池中,
name = "zhangsan"; // "zhangsan"赋值给变量name,字符串赋值,没修改数据,而是在方法区的字符串池里重新开辟空间
String name2 = "zhangsan";
// 会在栈开辟空间,指向堆,堆指向方法区(即堆,方法区都开辟了空间)
String str = new String("java");
String str2 = new String("java");
System.out.println(str == str2); // 比较的栈的地址不同
String的使用方法
length() 返回长度
charAt() 据下标获取字符
contains() 当前字符串的是否包含str
// 字符串方法的使用
// 1 length() 返回长度
// 2 charAt() 据下标获取字符
// 3 contains() 当前字符串是否包含str
String s = "java是世界上java最好的语言,java真香 ";
System.out.println(s.length());
System.out.println(s.charAt(5));
System.out.println(s.contains("最好的"));
toCharArray() 返回字符串对应的数组
indexOf()
lastIndexOf()
// 4 toCharArray() 返回字符串对应的数组
// 5 indexOf()
// 6 lastIndexOf()
System.out.println(Arrays.toString(s.toCharArray()));
System.out.println(s.indexOf("java"));
System.out.println(s.indexOf("java",4)); // 从下标4开始检索
System.out.println(s.lastIndexOf("java"));
trim() 去掉字符串前后的空格
toUpperCase():字母全变成大写 toLowerCase():全变小写
endWith(str):以什么结束 startsWith(str):以什么开始
System.out.println("======字符串方法的使用3======");
// 7 trim() 去掉字符串前后的空格
// 8 toUpperCase():字母全变成大写 toLowerCase():全变小写
// 9 endWith(str):以什么结束 startsWith(str):以什么开始
String s2 = " hello world ";
System.out.println(s2.trim());
System.out.println(s2.toUpperCase());
System.out.println(s2.toLowerCase());
String fileName = "hello.java";
System.out.println(fileName.endsWith(".java"));
System.out.println(fileName.startsWith("hello."));
replace(char old, char new) 新字符或字符串替代旧字符或字符串
split() 对字符串进行拆分
equalsIgnoreCase() 忽略大小写比较
compareTo() 比第一个字符的大小,字符一致比长度
// 10 replace(char old, char new) 新字符或字符串替代旧字符或字符串
// 11 split() 对字符串进行拆分
System.out.println(s.replace("java","php"));
String s3 = "java is the best language";
String[] arr = s3.split("[ ,]+"); // 正则表达式
// 遍历arr数组
for(String string : arr){
System.out.println(string);
}
// 补充两个方法equals, compare() 比较大小
String s4 = "hello";
String s5 = "Hello";
System.out.println(s4.equalsIgnoreCase(s5));
String s6 = "abc"; // 97
String s7 = "xyz"; // 120
System.out.println(s6.compareTo(s7));
String s8 = "abc";
String s9 = "abcxyz";
System.out.println(s8.compareTo(s9)); // 比长度
StringBuffer和StringBuilder
可变String
与String比,1.效率更高,2.更节省内存
StringBuffer方法:
append()
insert(offset, str)
replace(start, end, str) start, end为原字符串的始末
delete(start, end)
StringBuilder方法同理(推荐使用)
StringBuffer sb = new StringBuffer();
//1. append() 追加
sb.append("java");
System.out.println(sb.toString());
// 2. insert()
sb.insert(1,"我在最前面");
System.out.println(sb);
// 3. replace()
sb.replace(0,4,"hello");
System.out.println(sb);
// 4. delete()删除
sb.delete(0,4);
System.out.println(sb);
// 5. 清空
sb.delete(0,sb.length());
System.out.println(sb.length());
BigDecimal类
大浮点数精确计算
构造方法:new BigDecimal("");
加减乘除,保留n位小数
add()
subtract()
multiply()
divide()
(val: , scale:2, BigDecimal.ROUND_HALF_UP) 四舍五入保留2位
double result = (1.4 - 0.5) / 0.9;
System.out.println(result);
// BigDecimal,大浮点数精确计算
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
// 减法
BigDecimal r1 = bd1.subtract(bd2);
System.out.println(r1);
// 加法
System.out.println(bd1.add(bd2));
// 乘法
System.out.println(bd1.multiply(bd2));
// 除法
BigDecimal r2 = new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9"));
System.out.println(r2);
// 保留几位小数
BigDecimal r3 = new BigDecimal("10")
.divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP); // 四舍五入
Date
构造器:
new Date();
方法:
toString(); 返回UTC时间
toLocalString(); 返回当地时间(已过时)
date1.after(date2) date1是在date2之后?(返回boolean)
before()
compareTo() -1 0 1,只有三个值
//1 创建Date对象
Date d1 = new Date(); // 获取当前时间
//今天
System.out.println(d1.toString()); // 返回UTC时间
System.out.println(d1.toLocaleString());
//昨天
Date d2 = new Date(d1.getTime() - (60*60*24*1000));
System.out.println(d2.toLocaleString());
// 2方法after before
System.out.println(d1.after(d2));
System.out.println(d1.before(d2));
//比较 compareTo();
System.out.println(d1.compareTo(d2)); // -1 0 1,只有三个值
System.out.println(d1.equals(d2));
Calendar
Calendar 构造器为protected
构造对象:
Calendar.getInstance();
方法:
getTime() 获取时间
get(int field) 获取年月日
set(Calendar.常量, int field) field,要设置的值
add(Calendar.常量, int num) 加为+,减为-
// 1创建Calendar对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTimeInMillis()); // 获取时间毫秒值
//2获取时间信息
// 获取年
int year = calendar.get(Calendar.YEAR);
//月
int month = calendar.get(Calendar.MONTH); // 从0为1月,以此类推
//日
int day = calendar.get(Calendar.DAY_OF_MONTH); // Date 日期
//小时
int hour = calendar.get(Calendar.HOUR_OF_DAY); // HOUR:12小时制,HOUR_OF_DAY:24小时制
//分钟
int minute = calendar.get(Calendar.MINUTE);
//秒
int second = calendar.get(Calendar.SECOND);
System.out.println(year + "年" + (month + 1) + "月" + day + "日" + hour + ":" + minute + ":" + second);
//3修改时间
Calendar calendar2 = Calendar.getInstance();
calendar2.set(Calendar.DAY_OF_MONTH,5); // 设置的日期
//4add方法修改时间
calendar2.add(Calendar.HOUR, -1); // 时间单位,加减
//5补充方法
int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);
System.out.println("最大天数:" + max);
System.out.println("最小天数:" + min);
SimpleDateFormat ( 使用较多)
其字母有特殊含义(可查表)
G 年代标志符
y 年
M 月
d 日
h 在上午或下午 (1~12)
H 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区创建时间:
new SimpleDateFormat(); 设置格式
new Date(); 新建时间
format(Date date); 格式化时间
解析时间:
- parse(); 解析时间,Date时间格式与sdf对象格式一致才能解析
// 1 创建一个SimpleDateFormat对象 y年 M月
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
// 2 创建一个Date
Date date = new Date();
// 3 格式化date(把日期转成字符串)
String str = sdf.format(date);
//解析 (把字符串转成日期)
Date date2 = sdf.parse("2014/04/19"); // 格式与sdf一致才能解析
System类
System.arraycopy(src, srcPos, dest, destPos, length) 数组复制
System.currentTimeMillis() 获取当前时间
System.gc() garbage collection:垃圾回收器
System.exit() 退出JVM
// 1 数组复制
//arraycopy: 数组的复制
//src:源数组
//srcPos:从哪个位置开始赋值
//dest:目标数组
//destPos:目标数组的位置
//length:复制的长度
int[] arr = {20,25,35,53,24,5,19,2};
int[] dest = new int[8];
System.arraycopy(arr,4,dest,2,4);
// 2 获取时间
//Arrays.copyOf(original,newLength)使用System.arraycopy
long start = System.currentTimeMillis();
// 程序块
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start) + "ms");
// 3 垃圾回收器
// 自写一个Student类
// System.gc(); 告诉垃圾回收器回收垃圾,多线程
new Student("张三", 10);
Student s1 = new Student("李四", 10);
new Student("王五", 10);
System.gc(); // 告诉垃圾回收器回收
// 4 退出JVM
System.exit(0);