[Core Java® for the Impatient]重載Java2

Chapter 2. Object-Oriented Programming

  1.     Set(Mutator Methods)方法改變對象的狀態,Get(accessor methods)方法則不;html

  2. Java中變量不持有對象,他們引用對象;java

  3. 變量的實例和方法的實如今類的聲明部分聲明;oracle

  4. 對象調用自身實例化的方法,靠this引用ide

    5.    構造方法與類同名,一個類能夠擁有多個構造方法;工具

    6.    靜態變量不屬於任何對象,靜態方法不經過對象調用ui

    7.    類之間經過包來組織,使用import聲明使得你不須要在程序裏寫完整的包名;this

    8.    類能夠嵌套;
spa

    9.    內部類是非靜態的嵌套類,其實例擁有構造過的嵌入類的引用;
code

    10.    Java doc工具處理源文件產生HTML格式的代碼註釋;
htm


基本概念:

encapsulation 封裝

inheritance 繼承

polymorphism 多態


mutator => setter

accessor => getter

Java8 多了一種參數方式,receiver parameter

咱們能夠使用this做爲參數,可是要保證JDK版本,不然

jls有詳細說明:

http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1

Here are some examples of receiver parameters in instance methods and inner classes' constructors:
class Test {
    Test(/* ?? ?? */) {}
      // No receiver parameter is permitted in the constructor of
      // a top level class, as there is no conceivable type or name.

    void m(Test this) {}
      // OK: receiver parameter in an instance method

    static void n(Test this) {}
      // Illegal: receiver parameter in a static method                         

    class A {
        A(Test Test.this) {}
          // OK: the receiver parameter represents the instance
          // of Test which immediately encloses the instance
          // of A being constructed.

        void m(A this) {}
          // OK: the receiver parameter represents the instance 
          // of A for which A.m() is invoked.

        class B {
            B(Test.A A.this) {}
              // OK: the receiver parameter represents the instance 
              // of A which immediately encloses the instance of B 
              // being constructed.

            void m(Test.A.B this) {}
              // OK: the receiver parameter represents the instance 
              // of B for which B.m() is invoked.
        }
    }
}
B's constructor and instance method show that the type of the receiver parameter may be denoted with a qualified TypeName like any other type; but that the name of the receiver parameter in an inner class's constructor must use the simple name of the enclosing class.


內部類不能夠擁有靜態變量和靜態方法,可是能夠擁有常量。

public class Test {
    class TestClass {
        private final static int num = 0;// right
        private static int id = 0;//Error:(17, 28) java: Illegal static declaration in inner class com.scb.smarttrans.utils.generator.Test.TestClass
  modifier 'static' is only allowed in constant variable declarations

        public static int addOne() {
            return ++id;
        } //Error:(19, 27) java: Illegal static declaration in inner class com.scb.smarttrans.utils.generator.Test.TestClass
  modifier 'static' is only allowed in constant variable declarations
    }
}

做者趁機小黑了一把Java Designer

Inner classes cannot declare static members other than compile-time constants. There would be an ambiguity about the meaning of 「static.」 Does it mean there is only one instance in the virtual machine? Or only one instance per outer object? The language designers decided not to tackle this issue.

文檔註釋有些不常見的用法:

/**
* An <code>Invoice</code> object represents an invoice with
* line items for each part of the order.
*
* @param byPercent the percentage by which to raise the salary (e.g., 10 means 10%)
* @author Fred Flintstone
* @author Barney Rubble
* @version 1.1
*          <p>
*          Raises the salary of an employee.
* @return the amount of the raise
* @see com.horstmann.corejava.Employee#raiseSalary(double)
* @see <a href="http://en.wikipedia.org/wiki/Leap_year">Leap years</a>.
* @see "Core Java for the Impatient"
* {@link package.class#feature label}
* <img src="doc-files/uml.png" alt="UML diagram"/>.
* @since version 1.7.1
* @deprecated Use <code>setVisible(true)</code> instead
*/
相關文章
相關標籤/搜索