Java编程思想: 一切都是对象

用引用操纵对象

编程语言根据如何操做内存中元素分为两种, 一种是C/C++之类: 经过特殊语法来操纵, 例如指针. 一种是Python,Java之类, 使用引用操纵对象.java

这就是为何Python中存在id这个函数, 用来标识对象的惟一值, 而Java中到处有hashCode, 用来标识对象的哈希惟一值, 而哈希值一般为对象的内存地址.python

In [1]: id("hello")
Out[1]: 4350279376
String s = "hello";
// 99162322
System.out.println(s.hashCode());

在Java中, 对象由new来建立, 存储在中, 由垃圾回收器对没有用到的对象进行垃圾回收, 而不须要咱们手动销毁对象.git

五个存储区github

1. 寄存器: 处理器内部, 存储速度最快.编程

2. 堆栈: 位于通用RAM中, 但经过堆栈指针能够从处理器那里得到直接支持. 堆栈指针若向下移动则分配新的内存, 向上移动则释放内存.编程语言

C/C++支持对象在堆栈中分配, 而Java容许基本的类型(如char, int...)在堆栈中建立. 其他的对象在中建立.函数

3. 堆: 通用的内存池, 用于存放全部的Java对象.spa

4. 常量存储: 常量值一般直接存放在程序代码内部.指针

5. 非RAM存储: 数据存活在程序以外.code

关于基本类型和字符串不可改变的解释

堆栈一般用来存储基本类型的变量和对象的引用, 而具体的对象存储于中. 而若是咱们使用new String()建立一个对象, 则一般会建立一个或两个对象: 在中建立对象, 其对象的引用存储于堆栈中; 而若是常量存储中无此字符串, 则会在常量存储中新建此字符串.

做用域

在C/C++中, 可使用大括号造成一个做用域, 例以下例代码在C/C++中是合法的:

{
  int x = 12;
  {
    int x = 13;
  }
}

可是在Java中倒是非法的.

若是咱们使用new建立对象, 则此对象会一直保留下去, 直到Java的垃圾回收器将其收回.

基本的Java程序

类的基本构造

若是咱们在类中定义基本成员, 则其拥有默认值:

class Data {
  int i;
  double d;
}

这是Java的自己语言特性, 防止程序出错(对C++来讲, 基本成员并无默认值).

类有数据域, 操做数据域的方法, 访问控制(private, public, protected), 和一些额外的语法糖(如static, abstract...)组成.

class Person {
  static double no = 1;
  
  private String name;
  
  Person(String aName) {}
  
  public void setName(String n){}
}

import: 用于导入类库.

static: 用于建立与类相关而与类对象无关的数据或方法.

 

习题答案

https://github.com/leicj/books/tree/master/Java%E7%BC%96%E7%A8%8B%E6%80%9D%E6%83%B3

相关文章
相关标签/搜索