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中堆和栈的区别
堆:主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存周期不需要提前确定。
栈:主要用于存放基本数据类型的变量以及对象的引用变量,变量出了作用域就会自动释放。栈的内存管理是通过栈的"后进先出"模式来实现的。存取速度快,大小和生存周期必须确定,缺乏灵活性。
Thinking in Java 第二章学习笔记的更多相关文章
- #Spring实战第二章学习笔记————装配Bean
Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...
- AS开发实战第二章学习笔记——其他
第二章学习笔记(1.19-1.22)像素Android支持的像素单位主要有px(像素).in(英寸).mm(毫米).pt(磅,1/72英寸).dp(与设备无关的显示单位).dip(就是dp).sp(用 ...
- Python核心编程第三版第二章学习笔记
第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...
- Day2 《机器学习》第二章学习笔记
这一章应该算是比价了理论的一章,我有些概率论基础,不过起初有些地方还是没看多大懂.其中有些公式的定义和模型误差的推导应该还是很眼熟的,就是之前在概率论课上提过的,不过有些模糊了,当时课上学得比较浅. ...
- 20165326 java第二周学习笔记
学习笔记 一.理论学习 基本数据类型与数组 标识符的第一个字符不能是数字:标识符不能为关键字. 基本数据类型多数与c语言相同.重点如下: 1.逻辑类型boolean赋值true/false 2.浮点数 ...
- 《Linux内核设计与实现》课本第一章&第二章学习笔记
<Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...
- Linux第一章第二章学习笔记
第一章 Linux内核简介 1.1 Unix的历史 它是现存操作系统中最强大最优秀的系统. 设计简洁,在发布时提供原代码. 所有东西都被当做文件对待. Unix的内核和其他相关软件是用C语言编写而成的 ...
- Machine Learning In Action 第二章学习笔记: kNN算法
本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...
- Scala第二章学习笔记
最基本的练习~: 使用伴生对象: object holder{ class Foo{ private var x = 5} object Foo{def im_in_yr_foo(f: Foo) = ...
随机推荐
- Spring框架系列(二)之Bean的注解管理
微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.Spring中的两种容器 在系列(一)中我们已经知道,Spring 是管理对象的容器,其中有 ...
- java12 - 正则表达式
正则表达式简介 常用搭配说明: ^a 表示这个位置只能是字母 a [1,2,3,4] 表示这个位置只能在 1,2,3,4 中取一个 [[a-z][A-Z]] 表示可以任意大小写字母 ([a-z]{1, ...
- Yii2自带的验证码背景颜色怎么调?
看了下面的这张图片你就知道啦!
- iOS实现从服务器请求json数据并转化成NSDictionary
NSURL *url = [NSURL URLWithString:URL]; NSURLRequest *request = [NSURLRequest requestWithURL:url cac ...
- Opencv 3.3.0 常用函数
如何调图像的亮度和对比度? //如何增加图片的对比度或亮度? void contrastOrBrightAdjust(InputArray &src,OutputArray &dst, ...
- Codeforces446C - DZY Loves Fibonacci Numbers
Portal Description 给出一个\(n(n\leq3\times10^5)\)个数的序列,进行\(m(m\leq3\times10^5)\)次操作,操作有两种: 给区间\([L,R]\) ...
- Python接口测试,Requests模块讲解:GET、POST、Cookies、Session等
文章最下方有对应课程的视频链接哦^_^ 一.安装.GET,公共方法 二.POST 三.Cookies 四.Session 五.认证 六.超时配置.代理.事件钩子 七.错误异常
- python+selenium+autoit实现文件上传
问题 在做web端ui层自动化的时候会碰到文件上传的操作,经常有朋友问到,这里总结一下 解决方案 第一种:type=file的上传文件,类似如下的 使用类似这样的代码就可以完成: driver.fin ...
- visual studio调试功能简述
vs调试简述 1.调试功能简述 vs提供了很强大的调试功能,能够让我们一步步执行中找到每个变量的值,便于查错改错.很多IDE都有调试功能,在使用调试功能时,记得先创建一个项目,哪怕是一个文件,也创建一 ...
- __proto__ 与 prototype
先来做个复习,ES5中有有几种数据类型呢? 5种基本数据类型 Undefined Null Boolean Number String 1种复杂数据类型 Object 除了基本数据类型,万物皆对象,记 ...