Java之Object类和常用的API

时间:2021-08-29 09:50:31

Object类和常用的API

学习过程中的笔记,涉及到Objetc中的equals方法和toString方法,日期类Date,日历类Calendar,日期格式化类SimpleDateFormat以及基本数据类型和封装类的拆箱和装箱,还有String与基本数据类型的转换.有错误还望谅解

Object类

概述

java.lang.Object 类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。如果一个类没有特别指定父类, 那么默认则继承自Object类。Object类当中包含的方法有11个,常用的有两个:

  • public String toString():返回该对象的字符串表示.
  • public boolean equals(Object obj):指示其他对象是否与此对象相等.

toString方法

toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。

由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。

重写toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}

我们在使用输出语句输出对象名的时候默认调用toString()方法.

equlas()方法

调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。

默认地址比较

如果没有覆盖重写equals方法,那么Object类中默认进行== 运算符的对象地址比较,只要不是同一个对象,结果必然为false。

对象内容比较

如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。

重写equals()方法
@Override
public boolean equals(Object o) { if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
} @Override
public int hashCode() { return Objects.hash(name, age);
}

这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。

Objects类

在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。

源码如下:

public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}

日期时间类

Date类只需要注意三个方法:

  • Date() 分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。 new Date();来创建当前时间
  • Date(long date) 分配一个 Date对象,并将其初始化为表示自称为“时代”的标准基准时间以后的指定毫秒数,即1970年1月1日00:00:00 GMT。中国是东八区,所以时间要加八个小时
  • long getTime() 返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒 数 。 获取时间的毫秒数.

SimpleDormatDate类也注意三个方法:

  • SimpleDateFormat(String pattern) 使用给定模式 SimpleDateFormat并使用默认的 FORMAT语言环境的默认日期格式符号。模式一般为("yyyy年MM月dd日 HH:mm:ss")
  • String format(Date date) 将日期格式化成日期/时间字符串。 将日期对象转化为构造方法中固定模式的字符串.
  • Date parse(String source) 从给定字符串的开始解析文本以生成日期。 将String类型转化为构造方法中固定模式的Date类型.

注意的是模式中的格式 : y代表年,M代表月,d代表天,H代表时,m代表分,s代表秒,S代表毫秒,严格区分大小写.

Calendar类

日历类是一个抽象类,使用如下:

// 计算某年某月有多少天,可以用来判断瑞年,设置月份的时候注意点
// 使用方法获取对象
Calendar calendar = Calendar.getInstance();
// 设置时间
Scanner in = new Scanner(System.in);
System.out.println("请输入计算的时间的后一天(yyyy-MM-dd):");
String date = in.nextLine();
in.close();
String[] arr = date.split("-");
int year = Integer.valueOf(arr[0]);
int month = Integer.valueOf(arr[1]);
int day = Integer.valueOf(arr[2]);
calendar.set(year,month,day);
// 计算后一天
calendar.add(Calendar.DAY_OF_MONTH,-1);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
// 获取
System.out.println("美国一周从周日开始,您输入的该天为周" + calendar.get(Calendar.DAY_OF_WEEK) + "在中国也就是周" + (calendar.get(Calendar.DAY_OF_WEEK) - 1));

注意的是美国的星期从周日开始,美国的月份从0月开始.常用的方法使get和set,还有getInstance.

System类

常用的方法有两个:

  • static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 将指定源数组中的数组从指定位置复制到目标数组的指定位置。

src - 源数组。srcPos - 源数组中的起始位置。 dest - 目标数组。 destPos - 目的地数据中的起始位置。 length - 要复制的数组元素的数量。

  • static long currentTimeMillis() 返回当前时间(以毫秒为单位)。

这个方法一般用于程序的优化

// 现有一个字符数组{'i','t','c','a','s','a'},请使用System类中的arraycopy()方法在控制台输出“itcast”。
// (提示:将[1]号数组元素复制到最后位置并覆盖原有元素。)
// 创建字符数组
char[] charArr = {'i','t','c','a','s','a'};
// 使用arraycopy方法
System.arraycopy(charArr,1,charArr,charArr.length - 1, 1);
System.out.println(charArr);

StringBuilder类

常用的方法:

  • StringBuilder() 构造一个没有字符的字符串构建器,初始容量为16个字符。

  • StringBuilder(String str) 构造一个初始化为指定字符串内容的字符串构建器。

  • StringBuilder append(....) 将任意数据类型到序列中。返回当前对象.

    // 分析以下需求,并用代码实现:

    // 1.定义数字字符串数组{"010","3223","666","7890987","123123"};

    // 2.判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出;

    // 3.如:010 是对称的,3223 是对称的,123123 不是对称的;

    // 4.最终打印该数组中对称字符串的个数。

    // 定义个数

    int sum = 0;

    // 定义数字字符串数组

    String[] strArr = {"010","3223","666","7890987","123123"};

    for (int i = 0; i < strArr.length; i++) {

    StringBuilder sb = new StringBuilder(strArr[i]);

    // 反转自己

    sb.reverse();

    System.out.println(sb + ":" +strArr[i]);

    if(sb.toString().equals(strArr[i])){

    sum ++;

    System.out.println(strArr[i] + "是对称的.");

    }else{

    System.out.println(strArr[i] + "是不对称的.");

    }

    }

    System.out.println("该数组中对称字符串的个数为:" + sum);

装箱和拆箱

基本数据类型 引用数据类型 常用的属性 常用的方法
byte Byte static byte MAX_VALUE : Byte类型的最大值

static byte MIN_VALUE : Byte类型的最小值
static byte parseByte(String s) 将字符串参数解析为带符号的十进制 byte 。

static String toString(byte b) 返回一个新的 String对象,代表指定的 byte 。
short Short static short MAX_VALUE:short类型的最大值

static short MIN_VALUE:short类型的最小值
static short parseShort(String s) 将字符串参数解析为带符号的十进制 short 。

static String toString(short s) 将字符串参数解析为带符号的十进制 short 。
int Integer static int MAX_VALUE:int类型的最大值

static int MIN_VALUE:int类型的最小值
static int parseInt(String s):将字符串参数解析为带符号的十进制整数。

static String toString(int i):返回一个 String指定整数的 String对象。
long Long static long MAX_VALUE:long类型的最大值

static long MIN_VALUE:long类型的最小值
static long parseLong(String s):将字符串参数解析为带符号的十进制 long 。

static String toString(long i):返回 String表示指定对象 long 。
float Float static float MAX_VALUE:long类型的最大值

static float MIN_VALUE:long类型的最小值
static float parseFloat(String s) 返回一个新 float初始化为指定的代表的值 String ,如通过执行 valueOf类的方法 Float 。

static String toString(float f) 返回 float参数的字符串 float形式。
double Double static double MAX_VALUE:double类型的最大值

static double MIN_VALUE:double类型的最小值
static double parseDouble(String s) 返回一个新 double初始化为指定的代表的值 String ,如通过执行 valueOf类的方法 Double 。

static String toString(double d) 返回 double参数的字符串 double形式。
char Charcter static char MIN_VALUE:该字段的常数值是 char '\u0000' 。

static char MAX_VALUE:该字段的常数值是 char类型的 '\uFFFF' 。
可以使用String类中的方法char[] toCharArray() 将此字符串转换为新的字符数组。-> 不属于本章内容

static String toString(char c) 返回一个 String对象,表示指定的 char 。
boolean Boolean static Boolean FALSE : Boolean对象对应于原始值 false 。

static Boolean TRUE : Boolean对象对应于原始值 true 。
static boolean parseBoolean(String s) 将字符串参数解析为布尔值。如果s为true,true不区分大小写时,返回为true,其余全部返回false.

static String toString(boolean b) 返回一个 String指定布尔值的 String对象。

基本数据类型和引用数据类型,基本数据类型是不能调用方法的,而引用数据类型可以创建对象调用方法.

基本数据类型和包装类型之间存在自动装箱和拆箱.