猫哥带你去战斗——Java Web开发——Java篇[1]——从内存讲起
来源:互联网 发布:网络制式按什么划分 编辑:程序博客网 时间:2024/06/15 22:04
首先从最宏观上讲,Java程序设计就像开公司,开公司是为了得到一个好盈利,Java程序设计是为了得到一个好结果。当然公司可以持续盈利,Java程序也可以持续响应用户输入,持续输出计算结果。
开公司有两件事最重要,一个是物质基础,包括金钱、人力、办公楼、仓库、各类设备等等;另一个是公司的办事方式,即运行制度、公司文化、公司管理方式、公司办事制度决定的公司在处理事的时候采取的具体方式。对应到Java语言中,物质基础即Java程序中设定的常量、变量、字段、成员变量等这些概念;办事方式即Java中的方法、函数这些概念。今日暂且不表办事方式,咱先把物质基础说清楚。(题外话,面向过程和面向对象的区别就是公司运作方式的区别,面向过程所有的事情依赖于老板,老板让谁带上哪些资源以哪种方式办事,老板势必亲为,如果老板牛X,公司灰常高效,C语言就是这般。而面向对象把公司划分很多部门,每个部门有自己的办公室和设备资金等,有自己的办事方式,老板大体给个方向,调动多个部门配合完成一件事,所以面向对象老板也得强,还得有面向对象的思想,如果老板事必躬亲,那设这么多个部门简直就是浪费了;猫哥看到很多童鞋用Java写极其面向过程的语句,感觉挺累,当老板不就得让别人办事么。题外话比正题都多,也是够了….)
刚刚都是些逻辑的概念,现在回归Java语言的物质基础——内存。Java基本上就是使用RAM随机存储器的,RAM有一块叫堆、还有一块叫堆栈。堆非常好理解,就是一大片内存,谁想要用,就申请一堆,那这一堆地方就属于这个人了。至于堆栈呢,稍微复杂点,管理的更细点,分先来后到,按顺序分配,所以使用效率高点,反映到程序中就是存取速度稍微快点。OK,那Java语言的设计者就动了个小心思,他把Java中的常量、变量、字段、对象等需要存储的东西分为了两种,一种是基本类型、另一种是非基本类型。所谓基本类型就是像整数(Java中为int)、小数(Java中为double)等最常用的,设置为基本类型,因为常用所以放在了堆栈区。另一种非基本类型呢,就是字符串(String)还有各种各样的自定义的类(Class),这一部分放在了堆里面。
讲来讲去,好像我们作为程序员没必要知道这些,我们会用就行。这里关键是有一个灰常重要的区别,就是基本类型的量直接存储变量的值,而非基本类型的量存储变量的引用!
好了,具体讲一下。
int i=0;int 表示基本类型整数类型,i是一个整数类型的变量,它存储的值就是0。这个太好理解了,这个值0存储在堆栈上,完事。
string i=”哈哈,我很好”;string 表示非基本类型字符串类型,i是一个字符串类型的变量,它存储的值是”哈哈,我很好”吗?非也非也,问题就在这,此处i存储的是一个引用,你可以认为是一个地址比如”中国北京001街区001号”(内存那么大的空间,总得分下地址,谁是几号楼那个屋子),这个地址是堆那块区域的地址,这个地址里保存的内容才是”哈哈,我很好”。那i的值其实是”中国北京001街区001号”。
如果上面讲的不清楚,那也没关系,等讲到函数传值还是传引用的时候,咱再结合实例讲讲。如果还不明白,那也没事,会用才是王道。
- 猫哥带你去战斗——Java Web开发——Java篇[1]——从内存讲起
- 猫哥带你去战斗—Java Web开发—Java篇[13]—联表操作
- 猫哥带你去战斗—Java Web开发—Java篇[14]—数据库操作简化
- 猫哥带你去战斗——Java Web开发——开发环境介绍[1]
- 猫哥带你去战斗—Java Web开发—Servlet篇[2]—get与post
- 猫哥带你去战斗—Java Web开发—Servlet篇[3]—获取网页数据
- 猫哥带你去战斗——Java Web开发——开发环境介绍[0]
- 猫哥带你去战斗——Java Web开发——开发环境介绍[2]
- 猫哥带你去战斗—Java Web开发—Servlet篇[1]—手(首)写Servlet
- 猫哥带你去战斗——Java Web开发——前言[0]
- 猫哥带你去战斗——Java Web开发——Java篇[0]——小谈动态网页
- 猫哥带你去战斗——Java Web开发——Java篇[2]——Hello World
- 猫哥带你去战斗——Java Web开发——Java篇[3]——常用类型
- 猫哥带你去战斗——Java Web开发——Java篇[4]——常用容器
- 猫哥带你去战斗——Java Web开发——Java篇[5]——大王,有异常!
- 猫哥带你去战斗——Java Web开发——Java篇[6]——处理异常
- 猫哥带你去战斗——Java Web开发——Java篇[7]——认识数据库
- 猫哥带你去战斗——Java Web开发——Java篇[8]——连接MySQL
- 洛谷P1803 凌乱的yyy
- sizeof和strlen的区别
- iOS CFRUnLoopRef 之CFRunLoopMode
- STM32 --UART串口通信
- 2.1.1
- 猫哥带你去战斗——Java Web开发——Java篇[1]——从内存讲起
- hdu2896(病毒侵袭)--AC自动机
- 【t050】方程求解
- 如何从 Hibernate官网下载 hibernate原码 和hibernatetools
- CFRunLoopRef 的内部逻辑(向 ibireme学习)
- 17/2/1 学习日记
- iOS RunLoop详解
- 猫哥带你去战斗——Java Web开发——Java篇[2]——Hello World
- 字典树