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) 的构造器。
Java核心技术卷一 · 笔记(1)的更多相关文章
- java核心技术卷一笔记(1)
jdk是java开发工具包,里面包含了javac.jar.javadoc.java等工具,可以在bin目录中找到.有一个文件夹是jre,即jdk也包含了java运行环境.jre可单独安装,只是运行ja ...
- Java核心技术卷一 · 笔记(2)
目录 1.多态.动态绑定 2.覆盖 3.阻止继承:final 类和方法 4.抽象类(abstract修饰) 5. 4 个访问修饰符: 6.toString() 7.对设计继承关系很有帮助的建议 8.接 ...
- java 核心技术卷一笔记 6 .2.3 接口 lambda 表达式 内部类
6.2.3 对象克隆 Cloneable 接口,这个接口指示一个类提供了一个安全的clone方法.(稍作了解) 为一个对象引用的变量建立副本时,原变量和副本都是同一个对象的引用,任何一个变量改变都 ...
- java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类
6.2 接口实例 6.2.1 接口与回调 在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告,假如程序中有一个时钟,就可以请求每秒钟获得一个通告,以便更新时钟的表盘 ...
- java 核心技术卷一笔记 6 .1接口 lambda 表达式 内部类
6.1 接口不是类,是对类的一组需求的描述,这些类需要遵守接口描述的统一格式进行定义.例如:Arrays类中sort方法(可以对对象数组进行排序)前提是对象所属的类必须实现了Comparable 接口 ...
- java核心技术卷一笔记(2)
---恢复内容开始--- 异常.断言 所有的异常都继承自Throwable类,异常包括已检查异常和未检查异常,应该抛出已检查异常,而未检查异常要么是不可控的(Error),要么是应该避免发生的(Run ...
- java 核心技术卷一笔记 6 .1.接口 lambda 表达式 内部类
6.1.2 接口不是类,不能实例化一个接口:但是可以声明接口的变量:Comparable x; 接口变量必须引用实现了接口的类对象:x = new Employee(); 检查一个对象是否属于某 ...
- 【阅读笔记】Java核心技术卷一 #0
这是一篇备忘性质的读书笔记,仅记录个人觉得有用的知识点 本文作为一个目录索引,部分章节跳过 吐槽:此书中文翻译有不少地方不太通顺,这种情况我要把英文版对应的部分也读一遍才能明白(说实话,英文里的从句表 ...
- java核心技术卷一
java核心技术卷一 java基础类型 整型 数据类型 字节数 取值范围 int 4 +_2^4*8-1 short 2 +_2^2*8-1 long 8 +_2^8*8-1 byte 1 -128- ...
随机推荐
- RAID技术详解
RAID:Redundant Array of Independent Disks 中文我们称为独立冗余磁盘阵列.基本上是见名知意.RAID的基本思想就是将多个容量较小且价格实惠的磁盘进行组合起来构成 ...
- 2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解 实验1-1直接修改程序机器指令,改变程序执行流程 先输入objdump -d 20165305pwn2查看反汇编代码 ...
- VS2017不能弹出安装界面的原因.
如果这里选中了放大.100%入坑 解决办法: 禁用视觉主题,和元素,即可安装正常
- java中的函数
1.函数:定义在类中的具有特定功能的一段独立小程序.函数也称之为方法. 为了提高代码的复用性,对代码进行抽取. 将这个部分定义成一个独立的功能.方便使用. java中对功能的定义通过函数来实现的.2函 ...
- unix socket服务器
只能处理单个消息,一发一收. int loop(void) { struct sockaddr_un client_addr; int server_socket, client_socket; ...
- LeetCode数组查找问题
简单的二分查找法:(Leetcode704): 注意条件(low<=high) public int search(int[] nums, int target) { int low=0; in ...
- kubernets 概念
理解 Kubernetes 对象 各种资源对象的理解和定义 Kubernetes 中 Pod 的选举过程
- 将一,二维数组转化为Excel格式
首先,我们来看一下一维数组的, 其代码可以如下: import numpy as np import pandas as pd x = pd.Series([1, 3, 5, np.nan]) pri ...
- Oracle中connect by用法示例
在工作中常常会遇到一些数据表包含父子关系的数据,比如行业.地区等等,如果需要将其节点按父子关系一步一步列出来,就需要使用connect by了. 如有由自身行业代码basecode和父行业代码pare ...
- flask-login模块
flask-login为flask提供了用户会话管理.他处理了日常的登入,登出并且长时间记住用户的会话. 1.在会话中存储当前活跃的用户ID,让你能够自由地登入和登出. 2.让你限制登入或登出用户可以 ...