“今天是周末,虽然外面阳光晴好,但是作为一名单身狗,还是除了寝室,就只有图书馆了。Anyway,既然没有对象,那我们就在java中找对象吧,哈哈。没有对象的人,看一切,都是对象!”

  在面向对象程序设计语言中,我们最熟悉的就是java和C++。但是最纯粹的还是java。C++虽然也是面向对象语言,但是毕竟它是c语言的扩展,毕竟混杂。

  那在java中,我们通过new来生成对象(好想new一个……)。任何一门语言,都有自己操作内存中数据的方式。在java中,我们实际上是通过引用来操作的对象,就像是通过一个遥控器去控制一台电视。举个栗子。当我们写一个String s;这样,我们新建了一个引用(遥控器)。但是此时只有遥控器,没有电视,那明显不能用。只有通过new后,才会生成一个具体的对象,才能用遥控器去操控。

  当我们使用new新建一个对象的时候,那对象被创建后放到哪里的呢?

  我们知道,有几种数据存储的地方,如寄存器,堆栈,堆,常量存储,非RAM存储等。各种的作用如下

  • 寄存器:这个是最快的,在处理器中。主要存储着处理器指令所需要的数据,但是特别小。当然这不是我们对象存储的地方。
  • 堆栈:这块是比较常用的,存储一些变量、函数跳转现场保存等等。也是引用的存放点。位于RAM。
  • 堆:Here we go!这里就是对象的存储地方了,存放所有的java对象。创建的时候用new就行,回收由GC自动回收。
  • 常量存储:这里存放的是一些常量,如static数据、直接写的数据等等。如String s  = "SnailRen is so handsome",那s存放在堆栈,这个对象在堆,“SnailRen is so handsome”在常量区。
  • 非RAM:即数据持久化,保存在磁盘

  基本数据类型,是保存在堆栈中。虽然它们也能通过java的自动装箱机制作为对象,但是由于一般这种数据都比较小,如果都放在堆中不是很好。当然java中还有高精度的数据类BigInteger,BigDecimal。那我们就不用自己单独再去写大数类了。

  在我们弄清楚对象保存的地方后,我们就可以研究一下对象的生命周期

  这里其实也是java 的一个优点。java对象和其他数据类型不一样,没有作用域那种情况。只要你new了一个对象,那这个对象将会一直存在。java的垃圾回收器会监控对象的情况,判断对象是不是需要回收。如果要回收,则自动回收。这样就避免了内存泄漏。

  对象是一个类的具体的实例,当然我们需要创建类了。在对类进行创建的时候,我们会创建成员以及方法。对成员进行创建时,如果没有直接指定值,那么java会将其设置为默认值。如boolean型为false,int型为0等等。

  在设计java程序的时候,我们需要进行命名空间的管理。因为可能在同一个模块里,如果有相同的名字,则会造成冲突。因此在java中,采用自己的internet域名来管理包,将域名反写。接着,如果有一些数据或者方法是脱离具体的实例的时候,我们可以将其设置为static。这样就可以直接用类进行调用,不用通过具体的对象。当然,这个是存放在常量存储区的。

  那么我们就开始写java程序了。java有一个特性很多初学者不太知道。我们知道,如果需要在代码中使用一些其他的类,就需要import对应的包。那java其实还会自动的导入java.lang这个包。导入这个包后,那很多常用的操作就能用了。

  还有main函数。main函数必须设置为public的,很明显,因为它要被外部所调用嘛。而且java要求它的格式也必须是那样。main(String[] args)里面的参数是在命令行传入的参数。

  最后再说java的一个比较好用的工具,那就是javadoc。我们程序员知道写了代码,还得有对应的代码文档。但是编写一个合格的、比较专业的文档很麻烦,大家都不想去写。采用javadoc,在编写代码的同时就能通过特定的语法来编写文档,最后直接生成html格式的,而且更易于维护,超级方便。

  那今天就到这儿,明天继续!得给老板汇报工作了……

  

大家一起和snailren学java-(二)一切都是对象的更多相关文章

  1. 浅谈《think in java》:二 一切都是对象

    清晨坐在图书馆,今天聊聊早晨的“果实”. 清单1. 引用操作:对象创建:存储地方:基本类型:数组 “reference”:引用[操作对象的标识符] 例子:创建String类型的引用,并不是对象. St ...

  2. java 二维数组和对象数组

    1.二维数组:二维数组就是存储一维数组(内存地址/引用)的数组 2.二维数组的初始化 1) int intA[][]={{1,2},{2,3},{3,4,5}}; 2) int [][] intB=n ...

  3. Java编程思想学习(二)----一切都是对象

    2.1用应用操作对象 String s; 这里所创建的只是引用,并不是对象.如果此时向s发送一个消息,就会返回一个运行时错误.这是因为此时s没有和任何事物关联.因此,一种安全的做法是:创建一个引用的同 ...

  4. Java编程思想之二 一切都是对象

    2.1 用引用操作对象 每种编程语言都有自己的操作内存中元素的方式. 在Java中,一切都可以视为对象,因此可以采用单一的固定语法. 2.2 必须由你创建所有对象 一旦创建一个引用,就希望它能与一个新 ...

  5. 初学者学Java常遇到的问题,我都给你回答了!

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 春节在家刷知乎,看到了一个知乎的问题:<学 ...

  6. Java编程思想 4th 第2章 一切都是对象

    Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...

  7. Java 运算符(引用和对象)

    1. 算数运算符 就是+.-.*./.%.++.--这些,没什么好说的,稍微强调下自加,自减: 前缀自增自减法(++i,--i): 先进行自增或者自减运算,再进行表达式运算. 后缀自增自减法(i++, ...

  8. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  9. 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)

    从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...

  10. (二)一起学 Java Collections Framework 源码之 AbstractCollection

    . . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述(未完成) (二)一起学 Java Collections Framework 源码之 Abs ...

随机推荐

  1. 用于软件包管理的21个Linux YUM命令 转载

    http://flycars001.iteye.com/blog/1949085 YUM到底是啥东东? YUM(Yellowdog Updater Modified)是一款开源命令行及图形化软件包管理 ...

  2. [转载]AxureRP 7超强部件库下载

    很多刚刚开始学习Axure的朋友都喜欢到网上搜罗各种部件库(组件库)widgets library ,但是网络中真正实用的并且适合你使用的少之又少,最好的办法就是自己制作适合自己工作内容的部件库. 这 ...

  3. yousa_team团队项目——兼职平台网站 工作进度

    4月31 初步设计网站界面,功能以及数据库关系图 网站包括登陆注册界面,商家和学生都有个人主页,查看兼职信息界面和反馈界面,管理员有查看反馈界面,查看兼职市场,管理后台界面 登录注册界面实现用户的登陆 ...

  4. Parallax.js – 自适应智能设备方向的视差效果插件

    Parallax.js 是一个简单的,轻量级的的视差引擎,能够对智能设备的方向作出反应.在没有没有陀螺仪或运动检测硬件可用的时候,使用光标的位置来代替.有很多的行为,你就可以设置为任何给定的视差实例. ...

  5. MySQL+Sphinx实现全文搜索

    最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下Sphinx吧. 它能够提高你的查询的速度,这个不是一般的快. Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,Pos ...

  6. 一次领域驱动设计(DDD)的实际应用

    笔者先前参与了一个有关汽车信息的网站开发,用于显示不同品牌的汽车的信息,包括车型,发动机型号,车身尺寸和汽车报价等信息.在建模时,我们只需要创建名为Car的实体(Entity)对象.其他的信息,比如车 ...

  7. 2015 Multi-University Training Contest 1 - 1002 Assignment

    Assignment Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Mean: 给你一个数列和一个k,求连续区间的极值之 ...

  8. C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用

    概述 转自 http://www.cnblogs.com/luomingui/archive/2013/09/19/3329763.html 最近几天一直在关注WinFrom方面的文章 有想着提炼一下 ...

  9. IOS 之 PJSIP 笔记(一) 编译多平台支持的静态库

    好久没有写博客了,这也算是我步入新工作后的第一篇技术博文吧.在进入新公司前,早就有了技术层进入下一个迭代的准备,但很多事情是意想不到的,就像我以 C# 程序员的身份面试入职的,而今却是一个全职的 IO ...

  10. 计算html标签textarea字符长度

    今天学习jQuery,做练习计算html标签textarea字符长度,先添加一个视图操作(Action): 创建一个视图,并按下面顺序标记1,2,3进行写html或javascript脚本: 其中标记 ...