java基礎知識總結(1),java基礎知識總結
定義類:
訪問修飾符 class 類名{ }
訪問修飾符如:public 、priate是可選的
class是聲明類的關鍵字
按照命名規范,類名首字母大寫
例:創建“人”類,關鍵代碼:
public class Person{ }
**********************************************************
定義屬性:
訪問修飾符 數據類型 屬性名;
訪問修飾符士可選的
除了訪問修飾符之外,其他的語法和聲明變量是一致的
例:創建“人”類,名為“人”類添加相應屬性,關鍵代碼:
public class Person{
public String name;
public String gender;
public int age;
}
**********************************************************
定義方法:
訪問修飾符 返回類型 方法名稱(參數類型 參數名1,參數類型 參數名2,……){ }
訪問修飾符是可選的
返回類型可以是void,在定義方法時,返回類型為void時,表明沒有返回值,方法體中不必使用“return”關鍵字返回具體數據,但是可以使用“return”關鍵字退出方法
返回類型不為“void”,那麼在方法體中一定要使用“return”關鍵字返回對應類型的結果,否則程序會有編譯錯誤
小括號中的“參數類型 參數名1,參數類型 參數名2,……”稱為參數列表
當需要在方法執行的時候為方法傳遞參數時才需要參數列表,如果不需要傳遞參數時就可以省略,不過小括號不可以省略,傳遞多個參數時,以半角的括號進行分隔
例:在“人”類中定義方法,描述人工作的行為,關鍵代碼:
public class Person{
public String name;
public String gender;
public int age;
public void work( ){
System.out.println(this.name+"的工作理念:為夢想而努力奮斗);
}
}
**********************************************************
創建和使用對象:
1、創建對象
類名 對象名 = new 類名();
new 是關鍵字
左邊的類名為對象的數據類型
右邊的類名()稱為類的構造方法
例:創建Person類的對象,關鍵代碼:
Person lilei = new Person( );
2、使用對象
對象名 . 屬性 //引用對象的屬性
對象名 . 方法名 //引用對象的方法
例:對象屬性賦值並調用方法
public static void main(String[] args){
Person lilei = new Person( );
lilei.name = "李雷";
lilei.gender = "男";
lilei.age = 22;
lilei.work( );
}
**********************************************************
成員方法:
1、帶參數的方法
創建work()方法時定義的參數叫做形式參數,簡稱形參。調用方法時傳入的參數叫做實際參數,簡稱實參。
2、方法重載:
方法名相同,參數列表不同,就形成了方法重載
特點:在同一個類中,方法名相同,參數的個數或類型不同
**********************************************************
成員變量:
1、成員變量:類中的屬性,直接在類中定義的變量,定義在方法的外部。PS:成員變量可以在聲明時賦初始值,如果沒有賦值,java會給它一個默認值,基本數據類型的值為0,引用類型的值為null
2、局部變量:定義在方法中的變量,一般情況下,在使用前需要賦值,否則會編譯出錯
**********************************************************
構造方法:
主要作用是進行一些數據的初始化
訪問修飾符 方法名(參數列表){方法體}
構造方法沒有返回值
默認構造方法沒有參數,因此參數列表可選(默認構造無參方法的快捷鍵:Alt+/)
構造方法的方法名與類名相同
如果寫了帶參的構造方法,必須要生成一個無參的構造方法
例:為Person類定義一個構造方法,關鍵代碼:
public class Person{
public Person(){
this.name = "李雷";
}
}
在一個類中可以定義多個重載的構造方法
this關鍵字是對一個對象的默認引用,每個實例方法內部,都有一個this引用變量,指向調用這個方法的對象
因為this是在對象內部指代自身的引用,所以this只能調用實例變量、實例方法和構造方法。this不能調用類變量和類方法,this也不能調用局部變量。
1)使用this調用成員變量,解決成員變量和局部變量的同名沖突。
2)使用this調用成員方法
3)使用this調用重載的構造方法,只能在構造方法中使用,且必須是構造方法第一條語句
例:
public Penguin(String name,String sex){
this.name = name;
this.sex = sex;
}
public Penguin(String name, int health, int love, String sex){
this(name,sex);
this.health = health;
this.love = love;
}
**********************************************************
封裝的步驟:
封裝:
用OOP方式完成變量的聲明、賦值、使用
完成2次(聲明、賦值、使用):1、封裝的類 聲明 賦值 使用 2、封裝類裡面屬性的聲明 賦值 使用
1、修改屬性的可見性
將Person類中的屬性由public修改為private即可。
例:請將Person類的屬性私有化,關鍵代碼:
public class Person{
private String name;
private String gender;
private int age;
}
2、設置setter/getter()方法
例:請為Person類中的私有屬性添加setter/getter()方法,關鍵代碼:
public class PrivatePerson{
private String name;
private String gender;
private int age;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getGender(){
return gender;
}
public void setGender(String gender){
this.gender = gender;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
}
3、設置屬性的存取限制
此時,屬性仍然沒有限制作用,需要進一步利用條件判斷語句進行限制
例見myeclipse -->practise-->SetPerson
**********************************************************
定義包:
package 包名
package是關鍵字
報的聲明必須是java源文件中的第一條非注釋性語句,而且一個源文件只能有一個包聲明語句,設計的包需要與文件系統結構相對應。因此,在命名包時,要遵守以下編碼規范:
a、一個唯一的包名前綴通常是全部小寫的ASCII字母,並且是一個頂級域名com、edu、gov、net、及org,通常使用組織的網絡域名的逆序。例如,如果域名為javagroup.net,可以聲明包名為“pacage net.javagroup.mypackage"
b、包名的後續部分依不同機構各自內部的規范不同而不同。這類命名規范可能以特定目錄名的組成來區分部門、項目、機器或注冊名,如“package net.javagroup.research.powerproject"
**********************************************************
包的使用:
包從大到小寫:網址倒過來
1、聲明包的含義是聲明當前類所處的位置
2、導入包的含義是聲明在當前類中要使用到的其他類所處的位置
//講Person類放入pack1包中
package cn.bdqn.pack1;
public class Person{
……省略代碼
}
//將PersonTest類放入pack2包中
//使用Person類時,需要使用import將其導入
package cn.bdqn.pack2;
import cn.bdqn.pack1.Person;
public class PersonTest{
public static void main(String[] atgs){
……省略代碼
}
}
**********************************************************
類成員的訪問修飾符:
作用域: 同一個類中 同一個包中 子類 任何地方
private 可以 不可以 不可以 不可以
默認修飾符 可以 可以 不可以 不可以
protected 可以 可以 可以 不可以
public 可以 可以 可以 可以
**********************************************************
static關鍵字的修飾屬性:
static修飾的屬性稱為靜態變量或者類變量,沒有使用static修飾的屬性稱為實例變量。
例:將Person類的name、gender和age屬性保留,新建一個static修飾的屬性,並調用 ,關鍵代碼:
public Person{
public String name;
public String gender;
public static int age;
public static int PERSON_LIVE;
//……省略代碼
}
//以上為Person類代碼,以下為調用代碼
//……省略代碼
Person hanbing = new Person();
hanbing.name = "韓冰";
hanbing.gender = "女";
hanbing.age = 22;
Person.PERSON_LIVE = 1;
實際開發中,static關鍵字修飾屬性的最常用場景就是定義使用final關鍵字修飾的常量。使用final關鍵字修飾常量在整個程序運行時都不能被改變,和具體的對象沒有關系,因此使用static修飾,
如“static final int PERSON_LIVE=1"
PS: 1、常量名一般由大寫字母組成
2、聲明常量時一定要賦初值
**********************************************************
static關鍵字的修飾方法:
static修飾的方法稱為靜態方法或者類方法,不用static關鍵字修改的方法稱為實例方法。
例:將Person中的showDetails()方法使用static關鍵字修飾,並調用 ,關鍵代碼:
public Person{
public String name;
public String gender;
public static int age;
public static void showDetails(String name,String gender,int age){
System.out.println("姓名是:"+name+",性別為:"+gender+",年齡是:"+age);
}
}
//以上為Person類代碼,以下為調用代碼
public class PersonTest{
public static void main(String[] args){
Person liudun = new Person();
Person.showDetails("劉頓","男",23);
}
}
1、在靜態方法中不能直接訪問實例變量和實例方法。
2、在實例方法中可以直接調用類中定義的靜態變量和靜態方法
**********************************************************
4種基本行為:
1)訪問修飾符:公共的 私有的 受保護的 默認的
2)返回類型:
有:變量的定義 數據類型 變量名
沒有:void
3)方法名:和類名的規范類似
a、方法名首字母小寫
b、方法名由多個單詞組成,從第二個單詞開始,首字母大寫
c、方法名要有意義
4)參數:
有:變量的聲明部分(boolean flag)
沒有:()
5)方法體:作用域{ }
a、並列:多個方法可以並列
b、嵌套:方法不能嵌套;可以嵌套流程控制 {if ( ) { }}
第一種基本行為:訪問修飾符 沒有返回類型 方法名(沒有){ }
例:public void add( ){ }
第二種基本行為:訪問修飾符 沒有返回類型 方法名(有){ }
例:public void add (int num1,int num2){ }
1、變量聲明的過程:形參 形式上的參數
2、變量賦值的過程:實參 實際上的參數
第三種基本行為:訪問修飾符 有返回類型 方法名(沒有){ }
例:public int add( ){ }
1、關鍵字:return 後面寫的是變量名,返回類型位置寫的是變量的數據類型
2、return後面不能再寫代碼了
第四種基本行為:訪問修飾符 有返回類型 方法名(有){ }
把第二種和第三種合在一起
例:public int add(int num1,int num2){ }
**********************************************************
繼承的語法:
訪問修飾符 class <SubClass> extends <SuperClass>{ }
在java中,繼承通過extends關鍵字實現,其中SubClass稱為子類,SuperClass稱為父類或基類。
訪問修飾符如果是public,那麼該類在整個項目可見。
不寫訪問修飾符,則該類只在當前包可見。
在java中,子類可以從父類中繼承以下內容:
可以繼承public和protected修飾的屬性和方法,不論子類和父類是否在同一個包裡
可以繼承默認訪問修飾符修飾的屬性和方法,但是子類和父類必須在同一個包裡
無法繼承父類的構造方法
**********************************************************
super使用的語法:
訪問父類構造方法:super(參數)
訪問父類屬性/方法:super.<父類屬性/方法>
super只能出現在子類(子類的方法和構造方法)中,而不是其他位置
super用於訪問父類的成員,如父類的屬性、方法、構造方法。
具有訪問權限的限制,如無法通過super訪問private
**********************************************************
實例化子類對象:
在java中,一個類的構造方法在如下兩種情況中總是會執行:
1、創建該類的對象(實例化)
2、創建該類的子類的對象(子類的實例化)
因此,子類在實例化時,會首先執行其父類的構造方法,然後才執行子類的構造方法。
子類繼承父類時構造方法的調用規則如下:
1、如果子類的構造方法中沒有通過super顯示調用父類的有參構造方法,也沒有通過this顯示調用自身的其他構造方法,則系統會默認先調用父類的無參構造方法。在這種情況下,是否寫super()語句,效果是一樣的。
2、如果子類的構造方法中通過super顯示調用父類的有參構造方法,那麼將執行父類相應的構造方法,而不執行父類無參構造方法。
3、如果子類的構造方法中通過this顯示調用自身的其他構造方法,在相應構造方法中應用以上兩條規則
如果存在多級繼承關系,在創建一個子類對象時,以上規則會多次向更高一級父類應用,一直到執行頂級父類Object類的無參構造方法為止。
**********************************************************
Object類:
Object類是所有類的父類。在java中,所有java類都直接或間接的繼承了java.lang.Object類
關鍵代碼:
public class Person{
}
//兩種寫法等價
public class Person extends Object{
}
**********************************************************
Object類的部分方法
方法 說明
toString() 返回當前對象本身的有關信息,按字符串對象返回
equals() 比較兩個對象是否是同一個對象,若是,返回true
clone() 生成當前對象的一個副本,並返回
hashCode() 返回該對象的哈希代碼值
getClass() 獲取當前對象所屬的類信息,返回Class對象
**********************************************************
方法重寫和方法重載的區別:
比較項 位置 方法名 參數表 返回值 訪問修飾符
方法重寫 子類 相同 相同 相同或是其子類 不能比父類更嚴格
方法重載 同類 相同 不相同 無關 無關
**********************************************************
多態:
例:寵物類Pet,有幾個子類,寵物類定義了看病的方法toHospital(),子類分別重寫看病方法,關鍵代碼:
class Pet{
public void toHospital(){
system.out.println(“寵物看病!”)
}
}
class Dog extends Pet{
public void toHostipal(){
system.out.println(“小鳥看病”)
}
}
public class Test{
public static void main(String[] args){
Pet pet;
pet = new Dog();
pet.toHospital();
pet = new Bird();
pet.toHospital();
}
}
示例中,Pet類一般聲明為抽象方法,因為其本身實例化沒有任何意義,toHopital()方法聲明為抽象類。
抽象類不能被實例化
子類如果不是抽象類,則必須重寫抽象類中的全部抽象方法
abstract修飾符不能和final修飾符一起使用
abstract修飾的抽象方法沒有方法體
private關鍵字不能修飾抽象方法
**********************************************************
抽象方法:
抽象方法沒有方法體
抽象方法必須在抽象類裡
抽象方法必須在子類中被實現,除非子類是抽象類
**********************************************************
向上轉型的語法:
子類到父類的轉換稱為向上轉型
<父類型><引用變量名> = new <子類型>();
將一個父類的引用指向一個子類對象,稱為向上轉型,自動進行類型轉換
此時通過父類引用變量調用的方法時子類覆蓋或繼承父類的方法,不是父類的方法
此時通過父類引用變量無法調用子類特有的方法
**********************************************************
向下轉型的語法:
<子類型><引用變量名> = (<子類型>)<父類型的引用變量>
**********************************************************
instanceof運算符:
用於判斷一個對象是否屬於一個類
在向下轉型的過程中,如果沒有轉換為真實子類類型,會出現類型轉換異常
例:判斷寵物類型,關鍵代碼:
public class Test{
public static void main(String[] args){
Pet pet = new Bird();
pet.toHospital();
if(pet instanceof Dog){
Dog dog = (Dog) pet;
dog.catchingFlyDisc();
}else if(pet instanceof Bird){
Bird biird = (Bird) pet;
bird.fly();
}
}
}
使用instanceof時,對象的類型必須和instanceof後面的參數所指定的類在繼承上有上下級關系,否則會出現編譯錯誤。
**********************************************************
多態的應用:
1、使用父類作為方法的形參
例:一個主人類,在該類中定義控制動物叫的方法。 關鍵代碼:
class Host{
public void letCry(Animal animal){
animal.cry();
}
}
public class Test{
public static void main (String[] args){
Host host = new Host;
Animal animal;
animal = new Dog();
host.letCry(animal);
animal = new Cat();
host.letCry(animal);
animal = new Duck();
host.letCry(animal);
}
}
2、使用父類作為方法的返回值
使用父類作為方法的返回值,也是Java中實現和使用多態的主要方式
例:主人送出三種動物,送出的動物可以叫。 關鍵代碼:
class Host{
public Animal donateAnimal(String type){
Animal animal;
if(type=="dog"){
animal = new Dog();
}else if(type=="cat"){
animal = new Cat();
}else{
animal = new Duck();
}
return animal;
}
}
public class Test{
public static void main(String[] args){
Host host = new Host;
Animal animal;
animal = host.donateAnimal("dog");
animal.cry();
animal = host.donateAnimal("cat");
animal.cry();
}
}