1.常用API
API(Application Programming interface) 应用程序接口
说白了:就是别人定义好的类,接口,方法,供我们直接使用!
1.1Object类
一切类的祖宗
Object类是类层次结构的根。每个类都有 Object作为超类。所有对象,包括数组,实现这个类的方法 * 既:所有对象类型,包括我们自定义的类,都隐式的继承自Object
1.1.1toString方法
用于返回对象的字符串表现形式
-
Object原生代码逻辑
getClass().getName() + “@” + Integer.toHexString(hashCode());
类名 + @ + 16进制哈希值(暂时理解成对象地址) -
我们自己重写后逻辑
通常情况下我们不想看到对象地址,我们希望看到对象的成员变量们
-
关于打印语句和toString方法的关系
Student student = new Student("杨幂",18);
//手动调用toString返回代表该对象的字符串
String s = student.toString();
System.out.println(s);
//打印语句自动调用toString返回代表该对象的字符串
System.out.println(student);
案例:
package com.itheima.demo03;
import java.util.Objects;
public class Student {
//public class Student extends Object{
private String name;
private int age;
//手动重写的toString
@Override
public String toString() {
return "name:"+name+"--age:"+age;
}
//idea帮助我们生成toString,同样使用成员变量表示对象
// @Override
// public String toString() {
// return "Student{" +
// "name='" + name + '\'' +
// ", age=" + age +
// '}';
// }
}
1.1.2equals方法
用于比较两个对象是否"相同"
-
Object原生代码逻辑
比较对象地址值,相当于== (==号永远比较对象地址值)
-
我们自己重写后逻辑
通常情况下我们不想比较对象地址,我们希望比较对象的成员变量们。
因为我们认为成员变量都相同,就是一个人就是对象相同
案例:
package com.itheima.demo03;
import java.util.Objects;
public class Student {
//public class Student extends Object{
private String name;
private int age;
//重写equals方法,将比较地址变为比较成员变量内容
// @Override
// public boolean equals(Object obj) {
//
// //自己对象
// Student a = this;
// //传进来的对象
// Student b = (Student) obj;
//
// //比较成员变量是否相同
// //先比年龄
// if(a.age != b.age) return false;
// //再比姓名
// if(!a.name.equals(b.name)) return false;
//
// return true;
// }
//idea帮助我们生成equals方法,同样使用成员变量表示对象
@Override
public boolean equals(Object o) {
//判断传入的对象和调用方法的对象是否是同一个对象,是,直接返回true
if (this == o) return true;
//如果传进来的是null,直接返回false
//如果传入的对象和调用方法的对象 类型不同,直接返回false
if (o == null || this.getClass() != o.getClass()) return false;
//将传入的对象转为本类类型,为了获取成员变量
Student student = (Student) o;
//对比年龄和姓名
return age == student.age &&
Objects.equals(this.name, student.name);
}
}
//测试类代码
public static void main(String[] args) {
//==============equals=============================================
Student student = new Student("杨幂",18);
Student student2 = new Student("杨幂",18);
System.out.println(student);
System.out.println(student2);
//==号永远比较两个对象的地址值
System.out.println(student == student2);
System.out.println(student2.equals(student));
}
1.2Date
日期类,Date类代表了一个特定的时间,精度为毫秒。
* 构造方法;
* Date():
* 以当前系统时间构造一个Date对象
* Date(long date):
* 使用一个从1970年1月1日零时开始的一个毫秒值构造一个Date对象
* 普通方法:
* public long getTime():
* 获取从1970年1月1日零时到此Date对象所表示时间之间的毫秒值。
* public void setTime(long time):
* 设置此Date对象的毫秒值。此方法将改变此Date对象所表示的时间。
* 小练习:
* 创建一个Date对象,代表上周的此时此刻。
1.3DateFormat&SimpleDateFormat
日期格式化,String与Date相互转换
* public String format(Date date):
* 将Date对象转换为指定格式的String对象。
* public Date parse(String s):
* 将String对象转换为Date对象。
1.4Calendar
日历类,用于处理时间。其内部包含了许多时间相关的 键值对 信息
它是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar类。
Calendar官方建议获取子类对象的方式是:public static Calendar getInstance()
* public int get(int field)
* 获取某个字段的值。field参数表示获取哪个字段的值,
* 可以使用Calender中定义的常量来表示:
* Calendar.YEAR : 年
* Calendar.MONTH :月 从0开始算,比实际生活少1
* Calendar.DAY_OF_MONTH:月中的日期
* Calendar.HOUR:小时
* Calendar.MINUTE:分钟
* Calendar.SECOND:秒
* Calendar.DAY_OF_WEEK:星期
* public void set(int field,int value) 设置某个字段的值
* public void add(int field,int amount) 为某个字段增加/减少指定的值
* public boolean after(Object when):判断当前时间是否在参数时间之后
* public boolean before(Object when):判断当前时间是否在参数时间之前
* public final void setTime(Date date):使用给定的Date设置此日历的时间
1.5BigDecimal
由于double本身是近似值,所以计算结果有偏差,所以需要精确小数,即BigDecimal
* 构造方法:
* 1).BigDecimal(String str):使用一个数字字符串构造一个BigDecimal对象
* 成员方法:
* 1).BigDecimal add(BigDecimal b):当前对象 + 参数对象,返回一个新的BigDecimal;
* 2).BigDecimal subtract(BigDecimal b):当前对象 - 参数对象,返回一个新的BigDecimal
* 3).BigDecimal multiply(BigDecimal multiplicand):当前对象 * 参数对象,返回一个新的BigDecimal
* 4).BigDecimal divide(BigDecimal divisor,
* //除数 int scale,
* //要保留的小数位数 RoundingMode roundingMode)//舍入模式
* 5).BigDecimal remainder(BigDecimal divisor):当前对象 % 参数对象,返回一个新的BigDecimal
1.6System
提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。
* 成员方法:
* 1. public static void exit(int status) :终止当前运行的 Java 虚拟机,非零表示异常终止
* 2. public static long currentTimeMillis(): 返回当前时间(以毫秒为单位)
//注意:该方法比new Date()获取毫秒值 速度更快!
* 3. public static Properties getProperties():获取一些常见的系统参数
通过该方法,体会:不用记方法,要会试方法,查方法
关于类似System这样类的构造方法问题:
System不能被实例化的原因:因该该类的构造方法被私有化了,提供了大量的static方法