乙巳🐍年

acc8226 的博客

继承

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 来做生成这两方法。

阅读全文 »

数组在计算机语言中是非常重要的集合类型,大部分计算机语言中数组具有如下三个基本特性:

  1. 一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。
  2. 有序性:数组中的元素是有序的,通过下标访问。
  3. 不可变性:数组一旦初始化,则长度(数组中预分配的元素个数)不可变。

一维数组

格式 1(推荐采用):元素类型[] 数组名;

格式 2:元素类型 数组名[];

数组元素的类型可以是基本类型,也可以是类或接口。

数组初始化

声明完成就要对数组进行初始化,数组初始化的过程就是为数组每一个元素分配内存空间。一旦初始化之后数组的长度就确定下来不能再变化了。

数组初始化可以分为静态初始化和动态初始化。

阅读全文 »

对于 Java 5 之前程序员而言,使用集合经常会面临一个很尴尬的问题:放入一个种特定类型,但是取出时候全部是 Object 类型,于是在具体使用时候需要将元素强转换为特定类型。但是强制类型转换是有风险的,如果不进行判断就臆断进行类型转换会发生 ClassCastException 异常。

泛型的引入可以将这些运行时异常提前到编译期暴露出来,这增强了类型安全检查。Java 5 之后提供泛型(Generics)支持,使用泛型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型特性对 Java 影响最大是集合框架的使用。

阅读全文 »
0%