Java学习之旅第二季-1:类与对象

1.1 专栏介绍

主要内容

Java学习之旅的第二季主要涉及Java中面向对象的语法,涉及到众多关键字及理论点,是进一步学习Java的基础。

适合人群

有基本的Java语法基础,可以先阅读Java学习之旅第一季-Java基础语法

计算机相关专业的在校大学生

学习目标

理解类与对象的概念和关系、掌握类的声明与对象的创建、掌握属性的声明与访问、掌握方法的声明与调用、理解方法的传参方式、掌握构造方法的声明与调用、理解类的继承及实现语法、理解抽象类与接口以及如何使用、掌握方法重载与重写的语法、掌握密封类的使用语法、掌握内部类的声明与使用、理解枚举的特点及使用语法、理解记录的特点及使用语法、理解OOP的特征

开发环境

本专栏中的开发环境为:Windows 11专业版,Oracle JDK 25, IntelliJ IDEA 2025.2.2 (Community Edition)

1.2 面向对象编程

面向对象编程(Object-Oriented Programming),简称 OOP,是当今占主导地位的编程范式,已经取代了 20 世纪 70 年代开发的“结构化”或过程式编程技术。由于 Java 是面向对象的,所以要熟练使用 Java,就必须熟悉面向对象编程。

面向对象编程以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石。

传统的结构化编程包括设计一组过程(或算法)来解决问题。一旦确定了这些过程,传统上的下一步就是找到合适的方式来存储数据。这是为何Pascal语言的设计者尼古拉斯·沃斯(Niklaus Wirth)将其著名的编程著作命名为《算法 + 数据结构 = 程序》的原因。在沃斯的书名中,算法排在首位,数据结构排在其次。这反映了当时程序员的工作方式。首先,他们确定处理数据的程序;然后,他们决定对数据施加何种结构以使处理更简便。而面向对象编程则颠倒了这一顺序:先考虑数据,然后考虑用于操作数据的算法。对于较小的问题,将它们分解成一系列步骤的方法效果非常好。但是对于较为复杂的问题,使用对象的方法更为合适。

使用面向对象编程时对象之间相互通信,并且作为它们交互的结果计算出有用的结果

image-20251002005412005

1.3 类与对象的概念与关系

人类认识世界首先是具体的个体,随后会对相同特征和行为的个体进行分类,比如:动物、植物。

同样的,Java语言将分类的概念抽取成类,将其特征和行为就使用为类的属性和方法表示。

而类的具体个体则称之为对象或实例

Java中除了类之外,还有接口、枚举、记录、注解等可以独立存在的语法形式,后续会一一介绍。

类与对象的关系都是是怎么样的呢?

类(Class)是模板,对象(Object)就是模板的具体实现,对象也称为实例(Instance)

下面的示意图中,左边的Car就是小汽车的模板,通过模板就能创建很多不同的小汽车对象,比如右边的Audi、NIssan、Volvo等。image-20251002005455851

如何用面向对象的思维来描述世界呢?下面有一张图。

image-20251003211840965

第一步:发现类

世界上有形形色色的动物,人类通过观察和研究,发现有一些动物具有相同的特征(主要是生物学特征),就将其归类为某种动物,如上图中的狗。一旦归类之后,就可以抽象出类的概念。比如上图中的动物可以成为"狗"类。

第二步:发现类的属性

如果想对狗进行描述,就可以找出它们公共的特征。如:品种、毛色等。这些可以作为类的属性。

第三步:发现类的方法

同样的,要能描述它们的行为,如看门、犬吠等,可以在类中设计对应的方法,在方法中实现具体的行为。

1.4 类的声明

Java中声明类需要使用关键字class,基本语法如下:

[修饰符] class 类名{
	//类成员
}

上面的语法中,修饰符放在中括号里表示可选,Java支持众多的修饰符,后续会一一介绍。最常用的一个修饰符是与访问控制有关的 public,后面我创建的类默认都是public类。

类名后的大括号不可省,大括号内就是该类的成员,包括:

  • 属性
  • 方法/构造方法
  • 代码块/静态代码块
  • 内部类/枚举/接口/注解/记录等

下面举一个具体的例子,声明一个类表示"狗"类:

package com.laotan.article1;

/**
 * @author 老谭
 */
public class Dog {

}

上面代码第1行首先声明了类所在的包,一段文档注释之后,就是正式的类声明。以下对第6行进行说明:

  • public 是类声明时最常用的修饰符,意思是公开的,可以被项目中其他代码访问。public类所在的文件名要与类名完全相同。如果要改名,使用IDEA提供的重构(Refactor)功能,而不要直接在文件中像修改字符串一样修改类名。
  • class 是用于声明类的关键字,注意是全小写
  • class 后就是类的名称,类名的命名规则可以参考Java学习之旅第一季-3:Java程序初体验

以上我们就声明好了一个Dog类,虽然暂时没有什么功能,但下一步就可以对Dog实例化了。

1.5 类的实例化

声明的类可以理解为自定义数据类型,使用类声明的变量即为其类型的变量,可以称为实例或对象,为了给这个变量赋值,我们需要使用类创建一个对象,这个过程通常称为类的实例化(instantiation)

类的实例化目的有两个:

  • 在内存中分配空间
  • 为属性赋值

语法:

类名 实例名;                    // 只声明不赋值,没有创建对象,没有实例化
类名 实例名 = new 构造方法( );   // 声明且赋初始值,创建了对象,进行了实例化

这里的 new 就是用于类实例化的关键字,当然之前我们也使用它进行了数组的创建。

new 后面紧跟构造方法,构造方法是Java中的一个重要且特殊的方法,目前先记住其语法规则,后续专门阐述,它的命名规则是:名称与类名完全相同,后面跟上小括号(可以有参数)

假如我们要使用Dog类创建一个具体的Dog(家里的二哈),按照语法,可以使用如下的代码:

Dog erHa = new Dog();

可以看到,这句话其实很类似声明变量并赋初始值,只不过初始值不是字面量,而是使用new关键字调用类的构造方法创建的实例(对象)。

变量的命名规则可以参考Java学习之旅第一季:7-变量

这句代码我们仍然把它放在 main 方法中,如果方便起见,可以就在Dog类中实现main方法:

package com.laotan.article1;

public class Dog {
    static void main() {
        Dog erHa=new Dog();
    }
}

如果要正式一点,可以单独实现一个测试类,在测试类中的main方法中编写测试代码,测试类的名称我以带测试的类名加上Test结尾,就和带测试的类放在一起:

public class DogTest {
    static void main() {
        Dog erHa = new Dog();
    }
}

后续我都采用第二种写法,将实现逻辑的类和测试类分开实现。

此时我建好了两个类,Dog类和DogTest类,Dog类表示"狗"类,DogTest中有入口方法main方法。

Java中的一个类最多只有一个main方法,也可以没有main方法,此时该类没有入口,不能直接运行,只能被其他类使用。

Java项目中允许多个带有main方法的类,运行时选择其中一个作为入口就行。

1.6 null 对象

null(读音nʌl)在Java中既是一个特殊的引用类型,也是该类型的唯一对象。它的特点如下:

  • 没有名称,因此不能声明该类型的变量
  • 该类型只有一个值,用 null 表示,日常交流通常称为空对象
  • null 可以赋值给任意引用类型的变量
  • 不可赋值为基本数据类型,也不可与基本数据类型比较

下面使用两种不同的写法,体会下它的作用:

Dog dog;
Dog dog = null;    // 将 null 对象赋值给变量dog

第 1 行代码只声明了变量dog但没有给它赋初始值,那么在使用 dog前必须赋初始值,否则会有编译错误。

第2行代码不仅声明了变量dog同时赋值始值是 null,就算后面使用它,编译也不会出错,但是在运行时访问其属性或方法会抛出 NullPointerException(NPE,即空指针异常)。

1.7 小结

本小节是Java学习之旅的第二季的开篇,重点讲解面向对象编程(OOP)的概念。通过具体案例(如Dog类)演示类的声明、实例化(new关键字)和对象使用,帮助读者掌握如何声明类及如何实例化类。特别讲解了null对象的特性及空指针异常问题,为后续深入学习Java打下坚实基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值