Java課第八章 類的高級特性~2 final
final與static一樣屬於修飾符,可放在變量,方法,和類的前面,與訪問修飾符不同
1.想聲明一個常量,不希望它的值有所改變,只可賦值一次
例:final i; i=30; 此時,變量i不可再被賦值,第一次賦值可在任何地方;
2.聲明一個方法,可以不被任何其他方法所覆蓋,通常用在父類方法中
例:final void print(){} 此時print方法被定義爲最終方法,不可被其他方法覆蓋
3.聲明一個最終類,不可被任何類繼承(String 類也屬於final類,因此他的對象不可被改變)
例:final class Demo(){}
1.一個變量可以聲明爲final,這樣做的目的是阻止它的內容被修改.
2.聲明final變量後,只能被初始化一次,然後就不能對其值進行修改
3.一個final變量實質上是一個常量.
1.在方法聲明中使用final關鍵字向編譯器表明子類不能覆蓋此方法.
1.在聲明中,一個final方法只能被實現一次,聲明final的類不能被繼承
2.如果一個類爲final類,那麼它的所有方法都爲隱式的final方法
Java課第八章 類的高級特性
}
Java課第七章 *面向對象*~5 (END)
關鍵字:instanceof,import,package 特殊方法:toString(),equals()
instanceof:
1.instanceof運算符可以用來檢查對象與類之間的關係
2.格式:if(obj instanceof classname).....,當obj爲classname類或其子類的對象時,運算符返回true.
例:Father爲一個父類,Son爲一個子類
Son s1=new Son();
if(s1 instanceof Father) //返回的值爲true,因爲子類的對象也可以屬於是父類
Father s2=new Father();
if (s2 instanceof Son) /返回的值爲false,因爲父類的對象不屬於子類
類型轉換:
1.執行自動類型轉換需要2個條件:
-接受轉換的類型種類是兼容的
-目的類型數的範圍比源類型大
2.強制類型轉換的格式:
(目標類型)value
Object類
1.所有創建的類都有一個默認的公共超級父類Object,它其中有一些已經定義好的方法
2.Object類包括在java.lang的包中,無論是哪個文件,系統默認調用java.lang這個包
3.此類定義了所有對象都具有的基本屬性和方法 既默認的構造函數
4.可以用類型爲Object的變量來引用任意類型的對象 //不解
equals()
格式:
(obj_name.equals(obj_name2));
對象1與對象2比較,
1.equals()這個方法在Object中,在其他類中可以任意調用
2.用於比較兩個對象在堆中指向的地點是否相同,如果相同就返回true
3.子類可以通過覆蓋Object的equals方法來實現由意義的測試,可以實現:若同一類型的兩個不同對象包含相同的信息既返回true。也可以理解爲同類中兩個對象的值是否相等.
子類覆蓋equals方法:
public boolean equals(Object Obj)
{
if(this==Obj) return true;//比較的是兩個對象的引用(references)是否相等
if(Obj==null) return false;//檢查 Obj是否爲空
if(getClass() != Obj.getClass()) return false;//檢查是否屬於同一個class
return true;
}
第一句://比較的是兩個對象的引用(references)是否相等
第二句://檢查 Obj是否爲空
第三句://檢查是否屬於同一個class
toString()
1.toString也是Object類中的一個方法,也可以在任何類中被調用
2.toString 用於返回對象的字符串表示
3.建議所有子類都覆蓋此方法
4.使用"+"運算符將對象同一個字符串連接,java編譯器會自動調用toString方法,獲取對象的字符串表現形式
(以上好像在實際中都運用了)
源文件(編譯單元)
1.每個編譯單元必須是以.java結尾的文件名稱,在一個編譯單元裏(既一個文件內),可以有一個public的類,這個類的名字必須與保存的文件同名.在一個單元內,除了public類,其它的類如果沒被聲明訪問權限,就默認爲protected的.
2.可以,儘管很少見,一個編譯單元沒有一個public類,所有的類都是protected的,那麼文件名可以任意起,
3.編譯一個.java文件時,對應於文件中的每一個類,會得到一個.class文件,文件名與類的名字相同.一個程序是一堆.class文件.
包:庫單元 (最重要的部分之一)
1.用import來引入包或者包裏的成員.
例:import java.util.*; //這裏引入了java.util中的所有類
import java.util.Vector //這裏引入了java.util中的Vector類(可以具體化)
2.java中,包德主要用途
-包允許將類組合成較小的單元.
-包允許在在更廣的範圍內保護類、數據和方法.
-在一個包中可以調用其它包中任何類,起到"類"_"覆用"的作用.
3.包可以是類、接口和子包的集合
4.兩個不同包中含有同名類,如java.util包和java.sql包中都有一個Date類,下面程序會出現編譯 出錯,因爲編譯器不知道使用哪個Date類,這個時候要給......不知道同時調用他們的Date類
使用包:
創建包:
格式: package package_name;
訪問java成員包
格式: package_name.class_name
導入包:
格式: import package_namme.*;
導入子包:
格式: import package_name.package2_name.*;
注意:
--只能用*來引入一個包中的所有類,並不能嵌套引入下層包
例: package_name下層還有一個包爲package_name2,這裏就不能用package_name.*來調用package_name2中間的類
--若兩個Date類都要使用,則只能在每個類前面加上完整的包名
例:根據前面的例來導入2個包中的所有類
import package_name.*;
import package_name.package_name2.*;
--只能引入類,不能引入對象.如: 不能用import System.out.
--Java缺省自動引入java.lang包中所有的類,相當於import java.lang.*
CLASSPATH 類的路徑
1.CLASSPATH是一個環境變量,包含一個或多個目錄
2.它的意思是說JVM需要找一個.class文件的時候到哪裏去找
3.CLASSPATH,它們作爲一種特殊的根使用,從這裏展開對.class文件的搜索
4.如果在沒有設置CLASSPATH的環境變量時,系統默認給了一個"."(當前目錄),編譯器會在當前目錄裏去尋找.class文件
Java課第七章 *面向對象*~4
{
int price;
int value;
}
{
int price;
int value;
Sword(int p,int v)
{
super.price=10; //雖然子類的成員變量與父類的相同,在這裏加了super.來識別變量爲父類的
super.value=50; //如果想子類中給父類的成員變量賦值,必須在子類的構造函數中
price=p;
value=v;
}
void print()
{
System.out.println(super.price); //在這裏,一樣可以打印父類的,怕子類的成員變量覆蓋父類的
System.out.println(super.value);
}
{
Sword s1=new Sword(100,50);
s1.print();
}
int a;
SuperClass()
{
a = 10;
}
public void printA()
{
System.out.println("父類中a ="+a);
}
public void printB()
{
System.out.println("你好,兒子。我是你爸爸");
}
}
int a;
SubClass(int a)
{
this.a = a;
}
public void printA()
{
System.out.println("子類中a = "+a);
}
}
public static void main(String args[]) {
SuperClass s1 = new SubClass(10); //關鍵就是這裏,new 的構造函數是子類的
s1.printA(); //後面參數10等於給子類構造函數中的a賦值,
s1.printB(); //最後輸出子類中的print這個方法覆蓋的版本
}
}
Java課第七章 *面向對象*~3
{
String brand;
String color;
int price;
int number;
Vehicle(String b,String c)
{
brand=b; color=c;
}
Vehicle(String b,String c,int p,int n)
{
this(b,c);/*這裏的(b,c)對應上面的那個構造函數,
this將自動調用式配與參數相同的構造函數*/
price=p;
number=n;
System.out.print("車牌="+brand );
System.out.print("- 顏色="+color);
System.out.print("- 價格="+price );
System.out.print("- 座位數="+number);
}
public static void main(String args[])
{
Vehicle c1=new Vehicle("法拉利","紅色",300,4);
}
}
Java課第七章 *面向對象*~2
JAVA課第6章 函數
JAVA第5章 數組(極重要)
@每個參數被視爲字符串分別存儲在main函數的參數數組中
@可以使用雙引號將多個字符串作爲一個整體顯示
Jva課3-4章 結構控制
{
if(num % 9 == 0)
continue;
System.out.println("不能被9整除的數有:"+num);