Java核心类
一、Object类
Object类定义在java.lang包中,是所有类的顶级父类,在Java体系中,所有类都直接或间接地继承了Object类。
因此,任何Java对象都可以调用Object类中的方法,而且任何类型的对象都可以赋给Object类型的变量。
常用方法:
clone():对象复制
equals():判断两个对象是否相等
finalize():垃圾回收器用来清理资源
toString():返回当前对象的字符串表示
1.equals()方法
判断两个基本数据类型是否相等直接使用“==”运算符即可,但是引用类型不同:
“==”:比较两个对象的地址是否相同,即比较栈地址是否相同。
“equals()”:比较两个对象的内容是否相同,即比较内容是否相同。
解释:
== : 如果比较的是基本数据类型,那么比较的是变量的值
== :如果比较的是引用数据类型,那么比较的是地址值(两个对象是否指向同一块内存)
equals:如果没有重写equals方法比较的是两个对象的地址值。 如果重写了equals方法后我们往往比较的是对象中的属性的内容
(更多内容请参考解释链接)
class Person{
private String name;
private int age;
private String address;
public Person(){
}
public Person(String name, int age, String address){
this.name = name;
this.age = age;
this.address = address;
}
public boolean equals(Person p){
if(this.age == p.age){
return true;
}
else return false;
}
}
public class PersonEqualsDemo{
public static void main(String[] args){
Person p1 = new Person(“张三”,33,”青岛”);
Person p2 = new Person(“李四”,33,”秦皇岛”);
System.out.println(“p1==p2是:”+(p1==p2));//false,比较引用类型,两个对象的地址不同
System.out.println(“p1.equals(p2)是:”+(p1.equals(p2)));//true,重写的equals比较两个对象的年龄信息,相同即返回true.
}
}
此处equals()方法重写后比较内容是否相同。
2.toString()方法
toString()方法:是一个“自我描述”的方法,该方法返回当前对象的字符串表示。
当使用System.out.println(obj)输出语句时,系统会自动调用对象的toString()方法。
Object类中的toString()方法返回包含类名和散列码的字符串,可在自定义类中重写该方法。
当类没有重写toString()方法时,系统会自动调用Object默认的toString(),显示的字符串格式将是“类名@哈希代码值”//建议在子类中都重写toString()方法。
二、字符串类
字符串就是一连串的字符序列,Java提供了String、StringBuffer和StringBuilder三个类来封装字符串。
(1)String:创建的字符串不可变,若改变字符串变量的值,实则在内存中重新创建了一个新的字符串。
(2)StringBuffer:创建的字符串是可变的,字符串内容可以通过一系列方法改变,但所引用的地址一直不变。(即对实参进行改变)
(3)StringBuilder:JDK1.5新增的一个类,与StringBuffer类似,但是该类没有实现线程安全,因此性能较好。不涉及线程安全时,优先考虑使用StringBuilder。
1.String类
String类的相关用法
public class StringDemo{
public static void main(String[] args){
String str = “I am Zhangsan, welcome to Qinhuangdao!”;
System.out.println(str);
System.out.println(“字符串长度:”+ str.length());
System.out.println(“截取从下标5开始的字符串:”+ str.substring(5));
System.out.println(“截取下标5-10的字符串:”+ str. substring(5,10));
System.out.println(“转换成小写:”+ str.toLowerCase());
System.out.println(“转换成大写:”+ str.toUpperCase());
}
}
(1)当字符串与字符串进行“+”连接时,第二个字符串会连接到第一个字符串后;
(2)当字符串与其他类型进行“+”连接时,因字符串在前面,所以其他类型数据将转换为字符串,然后与前面字符串进行连接;
(3)当他类型与字符串进行“+”连接时,因字符串在后面,其他类型按照从左向右进行计算,最后再与字符串进行连接。
public class StringLinkDemo{
public static void main(String[] args){
String name = “Zhangsan”;
String str1 = “hello ”+name;
System.out.println(str1);//helloZhangsan
String str2 = name+10+20;
System.out.println(str2);//Zhangsan1020
String str3 = 10+20+name;
System.out.println(str3);//30Zhangsan
}
}
2.StringBuffer类
StringBuffer字符缓冲区类是一种线程安全的可变的字符序列。
public class StringBufferDemo{
public static void main(String[] args){
StringBuffer sb = new StringBuffer();
System.out.println(“初始长度:”+ sb.length());
sb.append(“java”);
System.out.println(“追加后:”+ sb);
sb.insert(0,“hello ”);
System.out.println(“插入后:”+ sb);
sb.replace(5,6,”,”);
System.out.println(“替换后:”+ sb);
sb.delete(5,6);
System.out.println(“删除后:”+ sb);
sb.reverse();
System.out.println(“反转后:”+ sb);
System.out.println(“当前字符串长度:”+ sb.length());
sb.setLength(5);
System.out.println(“改变长度后:”+ sb);
}
}
3.StringBuilder类
StringBuilder字符串生成器类是在JDK1.5后新增的一个类,与StringBuffer类似,也是创建可变的字符串序列,不过没有线程安全控制,此处不再赘述。
三、Scanner类
Scanner扫描器类在java.util包中,用来获取用户从键盘输入的数据。
import java.util.Scanner;
public class ScannerDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println(“请输入10个整数,数字之间用空格隔开:”);
int sum = 0;
for(int i=0; i<10; i++){
sum+=sc.nextInt();
}
System.out.println(“10个整数的和是:”+ sum);
}
}
next()方法只接收空格之前的内容,如果希望连空格一起接收,可以使用useDelimiter()方法设置分隔符后再接收。(类比于C++中的getline())
四、Math类
Math类包含常用的执行基本数学运算的方法,所提供的方法都是静态的,可以直接调用,不需实例化。
Math类的方法几乎覆盖了所有数学计算功能,如Math.cos(1.57)、 Math.sin(1.57) 、 Math.log(12)等。
public class MathDemo{
public static void main(String[] args){
//计算平方根
System.out.println(“Math.sqrt(2.3)=”+ Math.sqrt(2.3));
//计算绝对值
System.out.println(“Math.abs(-4.5)=”+ Math.abs(-4.5));
//计算最大值
System.out.println(“Math.max(2.3,3.5)=”+ Math.max(2.3,3.5));//只能两个数之间比较
//返回0.0与1.0之间的随机数
System.out.println(“Math.random()=”+ Math.random());//得到的随机数可以自由用*n的方式扩大n倍
}
}
五、Date类
Date类在java.util包中,用来表示日期和时间,该时间是一个长整型,精确到毫秒。
import java.util.*;
public class DateDemo{
public static void main(String[] args){
//以系统当前时间实例化一个Date对象
Date dateNow = new Date();
System.out.println(“系统当前时间是”+ dateNow.toString());
//以指定值实例化一个Date对象
Date dateOld = new Date(8000L);
System.out.println(“dateOld是”+ dateOld.toString());
//2个日期进行比较,并输出
System.out.println(“after()是:”+ dateNow.after(dateOld));//True,dataOld是指定时间
System.out.println(“before()是:”+ dateNow.before(dateOld));//False
System.out.println(“比较结果是:”+ dateNow.compareTo(dateOld));
}
}