一切皆对象

Java程序运行时,数据保存到哪里

  • 寄存器

    这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。

  • 堆栈中

    驻留于常规 RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。



  • 一种常规用途的内存池(也在 RAM 区域),其中保存了 Java 对象。

  • 静态存储

    这儿的“静态”(Static)是指“位于固定位置”(尽管也在 RAM 里)。可用static关键字指出一个对象的特定元素是静态的。但 Java 对象本身永远都不会置入静态存储空间。

  • 常数存储

    常数值通常直接置于代码内部。

  • 非RAM存储

    若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。

    其中两个最主要的例子便是“流式对象”和“固定对象”。

特殊情况,主要类型

JAVA决定了每种类型的大小,这些数据类型的大小并不随着机器结构的变化而变化。这种大小的不可更改正是 Java 程序具有很强移植能力的原因之一。

主类型 大小 最小值 最大值 封装器类型
boolean 1 - - Boolean
char 16 Unicode 0 Unicode 2 的 16 次方-1 Character
byte 8 -128 127 Byte
short 16 -2 的 15 次方 +2 的 15 次方-1 Byte
int 32 -2 的 31 次方 +2 的 31 次方-1 Integer
long 64 -2 的 63 次方 +2 的 63 次方-1 Long
float 32 IEEE754 IEEE754 Float
double 64 IEEE754 IEEE754 Double

作用域

对于在作用域里定义的名字,作用域同时决定了它的“可见性”以及“存在时间”。在 C,C++和 Java 里,作用域是由花括号的位置决定的。


{
int x = 12;
/* only x available */
{
int q = 96;
/* both x & q available */
}
/* only x available */
/* q “out of scope” */
}

注意尽管在 C 和 C++里是合法的,但在 Java 里不能象下面这样书写代码:


{
int x = 12;
{
int x = 96; /* illegal */
}
}

字段和方法

一旦将变量作为类成员使用,就要特别注意由Java分配的默认值。这样做可保证主类型的成员变量肯定得到了初始化(C++不具备这一功能),可有效遏止多种相关的编程错误。

然而,这种保证却并不适用于“局部”变量——那些变量并非一个类的字段。所以,假若在一个函数定义中写入下述代码:

int x;

那么 x 会得到一些随机值(这与C和C++是一样的),不会自动初始化成零。我们责任是在正式使用 x 前分配一个适当的值。如果忘记,就会得到一条编译期错误,告诉我们变量可能尚未初始化。

这种处理正是 Java优于 C++的表现之一。许多 C++编译器会对变量未初始化发出警告,但在 Java 里却是错误。

Java编程思想读书笔记之一切皆对象的更多相关文章

  1. JAVA编程思想读书笔记(四)--对象的克隆

    接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...

  2. JAVA编程思想读书笔记(五)--多线程

    接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/detail ...

  3. JAVA编程思想读书笔记(三)--RTTI

    接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...

  4. JAVA编程思想读书笔记(二)--容器

    接上篇JAVA编程思想读书笔记(一) 第八章.对象的容纳 No1: java提供了四种类型的集合类:Vector(矢量).BitSet(位集).Stack(堆栈).Hashtable(散列表) No2 ...

  5. Java编程思想读书笔记之内部类

    现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始 ...

  6. Java编程思想读书笔记(一)【对象导论】

    2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...

  7. <Java编程思想>读书笔记(1)-对象导论、一切都是对象

    1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消 ...

  8. Java编程思想读书笔记

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. Java编程思想读书笔记(二)【一切都是对象】

    begin 2018年1月9日17:06:47 第二章 一切都是对象 Java语言假设我们只进行面向对象的程序设计. 2.1 用引用操纵对象 每种编程语言都有自己的操纵内存元素的方式 操纵内存元素的方 ...

随机推荐

  1. 关于postman、postman interceptor的安装、配置问题

    由于app中有一些鉴权问题,需要携带浏览器的cookie. 不然的话不能够正确测试接口,就在chrome(这里下载的来源是Google商店)中添加了postman interceptor插件. 然后发 ...

  2. TFSEclipsePlugin-UpdateSiteArchive 手动拷贝

  3. acm 士兵杀敌(一)

    士兵杀敌(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军现在 ...

  4. Java-API-Package:org.springframwork.transaction.annotation

    ylbtech-Java-API-Package:org.springframwork.transaction.annotation 1.返回顶部 1. @NonNullApi @NonNullFie ...

  5. Oracle 监听莫名死掉

    有一台oracle 10g的监听莫名死掉,进行查看 select * from v$version Oracle Database 10g Enterprise Edition Release 10. ...

  6. 执行: python manage.py makemigrations报AttributeError: 'str' object has no attribute 'decode'

    找到错误代码(line146):query = query.encode(errors='replace') 解决方法:把decode改为encode即可.

  7. 第九章 Java中线程池

    Java中的线程池是运用场景最多的并发框架,几乎所有需求异步或并发执行任务的程序都可以使用线程池.在开发过程中,合理地使用线程池能够带来3个好处. 降低资源消耗:通过重复利用已创建的线程降低线程创建和 ...

  8. nginx注册成服务

    http://blog.csdn.net/t37240/article/details/51727563

  9. python的print字符串的输出

    字符串的输出使用print语句,在每个语句的输出的时候我们使用' '和" "来包含字符串比如: 如果有多个字符串的话呢我们需要用”,“来进行连接: 我们不仅可以使用字符来进行输出时 ...

  10. findall查找 ^$*+?{ }{m,n}[].[.] \w \s \d \b \D \W

    #!/usr/bin/env python import re r = "aasa da.5a5dfgfda ada" ret = re.findall('a',r) print( ...