当前位置:首页 > 技术 > 正文内容

Java SE中的类与对象基础

访客 技术 2026年6月1日 1

1. 面向对象初步理解

1.1 什么是面向对象

Java是一门纯面向对象语言(Object Oriented Programming,简写为OOP),在OOP的世界中,一切皆被视为对象。面向对象是一种以对象间协同工作来解决问题的编程思想,它更符合人类对现实世界的认知模式,对于大型软件的设计、扩展和维护具有明显优势。

1.2 面向对象 vs 面向过程

  • 面向过程:关注操作步骤和流程
  • 面向对象:关注对象本身——寻找对象、创建对象、使用对象完成交互

2. 类的定义与使用

2.1 类与对象的关系

类是对某一类对象的抽象描述,而对象是类的具体实例。类定义了对象的结构和行为。

2.2 类的定义格式

// 定义类
class ClassName{
    field;      // 字段(属性)或成员变量
    method;     // 方法(行为)或成员方法
}

建议每个Java文件只定义一个类,以提高可维护性。

3. 类的实例化

3.1 实例化概念

从类创建对象的过程称为实例化。

Dog dog = new Dog();

关键字 new 用于创建对象实例,使用 . 操作符访问对象属性和方法。同一个类可以实例化多个对象。

class Dog{
    public String name;  // 成员变量
    public int age;      // 成员变量(默认初始化为0)
    
    public void eat(){
        System.out.println(name + " 正在吃东西");
    }
}

成员变量遵循默认初始化规则:引用类型为 null,基本类型为其默认值(如 int 为 0)。通过对象引用可访问成员变量和方法。

4. this 引用

4.1 为何需要 this

当多个对象调用同一个方法时,可能出现形参与成员变量同名的情况。this 引用指向当前对象,用于解决命名冲突。

this 代表当前对象的引用。哪个对象调用了方法,this 就指向哪个对象。

4.2 this 的特性与用法

  • this 的类型与当前类类型一致,它指向调用该方法的对象
  • this 只能在成员方法中使用
  • this 只能引用当前对象,不能引用其他对象
  • this 是成员方法的一个隐藏参数,编译器自动传递

底层实现等价于:public void setDate(Date this, int year, int month, int day) { ... }

this 的主要用途:访问当前对象的成员变量、调用非静态成员方法、调用其他构造方法。

5. 对象的构造与初始化

5.1 构造方法

5.1.1 概念

构造方法(构造器)是一种特殊方法,其名称必须与类名相同。在创建对象时由编译器自动调用,且在对象生命周期内只执行一次。

5.1.2 语法

方法名() {  
    // 初始化逻辑
}
public class Date {
    public int year;
    public int month;
    public int day;

    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("构造方法被调用");
    }

    public void printDate() {
        System.out.println(year + "-" + month + "-" + day);
    }

    public static void main(String[] args) {
        Date d = new Date(2021, 6, 9); // 自动调用构造方法
        d.printDate();
    }
}

注意事项:

  1. 构造方法主要用于初始化对象
  2. 一个类可以定义多个构造方法(重载)
  3. 若未显式定义构造方法,Java会提供默认无参构造;一旦自定义,默认构造不再提供
  4. 构造方法可以重载
  5. 可使用 this(...) 调用其他构造方法,但必须放在第一行,且不能形成循环调用

6. 封装

6.1 封装的概念

封装是面向对象三大特性之一(封装、继承、多态)。它通过隐藏内部实现细节,只对外暴露必要的接口,提高模块的安全性和可维护性。例如计算机用户只需知道如何开关和输入,而不需要了解CPU、内存等内部工作原理。

6.2 访问限定符

Java提供多种访问权限控制:publicprotectedprivate 和默认(包权限)。通过合理使用限定符,可以实现数据的封装。

6.3 包的概念

包类似于文件系统中的文件夹,用于组织和管理类。使用 import java.util.*; 导入包中类,也可以自定义包。常用包包括:

  • java.lang:基础类(String、Object等),自动导入
  • java.lang.reflect:反射编程
  • java.net:网络编程
  • java.sql:数据库支持
  • java.util:工具类(集合等)
  • java.io:输入输出

7. static 成员

static 修饰的成员变量被称为静态成员变量,它不属于某个具体对象,而是被所有对象共享。静态成员可以直接通过类名访问,无需依赖对象引用。

static 修饰的成员方法被称作静态成员方法,它属于类而非特定对象。静态方法通常用来访问静态成员。

  • 非静态方法可以直接调用静态方法,反之不可——静态方法中必须通过 new 创建对象才能访问非静态成员
  • 静态方法中不能使用 this 关键字

8. 代码块

静态成员变量的初始化方式包括:就地初始化、通过 getter/setter、构造方法以及代码块。代码块分为:

  • 静态代码块:在类加载时执行一次
  • 非静态代码块(实例代码块/构造代码块):每次创建对象时执行

执行顺序为:静态代码块 → 实例代码块 → 构造方法。静态代码块仅执行一次。

9. 对象的打印

通过重写 toString() 方法,可以自定义对象的字符串表示,便于调试和输出。

public class Person {
    String name;
    String gender;
    int age;

    public Person(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    @Override
    public String toString() {
        return "[" + name + "," + gender + "," + age + "]";
    }

    public static void main(String[] args) {
        Person person = new Person("Jim", "男", 18);
        System.out.println(person);
    }
}

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。