文章目录

  • 一、Object类
  • (1)toString()
  • (2)equals()
  • (3)hashCode()
  • (4)clone()
  • 二、Math类
  • 三、基本类型包装类
  • 1、8个基本数据类型包装类
  • 2、BigInteger 和 BigDecimal 类
  • 四、时间-日期API
  • 1、本地日期类LocalDate
  • 2、本地时间类LocalTime
  • 3、本地日期时间类LocalDateTime
  • 4、Duration类:机器时间
  • 5、Period类
  • 6、日期/时间解析和格式化



一、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个基本数据类型包装类

java 核心线程数应该如何设置 java 核心类_Math


(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);