Thinking in Java 第二章学习笔记

  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中堆和栈的区别

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

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

  

原文地址:https://www.cnblogs.com/promiseslc/p/8575652.html

时间: 2024-08-02 23:07:22

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

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

第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of a connection across a computer network,Sockets are often represented internally as simple integers, which identify which connection to use. 套接字是网络通信的

《HeadFirst Python》第二章学习笔记

现在,请跟着舍得的脚步,打开<HeadFirst Python>第二章. 一章的内容其实没有多少,多练习几次就能掌握一个大概了! <HeadFirst Python>的第二章设计得很有意思.它直接从制作一个模块入手,顺带讲了模块的导入,传统的书可不会这么搞. 不过书中关于编辑器的观点略显陈旧. 最好的编辑器是什么? 别用书中推荐的Python自带IDLE,在现阶段,请使用Jupyter Notebook来进行各项练习. 等学完这本书后,你可以选择PyCharm/Eric6/Wing

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

本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数字识别 通过“约会对象”功能,基本能够了解到kNN算法的工作原理.“手写数字识别”与“约会对象预测”使用完全一样的算法代码,仅仅是数据集有变化. 约会对象预测 1 约会对象预测功能需求 主人公“张三”喜欢结交新朋友.“系统A”上面注册了很多类似于“张三”的用户,大家都想结交心朋友.“张三”最开始通过自己筛选的

java第一章学习笔记

关于疯狂的java笔记 这本还是可以的,说的很细致,但是有一点让我很头疼,有一种感觉是作者和我一人一台电脑,我们 的画面是一样的,然后他给我介绍如何处理,可是看书的时候,我并没有电脑显示同步的画面,比如书中例举出来的当前目录, 谁知道你在说什么,还是要结合着视频学习. 2.我今天学会的东西 配置path:让java的bin目录下的运行程序在cmd的任何目录下都可以直接调用, 方法是设定好环境变量,可以设置系统环境变量也可以设置用户环境变量.效果基本一样. 需要补充的是如果使用他人的电脑可以在cm

Scala第二章学习笔记

最基本的练习~: 使用伴生对象: object holder{ class Foo{ private var x = 5} object Foo{def im_in_yr_foo(f: Foo) = f.x} } import holder.Foo val x = new Foo Foo.im_in_yr_foo(x) 基本的会话: Scala的if块是个表达式.在Java中,达到类似的目的就是这种代码: String x = true ? "true string" : "

C++ primer plus 第二章学习笔记

1.#include <iostream>的作用是什么? 该编译指令导致预处理器将iostream文件的内容添加到程序中,这是一种典型的预处理操作,再源代码被编译之前,替换或添加文本. iostream中的io指的是输入和输出,C++中的输入/输出方案涉及iostream文件中的多个定义,为了使用cout来显示消息,第一个程序需要这些定义,#include 编译指令导致iostream文件的内容随源代码文件的内容一起被发送给编译器.

TextView的跑马灯效果(AS开发实战第二章学习笔记)

TextView的跑马灯效果跑马灯用到的属性与方法说明singleLine 指定文本是否单行显示ellipsize 指定文本超出范围后的省略方式focusable 指定是否获得焦点,跑马灯效果要求设置为truefocusableInTouchMode 指定在触摸时是否获得焦点,跑马灯效果要求设置为true省略方式的取值说明start 省略号在开头middle 省略号在中间end 省略号在末尾marquee 跑马灯显示另外,我还找到了一个marqueeRepeatLimit的属性,其中可以用mar

20172304 2018-2019《java软件结构与数据结构》 第一章 第二章学习总结

20172304 2018-2019<java软件结构与数据结构> 第一章 第二章学习总结 教材学习内容总结 第一章 概述 1.1软件质量: 高质量软件的几个特征: 正确性:软件在多大程度上满足其特定需求 可靠性:软件故障发生频率和危险程度 健壮性:出错情况下可以得到恰当处理的程度 可用性:用户学习和执行任务的难易程度 可维护性:对软件进行修改的难易程度 可重用性:软件组件可重用于其他软件系统开发的难易程度 可移植性:软件组件可以在多个计算机环境下使用的难易程度 运行效率:在不浪费资源的情况下

Java 第二章 变量 、数据类型和运算符 笔记

Java 第二章 变量 .数据类型和运算符 一.变量:存储数据的一个基本单元. 二.变量的声明和赋值: 1)声明并赋值:数据类型 变量名=值;      例:int  price=1000; 2)声明.赋值分两步:数据类型 变量名;   例: int  price; 变量名=值;              price=1000; 三.数据类型2种: 1)基本数据类型8种: Byte 长度:-128~127(-2的7次方到2的7次方减1) Short   -2的15次方到2的15次方减1 Int