《JAVA编程思想》学习备忘(第61页:Everything Is an Object--1)

来源:互联网 发布:双色球篮球计算法 编辑:程序博客网 时间:2024/05/22 09:47
“If we spoke a different language,we would perceive a somewhat different world”
        此为本章开篇引言,大意:如果我们使用另类的语言,我们将追寻一个些许不同的世界。
        很多人认为编程语言对于初学者来说大都晦涩难懂,但不要忘掉的是,它仅仅是一门语言,既然是语言,就如同我们日常所说所讲的语言一样,是用于与世界交流的工具, 学习这门工具的方法不外乎用心、用他人的经验、用举一反三的技巧去理解;但要掌握这门工具,则只有靠多练、多用,“手不离键”地下苦功夫,必会写出“象样”的、逻辑思维缜密的程序代码;更进一步,你还想写出“不同凡想”的程序来,还需不断积累丰富自己的思想,历练自己对所处的宇宙、所处的大自然的认识,此所谓:“法天法地法自然”也,再加上一点点天分,那你写出的程序,在高手们看来,可以读出你的人生,读出你的性格、读出你的灵魂,流畅如阳春白雪般的乐章……
       也许,我们还怀疑自身的天分,还好,Bruce Eckel给我们带来了这份编程思想的大餐,让我们初学者好好享用,仔细品味,这本书读到的不仅仅是丰富的技术细节,更为重要的是技术背后宏大的编程思想将会潜移默化地在你脑海中“重构”,而原版中的每一个词汇,恰恰象通往这个思想天庭的台阶,连贯而不可或缺,因此,我们读这本书时,最好不要象阅读其它技术书籍一样“按需索取”,要象饥俄的婴儿吮吸母乳一般,口口相接,不漏掉一滴一点的乳汁。
 
The java Language assumes that you want to do only object-oriented programming.This means that before you can begin you must shift your mindset into an object-oriented world(unless it's already there).The benefit of this initial effort is the ability to program in a language that is simpler to learn and to use than many other OOP languages.In this chapter you'll see the basic components of a Java program and learn that(almost) everything in Java is object
        可见,把惯性思维转换到“面向对象”的世界中来,是学习Java的开始,只有做到这点,才会更容易地去理解掌握,这是学好Java语言的基础,为什么在Java中一切都是对象呢?让我们带着疑问继续往下看。
 
You manipulate objects with references
You might imagine a television(the object)and a remote control(the reference).As long as you're holding this reference,you hava a connection to the television,but when someone says,“Change the channel” or “Lower the volume,” what you're manipulating is the reference,which in turn modifies the object.
       非常形象的比喻,Java正是通过一个个的象电视摇控器这样的“参照物”,或“标量”,来影响“对象”的:
| String s;
      以上所声明的字符串,仅在内存中开辟了空间,就象你买回了“摇控器”,忘记了买电视机,可想而知,任凭你怎样摆布你的摇控器,仍然无法欣赏电视节目了。所以,保险起见,我们最好把摇控器与电视都买回家中(通常情况下,这是一个好的习惯):
| String s = "asdf";
      以上声明并初始化了一个字符串。
 
You must create all the objects
When you create a reference, you want to connect it with a new object.You do so,in general,with the “new” operator,The keyword “new” syas,“Make me a new one of these objects.”
“买”电视机这个“动作”,在Java程序中,可用“new ”这个关键字表示:
| String s = new String("asdf");
      以上就把摇控器“s”与买(new)回的电视机“asdf”建立起了联系.
 
Java comes with a plethora of ready-made types in addition to String.What's more important is that you can create your own types. In fact,creating new types is the fundamental activity in Java programming,and it's what you'll be learning about in the rest of this book.
请注意作者在这里提到的“create your own types”:自定义数据类型,即引用数据类型是很重要的,以后学到时要做为一个重点。
 
Where storage lives
      了解程序运行时,包括数据在内的事物是如何生存的,特别是内存是如何安排的,是很有用的。以下有五个不同的地方用来存储数据:
1、Registers(寄存器),最快的存储单元,因为它所处位置与其它存储单元不同:在芯片处理器内。数量有限,只有在需要时才提供或可说开辟空间,你不可直接对其操作,在整个程序中也不可见,反过来,这一点也体现了Java对计算机系统的安全性、无害性。
2、The stack(栈),生存于通常的内存随机存取域中,通过栈指针的向下移动来开辟内存空间,相反地通过栈指针的上移来释放内存空间,是除寄存器之外的最快而有效的存储方式。Java系统必须准确知晓置于栈上的所有Java程序项的生存期,有限的栈空间受限于你的程序的灵活性(或说可变性)。
3、The heap(堆),这里(所谓的内存池)生存着所有的Java对象,与栈的区别是,它不需要知晓存储期,堆存储有着巨大的灵活性,你无论何时需要一个对象,只需用new关键字去创建它,存储空间随即开辟。当然,你会为此灵活性付出一个代价:相对于栈存储,有可能花费更多的时间用来创建和清理堆存储。
4、Constant storage(常量存储),因从不改变而具安全。位于只读内存单元。
5、Non-RAM storage(非随机存储),如果数据完全于程序外,它可在程序不运行时生存,不受程序控制。有两个例子:streamed objects(流对象),对象转为字节流,通常被发送到另外的装置;而persistent objects(持久化对象),即使程序中止也可于磁盘中保持固有状态。其存储计策是把对象转化为可生存于其它媒介的形式,在需要时复原为基于随机存储形态的对象。(作者举了一个数据库为例)
 
Special case: primitive types
       原始数据类型不用“new”,而直接付值,这类“自动变量”在栈上开辟空间,因此更有效率。
       Java确定每个原始数据类型的大小,它们的大小具有不变性。
        所有数字类型具有正负。
        boolean类型没有明确指定大小,它仅被定义为能够反回如下值:true 或 false。
        原始数据类型的“包装”类允许你在堆内“new”一个非原始对象来代表其原始类型,举例:
| char c = 'x';
| Character ch = new Character(c);
你也可用:
| Character ch = new Character('x');
Java SE5 自动执行原始类到包装类的转换:
| Character ch = 'x';
返回:
| char c = ch;
 
High-precision numbers
    高精度数字
    Java含概两个高精度算术类:BigInteger 和 BigDecimal 。
BigInteger 支持任意精度integers.这意味着你可精确指代任何大小的整型值而在运算期间不丢失精度。
BigDecimal 则为任意精度的混型数字;你可用以精确的货币计算。
 
Arrays in Java
        比起C和C++来说,数组在Java中的应用是安全的,一个Java数组确保是已初始化的并且不会越界存取,否则编译时会被查出,这种检查以花销少许的内存资源为代价在每个数组开头指出其下标索引,基于安全考虑还是值得的。
       当你创建一个数组对象,你就创建了“参量”数组,而每个“参量”用其关键字自动初始化了一个特殊值:null ,Java由此知道“参量”存在没有指向对象的问题。使用数组前,必须让每个“参量”指向一个对象。
 (待续)
原创粉丝点击