当创建一个类时,需要创建一种新的数据类型。获得类的对象的过程包含两个步骤。首先,必须声明该类类型的一个变量,这种声明只是一种简单声明,对计算机来讲,并没有实际的物理含义;然后,需要创建一个对象的实际物理备份,并把对于该对象的引用赋给该变量,这是通过使用new运算符实现的(new运算符可以为对象动态分配内存空间,并返回对它的一个引用,这个引用就是new分配给对象的内存地址,然后这个引用被存储在该变量中)。如下所示的一段代码:

class Birthday {

int year;

int month;

int day;

}

Birthday birthday;

birthday = new Birthday();

在上面这段代码中,首先定义了Birthday类,接着声明了类型为Birthday的对象birthday。在声明birthday对象之后,birthday的值为null,即它没有引用任何对象,只是单纯地做了一个声明。此时,如果对程序进行编译,就会得到一个编译错误。第二行创建了一个实际的对象,并把对于它的引用赋给birthday。现在,可以把birthday作为Birthday的对象来使用。但实际上birthday仅仅保存了实际Birthday对象的内存地址。

看到这里,可能会产生疑惑,为什么在声明基本数据类型时没有使用new运算符呢?这是因为Java的简单类型不是作为对象实现的。出于效率的考虑,简单类型是作为“常规”变量实现的。对象有许多特性和属性,Java对对象的处理不同于简单类型,对象处理的开销将远远大于处理简单类型的开销,Java能更高效地实现简单类型。

new运算符可以在运行期间动态分配Java内存,这样就可以更高效地利用内存,但内存是有限的,因此,new运算符有可能由于内存不足而无法给一个对象分配内存。如果出现在这种情况,就会发生运行时异常。随着计算机硬件的发展,现在主流PC的内存已经达到了1GB或者2GB,内存因素在变成中已经越来越不需要考虑,但当开发一些大规模的企业级应用时,出于节约资源或性能优化的原因,有时还是需要适当考虑内存的因素。

java里类包含对象对不对_Java类中的对象相关推荐

  1. 64位java_99.9%的Java程序员都说不清的问题:JVM中的对象内存布局?

    点击上方石杉的架构笔记,右上选择"设为星标" 每日早8点半,精品技术文章准时送上 往期文章 BAT 面试官是如何360°无死角考察候选人的(上篇) 每秒上万并发下的Spring C ...

  2. java对象添加字段_99.9%的Java程序员都说不清的问题:JVM中的对象内存布局?

    在 Java 程序中,我们拥有多种新建对象的方式.除了最为常见的new语句之外,我们还可以通过反射机制.Object.clone方法.反序列化以及Unsafe.allocateInstance 方法来 ...

  3. java类对象实验问题_Java类与对象实验答案

    Java类与对象实验答案Tag内容描述: 1.Java实验报告 计科.信工版2013-2014-2 实验报告 一.实验项目:类与对象 二.实验目的: 1. 学会使用类来封装对象的属性和功能 2. 掌握 ...

  4. Java里的容器存放的元素必须是1个对象.

    我们经常看到这个句话: Java里存放的容器只能是1个对象. 一. 值类型和对象类型. 实际上, java里的变量可以分为两种类型, 一种是值类型. 一种是对象类型. 1.1 值类型变量 所谓值类型的 ...

  5. java判断对象已死_Java的JVM判断对象已死的基本算法分析

    jvm中有各种的垃圾收集器,每个收集器都有各自的算法.但是一切的根本都需要找到找到应该被消除的对象,理解如何找到死亡对象才是理解垃圾收集器的基础. 01两个基本算法 a.引用记数法:对象中加一个引用计 ...

  6. java对象序列化作用_Java学习之——理解对象序列化

    Java的对象序列化就是把对象写入到输出流中,用来存储或传输:反序列化就是从输入流中读取对象.简单的来说是指将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列 ...

  7. Java计算一个对象所占内存大小_Java程序计算各种对象所占内存的大小的方法

    System.out.println("--- Memory Usage:"); /*打印一行字符串---Memory Usage*/ Runtime rt=Runtime.get ...

  8. java简述对象的组合_Java程序运行和对象创建过程简述

    Java中一个对象创建分为两个步骤: 加载类,创建对象. 加载类是将所写的程序.java文件编译生成的.class文件加载到内存中,保证了对象创建的预置环境.类加载完毕后才可以创建该类的对象. 第一步 ...

  9. java 对象值拷贝_Java 值传递与对象拷贝

    setter/getter new 新对象后用 set/get 方法设置属性 浅克隆 被复制的类需要实现Clonenable接口(不实现的话在调用 clone 方法会抛出 CloneNotSuppor ...

最新文章

  1. mysql row 转int_mysql_row[]取值转换有关问题,
  2. micronet 测试
  3. date javascript 时区_第23节 Datejs 日期库-Web前端开发之Javascript-零点程序员-王唯
  4. freemarker导出word 目录_PPT转Word你还用复制粘贴?别笑掉大牙了,这几招教你快速转换...
  5. 让用户闭着眼睛买东西可还行?雷军谈小米的目标...
  6. Windows 微软雅黑(Microsoft YaHei)+ Monaco 字体整合方案
  7. 聊聊我的2021,总结与展望
  8. jQuery 教程 jQuery入门学习教程
  9. 大觉寺到鹫峰线路_大觉寺—鹫峰—望京塔—羊台山—凤凰岭—七王坟徒步游记...
  10. 用我们的奋斗和梦想扬起青春的船帆
  11. WinCC 7.3 + SQL server(杂)
  12. nvme命令中prp_Linux nvme驱动分析之块设备层
  13. Qt键盘事件(二)——长按按键反复触发event事件问题解决
  14. [英语语法]词法之分词
  15. 来聊聊,今年各互联网大厂的年终奖......
  16. pymssql 安装和使用
  17. Hyper-V共享主机磁盘 2021-12-10
  18. Mipony(网络硬盘下载工具) v1.11简体中文绿色单文件版
  19. 谷歌浏览器默认开启无痕浏览
  20. Winxp Stop c0000218 unknown hard error

热门文章

  1. 安装php扩展phpredis,安装php扩展phpredis
  2. antd 选择文件夹_antd 手动上传文件
  3. linux重启ipv6_Linux关闭、开启、配置IPv6
  4. jdialog 数据量大加载出现白板_王者荣耀:队友真的有人机?白板熟练进排位,资料面都是假的...
  5. C语言之字符串探究(二):字符串原生操作——strlen、strcat、strcpy、strcmp自实现
  6. 《Essential C++》笔记之Iterator Inserter(插入迭代器)
  7. linux open o_creat 失败,linux C代码 open函数参数:O_APPEND问题求助
  8. python做图片-python做图
  9. 计算机管理 没有适当的权限,提示没有合适的权限访问怎么办
  10. php5.3.3php5.4如何支持zend,php5.3不支持ZendOptimizer的解决办法(Zend Guard Loader)