news 2026/6/17 1:08:01

Java 入门通关秘籍——4

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 入门通关秘籍——4

Java 入门通关秘籍 · Day 10


一、 接口 (Interface)

1. 概念

  • 定义:接口是一种标准、规范,是接口的实现者和接口的使用者都必须遵循的约定。
  • 本质:它只规定“你能做什么”(方法声明),不关心“你怎么做”(方法实现)。

2. 语法与特点

  • 关键字:“interface”
  • 特点
    • 编译后生成独立的 “.class” 文件。
    • 不能创建对象(不能 “new”),但可以声明引用。
    • 属性:默认是 “public static final”(公开、静态、常量),必须初始化。
    • 方法:默认是 “public abstract”(公开、抽象),没有方法体。
    • 构造方法:接口没有构造方法。

3. 实现类

  • 语法:“class 类名 implements 接口名 {}”
  • 规则
    • 如果实现类不想成为抽象类,必须实现接口中所有的抽象方法。
    • 实现方法的访问修饰符必须是 “public”(因为接口方法是 public,实现不能缩小权限)。
    • 接口可以多实现:一个类可以同时实现多个接口(“class A implements B, C {}”)。

4. 接口的继承

  • 多继承:接口与接口之间是多继承关系(“interface A extends B, C {}”)。
  • 单继承:类与接口之间是实现关系(类单继承,多实现)。

5. 接口的作用

  • 扩充子类能力:弥补 Java 单继承的不足。
  • 降低耦合度:将接口的定义与实现分离,使用者只依赖接口,不依赖具体实现。

6. 接口回调

  • 概念:先有接口的使用者,再有接口的实现者。
  • 应用:常用于解耦,例如:定义回调接口,由第三方去实现具体逻辑。

二、 总结:接口 vs 抽象类


记忆口诀:

  • 接口是“规范”,抽象类是“模板”。
  • 接口全抽象,抽象类半抽象。
  • 接口无构造,抽象类有构造。
  • 接口多实现,抽象类单继承。

Java 入门通关秘籍 · Day 11


一、 内部类 (Inner Class)

1. 概念

  • 定义:定义在一个类内部的类。
  • 优势:可以直接使用外部类的私有成员,而不破坏外部类的封装性。
  • 分类:成员内部类、静态内部类、局部内部类、匿名内部类。

2. 成员内部类

  • 位置:定义在类以内,方法以外(和成员变量同级)。
  • 特点
    • 类似于实例变量。
    • **创建对象依赖外部类对象:**必须先有外部类对象,才能创建内部类对象。
      Outer o = new Outer();
      Outer.Inner i = o.new Inner();
    • 访问外部成员:可以直接访问外部类的私有成员。
    • 限制:成员内部类中不能定义静态成员(静态变量和静态方法)。
    • 指代外部对象:“外部类名.this” 代表当前外部类对象。

3. 静态内部类

  • 位置:定义在类以内,方法以外,同时被 “static” 修饰。
  • 特点
    • 类似于静态变量。
    • 创建对象不依赖外部类对象:直接通过外部类名创建。
      Outer.Inner i = new Outer.Inner();
    • 访问外部成员:只能访问外部类的静态成员(静态变量和静态方法)。
    • 可定义静态成员:内部可以定义静态变量和静态方法。

4. 局部内部类

  • 位置:定义在方法内部。
  • 特点
    • 类似于局部变量。
    • 创建位置:必须在定义它的方法内部创建。
    • 访问限制
      • 可以访问外部类的成员。
      • 可以访问方法内的局部变量,但局部变量必须是 “final” 修饰(JDK 8.0 及以上版本默认隐含 “final”,称为“语法糖”)。

5. 匿名内部类

  • 概念:一个特殊的局部内部类。
  • 特点
    • 没有名字。
    • 必须继承一个类或实现一个接口。
    • 基于一个匿名内部类只能创建一个对象。
    • 语法
      接口名 引用名 = new 接口名() {
      // 接口中需要实现的方法
      };
  • 优缺点:
    • 优点:减少代码量,让编程思路连贯(常用于事件监听、回调)。
    • 缺点:可读性差,代码不易维护。

6. 应用场景

  • 成员内部类:需要访问外部类私有成员,且对象生命周期与外部类关联紧密时。
  • 静态内部类:只需要访问外部类静态成员,且不希望依赖外部类实例时。
  • 局部内部类:只在某个方法内部临时使用,且仅使用一次时。
  • 匿名内部类:快速实现接口或继承类,通常用于简化代码(如:GUI 事件监听、线程创建)。

总结:四种内部类对比



Java 入门通关秘籍 · Day 12


一、 Object 类 (所有类的老祖宗)

1. 介绍

  • 位置:位于 “java.lang” 包中。
  • 地位:它是所有类的父类(直接父类或间接父类)。
  • 作用:如果一个类没有显式继承其他类,那么它默认继承 “Object”。因此,Object 类中的方法所有类都可以直接使用。

2. 常用方法

  • “getClass()”:
    • 作用:返回对象的实际类型(Class对象)。
    • 应用:常用于判断两个引用是否指向同一个具体类型。
  • “hashCode()”:
    • 作用:返回对象的哈希码值(整数)。
    • 原理:通常将对象在堆内存中的十六进制地址转换为十进制整数。不同对象哈希码一般不同。
  • “toString()”:
    • 作用:返回对象的字符串表示形式。
    • 默认实现:通常是 “类名@哈希码”。
    • 开发建议:子类通常会重写此方法,以便返回更有意义的属性信息(如 “return name + “,” + age;”)。
  • “equals(Object obj)”:
    • 作用:比较对象的内容是否相同。
    • 默认实现:其实底层就是 “==”,即比较两个引用的地址是否相同。
    • 开发建议:子类通常需要重写此方法,用于比较对象内部的属性值是否一致。
  • “finalize()”:
    • 作用:垃圾回收器回收垃圾对象时自动调用。
    • 注意:开发者一般不重写此方法,因为它执行时机不可控。

3. == 与 equals 的区别 (面试高频)

  • “==” (双等号):
    • 基本数据类型:比较数值是否相等。
    • 引用数据类型:比较地址是否相等(即是否指向同一个对象)。
  • “equals()”:
    • 默认行为:继承自 Object,等同于 “==”(比较地址)。
    • 实际应用:通常被重写,用于比较对象的内容是否相等。
    • 重写原则:先判断地址是否相同(this == obj),再判断类型是否相同,最后比较属性。

二、 包装类 (Wrapper Class)

1. 概念

  • 背景:Java 是面向对象语言,但基本数据类型(int, char等)不是对象。为了将它们纳入面向对象体系,提供了对应的包装类。
  • 位置:位于 “java.lang” 包(自动导入)。

2. 基本数据类型与包装类对应表

3. 数据转换 (装箱与拆箱)

  • 装箱 (Boxing):基本数据类型 -> 包装类
    • “Integer i = new Integer(12);” // 手动装箱
    • “Integer i = 12;” // JDK5.0+ 自动装箱 (编译器自动转换)
  • 拆箱 (Unboxing):包装类 -> 基本数据类型
    • “int a = i.intValue();” // 手动拆箱
    • “int a = i;” // JDK5.0+ 自动拆箱
  • 注意:频繁装箱拆箱会影响性能。

4. 字符串与基本数据类型的转换

  • String -> int:“int num = Integer.parseInt(“123”);”
  • int -> String:“String s = String.valueOf(123);” 或 “”" + 123"
  • 注意:字符串转数字时,字符串必须是纯数字,否则会报
    “NumberFormatException”。

三、 String 类 (重点)

1. 创建方式

  • 直接赋值:“String s1 = “hello”;”
    • 特点:先去字符串常量池找,如果有就直接引用,没有才创建。节省内存。
  • new 关键字:“String s2 = new String(“world”);”
    • 特点:不管常量池有没有,都会在堆内存开辟新空间创建对象。
  • 区别:“s1 == s2” 结果为 “false”,因为它们指向不同的内存地址(一个在池,一个在堆)。

2. 常用方法

  • “charAt(int index)”:获取指定下标字符。
  • “length()”:获取字符串长度。
  • “equals(Object obj)”:比较内容是否相同(重写了 Object 的方法)。
  • “contains(String str)”:判断是否包含子串。
  • “split(String regex)”:切割字符串,返回数组。
  • “trim()”:去除首尾空格。
  • “indexOf()” / “lastIndexOf()”:查找字符/子串位置。

3. 字符串的特点

  • 不可变性:一旦创建,内容不能改变。每次拼接或修改都会生成新的对象。
  • 优缺点:安全(多线程),但频繁修改效率低。

四、 可变长的字符串 (StringBuilder & StringBuffer)

1. 为什么要用它们?

  • 解决 String 不可变导致的频繁创建对象、效率低的问题。

2. 区别

  • StringBuffer:JDK 1.0 版本,线程安全,效率低。(方法加了 synchronized)
  • StringBuilder:JDK 5.0 版本,线程不安全,效率高。(推荐使用)

3. 常用方法

  • “append(任意类型)”:追加内容,返回自身对象。
  • “insert(int offset, 任意类型)”:插入内容。
  • “reverse()”:反转字符串。

五、 BigDecimal 类 (了解)

1. 作用

  • 用于精确的浮点数计算(解决 float/double 计算精度丢失问题,如 “0.1 + 0.2 != 0.3”)。

2. 常用方法

  • 加法:“add()”
  • 减法:“subtract()”
  • 乘法:“multiply()”
  • 除法:“divide()” (注意:除法可能需要指定保留位数和舍入模式,如 “divide(bd2, 2, BigDecimal.ROUND_HALF_UP)”)

3. 注意事项

  • 构造方法建议使用 “String” 参数传入,如 “new BigDecimal(“0.1”)”,而不是 “new BigDecimal(0.1)”,后者仍可能有精度误差。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/17 1:03:10

表格数据RAG分块策略:10种生产级Chunking方法实战指南

1. 项目概述:为什么表格数据的分块(Chunking)是RAG落地中最容易被忽视的“地基工程”你手头有一份300行50列的销售明细Excel表,里面混着产品ID、客户名称、地区编码、下单时间、单价、数量、折扣率、物流状态、售后标记……你想把…

作者头像 李华
网站建设 2026/6/17 0:48:52

中法AI共识落地实操指南:数据跨境、模型安全与本地化部署

1. 项目概述:一场被低估的“技术外交”实操现场“中法寻求AI共识”这八个字,表面看是两条新闻标题里常见的外交短语,但落到实际产业一线,它根本不是什么空泛的政治表态,而是一次在芯片设计、大模型训练数据跨境流动、A…

作者头像 李华
网站建设 2026/6/17 0:46:54

QorIQ PME驱动API与PMCI接口实战:嵌入式网络处理器硬件加速开发指南

1. 项目概述与PME核心价值在嵌入式网络处理器的世界里,性能与效率的平衡是永恒的课题。当你的系统需要处理海量网络流量,并实时执行深度包检测(DPI)、入侵防御(IPS)或内容过滤时,通用CPU往往会成…

作者头像 李华
网站建设 2026/6/17 0:41:16

如何高效使用MAA明日方舟自动化助手:解放双手的完整指南

如何高效使用MAA明日方舟自动化助手:解放双手的完整指南 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://g…

作者头像 李华
网站建设 2026/6/17 0:37:05

3分钟学会B站视频转文字:这款开源工具让你告别手动转录

3分钟学会B站视频转文字:这款开源工具让你告别手动转录 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾为了整理网课笔记而反复暂停播放&…

作者头像 李华