读书笔记 JAVA编程思想 第二章 一切都是对象

JAVA 语言假设我们只面向对象的程序设计,而C++是一种杂合型语言

 

2.1 用引用操纵对象

JAVA 一切都被视为对象,采用固定的语法,操纵的标识符其实是一个引用。也可以单独的创建一个引用:

String s

此时创建的只是引用而不是对象。如果试图向s 发送消息,就会出错,因为s 没有与任何事物关联。保险的做法是创建引用的同时初始化:

String s=“ss”

2.2 必须由你创建所有的对象      (Spring解决了这个问题)

五个地方存储数据

1 寄存器不能直接控制,通过本地方法

2 堆栈位于通用的ram 但是堆栈指针可以获取直接支持。创建程序JAVA 必须知道堆栈中的确切生命周期,对象的引用存储在堆栈中。

3 通用内存池 也位于ram 用于存放所有JAVA对象,不需要知道生命周期,会自动进行内存分配,但是需要更多时间。 new 写出的代码,都会在堆中进行存储的分配。

4 常量存储通常在程序代码内部,在嵌入式系统,也会放在rom。

5 非ram 存储:如果数据存活于程序之外,就可以不受程序控制。把对象转化成可以存放在其他媒介的事物,基于ram的对象,java 提供了 轻量级的持久化支持

2.2.2 特例:基本类型

 

这些可以想象为“基本”类型,new 是将对象存储在堆里面,如果总是需要创建对象,特别是小的,简单的对象,并不是特别的有效。Java 中 采用和C++相同的方法。不是用new 来创建对象,而是创建一个并非是引用的“自动”变量,这个变量直接存储“值”,并置于堆中。

Java 要确定每一种基本类型大小,并且不随机器的硬件变化而变化。所以Java 更具可移植性的原因之一

Boolean 所占存储空间的大型没有明确知道,仅定义为字面值 true and false

1. boolean 类型被编译成 int 类型来使用,占 4 个 byte 。 

2. boolean 数组被编译成 byte 数组类型,每个 boolean 数组成员占 1 个 byte 。 

3. 在 Java 虚拟机里,1 表示 true ,0 表示 false 。 

4. 可以肯定的是,不会是 1 个 bit 。 

5. boolean只是包含了一个bit大小的信息,在不同情况下实际转化成的大小不一样。

高精度数字  包装器类

BigInteger   支持任意精度的整数

BigDecimal 支持任意精度的定点数

 2.2.3 JAVA 数组

C++ 数组就是内存块,访问自身内存块之外的数组很危险。

JAVA主要目标之一是安全性 确保数组初始化,而且不能再它之外访问。这是以数组的内存开销以及运行时的下标检查为代价。

创建数组,实际上是创建一个引用数组,每个引用都会自动的初始化一个特定的值。 该值拥有自己的关键字null,JAVA 看到null,就知道这个对象还没有引用对象,必须制定对象。 如果直接使用null的引用,运行时会报错

 

2.3 不需要销毁对象

Java 如何销毁对象,变量的生命周期混乱往往会导致大量的bug

2.3.1 作用域(scope)

作用域决定了其定义的变量名的可见性生命周期。

作用域里面的定义的变量只可用于作用域结束之前。

C++ 可以这样来隐藏大作用域里面的变量,但是 Java 不可以。会导致程序混乱。

2.3.2 对象的作用域

New 创建了一个对象时,他可以存活在作用域之外,s指向的String对象仍然占据内存空间。虽然无法在域外访问这个对象,因为唯一的引用已经超出了作用域的范围。所以由new 创建的对象只要需要就一直保持(永久代JVM)

 

2.4 创建新的数据类型:类

如果创建一个新的类型,class 后面紧跟新的类型的名称

class NewTypeName;

2.4.1 字段(数据成员)和方法

一旦定义的一个类,就可以在类中设置两种类型的元素:字段和方法

字段可以是任何类型的对象。如果是某个个对象的引用,必须进行初始化;

普通的字段不能在对象间共享

如果是基本的成员变量,即便没有初始化JAVA 也会确保一个默认值,但是不适用于局部变量。

 

当作为类的成员使用时,Java 才会确保给定其默认值,以确保那些是基本类型的成员变量得到初始化。防止程序错误。这些方法,并不适用于局部变量

 

2.5 方法 参数 返回值

 JAVA 方法只能作为类的一部分来创建。只有通过对象才能被调用。且对象要能够执行这个方法的调用。

2.5.1 参数列表

方法的参数列表指定要传递给方法什么样的信息。信息采用都是对象的形式。这里传递的实际上也是引用。

若返回值为void,return 关键字只用来退出方法,所以可以在任何地方返回。

 

2.6 构建一个Java 程序

2.6.1 名字的可见性

名字空间

 

2.6.2 运用其他构件

使用关键字import 来告诉编译器想引用的是哪个类。

2.6.3 static

static: 声明是一个事物时,说明这个域或方法不会与包含它的那个类的任何对象实例关联在一起

静态方法可以直接通过类来调用

static 作用域某个字段时,会改变数据的创建方式,但是作用域方法,差别没有那么大。main方法是运行应用程序的入口。

 

2.7 

Javac Hello.java - >> java Hello

 

2.8 注释和嵌入式文档

//和  /* */ 两种注释风格

Javadoc 可以提取注释,生成HTML 文件 只为public 和protected 的成员文件进行注释,private会被忽略。 但是-private 标记后private 的文件也会被注释 输出结果是HTML文件。

2.8.3嵌入式HTML

Javadoc 可以利用html 进行格式化,不要使用<h1><hr>因为javadoc 会插入自己的标题

2.8.4 一些标签示例

@see 标签允许用户引用其他类的文档

 

2.9 编码风格

骆驼风格,类的首字母大写,不用下划线,每个单词的首字母大写

 

 

posted @ 2018-10-12 12:01  dys_QAQ  阅读(174)  评论(0编辑  收藏  举报