acc8226 的博客

枚举概述

枚举用来管理一组相关常量的集合,使用枚举可以提高程序的可读性,使代码更清晰且更易于维护。

在 Java 5 之前没有提供枚举类型,可以通过声明静态常量(final static 变量)替代枚举常量。
通常在接口中声明一组静态常量,当然也可以在一般类中声明一组静态常量。这些常量往往都是 int 类型,这是为了以后方便使用 switch 语句进行判断。

1
2
3
4
5
6
7
public interface WeekDays {
// 枚举常量列表
int MONDAY = 0; // 星期一
int TUESDAY = 1; // 星期二
int WEDNESDAY = 2; // 星期三
... ...
}
阅读全文 »

抽象类

在 Java 中,抽象类是一种特殊的类,它不能被直接实例化,只能被其他类继承。抽象类通常用于定义一些抽象的方法和属性,这些方法和属性可能在子类中有不同的实现。

抽象类的主要目的是提供一个公共的接口,让子类可以根据自己的需求进行扩展和实现。抽象类中的抽象方法没有具体的实现,只包含方法的签名,子类就知道它必须要实现该方法,而不可能忽略,若忽略 Java 编译器会提示错误。

抽象类声明和实现

在 Java 中抽象类和抽象方法的修饰符是 abstract,注意抽象方法中只有方法的声明,没有方法的实现。

  • 抽象类不能被实例化,只有具体类才能被实例化;
  • 抽象类可以拥有默认的构造函数, 供子类实例化调用, 用于完成子类构建对象的一些公共任务;
  • 抽象类中可以包含具体方法和抽象方法;
  • 非抽象类(具体类) 若继承抽象类必须重写所有抽象方法。
1
2
3
4
5
public abstract class 类名称 {
member var;
method(){…} // 一般方法
abstract method()// 抽象方法, 抽象方法在后直接跟分号
}

普通类加上 abstract 关键字就变成了抽象类。一但类中包含有抽象方法的类必须定义为抽象类或者接口,否则编译时会提示 The type XXX must be an abstract class to define abstract methods

接口

比抽象类更加抽象的是接口,在接口中所有的方法都会被 public 和 abstract 修饰。

  • Java 中不支持多继承,而是通过接口实现比多重继承更强的功能,java 通过接口可以使出于不同层次,甚至不相关的类具有相同的行为。
  • 接口可以认为是特殊的抽象类,不能用于直接创建对象。接口的作用在于规定一些功能框架,具体功能的实现则通过该接口约束的类完成。

接口的定义:一般由常量和抽象方法组成

1
2
3
4
[public] interface 接口名 [extends 父接口名列表 ] {
[public] [static] [final] 域类型 域名 = 常量值 ;
[public] [abstract] 返回值 方法名(参数列表) [throw 异常列表];
}
阅读全文 »

继承

Java 只支持类的单继承,不支持类多继承,但是支持接口的多实现。
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类。定义类时直接通过 extends 关键字指明要继承的父类。
子类对象除了可以访问子类中直接定义的成员外,可直接访问父类的所有非私有成员。

继承的作用

  • 继承提高了代码的复用性。
  • 继承的出现让类与类之间产生了关系,提供了多态的前提。
  • 不要仅为了获取其他类中某个功能而去强行使用继承,类与类之间要有所属 “is a” 的关系。

理解 this 和 super

出现在类的实例方法或构造方法中,this 代表所在函数所属对象的引用。用 this 作前缀可访问当前对象的实例变量或成员方法。

  1. this.实例变量; 能加 this 则尽量加,这样代码更清晰
  2. this.成员方法; 本类成员方法的调用,能加 this 则尽量加 this
  3. this(参数) 用来调用同类其他构造方法。注意 this 语句只能定义在构造函数的第一行,因为初始化要先执行
阅读全文 »

Java 是彻底的、纯粹的面向对象语言。面向对象是 Java 最重要的特性。本章将介绍面向对象基础知识。

特点:

  • 相对面向过程而言,面向对象和面向过程都是一种思想

  • 将功能封装进对象,强调具备了功能的对象。

  • 是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者

  • 面向对象的开发过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

  • 面向对象的设计过程:其实就是在管理和维护对象之间的关系。

面向对象的特征:

  • 封装(encapsulation):封装能够使外部访问者不能随意存取对象的内部数据,隐藏了对象的内部细节,只保留有限的对外接口。外部访问者不用关心对象的内部细节,使得操作对象变得简单。
  • 继承(inheritance)
  • 多态(polymorphism):指在父类中成员变量和成员方法被子类继承之后,可以具有不同的状态或表现行为。
阅读全文 »

Object 类

java.lang.Object 作为所有 Java 类的祖先,编译系统默认继承 Object 类,Object 类包含了所有 Java 类的公共属性和方法。

  • Object() 构造方法
  • getClass():Class<?>
  • public boolean equals(Object obj) 比较两对象封装的数据是否相等;而比较运算符“==”在比较两对象变量时,只有当两个对象引用指向同一对象时才为真值。
  • hashCode()
  • public String toString() 该方法返回对象的字符串描述,建议所有子类都重写此方法。如果没有覆盖toString()方法,默认的字符串是 “类名@对象的十六进制哈希码”
  • wait(), wait(long), wait(long, int) 让当前线程进入阻塞状态
  • notify(), notifyAll 唤醒阻塞状态的线程
  • protected Object clone() 克隆对象
  • protected void finalize() 该方法 Java 垃圾回收程序在删除对象前自动执行。不建议开发者直接调用

hashCode 方法的说明

哈希码(hashCode),每个 Java 对象都有哈希码(hashCode)属性,哈希码可以用来标识对象,提高对象在集合操作中的执行效率。

小技巧:为了减轻书写重复 equals 和 hashCode 代码的负担,不建议手巧,而是可借助 IDEA 自动的生成功能和一些公共的类库进行辅助工作,例如使用 google/guava: Google core libraries for Java 来做生成这两方法。

阅读全文 »
0%