第2章 一切都是对象 21
这一章将开始介绍Java程序的基本组成,但是,也会令你“欲仙欲死”。
2.1 用引用操纵对象 21
这里作者用遥控器与电视机作为讲解引用与对象的关系,很符合要义,我们一般是操控遥控器,在程序中我们也是一般操作对象的引用。这一节引出对象。
2.2 必须由你创建所有对象 22
这一节继承上一节,对对象需要初始化,new 关键字表名“给我一个新的对象”
2.2.1 存储到什么地方 22
- 寄存器:处理器内部,速度最快,我们无法直接控制
- 堆栈:RAM中,速度仅次于寄存器;堆栈指针向上移动,释放那些内存;向下移动,分配新的内存;引用存于此处。
- 堆:RAM内,用于存放所有的Java对象。
- 常量存储:常量值通常直接存放在程序代码内部
- 非RAM存储:2个基本的例子——流对象以及持久化对象,即存活于程序之外的数据。
2.2.2 特例:基本类型 23
基本数据类型存储于堆栈中
类型分类:
数据类型转换之默认转换顺序:
类型范围:
2.2.3 Java中的数组 24
2.3 永远不需要销毁对象 24
2.3.1 作用域 24
变量定义在哪个大括号内,它就在这个大括号内有效。并且,在同一个大括号内不能同时定义同名的变量。
2.3.2 对象的作用域 25
一般对象在定义的大括号内消失的是其引用,其对象本身继续占据内存空间。这就牵涉到了Java的垃圾回收机制。
2.4 创建新的数据类型:类 25
引出类class关键字
2.4.1 字段和方法 26
字段–>成员变量;方法–>成员方法
1 | Java中的参数传递问题: |
2.5 方法、参数和返回值 27
1 | (1)方法:就是完成特定功能的代码块。 |
2.5.1 参数列表 27
2.6 构建一个Java程序 28
2.6.1 名字可见性 28
名字空间,包
2.6.2 运用其他构件 28
import关键字
2.6.3 static 关键字 29
(1)静态的意思。
- 可以修饰成员变量和成员方法。
- 针对多个对象有共同的这样的成员变量值的时候,Java就提供了一个关键字来修饰:static。
(2)静态的特点:
- A:随着类的加载而加载
- B:优先与对象存在
- C:被类的所有对象共享
这其实也是我们判断该不该使用静态的依据。
- 举例:饮水机和水杯的问题思考
- D:可以通过类名调用
既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。(3)静态的内存图
- 静态的内容在方法区的静态区
(4)静态的注意事项;
- A:在静态方法中没有this对象
- B:静态只能访问静态
(5)静态变量和成员变量的区别
- A:所属不同
- 静态变量:属于类,类变量
- 成员变量:属于对象,对象变量,实例变量
- B:内存位置不同
- 静态变量:方法区的静态区
- 成员变量:堆内存
- C:生命周期不同
- 静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
- 成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
- D:调用不同
- 静态变量:可以通过对象名调用,也可以通过类名调用
- 成员变量:只能通过对象名调用
(6)main方法是静态的
public:权限最大
static:不用创建对象调用
void:返回值给jvm没有意义
main:就是一个常见的名称。
String[] args:可以接收数据,提供程序的灵活性
main方法的格式讲解:
public static void main(String[] args) {…}
public:公共的,访问权限是最大的。由于main方法是被jvm调用,所以权限要够大。
static:静态的,不需要创建对象,通过类名就可以。方便jvm的调用。
void:因为我们曾经说过,方法的返回值是返回给调用者,而main方法是被jvm调用。你返回内容给jvm没有意义。
main:是一个常见的方法入口。我见过的语言都是以main作为入口。
String[] args:这是一个字符串数组。值去哪里了?
这个东西到底有什么用啊?怎么给值啊?这个东西早期是为了接收键盘录入的数据的。
格式是:java MainDemo hello world java
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class MainDemo {
public static void main(String[] args) {
//System.out.println(args); //[Ljava.lang.String;@175078b
//System.out.println(args.length); //0
//System.out.println(args[0]); //ArrayIndexOutOfBoundsException
//接收数据后
System.out.println(args);
System.out.println(args.length);
//System.out.println(args[0]);
for(int x=0; x<args.length; x++) {
System.out.println(args[x]);
}
}
}A:在静态方法中是没有this关键字的
- 如何理解呢?
- 静态是随着类的加载而加载,this是随着对象的创建而存在。
- 静态比对象先存在。
B:静态方法只能访问静态的成员变量和静态的成员方法
- 静态方法:
- 成员变量:只能访问静态变量
- 成员方法:只能访问静态成员方法
- 非静态方法:
- 成员变量:可以是静态的,也可以是非静态的
- 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
- 简单记:
- 静态只能访问静态。
2.7 你的第一个Java程序 30
2.7.1 编译和运行 31
2.8 注释和嵌入式文档 32
1 | /* |
2.8.1 注释文档 32
javadoc
2.8.2 语法 33
1 | /** |
javadoc只能为public 和 protected 成员进行文档注释
2.8.3 嵌入式HTML 33
支持html标记
2.8.4 一些标签示例 34
1 | /* |
2.8.5 文档示例 35
2.9 编码风格 36
类首字母大写;驼峰命名法
2.10 总结 36
2.11 练习 37
书籍相关资源:
pdf文档链接:https://pan.baidu.com/s/1yuWb_kI0sB3yHLBndPcyEg 提取码:scvw
书中demo: https://github.com/BruceEckel/TIJ4-code
Thinking in Java 4th英文版的课后习题答案: http://greggordon.org/java/tij4/solutions.htm