java零基础入门-面向对象篇(一) 基础类型和引用类型

友情提示:本章开始可能会有部分较深入的内容,不说又不行,说了又很难解释清楚,因为里面的技术细节实在太多太复杂,所以我会屏蔽部分技术细节,只展示当前需要了解的基础知识,避免出现讲了半天还是没人懂的情况。随着我们的知识增长,后面会逐步的将细节补充完整。

学习编程,一定要把思路放开,不能太局限,多多进行思维能力的锻炼才能提高自己的内功。比如我们很常见的买房啊,哪里修商场啊,其实跟我们的内存结构是很类似的。他们都涉及到一个资源规划的问题,来吧,一起来锻炼下思维能力吧。

最近全国除了最火的抢人大战,其实前段时间还有一个东西很火,那就是城市规划。比如我们的首都北京,选择了雄安进行首都功能疏解,其实很多城市都有类似的规划,比如天津滨海新区,深圳前海新区等等。政府设立了一个即将开发的新区后,会干嘛?招商引资,首先是大的企业进来修路盖高楼大厦,然后修住宅,再卖给老百姓。我们来看看具体过程。

首先,政府画了一个圈,“走过路过不要错过哈,新鲜出炉的地块,各种优惠政策,减税减税再减税,快来看看啊~”,然后一堆大企业蜂拥而上,“给我留一块~”,“我也要~”。然后各种大企业开始修办公楼啊,房地产开发商开始修海景房啊,然后轮到地产开发商要喝了,“走过路过不要错过啊,海景房值得拥有,机不可失,抢到了幸福生活,没抢到继续干活~”。然后轮到抢房大军蜂拥而上了。

给我房!!!

再来看看电脑内存,其实我们的电脑就是政府部门,每一次一开机,就开始要喝,“内存开始大派送啦,需要的快来领啊”,然后各种开机启动的应用程序开始抢内存,什么聊天的啊,杀毒的啊,浏览器啊,当然还有系统自带的功能,统统需要内存。当然,内存不是一开机就分完了的,还有很多是我们启动了新的应用程序才会划分内存给你,比如我们的java。

应用程序和系统程序占用内存

电脑开机进行的内存免费大派送跟我们的政府规划很像,在座的各位都是大佬,内存要多少有多少。然后我们打开java的时候,java也成功的分到了一块内存空间。java这个房地产商跟别的有点区别,他很牛,拿的地很大,他要自己规划自己的地,也就是说它不仅仅要做房地产,他还要修商场,建公园,这个就厉害了~

java虚拟机

看见没有,系统给了一块内存java ,然后他在自己的一亩三分地上,开始干自己的规划了,这是个很高级的房产开发商。java有个名词叫java虚拟机(JVM),你就可以理解为他是一个虚拟的系统,他干了很多和系统类似的活,系统把内存交给java以后,就由 jvm 来负责规划内存。就像我们上面说的,政府部门划了地给开发商,java自己也划地分给他下面的小弟。那么java里面的小弟又是啥?继续往下看

首先我们看看普通人眼里的内存,他就是一块绿色的板子,上面有很多电路,下面有一条金光闪闪的东西,好了,理解完了。

普通人看内存

再来看看硬件工程师眼里的内存,他就是各种电路啊,电容啊,门啊之类的东西,其实我也不是很懂,大概是这样。

硬件工程师看内存

接下来看软件工程师眼里的内存,这个图是指分给java的内存,也就是jvm管理的内存。我们只看java这个开发商,自己已经分到的内存,其他软件,系统占用的内存我们不去管他。我们看到 jvm 划分的内存大概有以下这么几个区域:本地方法栈,虚拟机栈,程序计数器,堆,方法区,这些就是 java 自己的小弟了。

jvm内存

我们看看这些颜色是咋回事,和上面的规划图颜色说明差不多,红色的是 堆,可以理解成商业用地,绿色的是方法区,可以理解成公园,这两个区域的特点是,他们是公共用地,不管哪个小区的居民,都可以来压压马路,看看风景。再看上面的,本地方法栈和程序计数器是灰色,你可以理解为市政设施,每个片区都有警察局,有困难找警察叔叔,我们姑且不去管他,知道就行了。主要看看 虚拟机栈,这个下面简称为栈,这个很重要。我们可以理解成居民小区,每个人只能出入自己的小区,去别人小区可不行,保安不让进。

所以总结一下,堆和方法区是公共的,每个小区的居民都可以去玩,而栈是私有的,不能随便串门的。这个理解到这里就行了。接下来我们讲讲最重要的 栈 和 堆,方法区就是个大草地,暂时不用管他。

基础类型 和 引用类型

我们首先明确一个观念,我们的数据都是存在内存里的,但是不同的数据,在内存中存放的区域是不同的。有的数据存放在栈,有的数据存放在堆。具体谁放在哪,我们首先要明确数据的类型。

基础类型(又叫值类型):我前面讲的都是基础类型,byte,short,int,long,float,double,boolean,char,基础类型全部存在栈里面。

引用类型:数组,类,接口,引用类型变量存在栈,对象存在堆,通过引用确定关系。

基础类型比较好理解,创建的时候往栈里面一丢,搞定,打完收工。而引用类型就比较复杂了,引用类型的变量就是引用,啥叫引用?来吧,话不多,懵的时候就上图

内存地址

好吧,肯定有同学又要问,内存地址又是个啥?

内存地址

地址就是找人找东西时候用的,内存地址就是让内存划分的空间有个标记,我通过这个标记可以找到内存。所以引用类型里面存的不是你定义给他的值,而是存的内存地址。那我定义的数组啊,数组跑哪去了?它在堆里面,而这个栈里面存的地址就是堆里面放的那个数组的地址。又懵了?图图图~

地址

我们将红色箭头干的事,叫做:引用变量指向内存。堆里面的数据,只有当有引用变量指向它的时候,才能存在,如果没人指向堆里面的数据了,就会有一位亲切的清洁工阿姨把他当垃圾处理掉。所以栈里面的变量,红色箭头,堆里面的数据这三个东西是一体的,他们不能分开。他们在一起,才是定义了一个完整的引用类型。

其实这一段对于初学者来说是有难度的,概念比较多,步骤繁琐,图也都是平面图,有没有更加通俗易懂的方式来解释这个问题呢,来吧,本教程独家三维图双手奉上。

栈是一种数据结构,他的特点就是先进后出,后进先出。只有栈顶可以操作,栈底是固定的,插入操作又叫入栈,删除叫出栈。理解这么多就可以了。

栈结构

入栈

出栈

相对于栈的有序,堆是无序的,可以理解成随机划分一块空间来储存对象。

堆是无序的

我们用三维图再来看看刚才的例子

首先是基础类型

定义变量入栈

再来看引用类型

定义变量开辟空间,建立引用

本篇文章为接下来的数组,类打基础,堆和栈的理解对我们更好的学面向对象很有帮助,请好好理解,多多参悟。

jvm 简单描述的更多相关文章

  1. JAVA 文件编译执行与虚拟机(JVM)简单介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...

  2. Java中会存在内存泄露吗?请简单描述。

    本文转载自:Java中会存在内存泄漏吗,请简单描述 会.java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周 ...

  3. 简单描述RAID级别:

    简单描述RAID级别: RAID 0 是俩盘一起读写,如果一个坏了那么数据全丢失: RAID 1是一块写,一块用来备份,坏一块无所谓: RAID 2 ,3 ,4 不常用: 最常用的就是RAID 5和R ...

  4. ECSHOP购物车页面显示商品简单描述

    1.这里说的商品简单描述,不是商品的详细信息,而是后台编辑商品时在“其他信息”标签栏填写的那个“商品简单描述”,即goods_brief字段 2.修改lib_order.php文件的get_cart_ ...

  5. TCP/IP 协议标准简单描述

    TCP/IP 协议标准简单描述 说明 分为三部分:中文名称.缩写.说明. 应用层 DNS 域名服务 (DNS) 功能: 将域名转化为IP地址 BOOTP 引导程序协议 (BOOTP) 功能: 允许无盘 ...

  6. LINQ架构简单描述

    写在前面的话:课堂上老师只是简单提了一下LINQ,当时听着老师对它的描述,感觉非常神奇,不用去操作繁琐的SQL语句了,读取数据库的操作居然能向写C#代码一样方便,但是一直没有机会去学习使用它. LIN ...

  7. [answerer的算法课堂]简单描述4种排序算法(C语言实现)

    [answerer的算法课堂]简单描述4种排序算法(C语言实现) 这是我第一次写文章,想要记录自己的学习生活,写得不好请包涵or指导,本来想一口气写好多种,后来发现,写太多的话反而可读性不强,而且,我 ...

  8. salesforce 零基础学习(三十七) DML及Database方法简单描述

    在apex中通过soql查询可以使用两种方式,使用DML语句或者使用Database的方法. 使用DML语句和使用Database类的方法对于我们来说用的都很多,并且都很常见.对于数据库常见的操作:增 ...

  9. iterator简单描述

    Item 26. Prefer iterator to const iterator, reverse_iterator, and const_reverse_iterator. 上面一段话,是< ...

随机推荐

  1. Java集合中的细节问题

    1)集合不保存基本数据类型,而是会把基本数据类型装箱后保存. 2)Empty和null的区别:null是不存在,Empty已经初始化了,只不过里面是空的. 3)判断集合有效性: 先判断空,再判断emp ...

  2. Java并发之(1):volatile关键字(TIJ21-21.3.3 21.3.4)

    Java并发Java服务器端编程的一项必备技能. ** 1 简介    volatile是java中的一个保留关键字,它在英语中的含义是易变的,不稳定的.volatile像final.static等其 ...

  3. MongoDB快速入门学习笔记2 MongoDB的概念及简单操作

    1.以下列举普通的关系型数据库和MongoDB数据库简单概念上的区别: 关系型数据库 MongoDB数据库 说明 database database 数据库 table collection 数据库表 ...

  4. PDO 连接与连接管理

    连接是通过创建 PDO 基类的实例而建立的.不管使用哪种驱动程序,都是用 PDO 类名. 构造函数接收用于指定数据库源(所谓的 DSN)以及可能还包括用户名和密码(如果有的话)的参数. 连接到 MyS ...

  5. PAT——乙级1018

    题目是 1018 锤子剪刀布 (20 point(s)) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出 ...

  6. [oldboy-django][2深入django]cookies + session

    1.1 cookies - 初识cookie a.cookie是保留在浏览器端的键值对 b.服务端可以向客户端写cookie c.客户端每次发送请求,会携带cookie一起发送过去,而且cookie是 ...

  7. unity中的main方法

    由于方法命名的原因,无意之间把一个方法命名为了Main,然后把这个方放到了Start方法中去执行,结果运行后发现这个方法竟然执行了两次 情况如下图: -------------- 检查代码,发现脚本并 ...

  8. VS 2013插件

    http://www.spersky.com/post/vsPlugins.html http://vswebessentials.com/download http://developer.51ct ...

  9. 一些echarts的基本图形

    先拿一个图形渲染过程举例 引用处 <bar ref="ARPUChart" v-if="ARPUChart" style="width:500p ...

  10. ZOJ 2676 Network Wars(最优比例最小割)

    Network Wars Time Limit: 5 Seconds      Memory Limit: 32768 KB      Special Judge Network of Bytelan ...