回归java4-有关面向对象-java常用类

java常用类

根类-Object

java.lang.Object,由解释器自动引入。

String toString() 返回该对象的字符串表示。
boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。
都是需要在子类中覆盖的。

toString()

为了日志输出等处理方便,所有的对象都可以以文本方式表示。若不覆盖,默认的字符串是“类名@对象的十六进制哈希码”。

public class Person {
    
    String name;
    int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        // 能够表示当前类和当前对象
        return "Person [name=" + name + ", age=" + age + "]";
    }
}


public class HelloWorld {
    
    public static void main(String[] args) {
        
        Person person = new Person("Tony", 18);
        // 打印过程中自动调用person的toString()方法
        System.out.println(person);
    }
}

// 输出结果 Person [name=Tony, age=18]

对象比较方法

== 比较两个引用变量是否指向同一实例。

equals() 比较两个对象的内容是否相等,字符串比较一般只关心内容相等。
指定比较属性,需要覆盖equals()方法。

public boolean equals(Object otherObject) {
    
    if (otherObject instanceof Person) {
        Person otherPerson = (Person) otherObject;
        // 年龄作为比较规则
        if (this.age == otherPerson.age) {
            return ture;
        }
    }
    return false;
}

包装类

将基本数据类型包装成类

基本数据类型包装类基本数据类型包装类
booleanBooleanintInteger
byteBytelongLong
charCharacterfloatFloat
shortShortdoubleDouble

包装类都是final的,不能被继承。
都是不可变类(类似于String类),一旦创建了对象,其内容就不可以修改。

数值包装类

Byte、Short、Integer、Long、Float、Double

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

Integer objInt1 = new Integer(80);
Integer objInt2 = new Integer("90");

共同的父类 - Number(抽象类),Number的子类必须实现6个方法:
byte byteValue() 将当前包装的对象转换为byte类型的数值。
double doubleValue()
float floatValue()
int intValue()
long longValue()
short shortValue()

long longVar = objInt1.longValue();

共同的方法 - int compareTo() - 包装对象的比较
返回值为0 - 相等;返回值小于0 - 此对象小于参数对象;返回值大于0 - 此对象大于参数对象。

int result = objInt1.compareTo(objInt2);

共同的静态方法 - parseXXX() - 将字符串转换为对应的基本数据类型,例:
static int parseInt(String s) 将字符串转换为有符号的十进制整数。
static int parseInt(String s, int radix) 将字符串转换为有符号的整数。radix是指定基数(进制)(在Double和Float中没有)

int intVar1 = Integer.parseInt("ABC", 16);

共同的静态方法 - toString() - 将基本数据类型数值转换为字符串,例:
static String toString(int i) 将整数i转换为有符号的十进制表示的字符串。
static String toString(int i, int radix) 将整数i转换为有符号的特定进制表示的字符串。radix是指定基数(进制)(在Double和Float中没有)

String str1 = Integer.toString(100);

Character类

Character(char value) 构造方法
char charValue() 返回此Character对象的值
int compareTo(Character anotherCharacter)

Character objChar = new Character('A');
char ch = objChar.charValue();

Boolean类

Boolean(boolean value) 构造方法
Boolean(String s) 构造方法。s不能为null,s为true(忽略大小写True、TRUE)则转换为true对象,其他转换为false。
int compareTo(Boolean objBool)
static boolean parseBoolean(String s) 将字符串转换为对应的boolean类型。s不能为null,s为true(忽略大小写)则转换为true对象,其他转换为false。

Boolean obj = new Boolean(true);
Boolean obj = new Boolean("yes"); // false

自动装箱/拆箱

java5之后提供了拆箱(unboxing)功能:
将包装类对象自动转换为基本数据类型的数值,不需要使用intValue()(本质上是调用了的)
java5还提供了相反功能:自动装箱(autoboxing):
自动将基本数据类型的数值自动转换为包装类对象,不需要使用构造方法

Integer objInt = new Integer(80);
Double objDouble = new Double(80.0);
// 自动拆箱
double sum = objInt + objDouble;
// 自动装箱
Character objChar = 'C';

注意:避免空对象,运行期异常NullPointerException

Math类

java.lang.Math,是final的(不能被继承)

舍入方法
static double ceil(double a) 返回大于或等于a最小整数
static double floor(double a) 返回小于或等于a最大整数
static int round(float) 四舍五入 Math.round(1.6)

最大值和最小值
static int min(int a, int b) 最小,max最大 Math.max(1.4, 1.5)
int可换long、float、double

绝对值
static int abs(int a)
int可换long、float、double

三角函数
static double sin(double a) 三角正弦
sin可换:cos三角余弦,tan三角正切,asin反正弦,acos反余弦,atan反正切,toDegrees将弧度转换为角度,toRadians将角度转换为弧度

对数运算
static double log(double a) 返回a的自然对数

平方根
static double sqrt(double a)

幂运算
static double pow(double a, double b) 返回a的b次幂

计算随机值
static double random() 返回大于等于0.0且小于1.0的随机数 Math.random()

常量
PI 圆周率 Math.PI
E 自然对数的底数 Math.E

大数值

BigInteger类和BigDecimal类继承自Number抽象类

BigInteger

java.math.BigInteger 不可变任意精度的大整数。

字符串参数的构造方法:(其他构造方法有很多)
BigInteger(String val) 将十进制字符串转换为BigInteger对象
BigInteger(String val, int radix) 按照指定进制将字符串转换为BigInteger对象

常用方法:
int compareTo(BigInteger val)
BigInteger add(BigInteger val) 加运算 number1.add(number2)
BigInteger substract(BigInteger val) 减运算 当前对象数值减参数val
BigInteger multiply(BigInteger val) 乘运算
BigInteger divide(BigInteger val) 除运算
因着继承了抽象类Number,它还实现了Number的6个方法(byte byteValue()、double doubleValue()、float floatValue()、int intValue()、long longValue()、short shortValue() 前面有写)

BigDecimal

java.math.BigDecimal 不可变任意精度有符号十进制数

构造方法:
BigDecimal(BigDecimal val)
BigDecimal(double val)
BigDecimal(long val)
BigDecimal(String val)

常用方法:
与上述BigInteger类似…
另加 BigDecimal divide(BigDecimal val, int roundingMode),roundingMode为要应用的舍入模式

BigDecimal number1 = new BigDecimal("99999999.99999999");
BigDecimal number2 = new BigDecimal("77799999.66669999");
number1.divide(number2, BigDecimal.ROUND_HALF_UP); // 需指定舍入模式,当前为四舍五入

日期时间相关类

Data

java8之前日期类是java.util.Date。比较古老
(Java SE中核心类有两个Date,分别是java.util.Date和java.sql.Date。后者是JDBC中日期字段类型)

构造方法:
Date() 用当前时间创建Date对象,精确到毫秒。
Date(long date) 指定标准基准时间以来的毫秒数创建Date对象。标准基准时间是格林尼治时间1970年1月1日00:00:00.

普通方法:
boolean after(Date when) 测试此日期是否在when日期之后。
boolean before(Date when) 测试此日期是否在when日期之前。
int compareTo(Date anotherDate) 比较两个日期的顺序。如果参数日期等于此日期,返回值0;此日期在参数日期之前,返回小于0的值;此日期在参数日期后,返回大于0的值。
long getTime() 返回自1970年1月1日00:00:00以来此Date对象表示的毫秒数。
void setTime(long time) 用毫秒数time设置日期对象,time是自1970年1月1日00:00:00以来此Date对象表示的毫秒数。

Date now = new Date();
System.out.println(now);
// Sun Jun 04 10:03:09 CST 2017
Date date = new Date(1234567890123L);

CST是美国中部标准时间。

日期格式化和解析

上述日期输出结果,不符合中国人的习惯,需要对日期进行格式化输出。
java.text.DateFormat,抽象类。它的常用具体类是java.text.SimpleDateFormat。

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

具体类SimpleDateFormat构造方法:
SimpleDateFormat() 用默认的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。pattern参数是日期和时间格式模式。下表是常用的日期和时间格式:

字母日期或时间元素字母日期或时间元素
yaAM/PM标记
M年中的月份m小时中的分钟数
D年中的天数s分钟中的秒数
d月份中的天数S毫秒数
H一天中的小时数(0~23)Z时区
hAM/PM中的小时数(1~12)
Date date = new Date(1234567890123L);
System.out.println(date); // Sat Feb 14 07:31:30 CST 2009

DateFormat df = new SimpleDateFormat();
System.out.println(df.format(date)); // 09-2-14 上午1:31
df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(df.format(date)); // 2009-02-14 07:31:30

String dateString = "2018-08-18 08:18:58";
Date date1 = df.parse(dateString); // 从字符串获得日期对象
System.out.println(date1); // Sat Aug 18 08:18:58 CST 2018

Calendar

java.util.Calendar抽象类,不能实例化,但是通过静态工厂方法getInstance()获得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对象表示的时间值。

Calendar calendar = Calendar.getInstance(); // 获得默认的日历对象
calendar.set(2018, 7, 18); // 设置日期

Date date = calendar.getTime(); // 通过日历获得Date对象

calendar.clear(); // 重新初始化日历对象
calendar.set(calendar.YEAR, 2018);
calendar.set(calendar.MONTH, 7);
calendar.set(calendar.DATE, 28);

java8新日期时间相关类

java8之后提供了新的日期时间相关类、接口和枚举类。

时间和日期

java8之后提供了新的日期时间类:
LocalDate 表示一个不可变的日期对象;
LocalTime 表示一个不可变的时间对象;
LocalDateTime 表示一个不可变的日期和时间。
都位于java.time中,有类似的方法。
没有提供公有的构造方法,创建它们的对象可以使用静态工厂方法,主要有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实例。日期中年、月、日必须有效,否则抛出异常。

参数说明参数说明
year-999999999~999999999hour0~23
month1~12minute0~59
dayOfMonth1~31second0~59

日期时间输出都是本地格式。

日期格式化和解析

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

日期格式化

String format(DateTimeFormatter formatter),这三个类都有

日期解析

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实例。

LocalDate date = LocalDate.now();
// ofPattern(String pattern),pattern是日期和时间格式模式
formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

注意:
要解析的字符串格式一定要与格式模式匹配,否则抛出异常DataTimeParseException。“08:58:18”改为“08 58 18”不行
rse(CharSequence text) 使用默认格式,从一个文本字符串获取一个LocalTime实例。
static LocalTime parse(CharSequence text, DateTimeFormatter formatter) 使用指定格式化,从文本字符串获取LocalTime实例。

LocalDate date = LocalDate.now();
// ofPattern(String pattern),pattern是日期和时间格式模式
formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

注意:
要解析的字符串格式一定要与格式模式匹配,否则抛出异常DataTimeParseException。“08:58:18”改为“08 58 18”不行
要解析的字符串格式一定是有效的时间或日期,否则抛出异常DataTimeParseException。“08:58:18”改为“08:58:68”不行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值