Java基础知识(一)

用户自定义类

  1. 不要编写返回引用可变对象的访问器方法 P113
  2. 函数设置为private:
    • 希望将一个计算代码划分成若干个独立的辅助方法
    • 需要一个特别的协议以及一个特别的调用次序
  3. 将实例域定义为final,必须确保在每一个构造器执行之后,这个域的值被设置,并且在后面的操作中,不能够对它继续操作。final大多数时候应用于基本类型域和不可变类的域。

静态域与静态方法

  1. static静态域(变量),每个类中只有一个这样的域,若干个对象共享这样一个静态域,静态域是属于类的,不属于任何一个对象
  2. static静态常量使用的较多,比如Math.PI, System.out等等。
  3. 静态方法是一种不能向对象实施操作的方法,如 Math.pow, 在运算的过程中,不使用任何Math对象,即没有隐式的函数。可将静态方法视为没有this参数的方法。
    • 一个方法不需要访问对象状态,其所需参数都是通过显式参数提供的
    • 一个方法只需要访问类的静态域(如P117的getNextID方法)
  4. 每一个类可以有一个main方法,这是一个常用于对类进行单元测试的技巧

方法参数

  1. 方法参数分为两种:基本数据类型(数字、布尔值),对象引用。
  2. Java对对象采用的不是引用调用,而是值传递 (引用调用的反例即无法进行swap,swap(a,b)中交换的是对两个对象引用的拷贝)
  3. Java 方法参数的使用情况:
    • 一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)
    • 一个方法可以改变一个对象参数的状态
    • 一个方法不能让对象参数引用一个新的对象

对象构造

  1. 重载:多个方法有相同的名字、不同的参数,便产生了重载。
  2. 如果没有初始化类中的域,将会被初始化为默认值 (0,false或null)。
  3. 如果类中提供了至少一个构造器,但是没有提供无参数的构造器,则在构造对象时如果没有提供参数就会被视为不合法。
  4. 构造器的明明规则:在每个参数前面加上一个前缀”a”,或者直接使用参数的名字,而利用this指示隐式参数。
  5. 如果构造器的第一个语句形如this(…),这个构造器将调用同一个类的另一个构造器。
  6. 静态域可以使用静态的初始化块进行初始化。
  7. 由于Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器。

  1. import语句不仅可以导入类,还可以导入静态方法和静态域。(如 import static java.lang.System.*后可以直接使用out)但是这种编写形式不利于代码的清晰度。

  2. 包作用域:

    • public 可以被任意的类使用
    • private 只能被定义它们的类使用
    • 没有只能public/private,可以被同一个包中的所有方法访问