【自学】Java核心技术卷1_4对象与类

本文深入讲解面向对象编程的核心概念,包括实例、实例域、方法、状态及类间关系,如依赖、关联、聚合、组合、继承和实现。探讨了构造器、对象变量、静态域与方法、工厂方法模式,以及调用方式的区别。介绍了Java类库中表示时间的Date和LocalDate类,强调了数据私有性和初始化的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 实例instance:由类构造对象的过程称为创建类的实例
  • 实例域instance field:对象中的数据称为实例域
  • 方法:操纵数据的“过程”称为方法(这里是面向过程编程的“过程”)
  • 状态:对象的实例域的值集合称为对象当前的状态(只能通过调用方法改变状态)

类之间的关系:

  • 强弱程度:依赖<关联<聚合<组合<继承(尽量减弱类之间的关系,降低类间耦合)
  • 依赖dependency(A uses-a B):A类的方法用到了B类的对象,这种使用关系是偶然、临时的,很弱(B是A方法的局部变量、参数;A向B发送消息,影响B类发生变化;A调用B的静态方法)(人和工具)
  • 关联Association:两个类或者两个接口之间语义级别强依赖,单向、双向均可,代码层面表现为被关联的B类以属性的形式出现在关联类A中(即B类对象是A的成员变量,或A引用了B的全局变量)。关联又分为聚合、组合两类。
  • 聚合aggregation(A has-a B):A类的对象包含B类的对象,即B类对象是A类的实例数据(公司和员工)
  • 组合composition(A contain B):一种强聚合关系,整体与部分的关系(人和大脑)
  • 继承inheritance(A is-a B):父类、子类。也有称继承关系为“泛化”
  • 实现realization(A realize B):类实现一个或多个接口,表示具备某种能力。
  • https://i-blog.csdnimg.cn/blog_migrate/d50263f8e422f0d8ca0b3a9338864bfb.png

——————————————————————————————————————————

  • 先从设计类开始,再往类中添加方法:分析问题中的名词、动词,负责完成动作的对象
  • 构造对象、指定其初始状态、应用方法
  • 构造器constructor:与类同名的用于构造、初始化对象实例的方法。
  • 对象变量:构造好的对象可放在对象变量中,以便多次使用,对象变量的值只是对对象的引用而非对象本身的实例域,没有实际包含对象(此处的引用区别于C++的变量引用别名,而是类似于指针的存在,不过java没有指针)。对象变量没有引用对象时不能调用方法

  • Java类库将保存时间与给时间点命名分开,类库包含表示时间点的Date类、日历表示法的LocalDate类,LocalDate类使用静态工厂方法构造对象
  • 更改器方法mutator method:能修改对象状态的方法。(默认的)
  • 访问器方法accessor method:只访问对象状态的方法。(要带有const)
  • Java所有方法都必须在类的内部定义,但方法是否内联由Java虚拟机决定

——————————————————————————————————————————

static

  • 静态域:属于类不属于对象,类的所有实例(对象)共享静态实例域(对象的数据)
  • 静态常量:static final
  • 静态方法:没有隐式参数this,不能操作对象的实例,可以访问类的静态域,类名、对象名均可调用静态方法

——————————————————————————————————————————

  • ——————————————————————————————————————————

工厂方法模式

  • 处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂通常是一个用来创建其他对象的对象。工厂是构造方法抽象,用来实现不同的分配方案。
//定义几个类
class Button{/* ...*/}
class WinButton extends Button{/* ...*/}
class MacButton extends Button{/* ...*/}
//定义工厂接口ButtonFactory
interface ButtonFactory{
    abstract Button createButton();//接口的抽象方法
}
//实现接口的不同的类
class WinButtonFactory implements ButtonFactory{
    Button createButton(){
        return new WinButton();
    }
}
class MacButtonFactory implements ButtonFactory{
    Button createButton(){
        return new MacButton();
    }
}

——————————————————————————————————————————

  • 按值调用(call by value) :方法接收的是调用者提供的值。不能修改传值调用所对应的变量值,即不能修改形参对应变量的值。
  • 按引用调用(call by reference):方法接收的是调用者提供的变量地址(对某个变量的引用)。方法可以修改传递引用所对应的变量值,即可以修改形参这个引用所指变量的值。 (按引用调用时:形参也是引用,不过是实参的拷贝,所以按引用调用其实也是按(引用)值调用。形参和实参二者引用同一个对象/变量,可以通过形参这个拷贝引用改变其所引对象的状态,但形参无法改变实参这个引用的值,让其引用一个新对象)
  • Java 程序设计语言总是采用按值调用,方法得到的是所有参数值的一个拷贝,不能修改传递给它的任何参数变量的内容。
  • 方法的签名:方法名和参数类型称为方法的签名。
  • 实例域若没在构造器中初始化,则默认初始化为0,false,null等值,而局部变量必须显示初始化
  • 仅当类没有提供任何构造器的时候,系统才会提供一个默认的无参构造器

  • 初始化实例数据域的方法:在构造器中设置值、在声明中赋值、初始化块
  • 初始化块(initializationblock):在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。
  • finalize:Java有自动的垃圾回收器,不需要人工回收内存,所以不支持析构器,但当对象使用了内存之外的其他资源(如文件,如使用了系统资源的另外一个对象的句柄)时,需要用finalize方法在垃圾回收器清除对象之前回收资源。
  • close:如果某个资源需要在使用完后立刻被关闭,则应人工调用close方法完成相应清理操作

——————————————————————————————————————————

Package包(Package使用教程

  • 一个类可以使用所属包中的所有类,以及其他包中的公有类(public class)。标记为public 的部分可以被任意的类使用;标记为 private 的部分只能被定义它们的类使用。如果没有指定 public或private,这个部分(类、方法或变量)可以被同一个包中的所有方法访问。
  • 访问另一个包中的公有类:1)类名前添加完整包名;2)import包或者特定类
  • import:可以导入包、类、包中所有类(*)、静态域、静态方法
  • 打包:将包名放在源文件开头、包中定义类的代码之前,并把属于包的文件都放在与包名匹配的子目录中
  • 类路径:所有包含类文件的路径的集合。类路径列出的目录和归档文件是搜寻类的起始点
  •  

 

  • 设置类路径:java –classpath path1;path2、设置CLASSPATH环境变量(整个指令写在一行)

——————————————————————————————————————————

文档注释

  • 在源代码中添加注释(用定界符/**开始),再用JDK的javadoc工具由源文件生成HTML文档
  • javadoc命令支持通配符,例如使用*.java来代表当前路径下的所有java源文件,javadoc常用的选项有如下几个:
  1. -d : 该选项指定一个路径,用于将生成的API文档放到指定的目录下
  2. -windowtitle : 该选项指定一个字符串,用于设置API文档的浏览器窗口标题
  3. -doctitle: 该选项指定一个HTML格式的文本,用于指定概述页面的标题(只有对处于多个包下的源文件来生成API文档时,才有概述页面)
  4. -header: 该选项指定一个HTML格式的文本,包含每个页面的页眉。
  • 类注释:放import之后,类定义之前
  • 方法注释:方法之前。@param、@return、@throws
  • 域注释:只有公有域需要,通常用于静态常量
  • 通用注释:@author,@version,@since,@deprecated弃用,@see超链接

——————————————————————————————————————————

OOP技巧(OOP:object oriented programming)

  • 保证数据私有
  • 对数据初始化:最好显示地初始化所有的数据(类定义或构造器中提供默认值)、
  • 不要在类中使用过多的基本类型:用其他的类代替多个相关的基本类型,便于理解
  • 不是所有的域都需要访问器和更改器:对象中也有不想被使用的实例域
  • 将职责过多的类分解
  • 优先使用不可变的类:即不修改对象状态的类(便于多个线程间安全共享对象)
  • 类和方法命名要能顾名思义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值