1.Math
Math中没有构造方法,类的成员都是静态的(static修饰),通过类名就可以直接调用
Math类中包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。
方法名 | 说明 |
---|---|
public static int abs(int a) | 获取参数a的绝对值 |
public static double ceil(double a) [ce’l] | 向上取整 |
public static double floor(double a) | 向下取整 |
public static long round(double a) | 四舍五入取整 |
public static int max(int a,int b) | 返回两个数中较大值 |
public static int min(int a,int b) | 返回两个数中较小值 |
public static double pow(double a,double b) | 获取a的b次幂 |
public static double random() | 返回值为double类型随机数 [0.0~1.0) |
public class MathDemo {
public static void main(String[] args) {
//1、public static int abs(int a) 获取参数a的绝对值
int abs=Math.abs(-10);
System.out.println(abs); //10
//2、public static double ceil(double a) 向上取整
double ceil=Math.ceil(12.01);
System.out.println(ceil); //13.0
//3、public static double floor(double a) 向下取整
double floor=Math.floor(12.99);
System.out.println(floor);//12.0
//4、public static long round(double a) 四舍五入取整
double round=Math.round(12.5);
System.out.println(round); //13
//5、public static int max(int a,int b) 返回两个数中较大值
int max=Math.max(10,20);
System.out.println(max); //20
//6、public static int min(int a,int b) 返回两个数中较小值
int min=Math.min(10,20);
System.out.println(min); //10
//7、public static double pow(double a,double b) 获取a的b次幂
double pow=Math.pow(2,3);
System.out.println(pow); //8.0
//8、public static double random() 返回值为double类型随机数 [0.0~1.0)
System.out.println(Math.random());
}
}
2.System
System被静态修饰,不能被实例化但可以使用类名.方法名的方式调用静态方法。。
方法名 | 说明 |
---|---|
public static void exit(int status) | 终止JVM虚拟机,非 0 是异常终止 |
public static long currentTimeMillis() | 返回当前时间(以毫秒为单位) |
arraycopy(数组copy) | (数据源数组,目的地数组,起始索引,拷贝个数) |
import java.text.SimpleDateFormat;
public class SystemDemo {
public static void main(String[] args) {
/*
System.out.println("开始"); //开始
//1、public static void exit(int status) 终止JVM虚拟机,非 0 是异常终止
System.exit(0);
System.out.println("结束"); //没有输出结束
*/
/*
//2、public static long currentTimeMillis() 返回当前时间(以毫秒为单位)
//long start=System.currentTimeMillis();//获取当前时间
//System.out.println(System.currentTimeMillis());
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
//System.out.println(sdf.format(start)); //2023年05月25日 22:49:15 星期四 下午
//for (int i=0;i<10000;i++) {
// System.out.println(i);
//}
//long end=System.currentTimeMillis();//获取当前时间
//System.out.println(end-start);//58---当前for循环的运行时间
*/
//arraycopy(数据源数组,目的地数组,起始索引,拷贝个数) 数组copy
int [] arr1 = {1,2,3,4,5};
int [] arr2 =new int[10];
//把arr1中的数据拷贝到arr2中
System.arraycopy(arr1,0,arr2,0,arr1.length);
for(int i=0;i<arr2.length;i++){
System.out.println(arr2[i]);//1 2 3 4 5 0 0 0 0 0
}
}
}
3.Object
Object类是类层次结构的根。
每个类都有Object作为超类(父类)。 所有对象(包括数组)都实现了这个类的方法。
该类所具备的方法,所有类都会有一份
object类常用方法:
方法名 | 描述 |
---|---|
public String toString() | 返回对象的字符串表示形式,建议所以子类重写该方法,自动生成 |
public boolean equals(Object obj) | 指示一些其他对象是否等于此(即作为参数的对象是否与方法调用的对象是一同一个对象)。默认比较地址值,重写可以比较内容,自动生成 |
1.tostring
重写toString方法的方式
1.Alt + Insert 选择toString
2.在类的空白区域,右键 -> Generate -> 选择toString
public String toString()
- 默认是返回当前对象在堆内存中的地址信息
- 直接输出对象名称,默认会调用 toString()方法,所以直接输出对象可以省略 toString()
- 所以 toString() 存在的意义是为了被子类重写,以便能够返回对象的数据内容输出
- 看方法的源码:选中方法,按Ctrl+B
public class Student extends Object{
private String name;
private int age;
public Student() { }
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//自动生成重写toString()方法;Fn+Alt+Insert -> generate -> toString
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class ObjectDemo {
public static void main(String[] args) {
Student s = new Student();
s.setName("好厚米");
s.setAge(23);
System.out.println(s); //Student@1b6d3586
System.out.println(s.toString()); //Student@1b6d3586
//重写后输出
/*源码
Student{name='好厚米', age=23}
Student{name='好厚米', age=23}*/
//选中方法Ctrl+B查看方法源码
/*public void println(Object x) { //1、x = s
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}*/
/*public static String valueOf(Object obj) { //2、obj = x
return (obj == null) ? "null" : obj.toString();
}*/
/*public String toString() { //3、
return getClass().getName() + "@" + Integer.toHexString(hashCode()); //所以重写前才会输出ceshi.Student@1b6d3586
}*/
}
}
2.equals
重写equals方法的方式
1.alt + insert 选择equals() and hashCode(),IntelliJ Default,一路next,finish即可
2.在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上。
不希望比较对象的地址值,想要结合对象属性进行比较的时候使用。
public boolean equals(Object o)
- 默认是比较两个对象的地址是否相同,相同返回true
- 直接比较两个对象的地址是否完全相同,可以用"=="替代equals
- 所以 equals 存在的意义是为了被子类重写
public class Student extends Object{
private String name;
private int age;
public Student() { }
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//自动生成重写equals()方法
@Override
public boolean equals(Object o) {
//this--s1
//o--s2
if (this == o) return true; //1、比较地址是否相同,如果相同就是同一个对象,直接返回true
//2、先判断参数是否为null;判断连个对象是否来自同一个类;一个满足就返回false
if (o == null || getClass() != o.getClass()) return false;
//向下转型
Student student = (Student) o; //student = s2;
//3、比较年龄是否相同,年龄相同往下走
if (age != student.age) return false;
//比较名字是否相同,s1的name不是null才能取调方法
return name != null ? name.equals(student.name) : student.name == null;
}
}
public class ObjectDemo {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("好厚米");
s1.setAge(20);
Student s2 = new Student();
s2.setName("好厚米");
s2.setAge(20);
//比较两个对象内容是否相等
System.out.println(s1.equals(s2)); //重写前:false ; 重写后:true
/*public boolean equals(Object obj) {
//this---s1
//obj---s2
return (this == obj); //重写前==比较的是地址值,不是内容需要重写equals()方法
}*/
}
}
4.Objects
tostring
方法名 | 描述 |
---|---|
static String toString(Object o) | 返回非 null参数调用 toString的结果和 null参数的 "null"的 null 。 |
static String toString(Object o, String nullDefault) | 如果第一个参数不是 null ,则返回第一个参数上调用 toString的结果,否则返回第二个参数(即当对象为null时给个默认值)。 |
static boolean isNull(Object obj) | 返回 true如果提供的引用是 null,否则返回 false 。 |
static boolean nonNull(Object obj) | 返回 true如果提供的参考是非 null,否则返回 false 。 |
import java.util.Objects;
public class MyObjcects {
public static void main(String[] args){
// public static String toString(对象) 返回参数中对象的字符串表示形式。如果对象为空,则返回第二个参数。
// Student s=new Student("小罗同学",50);
// String result= Objects.toString(s);
// System.out.println(result);
// public static String toString(对象,默认字符串) 返回对象的字符串表示形式
// Student s=new Student("小花同学",23);
//Student s=null;
// String result=Objects.toString(s,"随便选一个");
// System.out.println(result);
// public static Boolean isNull(对象) 判断对象是否为空
// Student s=null; //true
// Student s=new Student(); //false
// boolean result=Objects.isNull(s);
// System.out.println(result);
// public static Boolean nonNull(对象) 判断对象是否不为空
// Student s=null; //false
Student s=new Student(); //true
boolean result=Objects.isNull(s);
System.out.println(result);
}
}
5.BigDecimal
1.构造方法
方法名 | 描述 |
---|---|
BigDecimal(int val) | 将 int翻译成 BigDecimal 。 |
BigDecimal(double val) | 将 double转换为 BigDecimal ,它是 double的二进制浮点值的精确十进制表示。 |
BigDecimal(long val) | 将 long翻译成 BigDecimal 。 |
BigDecimal(String val) | 将 字符串表示转换为 BigDecimal 。 |
注意:建议使用String形参的构造方法!!不建议使用double形参的构造方法,因为其有一定的不可预知性,即给定一个double值,在计算机中其展示出来的可能不是你原来给定的那样精确的值。
import java.math.BigDecimal;
public class MyBigDecimal {
public static void main(String [] args) {
BigDecimal num1 = new BigDecimal(15);//int形参
System.out.println(num1);
BigDecimal num2 = new BigDecimal(15L);//long形参
System.out.println(num2);
BigDecimal num3 = new BigDecimal(159.68);//double形参,给的是159.68,但结果不一样
System.out.println(num3);
BigDecimal num4 = new BigDecimal("15");//String形参
System.out.println(num4);
}
}
2.四则运算
方法名 | 描述 |
---|---|
public BigDecimal add(BigDecimal augend) | 加法 |
public BigDecimal subtract (BigDecimal augend) | 减法 |
public BigDecimal multiply (BigDecimal augend) | 乘法 |
public BigDecimal divide (BigDecimal augend) | 除法 |
public BigDecimal divide (BigDecimal augend,精确几位,舍入模式) | 除法(当除不尽时使用) |
当需要精确运算时,需要用string 的构造方法
import java.math.BigDecimal;
import java.math.RoundingMode;
public class MyBigDecimal {
public static void main(String [] args) {
//构造方法重载了,但常用String形参的构造方法创建,因为更精确
BigDecimal bd1 = new BigDecimal("0.17");
BigDecimal bd2 = new BigDecimal("0.3");
System.out.println(bd1.add(bd2));
System.out.println(bd1.subtract(bd2));
System.out.println(bd1.multiply(bd2));
//用三个参数的divide方法 divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
//第二个参数表示精确的范围即小数点后几位,第三个参数可以设置进位模式等
System.out.println(bd1.divide(bd2, 5, RoundingMode.DOWN));
}
}
如果进行除法运算的时候,结果不能整除,有余数,这个时候会报java.lang.ArithmeticException:
在进行除法运算的时候,针对可能出现的小数产生的计算,必须要多传两个参divide(BigDecimal,保留小数点后几位小数,舍入模式)
舍入模式
ROUND_CEILING //向正无穷方向舍入
ROUND_DOWN //向零方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入”
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向远离0的方向舍入
import java.math.BigDecimal;
public class MyBigDecimal {
public static void main(String [] args) {
BigDecimal bd1=new BigDecimal("10.0");
BigDecimal bd2=new BigDecimal("3.0");
//进一法 BigDecimal.ROUND_UP 3.34
//去尾法 BigDecimal.ROUND_FLOOR 3.33
//四舍五入 BigDecimal.ROUND_HALF_UP 3.33
BigDecimal divide=bd1.divide(bd2,2,BigDecimal.ROUND_HALF_UP);
System.out.println(divide);
}
}