Java基础入门Day10 | Object类、包装类、大数/日期类、冒泡排序与Arrays工具类 超详细总结

Java基础入门Day10 | Object类、包装类、大数/日期类、冒泡排序与Arrays工具类 超详细总结

前言

本文是Java基础第十天的核心知识点全总结,覆盖Object类、包装类、大数运算、JDK8新日期API、冒泡排序、Arrays工具类 六大核心内容,同时详解面试常考的==与equalsnative关键字自动装箱拆箱编译看左边等考点,搭配完整代码示例,适合Java新手快速学习、巩固、复习!


一、Object类 核心方法详解

1.1 概述

Object是Java中所有类的父类 (权限定类名:java.lang.Object),Java中任何类都会默认隐式继承Object,无需手动写extends Object

1.2 核心常用方法

(1)equals() 方法(重点)

核心区别:== VS equals()

  • == :基本数据类型比较 ;引用数据类型比较内存地址值
  • equals() :Object类中默认和==功能一致(比较地址);String/Integer等包装类重写了该方法,用于比较对象内容
java 复制代码
public class ObjectDemo {
    public static void main(String[] args) {
        // String类重写了equals,比较内容
        String s1 = new String("java");
        String s2 = new String("java");
        System.out.println(s1 == s2);       // false 比较地址
        System.out.println(s1.equals(s2));  // true  比较内容

        // 自定义类未重写equals,默认比较地址
        Student stu1 = new Student();
        Student stu2 = new Student();
        System.out.println(stu1.equals(stu2)); // false
    }
}
class Student{}
(2)native 关键字

native修饰的方法称为本地方法

  1. 方法没有方法体,不由Java语言实现
  2. 底层调用C/C++编写的本地函数库,执行效率更高
  3. Object类中的hashCode()getClass()都是native方法
(3)其他常用方法
  • toString():返回对象的字符串表示(默认格式:全类名@哈希值,开发中建议重写)
  • hashCode():返回对象的哈希码值
  • getClass():返回对象的运行时字节码对象

二、包装类 常用方法

2.1 概述

Java为8种基本数据类型提供了对应的包装类(引用类型),解决基本类型无法面向对象、无法参与对象操作的问题。

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

2.2 自动装箱 & 自动拆箱(JDK1.5+)⭐⭐

  • 自动装箱:基本数据类型 → 包装类对象
  • 自动拆箱:包装类对象 → 基本数据类型
java 复制代码
public class WrapperDemo {
    public static void main(String[] args) {
        // 自动装箱:int → Integer(底层:Integer.valueOf(10))
        Integer num1 = 10;
        // 自动拆箱:Integer → int(底层:num1.intValue())
        int num2 = num1;
    }
}

2.3 核心常用方法

  1. parseXxx(String s):字符串 → 基本数据类型
  2. valueOf(Xxx x):基本类型/字符串 → 包装类
  3. toString():包装类 → 字符串
java 复制代码
// 字符串转int
int a = Integer.parseInt("666");
// int转Integer
Integer b = Integer.valueOf(888);
// 包装类转字符串
String s = b.toString();

三、大数运算类(BigInteger/BigDecimal)

3.1 作用

解决基本数值类型范围不足、浮点数精度丢失问题(如超大整数运算、金融金额计算)。

3.2 BigInteger(大整数运算)

用于超过long范围的整数运算,所有运算通过方法调用实现。

java 复制代码
import java.math.BigInteger;
public class BigIntegerDemo {
    public static void main(String[] args) {
        BigInteger b1 = new BigInteger("12345678901234567890");
        BigInteger b2 = new BigInteger("98765432109876543210");
        
        BigInteger add = b1.add(b2);      // 加法
        BigInteger sub = b1.subtract(b2); // 减法
        BigInteger mul = b1.multiply(b2); // 乘法
        BigInteger div = b2.divide(b1);   // 除法
        
        System.out.println(add);
    }
}

3.3 BigDecimal(精确浮点数运算)

⚠️ 禁止使用double参数构造,必须用String避免精度丢失!

java 复制代码
import java.math.BigDecimal;
public class BigDecimalDemo {
    public static void main(String[] args) {
        BigDecimal b1 = new BigDecimal("0.1");
        BigDecimal b2 = new BigDecimal("0.2");
        // 精确计算 0.1+0.2
        BigDecimal sum = b1.add(b2);
        System.out.println(sum); // 输出0.3,无精度丢失
    }
}

四、JDK8 全新日期时间API(重点推荐)

4.1 为什么用新日期API?

旧的Date/SimpleDateFormat存在线程不安全、设计混乱、时区支持差 等问题;

JDK8 提供了全新的日期时间类:不可变对象、线程安全、API设计更清晰,是开发首选!

4.2 核心类(全在 java.time 包下)

  1. LocalDate :仅表示 日期(年月日),无时间、无时区
  2. LocalTime :仅表示 时间(时分秒纳秒),无日期、无时区
  3. LocalDateTime :表示 日期+时间(年月日时分秒),最常用
  4. DateTimeFormatter :日期格式化/解析类,替代旧的SimpleDateFormat线程安全

4.3 导包说明

IDEA快捷键:Alt + 回车,直接导入 java.time 包下的对应类即可,无包冲突!

4.4 常用方法(完整代码示例)

java 复制代码
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class JDK8DateDemo {
    public static void main(String[] args) {
        // 1. 获取当前时间
        LocalDate nowDate = LocalDate.now();       // 当前日期:2026-05-06
        LocalTime nowTime = LocalTime.now();       // 当前时间:15:30:25.123
        LocalDateTime nowDateTime = LocalDateTime.now(); // 当前日期+时间

        System.out.println("当前日期:" + nowDate);
        System.out.println("当前时间:" + nowTime);
        System.out.println("当前日期时间:" + nowDateTime);

        // 2. 创建指定时间(of方法,无参构造,直接传值)
        LocalDate myDate = LocalDate.of(2026, 5, 6);
        LocalTime myTime = LocalTime.of(12, 0, 0);
        LocalDateTime myDateTime = LocalDateTime.of(2026, 5, 6, 12, 0, 0);

        // 3.  DateTimeFormatter 格式化(核心!)
        // 定义格式化规则
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // LocalDateTime → 字符串
        String formatStr = nowDateTime.format(formatter);
        System.out.println("格式化后:" + formatStr);

        // 4. 字符串 → LocalDateTime(解析)
        String timeStr = "2026-05-06 12:00:00";
        LocalDateTime parseDateTime = LocalDateTime.parse(timeStr, formatter);
        System.out.println("解析后:" + parseDateTime);

        // 5. 获取单独的年月日时分秒
        int year = nowDateTime.getYear();
        int month = nowDateTime.getMonthValue();
        int day = nowDateTime.getDayOfMonth();
        System.out.println("年:" + year + " 月:" + month + " 日:" + day);

        // 6. 日期计算(加/减时间,不可变类,会返回新对象)
        LocalDateTime after = nowDateTime.plusDays(1); // 加1天
        LocalDateTime before = nowDateTime.minusHours(2); // 减2小时
    }
}

五、冒泡排序(手动实现)

5.1 核心原理

相邻两个元素两两比较,逆序则交换位置;每一轮循环将最大值/最小值冒到数组末尾

  • 轮数:数组长度 - 1
  • 每轮比较次数:数组长度 - 1 - 轮数

5.2 代码实现

java 复制代码
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {3, 1, 5, 2, 4};
        // 外层循环:控制排序轮数
        for (int i = 0; i < arr.length - 1; i++) {
            // 内层循环:控制每轮比较次数
            for (int j = 0; j < arr.length - 1 - i; j++) {
                // 前一个元素 > 后一个,交换位置(升序)
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        // 打印排序结果
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}
// 输出结果:1 2 3 4 5

六、Arrays工具类 常用方法

java.util.Arrays是Java提供的数组工具类 ,所有方法都是静态方法,直接通过类名调用。

核心方法演示

java 复制代码
import java.util.Arrays;
public class ArraysDemo {
    public static void main(String[] args) {
        int[] arr = {3, 1, 5, 2, 4};

        // 1. 数组升序排序
        Arrays.sort(arr);
        // 2. 把数组转为字符串(直接打印数组)
        System.out.println(Arrays.toString(arr)); 
        // 3. 二分查找(必须先排序)
        int index = Arrays.binarySearch(arr, 3);
        System.out.println("元素3的索引:" + index);
        // 4. 复制数组
        int[] newArr = Arrays.copyOf(arr, 3);
        System.out.println(Arrays.toString(newArr));
    }
}

七、面试核心:编译看左边,运行看右边 ⭐⭐⭐

7.1 成员方法(多态核心)

  • 编译看左边 :编译时检查引用类型(父类) 是否有该方法,无则编译报错
  • 运行看右边 :运行时执行子类重写的方法

7.2 成员变量(高频坑点)

  • 编译看左边,运行也看左边
  • 变量没有重写 ,只有隐藏,多态下访问变量只看引用类型

7.3 终极口诀

变量:编译运行都看左;方法:编译看左,运行看右!

代码示例(一看就懂)

java 复制代码
class Fu {
    // 父类成员变量
    int num = 10;
    public void show() {
        System.out.println("父类方法");
    }
}

class Zi extends Fu {
    // 子类同名成员变量(隐藏父类变量,不是重写)
    int num = 20;
    // 子类重写方法
    @Override
    public void show() {
        System.out.println("子类方法");
    }
}

public class Test {
    public static void main(String[] args) {
        // 多态:父类引用 指向 子类对象
        Fu f = new Zi();

        // 1. 访问成员变量:编译+运行 都看左边(父类)
        System.out.println(f.num); 
        // 结果:10 (不会输出子类的20)

        // 2. 调用成员方法:编译看左,运行看右
        f.show(); 
        // 结果:子类方法
    }
}

终极记忆口诀(面试直接背)

变量:编译运行都看左,
方法:编译看左,运行看右!


总结

  1. Object类 :所有类的父类,equals重写后比较内容,native是本地方法
  2. 包装类 :基本类型的引用形式,自动装箱拆箱简化代码,parseXxx转换字符串
  3. 大数类BigInteger处理超大整数,BigDecimal实现精确浮点数运算
  4. JDK8新日期LocalDate/LocalTime/LocalDateTime+DateTimeFormatter,线程安全、易用
  5. 冒泡排序:相邻元素比较交换,排序轮数=数组长度-1
  6. Arrays工具类:静态方法快速实现数组排序、打印、查找、复制
  7. 编译看左边:多态编译检查引用类型,运行执行子类重写方法
相关推荐
极客先躯1 小时前
高级java每日一道面试题-2025年12月07日-实战篇[Dockerj]-Docker daemon 的配置文件在哪里?常用的配置项有哪些?
java·docker·配置文件的实际位置·配置文件的格式规则·常用配置项全景与分类·配置如何生效·daemon 配置折射架构思维
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【49】状态图运行时引擎:CompiledGraph 源码解析
java·人工智能·spring
ADI_OP1 小时前
用SigmaStudio+软件来开发ADSP-21565
算法·音视频·adi dsp中文资料·adi音频dsp·adi dsp开发教程
yuanyuan2o21 小时前
从最小项目开始的 CMake 教程
c语言·开发语言·arm开发·c++·makefile·make·cmake
lifewange1 小时前
pytest 找不到文件?直接在 pytest.ini 配置根目录 + 路径(最简单方案)
开发语言·python·pytest
城事漫游Molly1 小时前
研究设计核心 Toolkit:从“知道方法”到“真正会设计”
大数据·人工智能·算法·ai写作·论文笔记
大鹏说大话1 小时前
MySQL + Redis + Caffeine:Java后端通用三级缓存架构实战
开发语言
yuanpan1 小时前
Python 桌面 GUI 入门开发:从 tkinter 窗口到简易记事本
开发语言·python
Tutankaaa1 小时前
从10队到50队:知识竞赛软件的高并发场景如何设计?
java·经验分享·后端·spring