JAVA基础 (常用API)—— Math、System、Runtime和Object

经过之前对于API的学习:JAVA基础 —— API

接下来的文章让我们来了解一下不同类下的方法,但是这些方法不要去背。

而是要去记一下类名和类作用,也可以在以后去查阅API帮助文档。

Math、System、Runtime和ObjectJAVA基础 (常用API)—— Math、System、Runtime和Object

BigInteger和BigDecimal

JAVa基础(常用API) —— BigInteger和BigDecimal
正则表达式JAVA基础(常用API) —— 正则表达式
时间相关类JAVA基础(常用API) —— 时间相关类
包装类JAVA基础(常用API) —— 包装类

目录

一、Math

二、System

三、Runtime

四、Object

 1. toString方法

2.euqals方法 

3.  clone方法:

3.1 浅克隆

3.2 深克隆


一、Math

  • 是一个帮助我们用于进行数学计算的工具类。
  • 私有化构造方法,所有的方法都是静态的。

 Math类的常用方法:

方法名说明
public static int abs(int a)获取参数绝对值
public static double ceil(double a)向上取整
public static double floor(double a)向下取整
public static int round(float a)四舍五入
public static int max(int a, int b)获取两个int值中的较大值
public static int min(int a, int b)获取两个int值中的较小值
public static double pow(double a , double b)返回a的b次幂的值
public static double sqrt(double a )返回a的平方根
public static double cbrt(double a )返回a的立方根
public static double random()返回值为double的随机值,范围 [ 0.0 , 1.0 )
public class mathTest {
	public static void main(String[] args) {
		// abs
		System.out.println(-88); // 88
		// bug: int 取值范围: -2147483648 ~ 2147483647
		// System.out.println(Math.abs(-2147483648)); // -2147483648
		// -2147483648 没有正整数与之对应 所以abs出现bug

		// ceil 进一法:向数轴正方向进一
		// floor 去尾法:向数轴负方向进一
		System.out.println(Math.ceil(12.34)); // 13.0
		System.out.println(Math.ceil(-12.34)); // -12.0

		System.out.println(Math.floor(12.34)); // 12.0
		System.out.println(Math.floor(-12.34)); // -13.0

		// round
		System.out.println(Math.round(12.34)); // 12
		System.out.println(Math.round(-12.34)); // -12

		// max min
		System.out.println(Math.max(20, 30)); // 30
		System.out.println(Math.min(20, 30)); // 20

		// pow
		System.out.println(Math.pow(2, 3)); // 8.0
		// 细节:
		// 如果第二个参数为 0~1 之间小数 即为开根方
		// 如果第二个参数为负数 即为分数
		System.out.println(Math.pow(2, 0.5)); // 1.414
		System.out.println(Math.pow(2, -1)); // 0.5

		// sqrt cbrt
		System.out.println(Math.sqrt(4)); // 2.0
		System.out.println(Math.cbrt(8)); // 2.0

		// random
		System.out.println(Math.random());

	}
}

二、System

System也是一个工具类,提供了一些与系统相关的方法。

方法名说明
public static void exit(int status)终止当前运行的java虚拟机

public static long currentTimeMillis()

返回当前系统的时间毫秒值形式(1秒=1000毫秒)
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)数据拷贝
public class systemTest {
	public static void main(String[] args) {
		// 方法的形参:
		// 状态码:
		// 0:表示当前虚拟机是正常停止
		// 非0:表示当前虚拟机异常停止
		// System.exit(0);
		// System.out.println("看看我执行了吗"); // 空

		long l = System.currentTimeMillis();
		// 获取程序运行时间 比较不同方法效率
		System.out.println(l); // 1677458648668 1677458657205

		int[] arr1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
		int[] arr2 = new int[10];

		System.arraycopy(arr1, 0, arr2, 0, 10);

		// 1.如果数据源数组和目的地数组都是基本数据类型,那么两者类型必须一致
		double[] arr3 = new double[10];
		System.arraycopy(arr1, 0, arr3, 0, 10); // 报错
		// 2.在拷贝时候要考虑数组的长度,如果超出范围也会报错
		int[] arr4 = new int[5];
		System.arraycopy(arr1, 0, arr4, 0, 10); // 报错
		// 3.如果数据源数组和目的地质数都是引用数据类型,那么子类类型可以赋值给父类类型
		Student stu1 = new Student("zhangsan", 23);
		Student stu2 = new Student("lisi", 24);
		Student stu3 = new Student("wangwu", 25);

		Student[] arr5 = { stu1, stu2, stu3 };
		Student[] arr6 = new Student[3];
		System.arraycopy(arr5, 0, arr6, 0, 3); // zhangsan 23 lisi 24 wangwu 25

		for (int i = 0; i < arr2.length; i++) {
			System.err.print(arr2[i] + ",");
		}
	}
}

class Person {
	private String name;
	private int age;

	public Person() {}

	public Person(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;}
}

class Student extends Person {
	public Student() {}
	public Student(String name, int age) {super(name, age);}
}

三、Runtime

Runtime表示当前虚拟机的运行环境,但是Runtime不是静态的,调用方法要先获取其对象。

方法名说明
public static Runtime getRuntime()当前系统的运行环境对象
public void exit(int status)停止虚拟机
public int availableProcessors()获取CPU的线程数
public long MaxMemory()JVM能从系统获取总内存大小(单位byte)
public long totalMemory()JVM已经从系统中获取总内存大小(单位byte)
public long freeMemory()JVM剩余内存大小(单位byte)
public Process exec(String command)运行cmd命令
import java.io.IOException;

public class RuntimeTest {
	public static void main(String[] args) throws IOException {
		// 获取Runtime对象
		Runtime rt = Runtime.getRuntime();

		// Runtime.getRuntime().exit(0);
		// System.out.println("看看我执行了吗"); //空

		// CPU线程数
		System.out.println(Runtime.getRuntime().availableProcessors()); // 12
		// 总内存大小
		System.out.println(Runtime.getRuntime().maxMemory() / 1024 / 1024); // 3414兆

		// 已经获取的总内存大小
		System.out.println(Runtime.getRuntime().totalMemory() / 1024 / 1024); // 245兆

		// 剩余内存大小
		System.out.println(Runtime.getRuntime().freeMemory() / 1024 / 1024); // 242兆

		// 运行cmd命令
		// shutdown :关机
		// -s:默认一分钟之后关机
		// -s -t 指定时间:指定关机时间
		// -a:取消关机操作
		// -r:关机并重启
		Runtime.getRuntime().exec("notepad"); // 打开记事本
	}
}

四、Object

  • Object 是Java中的顶级父类。所有的类都直接或间接的继承于Object类。
  • Object类中的方法可以被所有子类访问,所以我们要学习Object类和其中的方法。
  • Objects是一个工具类,提空了一些方法完成一些功能。

 Object的构造方法:

方法名说明

public Object()

空参构造

 Object的成员方法:

方法名说明
public String toString()返回对象的字符串表示形式
public boolean equals(Object obj)比较两个对象是否相等
protected Object clone(int a)对象克隆

 1. toString方法

public class ObjectTest {
	public static void main(String[] args) {
		//返回对象字符串表现形式
		Object obj = new Object();
		String str1 = obj.toString();
		System.out.println(str1);//java.lang.Object@7852e922
		
		User u = new User();
		String str2 = u.toString();
		//细节:
		//System:类名 ; out:静态变量
		//System.out:获取打印对象 ;  println():方法  ;参数:打印内容
		//核心逻辑:
		//当我们打印一个对象时,底层会调用对象的toString方法,把对象编程字符串
		//然后再打印在控制台上,打印完毕换行处理
		
		//默认情况下,因为Object类中的toString方法返回的是地址值
		//所以默认情况下,打印一个对象打印的就是地址值
		//如果我们想要看到内部属性值 就要重写父类Object的toString方法

		System.out.println(u); //重写toString前:API.User@4e25154f
		System.out.println(u); //重写toString后:User [name=null, age=0]
		System.out.println(str2); //API.User@4e25154f
		
	}
}
class User{
	private String name;
	private int age;
	public User() {}

	public User(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;}

	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + "]";
	}
}

2.euqals方法 

public class ObjectTest {
	public static void main(String[] args) {
		
		//比较对象相等
		User u1 = new User();
		User u2 = new User();
		System.out.println( u1.equals(u2)); //fasle
		//重写equals后:
		User u3 = new User("zhangsan",23);
		User u4 = new User("zhangsan",23);
		System.out.println( u3.equals(u4)); //true
		//如果没有重写equals,那么默认使用Object中的方法进行比较,比较的是地址值是否相等
		//一般来说地址值对我们没有意义,所以我们重写,重写后比较的就是对象内部的属性值
		
		
		//面试题练习:
		String s = "abc";
		StringBuilder sb = new StringBuilder("abc");
		
		System.out.println(s.equals(sb)); //false
		
		//因为equals方法是被s调用的,而s是字符串
		//所以equals要看String类中的
		//字符串中equals方法先判断参数是否为字符串
		//如果是则比较内部属性,如果表示则直接返回false
		
		System.out.println(sb.equals(s));  //false
		
		//因为equals方法先被sb调用,而sb是StringBuilder
		//所以equals要看StringBuilder类中的
		//在StringBuilder中没有重写equals方法
		//使用object中的,在Object中默认使用 == 比较两对象地址值
	}
}
class User{
	private String name;
	private int age;
	public User() {}

	public User(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;}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}	
}

3.  clone方法:

3.1 浅克隆

  • 基本数据类型拷贝记录的数据值,引用数据类型直接拷贝变量记录的地址值。即不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来。
  • 两个对象使用同一个数组,其中有一个对象对数组中数据发生改变,另外一个对象再次访问的就是已经被改变的数据。

3.2 深克隆

  • 如果是基本数据类型,会将变量记录数据值直接拷贝过去,如果是字符串会直接复用,但如果是引用数据类型,则不会直接拷贝地址值,而是在外面再创建一个对象。
  • 两个对象使用不同的数组,二者互不影响。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hgngy.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值