06 Java常用类 和 Object的方法简介

java.lang.Object类

所有Java类的最终祖先,编译系统默认继承Object类,Object类包含了所有Java类的公共属性和方法。

  • getClass():Class
  • public boolean equals(Object obj) :该方法本意用于两个对象的“深度”比较,也就是比较两对象封装的数据是否相等;而比较运算符“==”在比较两对象变量时,只有当两个对象引用指向同一对象时才为真值。但在Object类中,equals方法是采用“==”运算进行比较;
  • hashCode()
  • public String toString():该方法返回对象的字符串描述,建议所有子类都重写此方法
  • notify(), notifyAll, wait(), wait(long), wait(long, int),
  • String toString()
    返回该对象的字符串表示。
    为了日志输出等处理方便,所有的对象都可以以文本方式表示,需要在该对象所在类中覆盖toString()方法。如果没有覆盖toString()方法,默认的字符串是“类名@对象的十六进制哈希码”。
    protected Object clone(): 克隆对象
    protected void finalize(): 该方法Java垃圾回收程序在删除对象前自动执行。不建议开发者直接调用.

哈希码(hashCode),每个Java对象都有哈希码(hashCode)属性,哈希码可以用来标识对象,提高对象在集合操作中的执行效率。

equals的实践 (借助guava的Objects类的equal方法)

    // 这是假使TPersonal类的equals方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        TPersonal temp = (TPersonal) o;
        return Objects.equal(ContNo, temp.ContNo) && 
                Objects.equal(CvaliDate, temp.CvaliDate) &&
                Objects.equal(ContState, temp.ContState) &&
                Objects.equal(AppName, temp.AppName);
/*
 * Copyright (C) 2007 The Guava Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package com.google.common.base;

import com.google.common.annotations.GwtCompatible;
import java.util.Arrays;

/**
 * Helper functions that can operate on any {@code Object}.
 *
 * 

See the Guava User Guide on writing {@code Object} * methods with {@code Objects}. * * @author Laurence Gonsalves * @since 2.0 */ @GwtCompatible public final class Objects { private Objects() {} /** * Determines whether two possibly-null objects are equal. Returns: * *

    *
  • {@code true} if {@code a} and {@code b} are both null. *
  • {@code true} if {@code a} and {@code b} are both non-null and they are equal according to * {@link Object#equals(Object)}. *
  • {@code false} in all other situations. *
* *

This assumes that any non-null objects passed to this function conform to the {@code * equals()} contract. * *

Note for Java 7 and later: This method should be treated as deprecated; use {@link * java.util.Objects#equals} instead. */ public static boolean equal(Object a, Object b) { return a == b || (a != null && a.equals(b)); }

java.lang.String类

Java中的字符串是由双引号括起来的多个字符,下面示例都是表示字符串常量

"Hello World"                                                             
"\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064"      
"世界你好"                                                                 
"A"                                                                       
""   

Java中的字符采用Unicode编码,所以Java字符串可以包含中文等亚洲字符
字符串还有一个极端情况,就代码第⑤行的""表示空字符串,双引号中没有任何内容,空字符串不是null,空字符串是分配内存空间,而null是没有分配内存空间。

Java SE提供了三个字符串类:String、StringBuffer和StringBuilder。String是不可变字符串,StringBuffer和StringBuilder是可变字符串。

String常用的构造方法

String():使用空字符串创建并初始化一个新的String对象。

String(String original):使用另外一个字符串创建并初始化一个新的 String 对象。

String(StringBuffer buffer):使用可变字符串对象(StringBuffer)创建并初始化一个新的 String 对象。

String(StringBuilder builder):使用可变字符串对象(StringBuilder)创建并初始化一个新的 String 对象。

String(byte[] bytes):使用平台的默认字符集解码指定的byte数组,通过byte数组创建并初始化一个新的 String 对象。

String(char[] value):通过字符数组创建并初始化一个新的 String 对象。

String(char[] value, int offset, int count):通过字符数组的子数组创建并初始化一个新的 String 对象;offset参数是子数组第一个字符的索引,count参数指定子数组的长度。

String的查找

在给定的字符串中查找字符或字符串是比较常见的操作。在String类中提供了indexOf和lastIndexOf方法用于查找字符或字符串,返回值是查找的字符或字符串所在的位置,-1表示没有找到。这两个方法有多个重载版本:

int indexOf(int ch):从前往后搜索字符ch,返回第一次找到字符ch所在处的索引。

int indexOf(int ch, int fromIndex):从指定的索引开始从前往后搜索字符ch,返回第一次找到字符ch所在处的索引。

int indexOf(String str):从前往后搜索字符串str,返回第一次找到字符串所在处的索引。

int indexOf(String str, int fromIndex):从指定的索引开始从前往后搜索字符串str,返回第一次找到字符串所在处的索引。

int lastIndexOf(int ch):从后往前搜索字符ch,返回第一次找到字符ch所在处的索引。

int lastIndexOf(int ch, int fromIndex):从指定的索引开始从后往前搜索字符ch,返回第一次找到字符ch所在处的索引。

int lastIndexOf(String str):从后往前搜索字符串str,返回第一次找到字符串所在处的索引。

int lastIndexOf(String str, int fromIndex):从指定的索引开始从后往前搜索字符串str,返回第一次找到字符串所在处的索引。

String的比较

  1. 比较相等
    String提供的比较字符串相等的方法:
  • boolean equals(Object anObject):比较两个字符串中内容是否相等。
  • boolean equalsIgnoreCase(String anotherString):类似equals方法,只是忽略大小写。
  1. 比较大小
    有时不仅需要知道是否相等,还要知道大小,String提供的比较大小的方法:
  • int compareTo(String anotherString):按字典顺序比较两个字符串(字典中顺序事实上就它的Unicode编码)。如果参数字符串等于此字符串,则返回值 0;如果此字符串小于字符串参数,则返回一个小于 0 的值;如果此字符串大于字符串参数,则返回一个大于 0 的值。
  • int compareToIgnoreCase(String str):类似compareTo,只是忽略大小写。
  1. 比较前缀和后缀
  • boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。
  • boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始。

String的字符串截取方法

String substring(int beginIndex):从指定索引beginIndex开始截取一直到字符串结束的子字符串。

String substring(int beginIndex, int endIndex):从指定索引beginIndex开始截取直到索引endIndex - 1处的字符,注意包括索引为beginIndex处的字符,但不包括索引为endIndex处的字符。

另外,String还提供了字符串分割方法split(" ")方法,参数是分割字符串,返回值String[]。

可变字符串 StringBuffer和StringBuilder

Java提供了两个可变字符串类StringBuffer和StringBuilder,中文翻译为“字符串缓冲区”。
StringBuffer是线程安全的,它的方法是支持线程同步,线程同步会操作串行顺序执行,在单线程环境下会影响效率。StringBuilder是StringBuffer单线程版本,Java 5之后发布的,它不是线程安全的,但它的执行效率很高。

StringBuffer和StringBuilder具有完全相同的API,即构造方法和方法等内容一样。StringBuilder的中构造方法有4个:

StringBuilder():创建字符串内容是空的StringBuilder对象,初始容量默认为16个字符。

StringBuilder(CharSequence seq):指定CharSequence字符串创建StringBuilder对象。CharSequence接口类型,它的实现类有:String、StringBuffer和StringBuilder等,所以参数seq可以是String、StringBuffer和StringBuilder等类型。

StringBuilder(int capacity):创建字符串内容是空的StringBuilder对象,初始容量由参数capacity指定的。

StringBuilder(String str):指定String字符串创建StringBuilder对象。

StringBuffer的追加、插入、删除和替换

  • 字符串追加方法是append,append有很多重载方法,可以追加任何类型数据。
  • StringBuilder insert(int offset, String str):在字符串缓冲区中索引为offset的字符位置之前插入str,insert有很多重载方法,可以插入任何类型数据。
  • StringBuffer delete(int start, int end):在字符串缓冲区中删除子字符串,要删除的子字符串从指定索引start开始直到索引end - 1处的字符。start和end两个参数与substring(int beginIndex, int endIndex)方法中的两个参数含义一样。
  • StringBuffer replace(int start, int end, String str)字符串缓冲区中用str替换子字符串,子字符串从指定索引start开始直到索引end - 1处的字符。start和end同delete(int start, int end)方法。

包装类

在Java中8种基本数据类型不属于类,不具备“对象”的特征,没有成员变量和方法,不方便进行面向对象的操作。为此,Java提供包装类(Wrapper Class)来将基本数据类型包装成类。


06 Java常用类 和 Object的方法简介_第1张图片

数值包装类

这些数值包装类(Byte、Short、Integer、Long、Float和Double)都有一些相同特点。

  1. 构造方法类似
    每一个数值包装类都有两个构造方法,以Integer为例,Integer构造方法如下:
    Integer(int value):通过指定一个数值构造Integer对象。
    Integer(String s):通过指定一个字符串s构造对象,s是十进制字符串表示的数值。

  2. 共同的父类
    这6个数值包装类有一个共同的父类——Number,Number是一个抽象类,除了这6个子类还有:AtomicInteger、AtomicLong、BigDecimal和BigInteger,其中BigDecimal和BigInteger后面还会详细介绍。Number是抽象类,要求它的子类必须实现如下6个方法:

  3. compareTo()方法
    每一个数值包装类都有int compareTo(数值包装类对象)方法,可以进行包装对象的比较。方法返回值是int,如果返回值是0,则相等;如果返回值小于0,则此对象小于参数对象;如果返回值大于0,则此对象大于参数对象。

  4. 字符串转换为基本数据类型
    每一个数值包装类都提供一些静态parseXXX()方法将字符串转换为对应的基本数据类型。

  5. 基本数据类型转换为字符串
    每一个数值包装类都提供一些静态toString()方法实现将基本数据类型数值转换为字符串

Character类

Character类是char类型的包装类。Character类常用方法如下:

  • Character(char value):构造方法,通过char值创建一个新的Character对象。
  • char charValue():返回此Character对象的值。
  • int compareTo(Character anotherCharacter):方法返回值是int,如果返回值是0,则相等;如果返回值小于0,则此对象小于参数对象;如果返回值大于0,则此对象大于参数对象。

Boolean类

Boolean类是boolean类型的包装类。

  1. 构造方法
    Boolean类有两个构造方法,构造方法定义如下:
    Boolean(boolean value):通过一个boolean值创建Boolean对象。
    Boolean(String s):通过字符串创建Boolean对象。s不能为null,s如果是忽略大小写"true"则转换为true对象,其他字符串都转换为false对象。

  2. compareTo()方法
    Boolean类有int compareTo(Boolean包装类对象)方法,可以进行包装对象的比较。方法返回值是int,如果返回值是0,则相等;如果返回值小于0,则此对象小于参数对象;如果返回值大于0,则此对象大于参数对象。

  3. 字符串转换为boolean类型

  • Boolean包装类都提供静态parseBoolean()方法实现将字符串转换为对应的boolean类型,方法定义如下:
  • static boolean parseBoolean(String s):将字符串转换为对应的boolean类。s不能为null,s如果是忽略大小写"true"则转换为true,其他字符串都转换为false。

自动装箱/拆箱

Java 5之后提供了拆箱(unboxing )功能,拆箱能够将包装类对象自动转换为基本数据类型的数值,而不需要使用intValue()或doubleValue()等方法。类似Java 5还提供了相反功能,自动装箱( autoboxing ),装箱能够自动地将基本数据类型的数值自动转换为包装类对象,而不需要使用构造方法。

注意: 这个会NPE

    Integer obj = null;
    int intVar = obj; // 运行期异常NullPointerException

java.lang.Math(final类)

Java语言是彻底地面向对象语言,哪怕是进行数学运算也封装到一个类中的,这个类是java.lang.Math,Math类是final的不能被继承。Math类中包含用于进行基本数学运算的方法,如指数、对数、平方根和三角函数等。这些方法分类如下:

  1. 舍入方法
  • static double ceil(double a):返回大于或等于a最小整数。
  • static double floor(double a):返回小于或等于a最大整数。
  • static int round(float a):四舍五入方法。
  1. 最大值和最小值
  • static int min(int a, int b):取两个int整数中较小的一个整数。
  • static int min(long a, long b):取两个long整数中较小的一个整数。
  • static int min(float a, float b):取两个float浮点数中较小的一个浮点数。
  • static int min(double a, double b):取两个double浮点数中较小的一个浮点数。
    max方法取两个数中较大的一个数,max方法与min方法参数类似也有4个版本,这里不再赘述。
  1. 绝对值
  • static int abs(int a):取int整数a的绝对值。
  • static long abs(long a):取long整数a的绝对值。
  • static float abs(float a):取float浮点数a的绝对值。
  • static double abs(double a):取double浮点数a的绝对值。
  1. 三角函数:
  • static double sin(double a):返回角的三角正弦。
  • static double cos(double a):返回角的三角余弦。
  • static double tan(double a):返回角的三角正切。
  • static double asin(double a):返回一个值的反正弦。
  • static double acos(double a):返回一个值的反余弦。
  • static double atan(double a):返回一个值的反正切。
  • static double toDegrees(double angrad):将弧度转换为角度。
  • static double toRadians(double angdeg):将角度转换为弧度。
  1. 对数运算:static double log(double a)`,返回a的自然对数。
  2. 平方根:static double sqrt(double a)`,返回a的正平方根。
  3. 幂运算:static double pow(double a, double b)`,返回第一个参数的第二个参数次幂的值。
  4. 计算随机值:static double random(),返回大于等于 0.0 且小于 1.0随机数。
  5. 常量
    圆周率PI, 自然对数的底数E。

大数值

对货币等大值数据进行计算时,int、long、float和double等基本数据类型已经在精度方面不能满足需求了。为此Java提高了两个大数值类:BigInteger和BigDecimal,这里两个类都继承自Number抽象类。

BigInteger

java.math.BigInteger是不可变的任意精度的大整数。BigInteger构造方法有很多,其中字符串参数的构造方法有两个:

  • BigInteger(String val):将十进制字符串val转换为BigInteger对象。
  • BigInteger(String val, int radix):按照指定基数radix将字符串val转换为BigInteger对象。

BigInteger提供多种方法,下面列举几个常用的方法:
int compareTo(BigInteger val):将当前对象与参数val进行比较,方法返回值是int,如果返回值是0,则相等;如果返回值小于0,则此对象小于参数对象;如果返回值大于0,则此对象大于参数对象。

  • BigInteger add(BigInteger val):加运算,当前对象数值加参数val。
  • BigInteger subtract(BigInteger val):减运算,当前对象数值减参数val。
  • BigInteger multiply(BigInteger val):乘运算,当前对象数值乘参数val。
  • BigInteger divide(BigInteger val):除运算,当前对象数值除以参数val。

BigDecimal

java.math.BigDecimal是不可变的任意精度的有符号十进制数。BigDecimal构造方法有很多:

  • BigDecimal(BigInteger val):将BigInteger对象val转换为BigDecimal对象。
  • BigDecimal(double val):将double转换为BigDecimal对象,参数val是double类型的二进制浮点值准确的十进制表示形式。
  • BigDecimal(int val):将int转换为BigDecimal对象。
  • BigDecimal(long val):将long转换为BigDecimal对象。
  • BigDecimal(String val):将字符串表示数值形式转换为BigDecimal对象。

BigDecimal提供多种方法,下面列举几个常用的方法:

  • int compareTo(BigDecimal val):将当前对象与参数val进行比较,方法返回值是int,如果返回值是0,则相等;如果返回值小于0,则此对象小于参数对象;如果返回值大于0,则此对象大于参数对象。
  • BigDecimal add(BigDecimal val):加运算,当前对象数值加参数val。
  • BigDecimal subtract(BigDecimal val):减运算,当前对象数值减参数val。
  • BigDecimal multiply(BigDecimal val):乘运算,当前对象数值乘参数val。
  • BigDecimal divide(BigDecimal val):除运算,当前对象数值除以参数val。
  • BigDecimal divide(BigDecimal val, int roundingMode):除运算,当前对象数值除以参数val。roundingMode要应用的舍入模式。

Random

让系统产生随机数使用

0~9的随机数 (int)(Math.random()*10);
0~999的随机数 (int)(Math.random()*1000);
a~b的随机数 (int)(Math.random()*(b-a));

其实Math的random方法用的就是util包中的Random类
因此可以Random.nextDouble()替换Math.random(), 但是这样说不太准确

日期时间相关类

Java 8之前日期类是java.util.Date,Date类比较古老,其中的很多方法现在已经废弃了,但是目前仍然有很多程序还在使用Date类。

此外,Java 8之前与日期时间相关类还有DateFormat、Calendar和TimeZone,DateFormat用于日期格式化,Calendar日历类,TimeZone是时区类。

日期格式化和解析

日期格式化类是java.text.DateFormat,DateFormat是抽象类,它的常用具体类是java.text.SimpleDateFormat。

DateFormat中提供日期格式化和日期解析方法,具体方法说明如下:

  • String format(Date date):将一个Date格式化为日期/时间字符串。
  • Date parse(String source):从给定字符串的开始解析文本,以生成一个日期对象。如果解析失败则抛出ParseException。

另外,具体类是SimpleDateFormat构造方法如下:

  • SimpleDateFormat():用默认的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
  • SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。pattern参数是日期和时间格式模式,下表所示是常用的日期和时间格式模式。


    06 Java常用类 和 Object的方法简介_第2张图片

Calendar类

有时为了取得更多的日期时间信息,或对日期时间进行操作,可以使用java.util.Calendar类,Calendar是一个抽象类,不能实例化,但是通过静态工厂方法getInstance()获得Calendar实例。
Calendar类的主要方法:

  • static Calendar getInstance():使用默认时区和语言环境获得一个日历。
  • void set(int field, int value):将给定的日历字段设置为给定值。
  • void set(int year,int month,int date):设置日历字段YEAR、MONTH和DAY_OF_MONTH的值。
  • Date getTime():返回一个表示此Calendar时间值(从1970年1月1日00:00:00至现在的毫秒数)的Date对象。
  • boolean after(Object when):判断此Calendar表示的时间是否在指定时间之后,返回判断结果。
  • boolean before(Object when):判断此Calendar表示的时间是否在指定时间之前,返回判断结果。
  • int compareTo(Calendar anotherCalendar):比较两个Calendar对象表示的时间值。

Java 8新日期时间相关类

Java 8之后提供了新的日期时间相关类、接口和枚举,这些类型内容非常多,令人生畏。但是使用起来非常方便。
ava 8之后提供了新的日期时间类有三个:LocalDate、LocalTime和LocalDateTime,它们都位于java.time包中,LocalDate表示一个不可变的日期对象;LocalTime表示一个不可变的时间对象;LocalDateTime表示一个不可变的日期和时间。

这三个类有类似的方法,首先先看看创建日期时间对象相关方法,这三个类并没有提供公有的构造方法,创建它们对象可以使用静态工厂方法,主要有now()和of()方法。

now()方法说明如下:

  • static LocalDate now():LocalDate静态工厂方法,该方法使用默认时区获得当前日期,返回LocalDate对象。
  • static LocalTime now():LocalTime静态工厂方法,该方法使用默认时区获得当前时间,返回LocalTime对象。
  • static LocalDateTime now():LocalDateTime静态工厂方法,该方法使用默认时区获得当前日期时间,返回LocalDateTime对象。

of()方法有很多重载方法,说明如下:

  • static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second):按照指定的年、月、日、小时、分钟和秒获得LocalDateTime实例,将纳秒设置为零。
  • static LocalTime of(int hour, int minute, int second):按照指定的小时、分钟和秒获取一个LocalTime实例。
  • static LocalDate of(int year, int month, int dayOfMonth):按照指定的年、月和日获得一个LocalDate实例,日期中年、月和日必须有效,否则将抛出异常。
06 Java常用类 和 Object的方法简介_第3张图片
参数取值范围

日期格式化和解析

Java 8提供的日期格式化类是java.time.format.DateTimeFormatter,DateTimeFormatter中本身没有提供日期格式化和日期解析方法,这些方法还是由LocalDate、LocalTime和LocalDateTime提供的。

  1. 日期格式化
    日期格式化方法是format,这三个类每一个都有String format(DateTimeFormatter formatter),参数formatter是DateTimeFormatter类型。

  2. 日期解析
    日期解析方法是parse,这三个类每一个都有两个版本的parse方法,具体说明如下:

  • static LocalDateTime parse(CharSequence text):使用默认格式,从一个文本字符串获取一个LocalDateTime实例,如2007-12-03T10:15:30。
  • static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter):使用指定格式化,从文本字符串获取LocalDateTime实例。
  • static LocalDate parse(CharSequence text):使用默认格式,从一个文本字符串获取一个LocalDate实例,如2007-12-03。
  • static LocalDate parse(CharSequence text, DateTimeFormatter formatter):使用指定格式化,从文本字符串获取LocalDate实例。
  • static LocalTime parse(CharSequence text):使用默认格式,从一个文本字符串获取一个LocalTime实例。
  • static LocalTime parse(CharSequence text, DateTimeFormatter formatter):使用指定的格式化,从文本字符串获取LocalTime实例。

格式化类DateTimeFormatter对象是通过ofPattern(String pattern)获得,其中pattern是日期和时间格式模式,具体说明参考上上表。

参考

第 16 章 Java常用类-图灵社区
http://www.ituring.com.cn/book/tupubarticle/17712

你可能感兴趣的:(06 Java常用类 和 Object的方法简介)