java 權限關鍵字 java
private:私有,是一個權限修飾符。用於修飾成員,私有的內容只在本類中有效。數組
public:公共全部的對象均可以引用。函數
class de { int x = 3; public static void main(String[] args) { de d = new de(); System.out.println(d.x); d.x = 9; System.out.println(d.x); show(d); System.out.println(d.x); } public static void show(de d) { d.x = 4; } }
結果爲 ;工具
3 第一個爲引用爲類中的成員變量;this
9 第二個對成員變量從新賦值spa
4 第三個地址變化,由堆地址變爲棧地址線程
/** 創建一個用於操做數組的工具類,其中包含着常見的對數組操做的函數如:最值,排序等 。 @author 張三 @version V1.0 */ public class ArrayTool { /** 獲取整型數組的最大值。 @param arr 接收一個元素爲int類型的數組。 @return 該數組的最大的元素值 */ public static int getMax(int[] arr) { int maxIndex = 0; for(int x=1; x<arr.length; x++) { if(arr[x]>arr[maxIndex]) maxIndex = x;// } return arr[maxIndex]; } }
覆蓋注意事項:code
1,子類方法覆蓋父類方法時,子類權限必需要大於等於父類的權限。 對象
2,靜態只能覆蓋靜態,或被靜態覆蓋。排序
特色:
1,方法只有聲明沒有實現時,該方法就是抽象方法,須要被abstract修飾。
抽象方法必須定義在抽象類中。該類必須也被abstract修飾。
2,抽象類不能夠被實例化。爲何?由於調用抽象方法沒意義。
3,抽象類必須在其子類覆蓋了全部的抽象方法後,該子類才能夠實例化。不然,這個子類仍是抽象類。
1,抽象類中有構造函數嗎?
有,用於給子類對象進行初始化。
2,抽象類能夠不定義抽象方法嗎?
能夠的。 可是不多見,目的就是不讓該類建立對象。AWT的適配器對象就是這種類。
一般這個類中的方法有方法體,可是卻沒有內容。
abstract class Demo { Demo() { System.out.println("demoa "); } abstract /*抽象*/ void show(); void ha() { System.out.println("demoa s"); } } class DemoA extends Demo { void show() //覆蓋虛擬類show { System.out.println("demoa show"); } } class AS { public static void main(String[] args) { DemoA a = new DemoA(); a.show(); a.ha(); //虛擬類中的非虛擬方法能夠直接用 } } 結果 demoa //虛擬類的構造函數 demoa show demoa s
3,抽象關鍵字不能夠和那些關鍵字共存?
private不行 static不行 final不行 由於虛擬類須要被子類覆蓋
4,抽象類和通常類的異同點。
相同點:
抽象類和通常類都是用來描述事物的,都在內部定了成員。
不一樣:
1,通常類有足夠的信息描述事物。
抽象類描述事物的信息有可能不足。
2,通常類中不能定義抽象方法,只能定非抽象方法。
抽象類中可定義抽象方法,同時也能夠定義非抽象方法。
3,通常類能夠被實例化。
抽象類不能夠被實例化。
5,抽象類必定是個父類嗎?
是的。由於須要子類覆蓋其方法後才能夠對子類實例化。
當一個抽象類中的方法都是抽象的時候,這時能夠將該抽象類用
另外一種形式定義和表示,就是 接口 interface。
對於接口當中常見的成員:並且這些成員都有固定的修飾符。
1,全局常量: public static final
2,抽象方法。public abstract
由此得出結論,接口中的成員都是公共的權限.
interface Demo { public static final int NUM = 4; public abstract void show1(); public abstract void show2(); } class DemoImpl implements /*實現*/Demo { public void show1() {} public void show2() { } }
類與類之間是繼承關係,類與接口直接是實現關係。
接口不能夠實例化。只能由實現了接口的子類並覆蓋了接口中全部的抽象方法後,該子類才能夠實例化。
java中不直接支持多繼承,一個類能夠實現多個接口,接口的出現避免了單繼承的侷限性。
interface A { public void show(); } interface Z { public int add(int a,int b); } class Test implements A,Z//多實現 { public int add(int a,int b) { return a+b; } public void show(){} }
一個類在繼承另外一個類的同時,還能夠實現多個接口。
class Q { public void method() {} } abstract class Test2 extends Q implements A,Z { }
接口能夠多繼承
interface CC { void show(); } interface MM { void method(); } interface QQ extends CC,MM//接口與接口之間是繼承關係,並且接口能夠多繼承。 { void function(); } class WW implements QQ { //覆蓋3個方法。 public void show(){} public void method(){} public void function(){} }
接口與抽象類不一樣點:
1,抽象類須要被繼承,並且只能單繼承。
接口須要被實現,並且能夠多實現。
2,抽象類中能夠定義抽象方法和非抽象方法,子類繼承後,能夠直接使用非抽象方法。
接口中只能定義抽象方法,必須由子類去實現。
class 動物 {} class 貓 extends 動物 {}
動物 x = new 貓();//一個對象,兩種形態。
貓這類事物即具有者貓的形態,又具有着動物的形態。這就是對象的多態性。
父類或者接口的引用指向其子類的對象。
多態的好處:
提升了代碼的擴展性,前期定義的代碼可使用後期的內容。
多態的弊端:
前期定義的內容不能使用(調用)後期子類的特有內容。
多態的前提:
1,必須有關係,繼承,實現。
2,要有覆蓋。
class Fu { int num = 3; void show() { System.out.println("fu show"); } static void method() { System.out.println("fu static method"); } } class Zi extends Fu { int num = 4; void show() { System.out.println("zi show"); } static void method() { System.out.println("zi static method"); } } class DuoTaiDemo3 { public static void main(String[] args) { Fu f = new Zi(); f.method(); //fu static method 靜態函數 看左邊 f.show(); //zi show 成員函數非靜態 看右邊 System.out.println(f.num); //3 成員函數 看左邊 } }
多態時,成員的特色:
1,成員變量。編譯和運行都參考等號的左邊
2,成員函數(非靜態)。編譯看左邊,運行看右邊
3,靜態函數。編譯和運行都看左邊。
class Outer { int num = 3; class Inner { int num = 4; void show() { int num = 5; System.out.println(Outer.this.num); } } void method() { new Inner().show(); } } class InnerClassDemo2 { public static void main(String[] args) { new Outer().method(); new Outer().new Inner().show(); //直接引用內部類 } } System.out.println(Outer.this.num); //結果爲 3 //去掉Outer. 結果爲 4 //去掉this. 結果爲5
throws 和throw的區別。
1,throws使用在函數上。
throw使用在函數內。
2,throws拋出的是異常類,能夠拋出多個,用逗號隔開。
throw拋出的是異常對象。
try { //須要被檢測異常的代碼。 } catch(異常類 變量)//該變量用於接收發生的異常對象 { //處理異常的代碼。 } finally { //必定會被執行的代碼。 } 若是catch中有return,則不會執行到這裏,而finally中的內容會被執行
class Demo { public int method(int[] arr,int index) throws NullPointerException { if(arr==null) throw new NullPointerException("沒有任何數組實體"); if(index<0) throw new FuShuIndexException(); return arr[index]; } } class ExceptionDemo4 { public static void main(String[] args) { int[] arr = new int[3]; Demo d = new Demo(); try { int num = d.method(null,-1); //調用method方法,可能會產生異常 System.out.println("num="+num); } catch(NullPointerException e) { System.out.println(e.toString()); } System.out.println("over"); } }
package myclass 生成類放 myclass目錄下 import myclass.*; 導入myclass類
正在進行的程序爲進程:應用程序對應的在內存中的空間,進程 不運行,只是分配內存空間
線程是:進程中 執行路徑 決定在內存中走那些內存
1,定義一個類繼承Thread類。
2,覆蓋Thread類中的run方法。
3,直接建立Thread的子類對象建立線程。
4,調用start方法開啓線程並調用線程的任務run方法執行。
class Demo extends Thread { public void run() { for(int x=0; x<10; x++) { for(int y=-9999999; y<999999999; y++){} //加點延時爲了體現線程 System.out.println(name+" x="+x+" name="+Thread.currentThread().getName()); } } } class ThreadDemo2 { public static void main(String[] args) { Demo d1 = new Demo(); Demo d2 = new Demo(); d1.start();//開啓線程,調用run方法。 d2.start(); } }
1,定義類實現Runnable接口。
2,覆蓋接口中的run方法,將線程的任務代碼封裝到run方法中。
3,經過Thread類建立線程對象,並將Runnable接口的子類對象做爲Thread類的構造函數的參數進行傳遞。
class Demo implements Runnable//extends Fu //準備擴展Demo類的功能,讓其中的內容能夠做爲線程的任務執行。 //經過接口的形式完成。 { public void run() { show(); } public void show() { for(int x=0; x<20; x++) { System.out.println(Thread.currentThread().getName()+"....."+x); } } } class ThreadDemo { public static void main(String[] args) { Demo d = new Demo(); Thread t1 = new Thread(d); Thread t2 = new Thread(d); t1.start(); t2.start(); } }