“今天是周末,虽然外面阳光晴好,但是作为一名单身狗,还是除了寝室,就只有图书馆了。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. node.js JS对象和JSON字符串之间的转换

    JSON.stringify(obj)将JS对象转为字符串. var json = { aa: ['sdddssd'],   bb: [ '892394829342394792399', '23894 ...

  2. Transact-SQL 示例 - UPDATE中使用INNER JOIN

    一般情况下博主已经对在SELECT语句当中使用INNER JOIN非常娴熟,但在UPDATE当中使用INNER JOIN的场景就为数不多了.以下博主将为你介绍在UPDATE场景当中使用INNER JO ...

  3. 100款免费的圣诞节矢量图标素材(PSD & SVG)

    圣诞节的脚步越来越近了.今天,我们给大家收集了100个美丽的圣诞矢量图标素材.这套圣诞矢量图标集包含 PSD 和 SVG 两种格式,基于 Creative Commons 协议,可以在商业和个人项目中 ...

  4. [Solution] 1分钟使用log4net

    log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具 官网:http://logging.a ...

  5. Sprint第三个冲刺(第七天)

    项目基本上可以说完成了,只是还有些小bug要修复.

  6. [WCF实践]1.WCF使用net.tcp寄宿到IIS中

    一.IIS部分 环境:Windows Server 2008 R2 1.安装WAS,如下图所示:   2.网站net.tcp协议绑定,如下图所示:   3.网站启用net.tcp,如下图所示:   二 ...

  7. PHP功能齐全的发送邮件类

    下面这个类的功能则很强大,不但能发html格式的邮件,还可以发附件 <?php class Email { //---设置全局变量 var $mailTo = ""; // ...

  8. WinFrom子窗体向父窗体传值

    父窗框mainForm;子窗体childForm,利用事件进行传值 在子窗体中的操作: public event EventHandler accept;public string value; pr ...

  9. 【转】RBAC权限管理

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

  10. ajax案例源码

    html文件中demo2_index.html ---------------------------------------------------------------------------- ...