Java编程思想是学习Java必读之书,此书的内容跟名字一样,主要是以思想为主,如果没有编程经验,此书确实有点不太适合你,如果你有C/C++编程经验那这书正适合你,因为作者在内容中是以C/C++与Java作对比来学习的。如果你是直接学习Java可以先选择Java核心技术来学习,这本书主要是以技术入门为主,虽然里面也同样与C/C++作对比,但是学习起来会比Java编程思想要简单的多。当你运用Java有一段时间后,一定要回过头来学习Java编程这本书,因为它会让你更进一步。
在此次我的blog计划中,会把Java编程思想每一张的笔记都记录在blog中,我在经常在网上看到有人说Java编程思想讲得有点啰嗦,确实我读此书也有这种想法,所以在我的blog中我会尽量减少,只会出现有关Java和内容,会把作者描述的C/C++对比方面省略掉,当然这只是做一个参考,建议大家一定要去学习完整的Java编程思想。
1.用引用操纵对象
Java中一切都视为对象,但实际操作对象是一个“引用”(reference)标识符。
这就如果,遥控器(引用)操作电视(对象)一样,我们拿着遥控器就能与电视机保持连接。如果想要调整音量大小或者更换频道时,我们实际上是操作的遥控器,再由控制器调控电视机。我们可以带着控制器在房间四处走动,同样也可以操作电视机。
控制器和电视机是同时可以单独存在的,没有电视机,遥控器也可单独存在。
String s;
在上面我们创建了一个String的引用,但它只是一样引用,并未与任何一个对象相关联,如果你尝试向s发送消息,则会得到一个运行时异常,所以一种安全的做法是,在我们创建一个引用同时便为进行初始化。
String s = "init";
上面的String是Java中的一种特殊类型,所以可以直接使用带引号的文本进行初始化,通常,必须对Java中的对象采用一种更通用的初始化方法。
2.必须由自己创建所有的对象
通常我们使用new操作符来创建一个对象。
String s = new String("init");
上面是创建一个String对象同时初始化并把该对象的引用赋值给s,此时s便是一个对象的引用(s并非是一个对象,只是一个引用)。
2.1.存储位置
Java中有5个不同的数据存储区:
1).寄存器:它位于处理器内部是最快的存储区。但寄存器极其有限,它是根据需求进行分配,我们不能直接操作也不能在程序中感觉到它的存在。
2).堆栈:位于通用RAM(随机访问存储器)中通过堆栈指针可以处理器哪里操作堆栈。指针向下移动则分配新的内存;若向上移动则释放那些内存,速度公次于存储器,但Java必须知道存储在堆栈内所有项的确切生命周期,以便上下移动指针。这限制了程序的灵活性,所以只有某些Java数据存储于堆栈中(对象的引用),Java对象并不存放于其中。
3).堆:通用的内存池,用于存放所有的Java对象。存储在堆里的数据编译器不需要知道存活多长时间。当使用new创建一个对象时,会自动在堆里存储分配。为了这种灵活性也牺牲更多的时间。
4).常量存储:常量通过直接存放于代码的内部,因为他们永远不会被改变。
5).非RAM存储:该存储于程序之外,即使程序停止依然保持自己的状态如(流对象,持久化对象)。对象转化为字节流,发送给另一台机器,“持久化对象”即对象被存储于磁盘或者其他媒介上,在需要时可恢复常规对象。
2.2.基本数据类型
在Java中经常用到这样一系列特殊对象的“基本类型”,new创建对象会存储在“堆”里,如果是一些特别小的、简单的类型,往往不是那么有效,在Java中提供一些不需要使用new创建变量,而是创建一个
并非引用的“自动”变量。这个变量直接存储“值”并存放于堆栈中。
Java中的所有基本类型所占的存储空间大小是固定的,不会因为硬件架构变化而变化。
3.第一个Java程序
package com.onlyeffort.java.concurrency;
// 可替换为:import java.util.*;
import java.util.Random;
//定义一个公共类名为:HelloWorld
public class HelloWorld {
// main方法,程序的入口,结构不可变,主体可变
public static void main(String[] args) {
// body start..大括号开始
// 创建一个对象
HelloWorld hw = new HelloWorld();
// 使用hw引用调用say方法
System.out.println(hw.say());
// body end..大括号结束
}
/**
*
* @return 返回一个字符串,并打出出值.
*/
public String say() {
Random rand = new Random();
return "Hello,World!" + rand.nextInt();
}
}
第一行为包声明语句,包名全为小写,一般为域名的反转形式,防止出现冲突,因为域名在全球是唯一的。
当我们需要使用其它公共的类组件时需要使用import语句引入类。但java编译器在每个Java文件编译时会自动引用java.lang.*;下面的所有类,只是lang包下面的所有,但并不包含lang下面的子包,如果我们需要使用java.lang.reflect.Array;时,还需要我们手动引用。
main方法是Java运行时程序的入口,结构单一不可改变。在main方法中我们创建了一个HelloWorld对象,并把它赋值给hw,此时hw是一个HelloWorld对象的一个引用,hw并非是一个对象。在后面我们调用了HelloWorld的say方法,此方法返回一个字符串,在say方法中,我们创建了一个随机数,并把它与一个字符串相连接。rand.nextInt()方法会返回一个int类型的整数,这里Java编译器会执行类型转换,把int类型转换为String类型并执行字符串连接。在最后我们使用了return语句返回这个方法的返回值。
return在Java程序中有两种作用,一:会结束当前方法(return;);二:返回某个方法的返回值(return value;)。
在这个HelloWorld中出现了“//”、“/***/”这都是Java当中的注释。Java编译器编译时会忽略注释后面的所有内容。
转载时请注明转载地址,onlyeffort.QQ:501276913
posted on 2010-06-02 15:24
Aidan 阅读(369)
评论(0) 编辑 收藏 所属分类:
JavaSE