当前位置: 首页 > news >正文

Java—— 常见API介绍 第二期

Runtime

说明:

Runtime表示当前虚拟机的运行环境

获取Runtime对象的方法是静态的,可以用类名调用

不能用new关键字创建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命令

代码演示:

public class Test4 {public static void main(String[] args) throws IOException {//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命令//获取Runtime的对象,不管获取几个对象,指的都是同一地址值//因为一台电脑只有一个系统运行环境Runtime r1 = Runtime.getRuntime();Runtime r2 = Runtime.getRuntime();System.out.println(r1 == r2);//trueSystem.out.println(r1.availableProcessors());// 1GB = 1024MB = 1024×1024 KB = 1024×1024×1024 bytesSystem.out.println(Runtime.getRuntime().maxMemory() / 1024 / 1024);System.out.println(Runtime.getRuntime().totalMemory() / 1024 / 1024);System.out.println(Runtime.getRuntime().freeMemory() / 1024 / 1024);//shutdown:关机//参数://-s:默认1分钟后关机//-s -t:指定关机时间 单位:秒//-a:取消关机操作//-r:关机并重启Runtime.getRuntime().exec("shutdown -s -t 3600");Runtime.getRuntime().exit(0);}
}

Object

说明:

Object是Java中的顶级父类。所有的类都直接或间接的继承于Object类。
Object类中的方法可以被所有子类访问,所以我们要学习Object类和其中的方法。

构造方法: 

方法名说明
public Object ()只有空参构造

常见成员方法:

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

toString()方法详解:

介绍:

因为

Object类中的toString方法返回的是对象的地址值

打印一个对象的时候,底层默认调用toString方法
所以

默认情况下,打印一个对象打印的就是该对象的地址值
但是

地址值对于我们是没什么意义的
想要看到对象内部的属性值,需要重写父类object类中的toString方法

代码演示: 

测试类

public class Test {public static void main(String[] args) {//Object的toString()方法返回的是对象地址值Object o = new Object();String str1 = o.toString();System.out.println(str1);//java.lang.Object@776ec8dfStudent stu = new Student("zhangsan", 23);String str2 = stu.toString();System.out.println(str2);//包名.Student@3b07d329//打印一个对象的时候,底层默认调用toString()方法,所以结果也为地址值System.out.println(stu);//包名.Student@3b07d329//重写toString()方法后,打印对象System.out.println(stu);//zhangsan,23}
}

 Student类

import java.util.Objects;public class Student {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()方法@Overridepublic String toString() {return getName() +","+getAge();}
}

equals()方法详解:

介绍:

Object中的equals方法比较的是地址值是否相等
一般来讲地址值对于我们意义不大,所以需要重写,比较对象内部的属性值是否相等

代码演示:

测试类

public class Test {public static void main(String[] args) {Student stu1 = new Student("zhangsan",23);Student stu2 = new Student("zhangsan",23);boolean flag = stu1.equals(stu2);//Object中的equals()方法比较的是两个对象的地址值是否相同System.out.println(flag);//false//重写equals方法后,比较对象内部的属性值是否相等System.out.println(flag);//true}
}

Student类

import java.util.Objects;public class Student {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;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Objects.equals(name, student.name);}}
面试题分析:

String s = "abc";
StringBuilder sb = StringBuilder("abc");

判断 s.equals(sb) 和 sb.equals(s) 的结果

System.out.println(s.equals(sb)); // false
因为 equals 方法是被 s 调用的,s 是字符串
所以 equals 方法要看 String 类中的
String 重写了 equals 方法,该方法先判断参数是否为字符串
如果是字符串,再比较内部的属性是否相同,如果参数不是字符串,直接返回 false

sb 是 StringBuilder 类型,不是字符串,所以直接返回 false

System.out.println(sb.equals(s)); // false
因为 equals 方法是被 sb 调用的,而 sb 是 StringBuilder类型
所以 equals 方法要看 StringBuilder 中的
StringBuilder 没有重写equals方法
默认使用的是 object 中的
在 object 中比较的是两个对象的地址值
而这里的 s 和 sb 记录的地址值是不一样的,所以结果返回 false

clone()方法详解:

介绍:

1.把A对象的属性值完全拷贝到B对象,也叫对象拷贝,对象复制

2.clone()方法是protected修饰的,所以A类需要重写该方法,方法调用父类Object的clone()方法,这样本包的其它类才能使用clone()方法

3.A类需要实现Cloneable接口,该接口里面没有抽象方法,表示这是一个标记性接口
实现了Cloneable接口,表示当前类的对象可以被克隆,没有实现,则当前类的对象不能克隆

 代码演示: 

测试类 

public class Test {public static void main(String[] args) throws CloneNotSupportedException {int[] arr = {1,2,3,4,5,6,7,8,9,10};User u1 = new User(1,"zhangsan",arr);//调用方法进行克隆User u2 = (User) u1.clone();System.out.println(u1);//User{id=1, userName='zhangsan', data=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}System.out.println(u2);//User{id=1, userName='zhangsan', data=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}}
}

User类

import java.util.Arrays;//Cloneable标记型接口
public class User implements Cloneable{private int id;private String userName;private int[] data;public User() {}public User(int id, String userName, int[] data) {this.id = id;this.userName = userName;this.data = data;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public int[] getData() {return data;}public void setData(int[] data) {this.data = data;}//重写toString方法返回属性值@Overridepublic String toString() {return "User{" +"id=" + id +", userName='" + userName + '\'' +", data=" + Arrays.toString(data) +'}';}//重写clone方法@Overrideprotected Object clone() throws CloneNotSupportedException {//调用父类的clone方法return super.clone();}
}
小扩展:

浅克隆:
不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来

注:Object 的 clone是浅克隆

深克隆:

基本数据类型拷贝过来
字符串复用
引用数据类型会重新创建新的


Objects

说明:

是一个对象工具类,提供了一些操作对象的方法 

 常用方法:

方法名说明
public static boolean equals(0bject a, object b)先做非空判断,
比较两个对象
public static boolean isNull(Object obj)

判断对象是否为null,

为null返回true ,反之返回false

public static boolean nonNull(Object obj)判断对象是否为null,跟isNul1的结果相反

代码演示:

public class Test {public static void main(String[] args) {//public static boolean equals(0bject a, object b)	先做非空判断,比较两个对象//public static boolean isNull(Object obj)	判断对象是否为null,为null返回true ,反之返回false//public static boolean nonNull(Object obj)	判断对象是否为null,跟isNul1的结果相反Student s1 = null;Student s2 = new Student("zhangsan", 23);boolean flag = Objects.equals(s1, s2);System.out.println(flag);//false// 先做非空判断 s1如果为空,直接返回false//s1不为空,则调用 s1.equals(s2)//s1如果重写了equals方法,则比较属性值//s1没有重写equals方法,则比较地址值System.out.println(Objects.isNull(s1));//trueSystem.out.println(Objects.isNull(s2));//falseSystem.out.println(Objects.nonNull(s1));//falseSystem.out.println(Objects.nonNull(s2));//true}
}

相关文章:

  • 【数据结构_11】二叉树(3)
  • 并发网路通信-套接字通信
  • phpy通用扩展:让PHP和Python手拉手
  • 最新得物小程序sign签名加密,请求参数解密,响应数据解密逆向分析
  • GWAS_LD
  • 基于单片机的按摩器控制系统设计
  • 【Envi遥感图像处理】016:如何下载NOAA AVHRR GIMMS 全球数据集?
  • PHP 8 中的 Swow:高性能纯协程网络通信引擎
  • 大学英语四级选词填空阅读题和段落匹配解析
  • 使用Service发布前后端应用程序
  • Linux——firewalld防火墙
  • Android开发四大组件和生命周期及setFlags
  • 最长子序列长度(LIS)--个数遍历的二分+贪心优化
  • React Article模块
  • 【后端开发】Spring日志
  • 得物官网sign签名逆向分析
  • HashMap 初步理解 put 操作流程 HashMap 的线程安全问题
  • JVM笔记【一】java和Tomcat类加载机制
  • Visio导出清晰图片步骤
  • 工业级向量检索核心技术:IVF-PQ原理与全流程解析
  • 人民日报钟声:世界决不能重回弱肉强食的时代
  • 上海推出平台算法治理合规指引:不得“静默推荐”,算法应用向上向善
  • 2025扬州“烟花三月”国际经贸旅游节开幕,37个重大项目现场签约
  • 《王牌对王牌》确认回归,“奔跑吧”将有主题乐园
  • 北京:义务教育阶段入学将积极为多孩家庭长幼随学创造条件
  • 《黄雀》:从“大案猎奇”向“民生写实”转变