关闭

Java编程思想(一) —— 一切都是对象及内存分配

标签: 编程内存分配面向对象java编程思想
11061人阅读 评论(9) 收藏 举报
分类:

《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,有多个会报错,设计的问题。


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

4
1
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

java面向对象思想和三大特性

面向对象:    1、面向对象 面向对象是一种程序设计思想,计算机程序的设计实质上就是将现实中的一些事物的特征抽离出来描述成一些计算机事件的过程,这种抽象的过程中,我们把具体的事物...
  • liupengfeix
  • liupengfeix
  • 2015-05-27 07:25
  • 10134

Java设计思想(1)

前言:接下来学习的是java中非常重要的东西,也是非常抽象的东西,有种只可意会不可言传的感觉,不过没那么神秘咯,要相信代码功底好,这些都不在话下塞。不过设计思想需要的是不断的学习,不断的领悟,才能更好...
  • u011459262
  • u011459262
  • 2015-08-17 23:53
  • 2561

Java编程思想(第4版)清晰PDF中文完整版

  • 2011-08-18 17:46
  • 86.57MB
  • 下载

[Java]《Java编程思想》知识点总结(坚持逐步更新)

第1章 1.抽象与对象:编程语言提供抽象机制,解决问题的复杂性取决于抽象的类型和质量。“类型”指“所抽象的是什么”。 应只针对待解决的问题建模。面向对象方式提供表示问题空间中的元素的工具,将问题空间中...
  • ghbfgb
  • ghbfgb
  • 2016-06-09 07:25
  • 1295

《JAVA编程思想》第四版

  • 2013-04-27 09:24
  • 2.19MB
  • 下载

Java编程思想(第4版) 配套源代码

  • 2011-08-18 17:28
  • 428KB
  • 下载

再读《Java编程思想 》

前段时间在豆瓣上无意间看到一个帖子“我为什么把thinking in java 读了10遍”,是11年的帖子,下面评论至今,各种声音都有,不过大多数还是佩服和支持的。我个人来讲也是非常支持的,而且也打...
  • honghailiang888
  • honghailiang888
  • 2017-04-21 11:27
  • 667

《JAVA编程思想》读书笔记1——OOP思想

面向对象思想JAVA是一种面向对象编程语言,它基于Smalltalk语言,作为OOP语言,它具有以下五个基本特性 万物皆对象,每一个对象都会存储数据,并且可以对自身执行操作。因此,每一个对象包含两部分...
  • yu616568
  • yu616568
  • 2016-05-03 22:34
  • 1180

【java】《java编程思想》 读书笔记

之前主要用的C++的比较多,之前花了快2个月的实际认真系统全面的学习了以下java的基础语法,《java编程思想》这本书翻译水平确实不是很好,很多话读着会比较拗口。推荐读之前,先去网上搜索 “java...
  • a2888409
  • a2888409
  • 2015-10-15 10:07
  • 1912

JAVA编程思想高清中文版[第四版].pdf )

  • 2017-01-06 23:28
  • 2.18MB
  • 下载
    个人资料
    • 访问:1242923次
    • 积分:9861
    • 等级:
    • 排名:第2055名
    • 原创:132篇
    • 转载:7篇
    • 译文:9篇
    • 评论:520条
    博客专栏
    My GitHub