java编程思想-第2章 一切都是对象

目录:

java编程思想-第1章 对象导理论

java编程思想-第2章 一切都是对象

第2章 一切都是对象

       “如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界。”——Luduing Wittgerstein(1889-1951)

        相比于其他的面向对象程序设计语言,  Java是一种更“纯粹”的面向对象程序设计语言。

2.1 用引用操纵对象

       每种编程语言都有自己的操纵内存元素的方式。

      不管是直接操纵元素还是用某种特殊语法间接操纵对象,所有的这一切在Java里都得到了简化。因此可以采用单一固定的语法。尽管一切都看作对象,但操作的标识符实际是对象的一个引用reference)。如:遥控器(引用)操纵电视机(对象)。

       拥有一个引用,并不一定需要一个对象与之关联。如:即使没有电视机,遥控器也可以独立存在。

      创建一个引用:

String s;

       安全的做法是 :创建一个引用的同时进行初始化

String s = "asdf";

 2.2 必须由你创建所有对象

       一旦创建了一个引用,就希望它能与一个新的对象相关联。通常用new操作符来实现这一目的。如:

String s = new String("asdf");

       存储到什么地方?

扫描二维码关注公众号,回复: 3057536 查看本文章
  1. 寄存器:最快的存储区 ,位于处理器内部,数量有限所以寄存器根据需求进行分配.
  2. 堆栈:位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针向下移动,分配新的内存;向上移动,则释放内存。速度仅次于寄存器。由于创建程序时,java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针,所以虽然某些java数据存储于堆栈中--特别是对象引用,但是Java对象并不存储于其中。
  3. 堆:一种通用的内存池(也位于RAM区),用于存放所有的java对象 与堆栈的区别:编译器不需要知道存储的数据在堆里存活多长时间,用堆进行存储分配和清理可能比堆栈进行存储分配需要更多的时间。
  4. 常量存储:通常直接存放在程序代码内部,安全,永远不会被改变。
  5. 非RAM存储:如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。

       特例:基本数据类型

基本类型 包装器类型
 boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
void Void

       Boolean只有true或flase,以及Java SE5的自动包装,还有高精度数字BigIntegerBigDecimal的类型。

  • BigInteger支持任意精度的整数。可以准确地表示任何大小的整数值,而不会丢失任何信息。
  • BigDecimal支持任何进度的定点数。可以用它进行精确的货币计算。

 2.3 永远不需要销毁对象

       大多数程序设计语言中,变量生命周期的概念,占据了程序设计工作中非常重要的部分。

       大多数过程型语言都有作用域(scope)的概念。作用域决定了在其内的变量名可见性生命周期

       在Java中作用域由花括号的位置决定。例如:

{
    int x = 12;
    {
        int q = 96;
    }
}

       Java是一种自由格式的语言,空格、制表符、换行都不会影响程序的执行结果。

       Java是不允许将一个较大的作用域的变量“隐藏”起来的,因为Java设计者认为这样做会导致程序混乱。

      Java不具备和基本类型一样的生命周期。当new创建一个对象时,它可以存活于作用域之外,只要你需要,就会一直保留下去。

       Java有个垃圾回收器,用来监视用new创建的所有对象,并鉴别哪些不会再被引用的对象。随后释放这些对象的内存空间,以便供其他新的对象使用。这样做就消除了这些类编程问题(即“内存泄漏”),这是由于程序员忘记释放内存而产生的问题。

 2.4 创建新的数据类型:类

       一旦定义了一个类,就可以在类中设置两种类型的元素:字段(有时被称作数据成员)和方法(有时被称作成员函数)。字段可以是任何类型的对象,可以通过其引用与其进行通信;也可以是基本类型中的一种。如果字段是对某个对象的引用,那么必须初始化该引用,以便使其与一个实际对象相关联。

       每个对象都有用来存储其字段的空间;普通字段不能在对象空间共享。

       若类的某个成员是基本数据类型,即使没有进行初始化,Java也会确保它获得一个默认值。当变量作为类的成员使用时,Java才确保给定其默认值,以确保那些是基本类型的成员变量得到初始化,防止产生程序错误。

基本类型 默认值
boolean false
char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d

 2.5 方法、参数和返回值

       许多程序设计语言用函数这个术语来描述命名子程序;而在Java里确常用方法这个术语来表示“做某些事情的方式”。

       Java的方法决定了一个对象能够接收什么样的消息。方法的基本组成部分包括:名称、参数、返回值和方法体。返回类型描述的是在调用方法之后从方法返回的值。参数列表给出了要传递给方法的信息的类型和名称。方法名和参数列表(它们合起来被称为“方法签名”)唯一地标识出某个方法。

       Java中的方法只能作为类的一部分来创建。方法只有通过对象才能被调用,且这个对象必须能执行这个方法调用。如果试图在某个对象上调用它并不具备的方法,那么在编译是就会得到一条错误消息。

       调用方法的行为通常被称为发送消息给对象。面向对象的程序设计通常简单地归纳为“向对象发送消息”。

       在参数列表中必须指定每个所传递对象的类型及名字。Java中的任何传递对象实际上都是引用,并且引用的类型必须正确。如:参数被设为String类型,则必须传递一个String对象;否则编译器将抛出错误。

       return关键字的用法:

  • 代表“已经做完,离开此方法”。
  • 如果此方法产生了一个值,这个值要放在return后面。

       你可以定义方法返回任意想要的类型,如果不信返回任何值,可以指示此方法返回void(空).若返回类型是void,return关键字的作用只是用来退出方法。没有必要到方法结束时才离开,可在任何地方返回。如果返回类型不是void,那么无论在何处返回,编译器都会强制返回一个正确类型的返回值。

 2.6 构建一个Java程序

       可以使用import来准确地告诉编译器你想要的类是什么。import指示编译器导入一个包,也就是一个类库。

import java.util.ArrayList;

        util包含了数量众多的类,有时你想使用其中的几个,同时又不想明确地逐一说明;那么你很容易使用通配符“*”;如:

import java.util.*;

        当声明一个事物是static时,就意味着这个域或者方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域。

          引用static变量有两种方法:

  • 可以通过一个对象去定位它。如str2.i;
  • 也可以通过其类名直接引用,而这对非静态成员则不行。

       使用类名是引用static变量的首选方式,这不仅是因为它强调了变量的static结构,而且在某些情况下它还为编译器进行优化提供了更好的机会。

       一个static字段对每个类来说都只有一份存储空间,而非static字段则是对每个对象有一个存储空间

 2.8 注释和嵌入式文档

       3种注释方法:

  • 多行注释:以“/*”开始,以“*/”结束,可跨越多行。进行编译时,/*和*/之间的所有东西都会被忽略。
  • 单行注释:以“//”起头,到这一行结尾。
  • 注释文档:以“/**”开始,以“*/”结束。

       javadoc注释标签语法的一些说明。

  • @author  对类的说明--标明开发该类模块的作者
  • @version  对类的说明--标明该类模块的版本
  • @param    对方法的说明--方法中某参数的说明
  • @return  对方法的说明--方法返回值的说明@exception  对方法的说明--方法可能抛出的异常的说明

 2.9 编码风格

       类名、方法名字段(成员变量)以及对象引用名称等都统一使用“驼峰风格”。其中类名的首字母要大写,标识符的首字母要小写。如:

class AllTheColorsOfTheRainbow{
    int anIntegerRepresentingColors;
    void changeTheHueOfTheColor(int newHue){
        //...
    }
    //...
}

猜你喜欢

转载自blog.csdn.net/qq_35766758/article/details/81949201