Java虽基于C++,但相比之下,Java是一种更加纯粹的面向对象程序设计语言。

  在Java的世界里,几乎一切都是对象,而Java中的全部工作则是定义类,产生那些类的对象,以及发送消息给这些对象。

  尽管一切皆称对象,但我们真正操纵的确是对象的引用,好比电视机为对象,遥控器则为引用,你若想在房间里边走边操控电视,只需带着遥控器这个引用,不必带着电视这个对象。另外,引用可以单独存在,并不需要有对象与之相关联。如创建String s,则创建了一个String引用,但此时如果向这个引用发送消息,就会返回错误,这是因为s并没有和任何对象相关联。因此,比较安全的做法是创建一个引用的同时便进行初始化。当在创建引用时,其实我们是迫切希望它能与一个新的对象相关联的,即对象的实例化。

  本章重点:

  1、程序运行时,具体内存分配情况分以下五种

  1)寄存器:最快的存储区,位于处理器内部,数量有限,只能根据需求自动分配,不能加以控制,程序中看不到其任何迹象。(C、C++可以向编译器提供寄存器的分配方式)

  2)栈:位于通用RAM(随机访问存储器),通过栈指针的上下移动实现内存的释放与分配。Java系统必须知道所有存储在栈中数据的生命周期,以便指针的上下移动。十分限制程序的灵活性。对象引用存在堆栈,而对象存在于堆中。

  3)堆:也位于RAM,一种通用的内存池。用于存放所有的Java对象,堆不同于堆栈的好处在于堆不需要知道存储的数据的生命周期,大大提高了灵活性。代价:清除与存储分配需消耗更多的时间。

  4)常量存储:常量值通常保存在程序的内部,但是再嵌入式系统中,常量本身回合其他部分分隔开,故选择保存在只读存储器中。

  5)非RAM存储:如果数据完全存在于程序之外,那将不会受程序的任何控制,在程序没有运行时也可以存在。两个例子:流对象中将对象转化为字节流,发送到另一台机器;持久化对象中将对象存放于磁盘上。

  2、基本类型所占存储空间的大小

  各基本类型固定大小。不像大多数语言那样随着机器硬件架构的变化而变化,这种固定性是Java移植性好的重要原因。

  3、永远不要销毁对象

  Java中的垃圾回收器,时刻监视用new创建的所有对象,并辨别那些不会再被引用的对象,随后释放这些对象的空间,供新对象使用。

  4、变量初始化

  当变量作为类的数据成员时,Java会给定其默认值,确保其初始化,以防程序错误。而对于非类中成员的其他变量来说,并不会自动初始化,必须对其赋值。

  5、static

  通常来说,当创建类时,局势在描述那个类的对象的外观和行为。除非用new创建那个类的对象,否则实际上并未获得任何对象。只有在执行new来创建对象时,数据存储空间才被分配,其方法才供外界调用。还有两种情形是以上方法解决不了的,一种是只想为特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不用去创建任何对象。另一种情形是,希望某个方法不与包含它的类的任何对象产生关联。通过static关键字可解决这两种需要。当声明一个事物是static时,就意味着这个域或者方法不会被包含它的类的所有对象关联在一起。也就是说,即便没有创建这个类的任何对象,也可以调用这个static方法或者static域。

  6、Java中堆和栈的区别

  堆:主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存周期不需要提前确定。

  栈:主要用于存放基本数据类型的变量以及对象的引用变量,变量出了作用域就会自动释放。栈的内存管理是通过栈的"后进先出"模式来实现的。存取速度快,大小和生存周期必须确定,缺乏灵活性。

  

Thinking in Java 第二章学习笔记的更多相关文章

  1. #Spring实战第二章学习笔记————装配Bean

    Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...

  2. AS开发实战第二章学习笔记——其他

    第二章学习笔记(1.19-1.22)像素Android支持的像素单位主要有px(像素).in(英寸).mm(毫米).pt(磅,1/72英寸).dp(与设备无关的显示单位).dip(就是dp).sp(用 ...

  3. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

  4. Day2 《机器学习》第二章学习笔记

    这一章应该算是比价了理论的一章,我有些概率论基础,不过起初有些地方还是没看多大懂.其中有些公式的定义和模型误差的推导应该还是很眼熟的,就是之前在概率论课上提过的,不过有些模糊了,当时课上学得比较浅. ...

  5. 20165326 java第二周学习笔记

    学习笔记 一.理论学习 基本数据类型与数组 标识符的第一个字符不能是数字:标识符不能为关键字. 基本数据类型多数与c语言相同.重点如下: 1.逻辑类型boolean赋值true/false 2.浮点数 ...

  6. 《Linux内核设计与实现》课本第一章&第二章学习笔记

    <Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...

  7. Linux第一章第二章学习笔记

    第一章 Linux内核简介 1.1 Unix的历史 它是现存操作系统中最强大最优秀的系统. 设计简洁,在发布时提供原代码. 所有东西都被当做文件对待. Unix的内核和其他相关软件是用C语言编写而成的 ...

  8. Machine Learning In Action 第二章学习笔记: kNN算法

    本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...

  9. Scala第二章学习笔记

    最基本的练习~: 使用伴生对象: object holder{ class Foo{ private var x = 5} object Foo{def im_in_yr_foo(f: Foo) = ...

随机推荐

  1. 【学习笔记】 使用XML配置和注解实现Spring的依赖注入DI (2-3-2)

    Spring的四个核心组件 1.beans Bean是包装应用程序自定义对象Object的 Object中保存数据 2.core  3.context 一个Bean的关系集合 4.expression ...

  2. JAVAEE——BOS物流项目07:WebService入门、apache CXF入门、基于CXF发布CRM服务

    1 学习计划 1.WebService入门 n 什么是WebService n 调用网络上的WebService服务 n SOAP和WSDL概念 n 基于JDK1.7发布一个简单的WebService ...

  3. [工具]Microsoft To-Do,简约还是简陋?

    1. 简介 微软收购奇妙清单后,由奇妙清单的原班人马打造了一个全新的待办事项应用,就叫"To-Do"(简单粗暴,好像新浪微博直接就叫"微博"的感觉).这个应该刚 ...

  4. 彻底解决Yii2中网页刷新时验证码不刷新的问题

    修改vendor/yiisoft/yii2/captcha/CaptchaValidator.php这个文件就可以了,修改的地方见下图: 总结 归根到底,是因为yii2在渲染网页的时候,会先输出js验 ...

  5. Linux上查看用户名和组并把特定用户放到特定的组之下

    cat /etc/passwd             //查看所有的用户信息 cat /etc/passwd|grep 用户名       //查看某一个用户的信息 cat /etc/group   ...

  6. 用Open SSH生成公钥和私钥(Win)

    也可以使用 dsa 加密算法进行加密,命令如下: ssh-keygen -t dsa

  7. ActiveRecord的生命周期

    ActiveRecord的生命周期,通过方法重写和插入我们需要的业务逻辑来达到我们对程序的控制. 示例: 1,beforeSave() public function beforeSave($inse ...

  8. Node.js入门(含NVM、NPM、NVM的安装)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. Node.js的介绍 引擎 引擎的特性: JS的内核即引擎.因为引擎有以 ...

  9. 动态规划算法的java实现

    一:动态规划 1)动态规划的向前处理法 java中没有指针,所以邻接表的存储需要转化一中形式,用数组存储邻接表 用三个数组u,v,w存储边,u数组代表起点,v数组代表终点,w代表权值;例如:1--&g ...

  10. SpringBoot+gradle+idea实现热部署和热加载

    前言 因为之前使用myeclipes的同学就知道,在使用myeclipes的时候,java文件或者jsp文件写完之后会被直接热加载到部署的容器中,从而在开发的时候,不同经常去重启项目,从而达到了增加开 ...