JAVA面向对象-对象声明

新建一个对象的,数据存储的位置可能不一样;JAVA存放数据的地方有:

程序运行时,我们最好对数据保存到什么地方做到心中有数。特别要注意的是内存的分配。有六个地方都可以保存数据:

(1)

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

(2)

堆栈。驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那

些内存。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动

指针。这一限制无疑影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——特别是对象句柄,但Java对象并不放到其中。

(3)

堆。一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,堆(Heap)中编译器不必知道要从堆里分配多少存储空间,也不必知

道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码

时,会在堆里自动进行数据的保存。在堆里分配存储空间时会花掉更长的时间!

(4)

静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。

(5)

常数存储。常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。

(6) 非RAM存储。 不研究;

其中,堆和栈是两个最常用的,每种语言都用到.而且不同语言对堆和栈的理解和数据结构里的定义可能不同.

实际上,变量也是一种对象,是语言的原始对象.我们也可以自定义自己的对象.当我们声明对象的时候,内在就会开辟一片空间来存储数据.如果声明的是长度已知的对象,则会在栈中存储,如果不可知,则在堆中.

boolean

1-bit

Boolean

char

16-bit

Unicode 0

Unicode 216

- 1

Character

byte

8-bit

-128

+127

Byte

short

16-bit

-215

+215

– 1

Short1

int

32-bit

-231

+231

– 1

Integer

long

64-bit

-263

+263

– 1

Long

float

32-bit

IEEE754

IEEE754

Float

double

64-bit

IEEE754

IEEE754

Double

void

Void

1

上面这些是可知的对象,第二列是在内在中占的位置.再后面两列是该对象值的边界.

上面这些类型的对象若用new声明,则程序会自动给它赋一个默认值:

Boolean abc = new Boolean();这时候程序会给abc默认为:false;

默认值为:

boolean

false;

char

'\u0000'(null)

byte

(byte)0

short

(short)0

int

0

long

0L

float

0.0f

double

0.0d

假若在一个函数定义中写入下述代码:

int x;

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

JAVA中String类未固定大小,所以声明的时候是放在堆中,但在JavaScript中,则是放在栈中的.

再就是:用 new()声明的对象,其数据都是放在堆中的,栈中存放的是指向该数据的"句柄".

声明的对象有自己的存在时间(Life Time);

对象声明后有自己的作用域

.例如:

{

int

x = 12;

{

int

q = 96;

}

}

在JAVA中,不能让同一个变量或者用同一个名称定义变量,在不同的范围.

{

int x = 12;

{

int x = 96;

}

}

句柄s会在作用域的终点处消失。然而,s指向的String对象依然占据着内存空间。在上面这段代码里,我们没有办法访问对象,

因为指向它的唯一一个句柄已超出了作用域的边界。这样造成的结果便是:对于用new创建的对象,只要我们愿意,它们就会一直保留下去。怎样才能防止它们大

量充斥内存,并最终造成程序的“凝固”呢。在C++里,这个问题最令程序员头痛。但Java以后,情况却发生了改观。Java有一个特别的“垃圾收集器”

,它会查找用new创建的所有对象,并辨别其中哪些不再被引用。随后,它会自动释放由那些闲置对象占据的内存,以便能由新对象使用。这样就可以防止"内存溢出".

声明一个对象的时候实际上是在堆中开辟一块空间存放数据,然后在栈中放一个指向这块空间的"句柄".所以,若一个对象未被初始化,则句柄就不知道指向哪里,所以就会被默认赋个定值:null;若使用一个还是null的句柄,会出错.所以,声明变量的时候都要进行初始化.

特例是:原始类型(也叫基本类型)

声明的时候,是直接放在栈中的.而且编译器会自动赋初值.但这又分两种情况,一种是该类型的对象是在类中作为"属性"

存在,这时候编译器赋的初始值如下表:

boolean

false;

char

'\u0000'(null)

byte

(byte)0

short

(short)0

int

0

long

0L

float

0.0f

double

0.0d

另一种情况就是非对象的属性,这时候编译器赋的值可能出错;如下:

int x;这时候x的值可能是一个随机值;

Java允许我们把任何基本数据类型的变量转换成别的基本数据类型,但布尔值除外,布尔值不允许任何类型的转换."类"本身,是不允许转换的.一个对象可以在所属类族之间进行转换.如:桃树,可以转换成树.反之也可以,但不能转换成石头.

来源:http://blog.sina.com.cn/s/blog_5f54f0be0100d4qw.html

Java宣言的时候,JAVA面向对象-对象宣言相关推荐

  1. Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系

    Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?() A:手机与小米手机 B:企业家与雷军 C:编程语言与Java D:中国与北京 类之间 ...

  2. 【JAVA学习】2、面向对象编程的核心——对象和类

    [JAVA学习]面向对象编程的核心--对象和类 前言 面向过程VS面向对象 基础概念 优缺点比较 面向对象三大基础特性 封装 继承 多态 面向对象编程的五大基本原则 单一职责原则SRP(Single ...

  3. 【Java常识】6.0面向对象认知和Eclipse的实用使用、==号和equals方法的区别

    1.曾经写过很多自以为很通俗易懂的面向对象的解释. 如下是目前最通俗的一种解释: 2.Eclipse的补充解释. 运行的快捷键:F11. 3.Eclipse快捷键大全 大全放本文最后,这里主要放常用的 ...

  4. java异常对象引用变量_Java面向对象编程-异常处理

    第九章 异常处理 异常情况会改变正常的流程,导致恶劣的后果,为了减少损失,应该事先充分预料所有可能出现的异常,然后采取以下措施: 首先考虑避免异常,彻底杜绝异常的发生:如果不能完全避免,则尽可能地减少 ...

  5. Java第四次作业——面向对象高级特性(继承和多态)

    Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...

  6. 【深入Java虚拟机JVM 05】HotSpot对象探秘

    说明:文章所有内容均摘自<深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)> 介绍完Java虚拟机的运行时数据区之后,我们大致知道了虚拟机内存的概况,读者了解了内存中放了些什么后 ...

  7. 到底什么是面向对象,面试中怎么回答。面向过程和面向对象的区别是什么。java跨平台特性以及java和C++的区别。面向对象的三大特性——封装、继承和多态。面向对象的高拓展性以及低耦合度怎么体现?

    Java语言具有的特点:面向对象.跨平台.多线程以及网络编程 1. 和C++的区别 1.1 Java隐蔽了C++的指针,避免指针直接操作,程序更加安全. 1.2 Java类继承只能单继承,避免了C++ ...

  8. Java中,一切皆是对象,为何数据类型中还分为:基本类型和对象?

    Java中,一切皆是对象!为何数据类型中还分为:基本类型和对象?按理不应该只有一个类型-对象吗? 1.首先,Java中一切皆是对象!这句话没错,因为八种基本类型都有对应的包装类(int的包装类是Int ...

  9. java类描述_java笔记2:Java语言中的类和对象的描述

    在Java 语言中,除8 个基本数据类型值之外, 一切都是对象,而对象就是面向对象程序设计的中心. 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还 ...

  10. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

最新文章

  1. 别人总结的批处理技巧
  2. 在ASP.NET MVC里对Web Page网页进行权限控制
  3. HDU 2157 How many ways?? 矩阵
  4. linux获得蓝牙外设mac,iOS获取蓝牙外设Mac地址
  5. GO tcp server demo
  6. Jquery基础知识
  7. 详解7类Python运算符及代码举例
  8. echo字符集 shell_Shell echo命令:输出字符串
  9. Springboot集成BeanValidation扩展二:加载jar中的资源文件
  10. 谷歌地球(Google Earth) 7.3.2.5776
  11. pycharm txt编辑器制表符与代码中\t不匹配
  12. ArcGIS API For Javascript 4.15 绘制地图:在地图上测距离、测面积和在不同图层上搜索
  13. 今日份安利:发票扫描识别软件推荐
  14. kafka windows环境搭建 SASL_PLAINTEXT/SCRAM
  15. JZOJ ???? Or
  16. 计算机信息技术对医院医疗服务工作的影响,计算机在医院信息管理工作中应用探究.doc...
  17. 通过面试谈谈自己的一点感悟(只是个人的一点拙见)
  18. oppo手机使用应用沙盒动态修改序列号信息
  19. mysql 恢复到新库_mysql恢复到一个新的mysql主和从数据库教程
  20. 转:德鲁克,激发我一生的七段经历

热门文章

  1. MYSQL服务器my.cnf配置文档详解
  2. Oracle数据库编程:PL/SQL编程基础
  3. VSA Cluster中小企业无SAN环境解决方案
  4. 终于把W32.Spybot.Worm给消灭了(这个标题不能用了)
  5. go home(2)-supprise
  6. redis LRU和LFU
  7. Red Hat Enterprise Linux 7.5安装盘内容做本地YUM源
  8. 【PHP基础】PHP接口调用与json数据处理
  9. 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱
  10. mycat启动服务,后台日志报错Bit Server VM warning: ignoring option MaxPermSize