API学习
1、Object类
1.1、介绍
类Object是类层次结构的根,每个类都把Object作为超类,所有对象包括数组都实现了这个类的方法。在java语言中,程序员自定义或者jdk中存在的类,直接或者间接的都要继承Object类。
1.2、Object类中的常用方法
继承了Object类之后就可以使用Object类提供的方法
- String toString()
- 作用:把对象转换成字符串
示例:用toString方法在控制台输出名字和年龄
创建一个Person类,此时类中没有重写toString
public class Person {
String name;
int age;
public Person(){
}
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
创建测试类
public class Test {
public static void main(String[] args) {
Person person = new Person("糖锅", 20);
String str = person.toString();//此时Person类中没有重写toString,调用的是Object类中的toString
System.out.println(str);
}
}
当运行程序时,我们发现此时的输出结果是一个地址,但是我们想要的是输出名字和年龄
此时我们需要在Person中重写toString方法,可使用快捷键alt + ins
alt + ins之后选择toString()
选择需要的属性然后点击ok
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
此时运行发现结果为:
Person{name='糖锅', age=20}
又因为执行时,每次打印对象,或者字符串进行拼接时,都会默认调用toString方法,所以我们可以省略Test测试类中的person.toString();
public class Test {
public static void main(String[] args) {
Person person = new Person("糖锅", 20);
System.out.println(person);
}
}
此时运行结果也是一样的
- boolean equals(Object obj)
- boolean:方法的返回值类型
- Object:方法传递的参数类型
- 作用:比较两个对象是否相同(比较两个对象的地址是否相同)
示例:比较两个对象的姓名是否一样(使用上述Person类)
我们此时创建Test类如下
public class Test {
public static void main(String[] args) {
Person person1 = new Person("糖锅", 20);
Person person2 = new Person("糖锅", 20);
System.out.println(person1);//打印的是对象的地址
System.out.println(person2);
System.out.println(person1 == person2);
}
}
运行结果为
java_api.Person@4554617c
java_api.Person@74a14482
false
我们想要比较的是对象中存储的数据的值,那我们直接用person1.equals(person2)不就行了?
当然也不行,因为equals比较的也是对象的地址,结果依然会输出false,所以我们需要重写equals方法。
具体步骤和重写toString方法类似:alt + ins -->next(选择需要比较的属性值)–>next–>create
@Override
public boolean equals(Object o) {
//判断当前地址值和传递对象地址值是否相同
if (this == o)
return true; //两个对象相同,返回true
//判断传递过来的对象是否为null 或者 当前对象和传递对象的类型是否匹配
if (o == null || getClass() != o.getClass())
//当前比较的对象为null,则不需要比较,直接返回false
//当比较的两个对象的类型不一样时,也直接返回false
return false;
//向下转型
Person person = (Person) o;
//1.基本数据类型比较 使用Objects工具类中的equals方法,比较两个字符串是否相同
return Objects.equals(name, person.name);
//2.也可以使用如下写法 使用Stirng类中的equals方法,比较两个字符串是否相同
//return this.name.equals(person.name);
}
上述字符串比较的两种方法(1和2)讨论:
-
String类中的equals方法
boolean res = 字符串1.equals(字符串2);
-
Objects工具类中的equals方法(推荐使用)
boolean res = Objects.equals(字符串1, 字符串2);
两者区别:Objects类中的equals方法可以避免NullPointerException异常的发生
报错测试示例:
public class Test {
public static void main(String[] args) {
String str1 = null;
String str2 = "糖锅";
//使用Objects中的equals
System.out.println(Objects.equals(str1, str2));
//使用Stirng中的equals
System.out.println(str1.equals(str2));
}
}
此时运行结果
重写equals方法后,再运行Test测试类
public class Test {
public static void main(String[] args) {
Person person1 = new Person("糖锅", 20);
Person person2 = new Person("糖锅", 20);
System.out.println(person1);//打印的是对象的地址
System.out.println(person2);
System.out.println(person1 == person2);
System.out.println(person1.equals(person2));
}
}
运行结果就会是我们的预期了
java_api.Person@fb30e
java_api.Person@fb30e
false
true
2、Data类
2.1、介绍
-
归属包:java.util
-
作用:表示日期时间(精确到毫秒)
-
使用:
-
构造方法(创建时间对象)
public Data();//创建的对象,表示当前计算机的系统时间 public Data(long time);//Data对象 = 1970/1/1 0:0:0 + time毫秒值
-
常用方法
public long getTime(); //返回毫秒值 = 当前date代表的时间 - 1970/1/1 0:0:0 public void setTime(long t) //Date对象 = 1970/1/1 0:0:0 + time毫秒值
-
2.2、DateFormat类
什么是DateFormat类?
DateFormat类是java提供的日期格式化类
这个类能干啥?
-
对日期进行格式化
-
对日期进行解析操作
那么如何使用嘞?
-
所属包:java.text.DateFormat
-
DateFormat是一个抽象类无法实例化,使用子类:SimpleDateFormat
DateFormat d = new SimpleDateFormat(“日期模板”);
日期模板:yyyy表示全年、MM表示月、dd表示日
例如:DateFormat d = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);
-
String format(Date date) 可以将Date类型的数据,按照日期模板,转换为字符串
-
**Date parse(String s) **可以将日期式的字符串数据,按照日期模板,转换成Date对象
3、Calendar类
3.1、Calendar类介绍
java.util.Calendar类表示日历,内含各种事件信息,以及获取,计算时间的方法。Calendar本身是一个抽象类,可以通过Calendar提供的静态方法getInstance日历子类对象。
3.2、Calendar常用方法
方法名 | 说明 |
---|---|
public static Calendar getInstance () | 获取一个它的一个子类GregorianCalendar |
public int get (int field) | 获取指定日历字段的时间 |
public void set (int field, int value) | 设置指定字段的值 |
public void add (int field, int amount) | 为某个字段增加/减少指定的值 |
示例:获取当前系统年月日
public class Test {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");
}
}
运行结果
2024年5月4日//我们发现运行结果中,月份是比实际少1的,因为直接获取月份是从0开始数的
示例:给日历对象设置指定值
public class Test {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
//修改前
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");
//修改后
//calendar.set(Calendar.YEAR, 1949);
calendar.set(1949, 10, 1);//也可以这样设置
int year1 = calendar.get(Calendar.YEAR);
int month1 = calendar.get(Calendar.MONTH);
int day1 = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year1 + "年" + month1 + "月" + day1 + "日");
}
}
运行结果
2024年5月4日
1949年10月1日
示例:给日历对象中的信息增加或减少, 给月份减少5,日增加3
public class Test {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
//修改前
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");
//修改后
//calendar.set(Calendar.YEAR, 1949);
calendar.set(1949, 10, 1);
int year1 = calendar.get(Calendar.YEAR);
int month1 = calendar.get(Calendar.MONTH);
int day1 = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year1 + "年" + month1 + "月" + day1 + "日");
//给月份减少5,日增加3
calendar.add(Calendar.MONTH, -5);
calendar.add(Calendar.DAY_OF_MONTH, 3);
int month2 = calendar.get(Calendar.MONTH);
int day2 = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year1 + "年" + month2 + "月" + day2 + "日");
}
}
运行结果
2024年5月4日
1949年10月1日
1949年5月4日
欧克,今日到此结束