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 等语句的使用时,即使是空语句,也要加上{},更容易看。

附加:
为什么只能有 一个public class,
转自:
http://www.answers.com/Q/Why_one_public_class_in_one_source_file_in_java

Anand Vijayakumar
Answered Last
A file with .java extension when compiled. The Compiler looks for a unique class file that's declared public. A file cannot have more than one name Similarly in a java file there cannot be more than one public class that is used to uniquely identify the file name but if you try declaring two public class then the compiler throws an error.

编译器只会寻找声明为public的class,有多个会报错,设计的问题。


第一章的是总体的分析,一些简单的基础入门。有基础的看过去不会难。

你可能感兴趣的:(Java,Java编程思想)