文章目录
一、Object类
1、简介:java.lang.Object类是Java语言中所有类的根类,定义类时如果没有指明 extends 哪个类,默认extends Object
2、Object类的常用方法,主要学习他们的作用和使用,以及如何对他们进行方法覆盖
(1)toString()
对象.toString():返回对象的字符串表示。Object类中toString()返回的字符串没有太大用途,所以需要在类中覆盖toString()方法,使他返回一个有意义的字符串
//eg:
@Override
public String toString(){ //覆盖Object类中的toString方法
return "姓名:"+ name;
}
...
Employee emp = new Employee("aa");
System.out.println(emp); //使用对象名emp即可,编译器自动调用toString()方法
//输出结果: 姓名:aa
(2)equals()
equals() : 比较两个对象是否相等。用法:对象1.equals(对象2)
默认情况下,从Object类中继承的equals()方法比较的是两个对象的引用
(对象通过new开辟不同空间,不同对象的引用指向不同的空间,是不相等的)。
对equals()进行方法覆盖,来比较两个对象的内容是否相等
//eg:
//假设Employee类有id这个成员变量,相当于唯一主键
@override
public boolean equals(Object obj){ //★参数类型必须是Object
if(obj instanceof Employee) //判断对象是否是Employee类对象
return this.id == ((Employee)obj).id;
//强制转换,Object类对象转换成Employee对象
// 这里 "==" 比较的是具体的值
else
return false;
}
(3)hashCode()
对象.hashCode():返回一个对象的哈希码值。用来比较对象的大小。
注意:hashcode() 和 equals()必须兼容,即覆盖了equals()也要覆盖hashcode()。
//eg:
@Pverride
public int hashCode(){
return Objects.hash(name,id); //使用Objects类的hash()来计算每个实例变量的哈希码
}
(4)clone()
对象.clone():创建一个对象的副本。要使类的对象能够克隆,类必须实现Cloneable接口。
public class Car implements Cloneable{
...
public ststic void main(String[] args)
throws CloneNotSupportedException{ //调用clone方法,需声明抛出异常
Car c1 = new Car(101,"宝马","蓝色");
Car c2 = (Car)c1.clone(); //对象的clone方法返回的是Object对象,需要进行强制转换
}
二、Math类
1、简介:java.lang.Math类中定义了一些方法实现数学上的基本函数功能。Math类中定义的所有的方法都static的,因此仅能通过类名访问。
2、基本操作
Math.sqrt(n):n的平方根
Math.cbrt(n):n的立方根
Math.pow(n,m):n的m次方
Math.exp(n):e的n次方
Math.max(n,m):求两个数的最大值
//三角函数
Math.sin(Math.toRadians(n):角度n转成弧度,再计算sin值
//取整
Math.ceil(n):整数,取顶
Math.floor(n):整数,取底
//四舍五入
Math.round(n):n四舍五入到整数
Math.round(n*100)/100.0:四舍五入到小数点后两位;其他的以此类推
//产生随机数
Math.random():生成 [0.0,1.0] 的随机数
a + (int)(Math.random()*(b+1)) : 生成[a,a+b]的随机数
//产生随机小写字母
小写字母的ASCII码值域为[97,122]
(char)(97 + Math.random()*26)
三、基本类型包装类
1、8个基本数据类型包装类
(1)Character 类封装了单个字符值
Character a = new Character('A') //创建Character对象
Character b = new Character('d')
//一些方法示例
char c = a.charValue(); //返回Character对象所包含的char值
a.compareTo(b); //比较字符的Unicode码值,返回值是(a-b)的Unicode码值
//还有一些静态方法,判断字符是否是数字、(大小写)字母以及转成(大小写)字母等等
Character.isDigit(a); //是否是数字
(2)Boolean类封装一个布尔值
//创建Boolean对象,两种方式,参数为该类型的基本数据类型 或 字符串
Boolean b=new Boolean(true); 或者 Boolean b1=new Boolean("true");
//将字符串 "true" 或 "false" 转换成boolean类型值
String s = "ture";
boolean c = Boolean.parseBoolean(s);
(3)6个数值类:Byte、Short、Integer、Long、Float、Double
以 Integer 类为例:
Integer intObj = new Integer(314) //创建Integer对象,也是两种方式,参数可为该类型的基本数据类型 或 字符串
Integer.toBinaryString(42); //将42转成二进制形式
Integer.toHexString(42); //将42转成十六进制形式
数值类的常量:
Short.SIZE:short类型所占的位数
Short.BYTES:short类型所占的字节数
Short.MAX_VALUE:short类型表示的最大值
Short.MIN_VALUE:short类型表示的最小值
输出Infinity:表示正无穷大 -Infinity:负无穷
输出NaN:表示非数值
(4)自动装箱和自动拆箱
作用:避免了基本数据类型和包装数据类型的来回转换
自动装箱:指基本类型的数据 可以自动转换为 包装类的实例。
eg: Integer value = 200;
自动拆箱:指包装类的实例 自动转换为 基本类型的数据。
eg:int x = value
2、BigInteger 和 BigDecimal 类
简介:BigInteger类可表示非常大的整数,BigDecimal 类可表示非常高精度的浮点数
//创建实例
BigInteger a = new BigInteger("100000000000000"); //★注意参数是字符串类型
BigInteger b = new BigInteger("200000000000000");
BigDecimal c = new BigDecimal("10.0") ;
BigDecimal d = new BigDecimal("3.0") ;
//算数运算
//add()、subtract()、multiply()、divide()、remainder():加、减、乘、除(重载实现四舍五入)、求余
BigInteger e = a.multiply(b); //a*b
BigDecimal f = c.divide(d,6,BigDecimal.ROUND_HALF_UP); // c除以d,保留6位小数,四舍五入
/*此外强调一下BigDecimal的一个显著优势就是可以用来做精确运算
众所周知一个事实:Java中直接打印2.0-1.1=0.8999999999999999,
用BigDecimal做减法计算就可以得到精确的0.9*/
//eg:计算任何整数的阶乘
import java.math.*;
...
public static BigInteger factor(long n){
BigInteger result = BigInteger.ONE; //BigInteger.ONE常量,表示1
for(long i=1;i<=n;i++){
result = result.multiply(new BigInteger(i+"")); //i+"" 表示字符串
}
return result;
}
四、时间-日期API
1、本地日期类LocalDate
简介:LocalDate对象用来表示带年月日的日期
创建时间-日期类对象两种方法:
now():当前日期/时间
of(参数,…):指定日期/时间
主要学习 对象的创建 和 类的方法的使用,几种类基本上类似
//导入LocalDate类
import java.time.LocalDate;
//创建LocalDate对象:
LocalDate today = LocalDate.now(); //now():获得当前日期 eg:2022-11-20
LocalDate nationalDay = LocalDate.of(2022,10,1); //of(年,月,日):指定年月日
//LocalDate类的方法
对象.plusDays(n):给当前对象增加n天 //plusWeeks()、plusMonths()、plusYears()同理
对象.minusDays(n):给当前对象减少n天 //minusWeeks()、minusMonths()、minusYears()同理
对象.getDayOfWeek():返回星期几 //eg:SUNDAY
对象.getDayOfMonth():返回月份中的第几天 //getDayOfYear()同理
对象.isLeapYear():判断是否是闰年
对象.lengthOfMonth():返回对象月的天数 // lengthOfYear()同理
2、本地时间类LocalTime
简介:LocalTime对象包含时、分、秒和纳秒
//创建LocalTime对象:
LocalTime rightnow = LocalTime.now(); //now():获得当前时间,包含纳秒 eg:11:00:00.000
LocalTime truncatedTime = rightnow.truncatedTo(ChronoUnit.SECONDS);
//将上面获得的当前时间rightnow截短,不带纳秒 eg:11:00:00
LocalTime bedtime = LocalTime.of(23,30); //of(时,分) 或 of(时,分,秒)
3、本地日期时间类LocalDateTime
简介:前面两个类的组合,日期+时间
//创建LocalDateTime对象:
LocalDateTime rightnow = LocalDateTime.now(); //now():获得当前所有时间 eg:2022-11-20T11:20:20:200
LocalDateTime settime = LocalDateTime.of(2022,12,25, 8,30,0);
4、Duration类:机器时间
简介:Duration类表示机器时间,测度基于秒、纳秒
//计算算法执行的毫秒数
Instant start = Instant.now(); //算法开始执行
... //某个算法
Instant start = Instant.now(); //算法结束执行
Duration timeElapsed = Duration.between(start,end); //计算两个瞬时点的时间差
long millis = timeElapsed.toMillis(); //转成毫秒
5、Period类
简介:Period类简单来说是计算 年月日 的差
LocalDate startDate = LocalDate.of(1900,1,1);
LocalDate endDate = LocalDate.now();
Period p = Period.between(startDate, endDate); //得出年差、月差、日差
p.getYears(); //对应的年差, getMonths()、getDays() 同理
long p2 = ChronoUnit.DAYS.between(startDate,endDate); //只用天来表示日期差
6、日期/时间解析和格式化
LocalDate.parse(“str”,DateTimeFormatter.格式化器类型常量):时态数据解析,使用指定的格式化器将字符串解析成日期数据。
时态对象.format(格式化器):时态数据格式化,使用指定的格式器将时态对象表示成字符串。需先定义格式化器的格式
//字符串→日期
String in = "20221120"
LocalDate data = LocalDate.parse(in,DateTimeFormatter.BASIC_ISO_DATE); //转成基本的ISO日期形式,结果:2022-11-20
//日期→字符串
LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); //指定格式化日期的格式
String text = date.format(formatter);