“今天是周末,虽然外面阳光晴好,但是作为一名单身狗,还是除了寝室,就只有图书馆了。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格式的,而且更易于维护,超级方便。

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

  

最新文章

  1. Linux系统GCC常用命令和GCC编译过程描述
  2. viso
  3. MongoDB的查询操作
  4. nginx上部署python web
  5. 关于Unity3d粒子系统的小发现(天堂3技能释放)
  6. JVM 基础知识
  7. 50.ISE布局布线错误
  8. Linux下cut命令使用
  9. 编写优美的GTest测试案例
  10. DNN - Modules - QR Code Generator
  11. [转]Ubuntu Linux 安装 .7z 解压和压缩文件
  12. CSS实现背景透明/半透明效果的方法
  13. Go by Example
  14. 如何在Crystal框架项目中内置启动Zookeeper服务?
  15. 【Spring源码深度解析系列 】Spring整体架构
  16. PE文件格式分析
  17. mvc中signalr实现一对一的聊天
  18. WebCracker4.0和monster字典——路由器登陆密码破解工具
  19. 微信小程序 this.setData is not a function
  20. JavaScript大杂烩14 - 使用JQuery(上)

热门文章

  1. Hadoop第4周练习—HDFS读写文件操作
  2. Robot Framework自动化测试(二)---元素定位
  3. [git]安装git-pylint-commit-hook提高python项目中的代码质量
  4. ASP.NET 为GridView添加序号列,且支持分页连续累计显示
  5. Mysql主从备份和SQL语句的备份
  6. 轻松解决MYSQL数据库连接过多的错误
  7. PHP功能齐全的发送邮件类
  8. 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性
  9. Fluent NHibernate and Mysql,SQLite,PostgreSQL
  10. ahjesus动态生成表达式树