【Java那些年系列-启航篇 04】Java程序架构:深入理解类与对象的设计原则

作者名称:纸飞机-暖阳

作者简介:专注于Java和大数据领域,致力于探索技术的边界,分享前沿的实践和洞见

文章专栏:Java那些年专栏

专栏介绍:本专栏涵盖了 Java SE从基础语法到面向对象编程,从异常处理到集合框架,从I/O流到多线程并发,再到网络编程和虚拟机内部机制等一系列编程要素

个人感慨:市面上关于JavaSE的学习路线或知识图谱很繁杂,学习起来比较费劲,Java知识体系非常庞大,刚接触阶段只需要关注部分重要的知识点基本可以入门,但是需要在Java这个领域或是行业深耕,还是需要时间以及精力慢慢沉淀,如今AI盛行,对于计算机从业者是冲击也是机遇,很喜欢的一句话:开始很难,但总比一直等待要强。

JavaSE详细学习路线图以及思维导图

【Java那些年系列-启航篇 01】史上最强JavaSE学习路线图 & 知识图谱

【Java那些年系列 04】 Java程序架构:深入理解类与对象的设计原则

01 代码组织

Java,作为一种面向对象的编程语言,以其强大的类库、跨平台能力和简洁的语法设计而广受欢迎。Java程序的结构基于类和对象的概念,其中类是创建对象的模板,方法是类的行为定义,变量则是状态的表示。为了编写出高效、可维护的Java程序,深入理解类、方法和变量的结构和用法至关重要。

1.1 类(Classes):Java程序的构建蓝图

1. 类的定义

类是Java程序中的基本构建块,它定义了一组具有相同属性和行为的对象。类的定义始于class关键字,后跟类名和类体。类体中包含了类的属性(变量)和方法(函数)。

public class MyClass {
    // 属性和方法的声明
}
2. 类的属性

属性是类的状态信息,通常用变量来表示。它们定义了对象的状态,并且可以有不同的访问修饰符来控制其可见性,如publicprivateprotecteddefault

public class User {
    private String name; // 私有属性,只能在类内部访问
    public int age;     // 公开属性,可以从任何地方访问
}
3. 类的方法

方法是类的行为定义,它们描述了对象可以执行的操作。方法由访问修饰符、返回类型、方法名和参数列表组成。

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}
4. 构造方法

构造方法是特殊的方法,用于在创建对象时初始化对象的状态。它们的名称与类名相同,并且没有返回类型。

public class Car {
    private String model;
    private int year;

    public Car(String model, int year) {
        this.model = model;
        this.year = year;
    }
}

1.2 方法(Methods):类的行为体现

1. 实例方法

实例方法是定义在类中,与对象实例相关联的方法。它们可以访问类的属性和其他实例方法。

public class Person {
    private String firstName;
    private String lastName;

    public void introduce() {
        System.out.println("Hello, my name is " + firstName + " " + lastName);
    }
}
2. 静态方法

静态方法是属于类的,而不是类的某个实例。它们可以在没有创建类实例的情况下调用。

public class MathUtils {
    public static int max(int a, int b) {
        return (a > b) ? a : b;
    }
}
3. 抽象方法

抽象方法是没有具体实现的方法,它只有声明而没有方法体。抽象方法通常在抽象类中定义,并要求子类实现。

public abstract class Shape {
    public abstract double getArea();
}

1.3 变量(Variables):存储数据的容器

1. 实例变量

实例变量是定义在类中,属于对象的状态信息。每个对象都有自己的一套实例变量副本。

public class Account {
    private double balance;

    public void deposit(double amount) {
        balance += amount;
    }
}
2. 类变量

类变量也称为静态变量,它们属于类本身,而不是类的某个实例。类变量在所有对象之间共享。

public class Counter {
    private static int count = 0;

    public Counter() {
        count++;
    }

    public static int getCount() {
        return count;
    }
}
3. 局部变量

局部变量是在方法内部定义的变量,它们只在方法被调用的执行过程中存在。

public int multiply(int a, int b) {
    int result = a * b;
    return result;
}

02 源代码文件

Java作为一种广泛使用的编程语言,其程序结构的规范性对于代码的可读性、可维护性和跨平台兼容性至关重要。命名规则和文件扩展名是Java程序结构中的基础元素,它们确保了代码的组织性和一致性。

2.1 命名规则:Java程序的命名艺术

1. 标识符命名规则

在Java中,标识符是用于命名类、方法、变量等程序元素的名称。Java的标识符命名规则如下:

  • 标识符由字母、数字、下划线(_)或美元符号($)组成,但不能以数字开头。
  • 标识符是区分大小写的,即myVariablemyvariable是两个不同的标识符。
  • 保留字(如publicprivateclass等)不能用作标识符。
2. 类命名规则

类名应该清晰、简洁,并能够反映类的作用或特性。以下是一些类命名的最佳实践:

  • 使用名词或名词短语。
  • 每个单词的首字母大写,即大驼峰命名法(CamelCase),例如MyClass
  • 避免使用下划线和美元符号,除非有特殊原因。
3. 方法和变量命名规则

方法和变量的命名应该直观、有意义,以便于理解其功能和用途。以下是一些命名的最佳实践:

  • 方法名通常使用动词或动词短语,表示执行的操作,例如calculateSum
  • 变量名应该描述其所存储的数据,例如employeeList表示一个员工列表。
  • 同样使用小驼峰命名法(lowerCamelCase),例如userName
4. 常量命名规则

常量是程序中固定不变的值,它们的命名规则如下:

  • 全部字母大写,单词之间使用下划线分隔,例如MAX_VALUE
  • 避免使用缩写,除非是广泛认可的缩写,例如PI

2.2 文件扩展名:Java源代码的文件标识

1. Java源文件

Java源代码文件的扩展名是.java。每个源文件通常包含一个公共类的定义,并且文件名应与公共类名相同。例如,包含MyClass的文件应命名为MyClass.java

2. 类文件

编译Java源代码后,会产生.class扩展名的字节码文件。这些文件包含了编译后的Java代码,可以由Java虚拟机(JVM)执行。

3. 包文件

Java的包文件通常具有.jar(Java Archive)扩展名,它们是包含了多个类文件和其他资源的压缩文件。.jar文件可以作为单个实体被部署和运行,便于程序的分发和安装。

2.4 源码映射文件

在进行代码混淆或优化时,可能会生成.map.smap等源码映射文件,这些文件用于映射混淆后的代码到原始源代码,便于调试。

03 包和访问控制

Java程序结构的设计是软件开发中的关键环节,它直接影响到代码的可读性、可维护性和扩展性。Java通过包(Packages)、访问控制、类和接口的组织来提供强大的结构化编程能力。本文将详细探讨这些概念,帮助开发者构建清晰、高效的Java程序。

3.1 包(Packages):命名空间和模块化

1. 包的定义和作用

包是Java中用于组织类和接口的命名空间。它们提供了一种将类分组的方法,避免了名称冲突,并提供了访问控制。包名通常反映了类的功能和位置,使用反向互联网域名的方式来确保唯一性。

package com.example.myapp;
2. 包的声明

在Java源文件中,包的声明是文件的第一行,使用package关键字后跟包名。

package com.company.project;

public class MyClass {
    // ...
}
3. 包的访问控制

包可以具有不同的访问级别,如公开(public)或私有(private)。默认情况下,如果包没有指定访问级别,则为默认包,其访问级别为包私有。

3.2 访问控制:保护类和成员

1. 访问修饰符

Java提供了四种访问修饰符来控制类、方法和变量的访问级别:

  • public:公开访问级别,可以被任何其他类访问。
  • protected:受保护的访问级别,可以被同一个包内的类和子类访问。
  • default(无修饰符):默认访问级别,只能被同一个包内的类访问。
  • private:私有访问级别,只能被声明它的类访问。
2. 访问控制的重要性

访问控制是封装原则的一部分,它帮助隐藏类的内部实现细节,只暴露必要的接口。这提高了代码的安全性和灵活性。

3.3 组织类:构建程序的基石

1. 类的定义

类是Java中定义对象的蓝图。它包含了字段(变量)和方法(函数),以及构造函数用于初始化对象。

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

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
2. 类的组织

类应该根据其功能和职责进行组织。相关功能的类可以放在同一个包中,以便于管理和维护。

3.4 接口(Interfaces):定义契约

1. 接口的定义

接口在Java中是一种完全抽象的类,它只包含未实现的方法声明。接口定义了类必须实现的方法,但不提供实现。

public interface Drivable {
    void drive();
}
2. 接口的作用

接口用于定义类之间的契约。它们允许多个不相关的类共享相同的方法签名,而不需要共享实现代码。

3. 实现接口

类可以使用implements关键字来实现一个或多个接口,并且必须提供所有接口方法的具体实现。

public class Car implements Drivable {
    public void drive() {
        System.out.println("Car is driving on the road.");
    }
}
  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏之以寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值