第2章-对象
Think in java 读书笔记
pikzas
2019.03.03
第2章 一切都是对象
知识点
Java存储对象的地方
- 寄存器
- 堆栈
- 栈
- 常量存储(常量池)
- 非RAM存储(文本文件 数据库 流对象等)
基本类型
- boolean
- char 16bits (unicode 0 ~ unicode 216-1)
- byte 8bits (-128 ~ 127 )
- short 16bits (-215 ~ 215-1)
- int 32bits (-231 ~ 231-1>)
- long 64bits (-2)63 ~ 263-1)
- float 32bits (IEEE754 ~ IEEE754)
- double 64bits (IEEE754 ~ IEEE754)
1 byte(比特) = 8 bits(位)
1 bit 有两个取值:0或者1。
对于普通的对象,new操作会在堆上创建一个对象,返回一个索引。
但是对于基本数据类型,new操作会直接在堆栈上放入一个基本类型的数值。
这样做的好处是可以提高效率。
作用域scope
作用域指的是对象引用的可用范围
class Demo{
Demo x = new Demo();
}
// print(x);
引用x的作用域仅在花括号之中,超出界限范围,编译时候就会报错。但是创建的对象在垃圾回收之前还是存在于内存中的。
对于OOP语言来说,万事万物皆对象,然而基本数据类型仅能表示简单的几种数据类型,对于复杂对象,我们可以自定义类class来描述。
class Person{
private String name = "pikzas";
private int age = 24;
private String address;
public void sayHi(){
int x = 10;
System.out.println("hello world, i am pikzas");
}
}
类是现实世界的代码抽象,现实物体都有属性和功能,对照类就是成员变量和方法
上面例子中的name、age、address都是成员变量,sayH是成员方法。x是局部变量,局部变量必须给定初始值,否则编译报错,成员变量可以不给定初始值。然后对象初始化的时候会给定默认值。
方法
一个方法由
- 返回类型
- 方法名
- 参数列表
- 方法体
四部分构成
方法名和参数列表合称为方法的签名,用以区分不同的方法(重载 overload)。
要注意的是调用方法传递的是值传递,并不是引用传递。(参见Java中的值传递)
class Demo{
List a = Arrays.asList(new int[]{1,2,3,4});
private void fun(List param){
for (int i : param) {
i = i + 10;
}
}
}
return的两个作用
- 表明方法执行结束
- 表明返回一个结果
static关键字
对于有static修饰的属性或者方法,它具有两个特点
- 不需要创建该类的对象,就能直接使用
- 该属性只与该类有关系,与该类生成了多少对象毫无关联。
所以也成static修饰的属性或者方法叫做类属性和类方法
class Demo{
static int i = 47;
}
class Test{
Demo d1 = new Demo();
Demo d2 = new Demo();
}
如上,d1.i和d2.i都是47,同时都是指向同一个内存地址
调用 Demo.i++之后,两者依旧指向同一个地址,且数据都为48.
言之有物