大家一起和snailren学java-(二)一切都是对象
“今天是周末,虽然外面阳光晴好,但是作为一名单身狗,还是除了寝室,就只有图书馆了。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-(二)一切都是对象的更多相关文章
- 浅谈《think in java》:二 一切都是对象
清晨坐在图书馆,今天聊聊早晨的“果实”. 清单1. 引用操作:对象创建:存储地方:基本类型:数组 “reference”:引用[操作对象的标识符] 例子:创建String类型的引用,并不是对象. St ...
- java 二维数组和对象数组
1.二维数组:二维数组就是存储一维数组(内存地址/引用)的数组 2.二维数组的初始化 1) int intA[][]={{1,2},{2,3},{3,4,5}}; 2) int [][] intB=n ...
- Java编程思想学习(二)----一切都是对象
2.1用应用操作对象 String s; 这里所创建的只是引用,并不是对象.如果此时向s发送一个消息,就会返回一个运行时错误.这是因为此时s没有和任何事物关联.因此,一种安全的做法是:创建一个引用的同 ...
- Java编程思想之二 一切都是对象
2.1 用引用操作对象 每种编程语言都有自己的操作内存中元素的方式. 在Java中,一切都可以视为对象,因此可以采用单一的固定语法. 2.2 必须由你创建所有对象 一旦创建一个引用,就希望它能与一个新 ...
- 初学者学Java常遇到的问题,我都给你回答了!
前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 春节在家刷知乎,看到了一个知乎的问题:<学 ...
- Java编程思想 4th 第2章 一切都是对象
Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...
- Java 运算符(引用和对象)
1. 算数运算符 就是+.-.*./.%.++.--这些,没什么好说的,稍微强调下自加,自减: 前缀自增自减法(++i,--i): 先进行自增或者自减运算,再进行表达式运算. 后缀自增自减法(i++, ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)
从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...
- (二)一起学 Java Collections Framework 源码之 AbstractCollection
. . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述(未完成) (二)一起学 Java Collections Framework 源码之 Abs ...
随机推荐
- C#对象与XMl文件之间的相互转换
C#提供三种序列化方式,分别为: 1.是使用BinaryFormatter进行串行化: 2.使用SoapFormatter进行串行化: 3.使用XmlSerializer进行串行化.其中对于Binar ...
- Gradle学习系列之三——读懂Gradle语法
在本系列的上篇文章中,我们讲到了创建Task的多种方法,在本篇文章中,我们将学习如何读懂Gradle. 请通过以下方式下载本系列文章的Github示例代码: git clone https://git ...
- Entity FrameWork 延迟加载本质(二)
1.对于外键实体而言,EF会在用到这个外键属性的时候,才会去查对应的表.这就是按需加载了... 2.按需加载的缺点:每次调用外键实体的时候,都会去查询数据库(EF有小优化:相同的外键实体只查一次) I ...
- 已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。
错误:已超过传入消息(65536)的最大消息大小配额.若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性. 或者 错误:反序列化操作“GetAllUserData ...
- C#实用杂记-EF全性能优化技巧
原文链接:http://www.makmong.com/947.html#comment-31 EntityFramework 优化建议 2016年1月15日 下午4:54 LEILINKANG ...
- 调试报“The source file is different from when the module was built.”问题的解决
It is related to the checksums which is used to ensure that you are stepping in matching source. You ...
- 用Perl编写Apache模块
前言 Apache被许多大流量网站所嫌弃,但很多企业级的场景则更为适用. Apache httpd 从 2.0 之后,已经不仅仅局限于一个 http 的服务器,更是一个完善而强大.灵活而健壮且容易扩展 ...
- jquery中的事件与动画
一:事件 1.鼠标事件 eg:光棒效果 $(function () { $('li').mouseover(function () { //鼠标移过时 $(this).css('background' ...
- [小北De编程手记] : Lesson 07 - Selenium For C# 之 窗口处理
在实际的自动化测试过程中,我们会遇见许多需要对窗口进行处理的情况.比如,点击删除某条信息的时候系统会显示一个Alert框.或者点击某个超链接时会在浏览器中打开一个新的页面.这一篇,来和大家分享一下Se ...
- 【OpenCV & CUDA】OpenCV和Cuda结合编程
一.利用OpenCV中提供的GPU模块 目前,OpenCV中已提供了许多GPU函数,直接使用OpenCV提供的GPU模块,可以完成大部分图像处理的加速操作. 基本使用方法,请参考:http://www ...