【Java-Day16】API篇-Math类/System类/Object类/包装类

一.Math类

1.Math类是什么:

Math类是一个帮助我们用于进行**数学计算的工具类。**里面放了很多常用数学方法,比如取绝对值、向上取整、四舍五入、求最大值、生成随机数等。

2.特点:

Math 里的方法大多是 static 静态方法 ,所以不用创建对象,直接用类名调用。

3.工具类书写方式

工具类不是用来描述一类事物的,也没有main方法,而是帮我们做一些事情的类。

  1. 类名见名知意
  2. 私有化构造方法
  3. 方法定义为静态

4.使用Math:

java 复制代码
int num = Math.abs(-10);
System.out.println(num); // 10
//不能这么写:Math m = new Math();

5.Math方法:

方法名 说明
public static int abs(int a) 获取参数绝对值
public static double ceil(double a) 向上取整
public static doublefloor(double a) 向下取整
public static int round(float a) 四舍五入(负数里,刚好是.5时,会舍去不进一)
public static int max(int a, int b) 获取两个 int 值中的较大值
public static double pow(double a, double b) 返回 a 的 b 次幂的值
public static doublerandom() 返回值为 double 的随机值,范围 [0.0, 1.0)

二.System类

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

计算机的时间原点:1970年1月1日0:0:0,我国在东八区,有8小时时差。

方法名 说明
public static void exit(int status) 终止当前运行的 Java 虚拟机
public static long currentTimeMillis() 返回当前系统的时间,毫秒值形式
public static void arraycopy(数据源数组, 起始索引, 目的地数组, 起始索引, 拷贝个数) 数组拷贝

三.Object类

Object

Object 是Java中的顶级父类,所有的类都直接或间接的继承于Object类

Object类中的方法可以被所有类访问。

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

toString():一般会重写, 重写目的是为了打印对象时打印属性

equals():比较对象时会重写比较对象属性值是否相同

Objects是Java中操作对象的工具类。

四.包装类

4.1 什么是包装类:

包装类就是 Java 给 8 种基本数据类型准备的"对象版本"。

包装类就是基本数据类型的对象形式。

4.2 为什么需要包装类

因为 Java 里有些地方只能用对象,不能直接用基本类型。比如集合的泛型约束。

4.3 基本数据类型对应的包装类

基本类型 包装类 基本类型 包装类
byte Byte float Float
short Short double Double
int Integer char Character
long Long boolean Boolean

4.4 创建包装类对象的方式(以integer为例)

  1. 使用构造方法创建(new)
  2. 静态方法(使用valueof方法创建)
  3. 直接赋值(自动装箱)

(1)构造方法(不推荐)

每一次都会在内存中创建一个新的Integer的对象。

java 复制代码
Integer i = new Integer(10);

(2)静态方法创建()

当Integer类被加载到内存中的时候,会提前创建-128127之间所有数据的对象,共计256个,放

到一个数组(Integer常量池)当中。

当我们利用 valueof方法 获取对象的时候,判断是否在这个范围当中

如果在,就不会创建新的对象,而是从数组当中获取

如果不在,此时就会利用构造方法的方式去创建对象

java 复制代码
Integer i = Integer.valueOf(10);
Double d = Double.valueOf(3.14);
Boolean b = Boolean.valueOf(true);

(3)自动装箱,直接赋值

是第二种的简写,底层相当于调用valueof

java 复制代码
Integer i = 10;
等价于 Integer i = Integer.valueOf(10);

4.5 自动装箱/ 自动拆箱

Java 有基本类型包装类 ,二者需要互相转换,Java 5 开始提供自动装箱 / 拆箱,不用手动写代码转换。

自动装箱

JVM把基本数据类型 自动装到一个对象当中变成包装类对象 ,叫自动装箱。底层调用valueOf方法

java 复制代码
//手写转换
int num = 10;
Integer obj = Integer.valueOf(num); // 手动转成包装对象
//自动装箱
int num = 10;
Integer obj = num; //编译器底层等价于上面 valueOf

自动拆箱

JVM把包装类对象 自动变成基本数据类型 ,叫自动拆箱。底层调用IntValue方法

java 复制代码
Integer num = 10;
int a = num;

这里 num 是 Integer,a 是 int。Java 会自动把 Integer 拆成 int。

有了自动装箱和自动拆箱,我们可以认为Int和integer是相同的。

4.6 Integer类里的常见成员方法

  • parseInt(字符串->整数)
  • toXXXString(转二进制、八进制、十六进制)
方法名 说明
public static IntegervalueOf(int i) 基本数据类型变成包装类(自动装箱)
public int intValue() 包装类变回基本数据类型 int(自动拆箱)
public static intparseInt(String s) 字符串形式 的整数变成int 类型
public static StringtoBinaryString(int i) 获取二进制
public static StringtoOctalString(int i) 获取八进制
public static String toHexString(int i) 获取十六进制
java 复制代码
public static void main(String[] args) {
        //1.把基本数据类型变成包装类
        Integer a = Integer.valueOf("123");
        System.out.println(a);
        //2.把包装类变回基本数据类型Int
        //把对象里面的属性值给获取出来
        int num = a.intValue();
        System.out.println(num);
        //3.把字符串形式的整数变成int类型
        String str = "123";
        int num1 = Integer.parseInt(str);
    }

4.7 常见字符串转换方法

方法 作用
Integer.parseInt("123") 字符串转 int
Long.parseLong("123") 字符串转 long
Double.parseDouble("3.14") 字符串转 double
Boolean.parseBoolean("true") 字符串转 boolean
java 复制代码
int a = Integer.parseInt("100");
double b = Double.parseDouble("3.14");
boolean c = Boolean.parseBoolean("true");

4.8 什么时候用包装类

  1. 集合中使用,比如 ArrayList<Integer>

  2. 字符串转数字,比如 Integer.parseInt()

  3. 需要表示 null 的时候,比如数据库中某个年龄为空

  4. 使用泛型时,比如 List<Double>

相关推荐
x***r1511 小时前
burpsuite-1.4.07.jar 使用步骤详解(附Java环境配置与Burp Suite抓包教程)
java·开发语言·jar
Cosmoshhhyyy1 小时前
《Effective Java》解读第54条:返回零长度的数组或者集合,而不是null
java·开发语言·python
jsl_jsl_jsl1 小时前
☕ Java 高并发进阶(二):无锁并发与数据隔离——CAS、Unsafe 与 ThreadLocal 深度内核解密
java
kTR2hD1qb1 小时前
Keepalived 学习总结
java·服务器·学习
土狗TuGou1 小时前
SQL内功笔记 · 第9篇:UPDATE FROM 进阶——告别逐行子查询,拥抱集合更新
java·数据库·笔记·sql·mysql
小谢小哥1 小时前
63-Gradle构建详解
java·后端·架构
Sam_Deep_Thinking1 小时前
一个业务场景只需要一个ThreadLocal实例
java·面试
超梦dasgg1 小时前
Dijkstra(迪杰斯特拉)算法详解
java·数据结构·算法
MacroZheng1 小时前
给Claude Code装上这个超酷的状态栏,瞬间高大上了!
java·人工智能·后端