自己在學Java的時候先從命令行編譯、執行入手。所以首先接觸到了一些關於命令行指令的知識。
1.命令行指令總結(更新中)
1.1.1
進入命令行界面:快捷鍵windows+R-->輸入cmd
1.1.2
進入到命令行潔面後如果輸入可能會有個比較礙眼的輸入法問題,解決方法:Ctrl+空格
1.2.1
查看Java的版本:在進入命令行界面後輸入java,然後回車。
1.2.2
每次打開命令行,它的地址默認是C盤。可以輸入 d: 然後回車可以轉到D盤。或者輸入cd d:路徑1\路徑2\路徑3\路徑4然後回車。
1.2.3
dir,可以顯示當前目錄下的文件信息(文件名,修改時間,大小等)。
1.2.4
cd .. 可以返回上一級目錄。
1.2.5
命令行太多,顯示的太亂的時候可以使用cls清屏。
1.3.1
編譯指令:在.java文件所在目錄下輸入javac -encoding utf-8 文件名.java,然後回車就可以編譯當前源代碼。( 在某些版本jdk中不自動識別中文,尤其是註釋中的中文,加上-encoding utf-8就可以解決這個問題 )
1.3.2
執行指令:同樣是和編譯後得到的.class文件在同一目錄下,輸入java 文件名,然後回車就行。不用輸入.java
2.Java的封裝特性:
2.1
訪問控制修飾符:Java提供了四種訪問修飾符號控制方法和變量的訪問權限。
2.1.1
public(公開級別):用public修飾,對外公開。
2.1.2
protected(受保護級別):用protected修飾,對子類和同一個包中的類公開。
2.1.3
默認級別:沒有修飾符,相同一個包的類公開。
2.1.4
private(私有級別):用private修飾,只有類本身可以訪問,不對外公開。
3.Java的繼承
3.1
繼承的注意事項:
①子類最多隻能繼承一個父類(指的是直接繼承)
②java中所有類都是Object類的子類
③如果不希望父類中某些屬性或方法被子類繼承,則需將該屬性或方法的類型改爲私有private即可
④繼承語句:A extends B(A繼承了B的某些內容)
4.Java的方法重載和方法的覆蓋
4.1方法重載
4.1.1方法重載的引入
問題1:編寫一段代碼比較兩個整數的大小,返回較大的數值。
問題2:編寫一段代碼比較兩個float數的大小,返回較大的數值。
如果不適用“方法重載”那麼程序需要寫成下面的樣子。
public class Demo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Abc abc=new Abc();
System.out.println(abc.getMaxint(2,5));//比較兩個整數2,5的大小
System.out.println(abc.getMaxfloat(2.1f,5.4f));//比較兩個小數2.1,5.4的大小
}
}
class Abc
{
//返回較大的整數
public int getMaxint(int i,int j)
{
if(i>j)
{
return i;
}
else
{
return j;
}
}
//返回較大的float數
public float getMaxfloat(float i,float j)
{
if(i>j)
{
return i;
}
else
{
return j;
}
}
}
可以看到getMaxint與getMaxfloat兩個方法的實現是很像的,邏輯是一樣的,不同的是輸入變量的類型和返回值的類型。如果就是按照上面的例子那麼調用的時候會比較麻煩,需要人爲的判斷自己要比較的兩個數的類型是int還是float,然後決定要是用哪個方法。
有沒有一種方法使得:函數名一樣,返回的類型不同或者輸入的類型、輸入的變量順序不同(還是有點區別的)?!
有的!!!“方法重載”(overload)。
4.1.2 方法重載的注意事項
① 方法名相同
② 方法的參數類型,個數,(類型的)順序至少有一項不同(強制)
③ 方法的返回類型可以不同(不強制)(僅僅是返回類型不一樣,不能夠構成重載)
④ 方法的修飾符可以不同(不強制)(僅僅是返修飾符不一樣,不能夠構成重載)
4.1.3 方法重載的具體實現
public class Demo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Abc abc=new Abc();
System.out.println(abc.getMax(2,5));//比較兩個整數2,5的大小
System.out.println(abc.getMax(2.1f,5.4f));//比較兩個小數2.1,5.4的大小
}
}
class Abc
{
//返回較大的整數
public int getMax(int i,int j)
{
if(i>j)
{
return i;
}
else
{
return j;
}
}
//返回較大的float數
public float getMax(float i,float j)
{
if(i>j)
{
return i;
}
else
{
return j;
}
}
}
4.2 方法的覆蓋(override)
4.2.1 方法覆蓋的引入
既然子類可以繼承父類,這樣可以提高代碼的複用性。但是問題來了,如果子類中的方法和父類中的方法在實現上是有區別的應該怎麼辦?重新再子類寫一個完全不同的方法嗎?!答案自然是不必。
4.2.3方法的覆蓋
問題:要求寫三個類,貓貓、狗狗、豬豬,這三個東東都是動物,動物作爲一個很大的類別必然存在一些相同的特點。根據類的抽象特徵,我們可以把它們相同點提取出來形成一個父類Animal,然後再繼承,寫出貓、狗、豬三個子類。問題的核心怎麼解決子類和父類方法的異同!!!
方法覆蓋(override):簡單地說,方法的覆蓋就是子類有一個方法,和父類的某個方法的名稱、返回類型、參數一樣,那麼我們就說子類的這個方法覆蓋了父類的方法。比如下面的例子中Cat類中cry方法就是覆蓋了Animal類的cry方法。
//Animal 類
class Animal
{
int age;
String name;
//都會叫(將要被覆蓋的方法)
public void cry()
{
System.out.println("我是動物,不知道怎麼叫!!");
}
}
//Cat類
class Cat extends Animal
{
//覆蓋父類“叫”的方法
public void cry()//與父類的方法比,參數列表、返回類型、方法修飾符、方法名都一樣(問題:能不能不一樣???)
{
System.out.println("我是貓,我會喵喵叫!!");
}
}
//Dog類
class Dog extends Animal
{
//覆蓋父類“叫”的方法
public void cry()
{
System.out.println("我是狗,我會汪汪叫!!");
}
}
4.2.4 方法覆蓋的注意事項
方法的覆蓋有很多條件,總的來說有兩點要注意:
①子類方法的返回類型,參數,方法名稱,要和父類方法的返回類型、參數、方法名稱完全一樣,否則編譯出錯。
②子類方法不能縮小父類方法的訪問權限(方法修飾符的問題!)