Java核心技术卷一 · 笔记(1)

1.java的关键术语

2.==和equals

如果虚拟机始终将相同的字符串共享, 就可以使用= 运算符检测是否相等。但实际上 只有字符串常量是共享的,而+ 或 substring 等操作产生的结果并不是共享的。因此,千万不要使甩== 运算符测试字符串的相等性, 以免在程序中出现糟糕的 bug。

3.空串与 Null 串

  • 空串 "" 是长度为 0 的字符串,是一个 Java 对象。
  • String 变量还可以存 放一个特殊的值, 名为 null, 这表示目前没有任何对象与该变量关联

4.构建字符串

每次连接字符串, 都会构建一个新的 String 对象, 既耗时, 又浪费空间。使用 StringBuilder类就可以避免这个问题的发生。

5.封装

封装(encapsulation, 有时称为数据隐藏)是与对象有关的一个重要概念。从形式上看, 封装不过是将数据和行为组合在一个包中, 并对对象的使用者隐藏了数据的实现方式。

实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。程序仅通过对 象的方法与对象数据进行交互。封装给对象赋予了“ 黑盒” 特征, 这是提高重用性和可靠性 的关键。 这意味着一个类可以全面地改变存储数据的方式,只要仍旧使用同样的方法操作数据, 其他对象就不会知道或介意所发生的变化。

6.对象的三个主要特性

对象的行为、状态、标识

7.依赖(dependence)、聚合(aggregation)、继承(inheritance)

  • 如果一个类的方法操纵另一个 类的对象,我们就说一个类依赖于另一个类。
  • 聚合关系意味着类 A 的对象包含类 B 的对象。
  • 继承是一种用于表示特殊与一般关系的。

8.对象变量

可以将 Java 的对象变量看作 C++ 的对象指针,所有的 Java 对象都存储在堆中。 当一个对象包含另一个对象变量时, 这个变量依然 包含着指向另一个堆对象的指针。

9.clone

在 Java 中, 必须使用 clone 方法获得对象的完整拷贝。

如果需要返回一个可变对象的引用, 应该首先对它进行克隆(clone)。对象 clone 是 指存放在另一个位置上的对象副本。

10.静态域、静态常量

静态域是static修饰的数据域,属于类,而不属于任何 独立的对象。在绝大多数的面向对象程序设计语言中, 静态域被称为类域。

静态常量(类常量): static final 修饰。

11.静态方法

  • 静态方法是一种不能向对象实施操作的方法,是没有 this 参数的方法。

  • 静态方法不能访问实例域, 因为它不能操作对象。但是,静态方法可 以访问自身类中的静态域。

  • 可以通过类名或对象名调用静态方法,不建议用对象名调用!

  • 在下面两种情况下使用静态方法:

    •一 方法不需要访问对象状态,其所需参数都是通过显式参数提供(例如: Math.pow)

    •一个方法只需要访问类的静态域

static修饰的含义总结:属于类且不属于类对象的变量和函数。

12.方法参数

Java 总是采用按值调用,对对象采用的不是引用调用,实际上, 对象引用是按值传递的。

下面总结一下 Java中方法参数的使用情况:

•一个方法不能修改一个基本数据类型的参数(即数值型或布尔型) 。

•一个方法可以改变一个对象参数的状态。

•一个方法不能让对象参数引用一个新的对象。

13.重载

如果多个方法有 相同的名字、不同的参数,便产生了重载(overloading)。

14.域和局部变量

域与局部变量的主要不同点:必须明确地初始化方法中的局部变量。 但是, 如果没有初始化类中的域, 将会被自动初始化为默认值(0、false 或 null)。

15.构造器

如果构造器的第一个语句形如 this(...), 这个构造器将调用同一个类的另一个构造器。

仅当类没有提供任何构造器的时候, 系统才会提供一个默认的构造器

16.对象析构

由于 Java 有自动的垃圾回收器,不需要人工回收内存, 所以 Java 不支持析构器。

17.包

从编译器的角度来看, 嵌套的包之间没有任何关系。例如,java.utU 包与java.util.jar 包 毫无关系。每一个都拥有独立的类集合。

18.编译器、虚拟机和包

编译器在编译源文件的时候不检查目录结构。 即使这个源文件没有在子目录 com/mycompany 下, 也可以进行编译。如果它不依赖 于其他包, 就不会出现编译错误。但是, 最终的程序将无法运行, 除非先将所有类文件 移到正确的位置上。 如果包与目录不匹配, 虚拟机就找不到类 。

javac 编译器总是在当前的目录中查找文件, 但 Java 虚拟机仅在类路径中有 目录的时候才查看当前目录

19.继承

  • 在 Java 中, 所有的继承都是公有继承,Java 不支持多继承,而是用接口实现。

  • 用来判断是否应该设计为继承 关系的简单规则:这就是“ is-a” 规则,它 表明子类的每个对象也是超类的对象。

  • 在设计类的时候,应该将通用的方法放在超类中, 而将具有特殊用途的方法放在子类中,这种将通用的 功能放到超类的做法,在面向对象程序设计中十分普遍。

  • 子类使用super.xxx()来调用超类的xxx()方法,进而访问超类的私有域。

  • 由于 Manager 类的构造器不能访问 Employee 类的私有域, 所以必须利用 Employee 类 的构造器对这部分私有域进行初始化,我们可以通过 super 实现对超类构造器的调用。使用 super 调用构造器的语句必须是子类构造器的第一条语句。 如果子类的构造器没有显式地调用超类的构造器, 则将自动地调用超类默认(没有参数) 的构造器。 如果超类没有不带参数的构造器, 并且在子类的构造器中又没有显式地调用超类 的其他构造器 ,则 Java 编译器将报告错误。

  • 超类和子类的转换:

    •只能在继承层次内进行类型转换。

    •在将超类转换成子类之前,应该使用 instanceof进行检查。

20.Java 不支持多继承

  • 关键字 this 有两个用途: 一是引用隐式参数,二是调用该类其他的构 造器 。

  • super 关键字也有两个用途:一是调用超类的方法,二是调用超类的构造器。

    在调用构造器的时候, 这两个关键字的使用方式很相似。调用构造器的语句只能作为另 一个构造器的第一条语句出现。构造参数既可以传递给本类(this) 的其他构造器,也可 以传递给超类(super) 的构造器。

posted @ 2019-03-14 20:45  张十六  阅读(1188)  评论(0编辑  收藏  举报