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的更多相关文章

  1. Java(215-231)【Object类、常用API】

    1.Object类的toString方法 java.lang.Object 类 Object 是类层次结构的根(父)类. 每个类(Person,Student...)都使用 Object 作为超(父) ...

  2. 【Object类、常用API】

    Object类 1.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类就是Object. 如果一个类 ...

  3. 01 语言基础+高级:1-5 常用API第二部分_day01.【Object类、常用API: Date类、System类、StringBuilder类】

    day01[Object类.常用API] 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 java.lang.O ...

  4. Object类、常用API

    Object类.常用API Object类.常用API Object类.常用API Object类.常用API Object类.常用API Object类.常用API

  5. Object类、常用API_2

    主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 学习目标 -[ ] 能够说出Object类的特点 -[ ] 能够 ...

  6. Java面向对象 Object类 内部类

     Java面向对象 Object类    内部类 知识概要:                 一:Object类                 二:内部类 匿名内部类的写法 1.Object O ...

  7. Java中Object类hashCode的底层实现

    Java中Object类hashCode的底层实现 openjdk\jdk\src\share\native\java\lang\Object.c 42 static JNINativeMethod ...

  8. Java 之 Object 类

    一.Object 概述  java.lang.Object 类是 Java 语言中的根类,即所有类的父类. 在对象实例化的时候,最终找的父类就是 Object. 如果一个类没有特别指定父类,那么默认则 ...

  9. Java之Object类用法总结

    Object类概述: 1.Object类是所有Java类的根父类. 2.如果在类的声明中未使用extends关键字指明其父类, 则默认父类为java.lang.Object类. Object类主要结构 ...

随机推荐

  1. 百道Python入门级练习题(新手友好)第一回合——矩阵乘法

    题目描述 [问题描述] 编写程序,完成3*4矩阵和4*3整数矩阵的乘法,输出结果矩阵. [输入形式] 一行,供24个整数.以先行后列顺序输入第一个矩阵,而后输入第二个矩阵. [输出形式] 先行后列顺序 ...

  2. ofo容器pass架构分享

    一.我们先要了解一下,为什么企业需要一个paas平台?或者可以说paas到底能做什么? 1.1 我们先来了解一下paas到底是什么? PaaS是Platform-as-a-Service的缩写,意思是 ...

  3. hadoop之定制自己的Partitioner

    partitioner负责shuffle过程的分组部分,目的是让map出来的数据均匀分布在reducer上,当然,如果我们不需要数据均匀,那么这个时候可以自己定制符合要求的partitioner. 下 ...

  4. Python中fnmatch模块的使用

    fnmatch()函数匹配能力介于简单的字符串方法和强大的正则表达式之间,如果在数据处理操作中只需要简单的通配符就能完成的时候,这通常是一个比较合理的方案.此模块的主要作用是文件名称的匹配,并且匹配的 ...

  5. [linux] 查看网卡UUID

    virtualbox复制了虚拟机,重新初始化网卡后,需要对/etc/sysconfig/network-scripts/ifcfg-eth0更新UUID值,虽然不改暂时也没发现有问题. 网上查找需要n ...

  6. CF 1095C Powers Of Two(二进制拆分)

    A positive integer xx is called a power of two if it can be represented as x=2y, where y is a non-ne ...

  7. angualrJs指令起名的bug

    我在写一个demo时: <div ng-repeat="user in users" my-template2 my-template> //my-template2 ...

  8. Javascript实现大整数加法

    记得之前面试还被问到过用两个字符串实现两个大整数相加,当时还特别好奇好好的整数相加,为什么要用字符串去执行.哈哈,感觉当时自己还是很无知的,面试官肯定特别的无奈.今天在刷算法的时候,无意中看到了为什么 ...

  9. 软工实践-Beta 冲刺 (3/7)

    队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...

  10. Codeforces Round #299 (Div. 2) D. Tavas and Malekas kmp

    题目链接: http://codeforces.com/problemset/problem/535/D D. Tavas and Malekas time limit per test2 secon ...