第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.

posted @ 2020-01-05 15:41  pikzas  阅读(160)  评论(0编辑  收藏  举报