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对象。 |
基本数据类型和引用数据类型,基本数据类型是不能调用方法的,而引用数据类型可以创建对象调用方法.
基本数据类型和包装类型之间存在自动装箱和拆箱.