《java编程思想——第二章(一切都是对象)》

一切都是对象

2.1 用引用操作对象

尽管一切都看作对象,单操纵的标识符实际上是对象的一个引用。

可以将这一情形想象成遥控器(引用)来操纵电视机(对象)。只要握住这个遥控器,就能保持与电视机的连接。当有人想改变频道或者减小音量时,实际操控的是遥控器(引用),再由遥控器来调控电视机(对象)。

此外,即使没有电视机,遥控器亦可独立存在。也就是说,你拥有一个引用,并不需要有一个对象与它关联。因此,如果想操纵一个词或者句子,则可以创建一个String引用:String s;,这里创建的只是引用,并不是对象。此时使用s时会产生一个运行时异常,因为s没有和任何对象产生关联。

安全的做法是:创建一个引用的同时便进行初始化 String s = “abcd”。此处用到了Java语言的的一个特性:字符串可以用带引号的文本进行初始化。

2.2 必须由你创建所有对象

一旦创建了新引用,就希望它能与一个新的对象产生关联。通常用new操作符来实现这一目的。

字符串可以用带引号的文本初始化。

new的意思是给我一个新对象。
String s = new String("asdf");

存储的地方:

  1. 寄存器:速度最快。在cpu内部。寄存器的数量极其有限,所以寄存器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
  2. 堆栈:位于通用RAM。堆栈指针若向下移动,则分配新的内存,若向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便于上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些java数据存储于堆栈中————特别是对象引用,但是java对象并不存储于其中。
  3. 堆:一种通用的内存池(也位于RAM区),堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。因此在堆里分配存储有很大的灵活性。当需要一个对象时,只需用new写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代价:用堆进行存储分配和清理可能比用堆栈进行存储分配需要更多的时间(如果java确实可以在栈中创建对象)
  4. 常量存储:常量值通常直接存放在程序内部代码,这样做是安全的,因为它们永远不会改变。有事,在嵌入式系统中,常量本身会和其他部分分隔开来,所以在这种情况下,可以选择将其存放在ROM(只读存储器)中。
  5. 非RAM存储:存活于程序外的数据。比如流对象或持久化对象。

2.2.2基本数据类型

基本数据类型不用new创建变量,直接存储"值",用置于堆栈中,更加高效。

2.3 永远不要销毁对象

作用域

作用域决定了在其内定义的变量名的可见性和生命周期。在C,C++,Java中,作用域由花括号的位置决定。

{
        int x = 12;//只有x有效
        {
            int q = 96;
            // x, q都有效
        }
        //只有x有效
        //q在作用域之外了
    }

对象作用域

Java对象不具备和基本类型一样的生命周期。当用new创建一个Java对象时,他可以存活于作用域之外。

由new创建的对象,只要你需要就会一直保留。那么如何防止这些对象填满内存空间,进而阻塞程序?

在Java中,不必担心这个问题。Java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别哪些不会再被引用,并且释放这些对象的内存空间。

2.4 创建新的数据类型:类

如果一切搜索对象,那么是什么决定了某一类对象的外观和行为呢?
大多数面向对象的程序设计语言都习惯用关键字class表示,class后面紧跟的是新类型的名称,例如:

class Name{

}

字段和方法

字段可以是任何类型的对象,可以通过引用与其进行通信,也可以是基本类型的一种。如果字段是对某个对象的引用,那么必须初始化该引用,以便使其与一个实际的对象相关联。

如果类的某个成员是基本数据类型,即使没有初始化,java也会确保它获得一个默认值。
这里写图片描述

局部变量必须进行初始化,否则会返回编译错误。

2.5 方法、参数和返回值

方法:可以理解为做某些事情的方式。但是许多程序设计语言用函数来描述命名子程序,Java常用方法来表示。

Java的方法决定了一个对象能够接收什么样的信息。方法的基本组成部分包括:名称,参数,返回值,和方法体。

    ReturnType methodName(//参数){
        //方法体
    }
  • 返回值描述的是在调用方法之后从方法返回的值。没有返回值可以void标识。
  • 参数列表给出了腰传给方法的信息的类型和名称。

方法名和参数列表唯一地标识出某个方法(又被称为方法签名)。

2.5.1 参数列表

方法的参数列表指定要传递给方法什么样的信息。在参数列表中必须指定每个所传递的类型及名字,这里的传递其实也是引用,并且引用的类型必须准确。

你可以定义方法返回任何想要的类型,不过不想返回任何东西, 可以让方法返回void (空),例如:

boolran flag(){return fale;}

void Nothing()

void Noting(return;)

若返回类型是void,return关键字的作用只是用来退出此方法。

2.6 构建一个Java程序

名字可以用倒序的域名来避免重名冲突。
import用于定位类文件位置。通配符“*”可以一次性导入全部。

static 关键字:

作用于字段时:只分配一份存储空间,所有的对象共用一个。
作用于方法时:可以不创建类的对象的情况下直接调用方法。

2.7 你的第一个Java程序

package com.thinkinjava.two;

import java.util.Date;

public class Test {

	public static void main(String[] args) {
		System.out.println("hello");
		System.out.println(new Date());
	}
}

2.8 注释和嵌入式文档

多行注释:

/**

  • 多行注释
  • @author Administrator

*/

单行注释://单行注释。
注释文档由javadoc生成。

2.9 编码风格

驼峰风格:AbCd

posted @ 2018-03-31 17:01  ByteX  阅读(11)  评论(0)    收藏  举报