几个概念的解释:

(1)面向对象(OOP:程序由对象组成,每个对象中包括功能部分和实现部分。面向对象关心能否满足用户需求,而非对象的具体实现。在OOP思想中数据被放在第一位,而操作数据的算法被放在第二位。面向对象的思想适合与解决大规模的问题。

(2)Java的两类数据类型:(一):基本数据类型(也称为原生数据类型):包括八种,字节型、短整型、整型、长整型、浮点型、双精度型、字符型,布尔型

注意:String:实际上是一个类,而非字符串类型。

(二):引用类型:类,数组,接口。下面贴一个高人的总结

java数据类型图:┏数值型━┳━整数型:byte short int long┏基本数据类型━━┫              ┗━浮点型:float double┃                            ┣字符型:char
数据类型╋                            ┗布尔型:boolean              ┃                            ┏类(class)┗引用数据类型━━╋接口(interface)┗数组(array)
java的数据类型分基本数据类型(原始数据类型)和引用数据类型;
1.基本八大类,图中可以很清楚的看到;这种类型的数据变量在声明之后java就会立刻分配给他内存空间。如:short a;  java会在可使用的内存空间寻找一个占两个字节的块给a变量;
2.引用数据类型就那三种,类似C/C++的指针,它以特殊的方式指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址,想具体知道看看数据结构就好了。通俗讲,一、上图记住很够用;二、说内存、谈地址基本都是说引用而非基本;三、你可以把内存地址理解是你学号,而对象实体就是你,每次找你通过学号找,这就是引用;这个知识点的应用:
1.“==”作用在引用数据类型间,判断内存地址是否相等,想判断内容实体用equals;
2、基本传值传参传的是副本,修改后原值不变;引用传值传参穿的是地址,修改后原值改变。

(三)Java 中的堆内存与栈内存

Java 中的堆和栈

  Java把内存划分成两种:一种是栈内存,一种是堆内存。

  在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。

  当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

  堆内存用来存放由new创建的对象和数组。

  在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

  在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。

  引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。

  具体的说:

  栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

  Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和 multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事 先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较 慢。

  栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放 一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。

  栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义:

  int a = 3;

  int b = 3;

  编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。这时,如果再令a=4;那么编译器 会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。要注意这 种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b, 它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。



菜鸟学java ——(一)面向对象程序设计(几个重要的概念)相关推荐

  1. 菜鸟学Java(六)——简单验证码生成(Java版)

    转载自  菜鸟学Java(六)--简单验证码生成(Java版) 验证码大家都知道,它的作用也不用我多说了吧.如果不太清楚请参见百度百科中的解释,一般验证码的生成就是随机产生字符(数字.字母或者汉字等) ...

  2. JavaSE-Adventure(VII) Java OOP 面向对象程序设计

    JavaSE-Adventure(VII) Java & OOP 面向对象程序设计 CONTENTS JavaSE-Adventure(VII) Java & OOP 面向对象程序设计 ...

  3. 面向对象程序设计中“超类”和“子类”概念的来历

    众所周知,在面向对象程序设计中,子类从超类中继承数据成员和成员方法,然后在此基础上再根据实际需要进行扩展并增加属于子类的数据成员和成员方法.也就是说,子类的对象比超类的对象具有更加丰富的属性,或者具有 ...

  4. 菜鸟学Java(二十一)——如何更好的进行单元测试——JUnit

    测试在软件生命周期中的重要性,不用我多说想必大家也都非常清楚.软件测试有很多分类,从测试的方法上可分为:黑盒测试.白盒测试.静态测试.动态测试等:从软件开发的过程分为:单元测试.集成测试.确认测试.验 ...

  5. 菜鸟学Java笔记1

    这两天通过视频和书籍在自学java.每天学一点,每天做一点笔记,希望有所收获! 1,Java运行中的内存分配 理解内存的分配,也就理解了一切.对于java而言,内存分为四块:代码区(code)/数据区 ...

  6. 零基础学java(6)——面向对象的基本特征

    第六章 面向对象的基本特征 目录 第六章 面向对象的基本特征 6.1 封装 6.2 构造器 6.3 关键字this 6.4 包 6.5 eclipse的使用 6.6 面向对象的基本特征之二:继承 6. ...

  7. java做一个mud_菜鸟学Java(十二)——搭建一个完整的Java开发环境

    作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课.环境的配置,大概就分三个1,JDK 2,Tomcat(或者其他的)3,eclipse(或者myeclipse ...

  8. 菜鸟学Java从入门到......

    类与对象:Java特点之一是面向对象,万物皆对象 类是对象的抽象,对象是类的具体(二者关系就像是水果与苹果的关系): 类是Java程序的基本组成单位:现实生活中,一个物体具有它的属性和行为,Java中 ...

  9. 跟着IT彭于晏学JAVA之面向对象

    1.什么是面向对象 面向过程:我应该干什么 重在过程 事务执行者* 挑选一个电脑(台式)* 1.挑一个cpu Intel Core i7* 2.挑一个主板 华硕* 3.挑一个显卡 七彩虹 影驰 960 ...

最新文章

  1. oracle buffer block,8 Oracle深度学习笔记——BUFFER CACHE深入一
  2. [转]12篇学通C#网络编程——第二篇 HTTP应用编程(上)
  3. [css] css的linear-gradient有什么作用呢?
  4. linux启动keepalived服务,llinux企业常用服务---HA+keepalived双机热备
  5. 快速获得数据库连接字符串的小窍门
  6. python网络虫营销_python与sem,大数据降低竞价推广成本利器
  7. 英特尔贡献基于 Kubernetes 分布式深度学习平台:Nauta
  8. VMware ESXi 高危漏洞的补丁被指不完整
  9. 工作中使用到的单词(软件开发)_20210402备份
  10. 3373. 进制转换(高精度除法)
  11. 《当程序员的那些狗日日子》四
  12. 哈萨克斯坦游记之一_过路老熊_新浪博客
  13. Arduino用超声波测距模块HC-SR04获得精确测量值——误差数据的排除
  14. JavaBean 技术与 JSP 开发模型练习题
  15. 如何去学习PMP考试的《PMBOK》
  16. python计算机体系三层结构_python学习笔记-计算机结构、操作系统
  17. 地下暗管探测技术方案——探地雷达(暗管探测仪)
  18. 883. 三维形体投影面积(javascript)883. Projection Area of 3D Shapes
  19. SolidWorks2021标准库使用方法
  20. C语言数据结构之树超全详解

热门文章

  1. 软体定义网路(SDN)的多重意义
  2. SDN控制器构建原理方法—Vecloud
  3. CentOS系统Yum源配置
  4. Button.setOnClickListener(OnClickListener l) 原理
  5. Kosaraju算法、Tarjan算法分析及证明--强连通分量的线性算法
  6. ActiveXObject函数详解
  7. C#方法中的反射方式和委托方式(小实例)
  8. Transact SQL 常用语句以及函数
  9. 谷歌体三维捕捉新突破:实现后期任意照明修改
  10. Facebook表示将不会默认开启人脸识别功能,被罚怕了?