Java之Object类和常用的API
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对象。 |
基本数据类型和引用数据类型,基本数据类型是不能调用方法的,而引用数据类型可以创建对象调用方法.
基本数据类型和包装类型之间存在自动装箱和拆箱.
Java之Object类和常用的API的更多相关文章
- Java(215-231)【Object类、常用API】
1.Object类的toString方法 java.lang.Object 类 Object 是类层次结构的根(父)类. 每个类(Person,Student...)都使用 Object 作为超(父) ...
- 【Object类、常用API】
Object类 1.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类就是Object. 如果一个类 ...
- 01 语言基础+高级:1-5 常用API第二部分_day01.【Object类、常用API: Date类、System类、StringBuilder类】
day01[Object类.常用API] 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 java.lang.O ...
- Object类、常用API
Object类.常用API Object类.常用API Object类.常用API Object类.常用API Object类.常用API Object类.常用API
- Object类、常用API_2
主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 学习目标 -[ ] 能够说出Object类的特点 -[ ] 能够 ...
- Java面向对象 Object类 内部类
Java面向对象 Object类 内部类 知识概要: 一:Object类 二:内部类 匿名内部类的写法 1.Object O ...
- Java中Object类hashCode的底层实现
Java中Object类hashCode的底层实现 openjdk\jdk\src\share\native\java\lang\Object.c 42 static JNINativeMethod ...
- Java 之 Object 类
一.Object 概述 java.lang.Object 类是 Java 语言中的根类,即所有类的父类. 在对象实例化的时候,最终找的父类就是 Object. 如果一个类没有特别指定父类,那么默认则 ...
- Java之Object类用法总结
Object类概述: 1.Object类是所有Java类的根父类. 2.如果在类的声明中未使用extends关键字指明其父类, 则默认父类为java.lang.Object类. Object类主要结构 ...
随机推荐
- 解析xml报文,xml与map互转
这段时间写了一个关于xml报文的工具类,做一下具体的讲解: xml文本 <NTMMessage version="1.03"> <NTMHeader> &l ...
- openstack系列文章(二)
学习openstack的系列文章-keystone openstack 架构 Keystone 基本概念 Keystone 工作流程 Keystone Troubleshooting 1. open ...
- python—多任务版udp聊天机器人
将多任务(多线程)引入到udp聊天机器人,可以实现同时发送消息和接收消息 import socket import threading def udp_send(udp_socket,ip,port) ...
- uniq命令详解
基础命令学习目录首页 原文链接:http://man.linuxde.net/uniq 删除重复行: uniq file.txt sort file.txt | uniq sort -u file.t ...
- struts2 Action生命周期
Struts2.0中的对象既然都是线程安全的,都不是单例模式,那么它究竟何时创建,何时销毁呢? 这个和struts2.0中的配置有关,我们来看struts.properties ### if spec ...
- 人and绩效and职业道德
人行走在这个世界上 避免不了的是各种悲哀 人就像是一个茶几 上面放满了各种杯具 而要做的是要么把杯具打碎了咽下去,要么被杯具打晕 本布衣 躬耕于南阳 不求闻达于诸侯 每个人都可以选择自己的生活方式 或 ...
- 第一个spring冲刺
第一天商量讨论出我们选择的题目为四则运算,虽然在上一个学期已经做过了,但是还有完善的地方,希望能够做出创新,另外下面的燃尽图是我们预测的3个阶段的进度,按情况不同可能实际的情况也不同,但是我们会尽量跟 ...
- 学习总结:jQuery插件开发模式和结构
学习博客链接: ①https://www.cnblogs.com/cyStyle/ ② https://www.cnblogs.com/chengyunshen/p/7277305.html ③ ht ...
- iOS- 多线程中如何去保证线程安全
一.前言 前段时间看了几个开源项目,发现他们保持线程同步的方式各不相同,有@synchronized.NSLock.dispatch_semaphore.NSCondition.pthread_mut ...
- 由一个滑动条的任务需求产生一个对UISlider控件的探讨
任务需求样式: