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

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}
}

http://www.xdnf.cn/news/521.html

相关文章:

  • C++/Python实现RGB和HSI相互转换
  • Linux——firewalld防火墙(笔记)
  • 深度学习语音识别
  • bat脚本转换为EXE应用程序文件
  • 案例驱动的 IT 团队管理:创新与突破之路:第六章 组织进化:从案例沉淀到管理体系-6.1 案例库建设方法论-6.1.2案例分级与标签体系
  • OpenStack Yoga版安装笔记(23)Swift安装
  • QML中的3D功能--模型导入与修改
  • LRU Java实现
  • 五、小白如何用Pygame制作一款跑酷类游戏(主角跳跃和滑行动作的实现)
  • Linux | I.MX6ULL 使用 Yocto 文件系统开发 QT
  • 015-C语言字符函数和字符串函数
  • java蓝桥杯b组
  • 大模型Rag - 两大检索技术
  • 【滑动窗口】最⼤连续 1 的个数 III(medium)
  • 【java实现+4种变体完整例子】排序算法中【桶排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • 大数据平台简介
  • 掌握 MySQL:从命令行操作到数据类型与字段管理
  • 论文阅读:2025 arxiv AI Alignment: A Comprehensive Survey
  • Zookeeper的通知机制是什么?
  • 【更新完毕】2025妈妈杯C题 mathercup数学建模挑战赛C题数学建模思路代码文章教学:音频文件的高质量读写与去噪优化
  • xilinx fpga中pll与mmcm的区别
  • 【DT】USB通讯失败记录
  • MySQL 全局锁:全量备份数据要怎么操作?
  • 04_银行个贷系统下的技术原理解析
  • LLM多卡并行计算:Accelerate和DeepSpeed
  • 数据可视化(Matplotlib和pyecharts)
  • 【云馨AI-大模型】2025年4月第三周AI领域全景观察:硬件革命、生态博弈与国产化突围
  • 【unity游戏开发入门到精通——UGUI】RectTransform矩形变换组件
  • 保生产 促安全 迎国庆
  • 平均池化(Average Pooling)