丙午🐎年

acc8226 的博客

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 影响最大是集合框架的使用。

阅读全文 »

完整的流家族

IO(Input Output)流

  • IO 流用来处理设备之间的数据传输
  • Java 对数据的操作时通过流的方式
  • Java 用于操作流的对象都在 IO 包中
  • 流按操作数据分为两种: 字节流和字符流
  • 流按类型分为: 输入流, 输出流

输入流与输出流的层次结构

Reader 和 Writer 的层次结构

IO 流常用基类

  • 字节流的抽象基类对象: InputStream, OutputStream
  • 字符流的抽象基类对象: Reader, Writer

注:有这四个类派生出来的子类名称都是由其父类名作为子类名的后缀

如: InputStream 的子类 FileInputStream
如: Reader 的子类 FileReader

阅读全文 »
0%