`
stinge
  • 浏览: 155646 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA面向对象-对象声明

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

分享到:
评论

相关推荐

    Educoder题目:Java面向对象 - 封装、继承和多态答案解析.md

    Educoder题目:Java面向对象 - 封装、继承和多态答案解析

    java面向对象 - 类与对象.doc

    java面向对象 - 类与对象 在Java编程语言中,面向对象编程(OOP)是一个核心概念。它强调以对象作为程序的基本单位,并将相关的数据和功能封装在对象中。类和对象是Java OOP的两个关键组成部分。 ### 类(Class) ...

    Java面向对象-培训教程.rar

    Java面向对象编程是Java语言的核心特性,也是Java SE(标准版)平台的基础。在这个"Java面向对象-培训教程"中,我们将会深入探讨这一关键概念,帮助开发者掌握如何利用Java进行有效的面向对象设计和编程。 面向对象...

    memory-java面向对象 - 类与对象

    Java是一种高级的面向对象编程语言,它允许程序员通过类和对象的概念来模拟现实世界。在面向对象编程(OOP)中,类是创建对象的蓝图或模板,而对象则是类的实例。每个对象都包含其类型的数据(即属性或成员变量),...

    Java面向对象程序设计课后答案全解

    Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)原则,为开发者提供了构建复杂软件系统的方法。本资源包含了该课程所有章节的课后习题答案,帮助学习者深入理解Java语言的面向对象...

    Java面向对象程序设计

    Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...

    java基础--3.面向对象-1

    以上只是Java面向对象编程的基础知识点,实际开发中,还需要掌握更多的高级特性和设计模式,如泛型、集合框架、异常处理、并发编程、IO流、网络编程等,这些都是成为一名熟练Java开发者不可或缺的部分。学习Java面向...

    Java-面向对象设计-类和对象.docx

    Java面向对象设计类和对象 Java面向对象设计类和对象是面向对象程序设计的基础,它将现实世界模型自然延伸到程序设计中。类和对象是面向对象设计的核心概念,类描述对象的属性和行为,对象是类的实例,是一个实实在...

    day08面向对象-内部类、异常.doc

    ### Java面向对象之内部类与异常详解 #### 内部类概述 在Java编程语言中,内部类(Inner Class)是一种特殊类型的类,它被定义在另一个类的内部。内部类使得程序设计更加灵活和模块化,允许更复杂的类结构和逻辑...

    JAVA面向对象编程测试题.docx

    以上是针对JAVA面向对象编程测试题的部分解析,涵盖了变量作用域、方法声明、构造方法、访问控制、方法重载、接口定义等核心概念。实际考试中,考生还需要理解类的继承、多态、封装等面向对象编程的关键特性。

    Java面向对象应用程序开发

    Java面向对象应用程序开发是软件开发领域中的核心主题,尤其对于初学者和专业开发者而言,理解并掌握这一技术至关重要。Java语言以其强大的面向对象特性、跨平台兼容性以及丰富的类库,成为了开发各种类型应用程序的...

    JAVA面向对象程序设计(期末考试试题及答案)

    JAVA面向对象程序设计知识点总结 JAVA面向对象程序设计是 Java 编程语言的核心 contents,涵盖了面向对象编程的基本概念、语法规则、编程技术和实际应用等方面的知识。本文总结了 JAVA面向对象程序设计的知识点,...

    java-数组与方法及面向对象基础

    Java是一种广泛使用的编程语言,以其跨平台、面向对象的特点深受开发者喜爱。本教程将深入探讨Java中的数组、方法以及面向对象编程的基础概念,为初学者提供一个全面的学习指南。 一、数组 数组在Java中是存储同一...

    java-学习-面对对象-匿名对象

    观看这个视频可以更直观地理解匿名对象的概念及其用法,从而加深对Java面向对象编程的理解。 总结来说,匿名对象是Java中一种独特的编程技巧,它简化了代码,减少了不必要的变量声明,尤其在短暂使用对象或实现简单...

    java面向对象课程设计(有程序和报告)

    Java面向对象课程设计是计算机科学领域中一个重要的实践环节,旨在帮助学生深入理解面向对象编程的概念和技巧。在这个课程设计中,学生通常会被要求完成一个实际的项目,使用Java语言来实现,同时需要提交详细的报告...

    Java面向对象程序设计(第二版)

    不过,我可以基于《Java面向对象程序设计(第二版)》这个标题和标签,来详细说明Java面向对象程序设计中可能涵盖的知识点。 在深入介绍之前,首先需要明确面向对象程序设计(OOP)是一种编程范式,它使用“对象”...

    Java面向对象程序设计课本例题源代码

    《Java面向对象程序设计》是Java编程学习的重要教材,作者张亦辉以其深入浅出的讲解方式,引领读者进入面向对象的世界。这份压缩包包含了书中各个章节的例题源代码,是学习和理解Java面向对象编程概念的宝贵资源。...

    java面向对象程序设计第4章源代码

    在Java编程语言中,面向对象程序设计(Object-Oriented Programming, OOP)是一种核心的编程范式,它基于“对象”概念,将数据和处理数据的方法封装在一起。本章节的源代码着重于讲解和实践Java中的面向对象特性,...

    JAVA面向对象程序设计(期末考试试题及答案).pdf

    Java面向对象程序设计是编程领域中的核心概念,它基于面向对象的编程思想,将现实世界中的实体抽象为类,通过类来创建对象,实现代码的复用和模块化。在这个期末考试试题中,我们看到了一系列关于Java编程的问题,...

Global site tag (gtag.js) - Google Analytics