首页 > 代码库 > Java编程思想(一)——一切都是对象

Java编程思想(一)——一切都是对象


《Java编程思想》 作者:Bruce Eckel

虽然这本书是经典,但是对于一个入门java,又没有其他编程经验的人来讲,实在难以看懂,前前后后看了三遍。

第一次什么都不懂的时候硬着头皮看,没看完,看了前面忘了后面,中间很多看不懂。第二次的时候,看懂了很多,但是不知道经典在何处。
第三次,是自己用了这门语言一年后,知道所谓的经典是什么,java的特性都在这里,这书不是从基础的JDK怎么装开始讲起。,大部头的一本书,现代人的话很少去翻了,其实可以当参考书,看哪一部分忘了,直接温故即可。一次在学校看到第四版英文版的,硬着头皮看,看着看着就看不懂了,英语重要就在这里。

一切都是对象。
我的一位朋友以前的签名是,我一直都在面向对象,可是现在连一个对象都没有。

(一)类引用

假如有一个类  电视机类 class TV;
class TV{
  int length;  //字段,也叫数据成员
  int point(){  //方法,也叫成员函数
    return 1;
  }
}

TV control , control是一个引用(reference),其实重新看C之后发现这引用就跟指针一样,少了个星号而已。
对象的创建用new。
TV Ccontrol = new TV();

同时,我在看数据结构书时候,注意到了初始化的问题。
TV Control;
此时的Control是对象的一个引用,不是对象本身,但是在赋值成某对象,即上面的初始化之前,其实是保存为null的特殊对象的引用。这也回答了,为什么你每次使用对象的时候,IDE会提示对象的未初始化。


(二)内存分配

这东西放哪里呢,那还是要像C一样看内存分配。
1) 寄存器 。 最快的存储区,处理器内部,根据需求分配,不能自己控制,但是C/C++可以用register。

2)栈(原文堆栈,其实应该翻译成栈更合适,和堆区分开来,因为英文的stack就是堆栈的意思)。 位于通用RAM(Random Access Machine,随机访问存储区,在操作系统,微机原理等计算机的基本组成中都有提到),速度仅次于寄存器。存放基本变量和引用,存在栈中的数据可以共享。但是,栈中的数据大小和生存周期必须确定,这是缺点。

栈存的一个是基本的数据类型,int i = 1; 其实i是一个指向int类型的引用。1存在栈中,i指向1的地址(作用和指针一个样),如果此时有int j = 1; 由于共享性,就不会再开辟
一个新的1的地址。直接让i和j指向同一个地址。

栈也存储对象的引用。

3)堆。存放所有的java对象。

4)常量存储。常量(注意常量和变量,int i =1是变量),字符串,静态区的东西存储在此。

5)非RAM存储。

再来看看一个有趣的对象equals和==问题。
TV Control;
//与C++不同的是,C++实际上创建了这个对象,留出了所需要的空间,而java只是创建某一个对象的存储地址的空间。
Control = new TV();
TV AnotherControl = Control;
//C++将所有的数据拷贝到Another中,而java只是把地址复制过去。
//所以两者是否==(java中实际上判断引用是否一致,即对象是否相同),既然地址一致,同一个对象,答案为ture。c++却用==来判断对象的数据是否相同,而java用的是equals,一般重写。

(三)作用域问题
{}作用域里决定了变量的声明周期,变量用于作用域之前,所以有时会犯一些低级错误,在作用域之外又再次使用该变量。就会出现can not be resolved,无法解析的问题了。


(四)第一个HelloWorld程序

程序的开头,要用import语句引入程序所需要的类,java.lang是默认导入进每个java文件的,之前一直奇怪lang是什么——language。

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
其实java也没有那么强大,看,简简单单的HelloWorld要写这么一堆不相关的东西。所以,还是根据需要选择你使用的语言。

(五)编码风格
类名用驼峰标识,首字母大写。几个单词的话就每个单词的首字母大写。
另外加上上次在Google看到的编程风格,
if else while 等语句的使用时,即使是空语句,也要加上{},更容易看。