初學Java6:Java OOP基礎語法總結

来源:http://www.cnblogs.com/a-zhi/archive/2016/08/28/5816256.html
-Advertisement-
Play Games

...



*************** Java OOP 基 礎 語 法 總 結 *************************
1,類與對象
1),類(class)是相同屬性和方法的一組集合。
A,類的組成:屬性和方法。
B,語法聲明:使用class關鍵字,eg:public class Student{}//類名首字母大寫,且必須和文件名一致
C,類的實例化:使用new關鍵字,eg:Student student=new Student();//聲明一個Student類型的變數or實例化一個Student對象
D,類與文件的關係;
a,一個java文件可以包含多個java類
b,一個java文件最多只能有一個public類
c,java文件的名稱必須和其中的public類名一致
E,eg:public class Student{//類(首字母大寫)
public void getName(){//方法(一般為動詞+名詞,動詞首字母小寫,名詞首字母大寫)
String name;//屬性(數據類型+屬性名)
}
}
2),對象(object)是一個具體的實體(entity)。
eg:某某學生即可作為一個對象
********************************************************************
2,方法
1),可以重覆執行的代碼塊,對於調用者來說相當於一個“黑盒子”。
2),語法聲明;訪問控制修飾符 返回值類型 方法名 (參數列表){
方法體;
}
eg:public void getName(int num){
String name;
}
3),方法的傳參--數據類型:A,8種基本數據類型(byte,int,short,long,float,double,char,boolean)
B,引用數據類型(eg:Student student=new Student();中的student就是引用數據類型)
註:基本數據類型與引用數據類型的區別:
a,存儲方式不同,基本數據類型存在 棧 中,是按值傳
引用數控類型存在 堆 中,是按址傳
b,使用方式不同,基本數據類型 無屬性和方法
引用數控類型 有屬性和方法
********************************************************************
3,構造方法(Constructor)
1),是一個特殊的方法,該方法的作用是實例化對象,會在記憶體中分配空間,且可以對類的屬性進行初始化
2),語法特征:
a,構造方法的名字必須與所在的類一致
b,沒有返回值類型,註意和沒有返回值不是一回事
c,預設情況下有一個隱式的無參構造方法,其訪問控制修飾與所在的類的訪問控制修飾一致
d,如果我們自定義了構造方法,則隱式無參構造方法就不存在了
3),使用方法:使用new關鍵字調用

********************************************************************
4,包(package)
1),意義:解決命名衝突
2),命名:主要需要知道功能變數名稱反寫,全部字母小寫,不能以數字開頭,eg:com.baidu.zhidao.azhi0828//合法包名
3),如果一個類需要使用另一個包中的類,需要使用import關鍵字導入相應的包,其中java.lang無需顯式導入
********************************************************************
5,可變長度參數
1),是在數據類型後面加上“...”表示,當成數組。
eg:int getTotal(int...num){
代碼塊;
}
2),調用時可以不傳參數,可以傳若幹參數,傳入參數用逗號隔開,也可以傳入數組。
3),一個方法最多只能有一個可變長度參數,而且必須放在最後位置
eg:eg:int getTotal(int num1,int...num2){
代碼塊;
}
********************************************************************
6,命令行參數
***了 解***
********************************************************************
7,方法重載
1),在一個類中,具有相同的方法名,但是參數列表不同的方法。
2),可分為一般方法重載和構造方法重載。
eg:class Student{//同一個類
void getInformation(String name){//相同的方法名,不同的參數列表
***;
}
void getInformation(int age){//相同的方法名,不同的參數列表
***;
}
}
********************************************************************
8,this關鍵字
(1),使用環境:方法和構造方法中。
(2),使用方法兩種:
1),this.屬性(方法);//this表示當前運行的實列(對象),註意:this未運行時,不代表任何屬性(方法)。
2),this();//只能用在構造方法中。表示調用其他重載形式的構造方法,而且必須放在第一行。
(3),註意:靜態方法中不能使用this!(靜態方法屬於類,不是實列,而this代表了當前運行的實列,放一起順序會邏輯混亂),main中也不能使用this!
(4),eg:
 1 package com.zhi.java.course;
 2 public class Text{
 3     Text(int num){//this();只能用在構造方法中
 4         this.num=num;
 5     }
 6     Text(){
 7         this(100);//無參方法調用有參
 8     }
 9     int num=1;
10     int getNum(){
11         return num;//此處可以直接放回num
12     }
13     void setNum(int num){//新定義的num不同於成員變數num
14         this.num=num;//此處this不可省
15     }
16     void m1(){
17         
18     }
19     void m2(){
20         this.m1();//此處this可以省
21     }
22      static void m3(){
23         System.out.println(this.num);//Error!Cannot use this in a static context
24     }
25 }

 

********************************************************************
9,super關鍵字(對比this關鍵字)
(1),使用環境:一般的實列方法中和構造方法中
(2),使用方法兩種:
(1),super.屬性(方法);//調用父類的屬性(方法)
(2),super();//只能用在構造方法中。表示調用父類相應的構造方法,而且必須放在第一行。
********************************************************************
10,final關鍵字
(1),final修飾類,表示該類不能再被繼承;
eg:final class Animal(){}//Animal不能再被繼承。
(2),final修飾變數,該變數必須被賦值,final修飾後該變數變為常量,不能再改變;
eg:final int num=10;//num不可再改變。
(3),final修飾方法,該方法不能再被重寫;
eg:final void m1(){}//方法m1在f父類,在子類中final不能再被重寫。
(4),final修飾屬性,1),可以直接在聲明時賦值
2),可以在代碼塊中賦值
3),靜態的可以在靜態代碼塊中賦值
********************************************************************
11,繼承
(1),概念,繼承是OOP特征之一,是子類通過繼承獲取父類中的部分屬性和方法。
(2),使用extends關鍵字
1),符合is-a關係的設計使用繼承
2),繼承是代碼重用的一種方式
(3),好處:1),做到代碼重用
2),系統維護性更好。
(4),不能繼承的有:1),子類不能繼承父類的構造方法。
2),子類不能繼承父類的私有方法(private)。
3),子類和父類不在同一包,使用預設的訪問許可權的成員
(5),eg:
 1 package com.zhi.java.course;
 2 public class Animal {
 3     String name;//公共的屬性或方法
 4     int age;
 5 }
 6 public class Dog extends Animal {//繼承父類的屬性,一個子類只能繼承一個父類(單根繼承)
 7     public static void main(String[] args) {
 8         Dog dog = new Dog();
 9         dog.name = "大黃";
10         dog.age = 300;
11         String na= "田不易";//也可以有子類的特有屬性(方法)
12     }
13 }

********************************************************************
12,類的初始化順序:(從上到下)
父類的靜態代碼塊
子類的靜態代碼塊
父類的代碼塊
父類的構造方法
子類的代碼塊
子類的構造方法
註意:靜態代碼塊只能執行一次!
********************************************************************
13,訪問控制修飾符
1),概念,a:Java提供四種訪問控制修飾符(public private 包 )
b:放在方法與變數前,部分訪問控制修飾符也可以放在類前
c:目的是控制代碼的訪問許可權。
2),控制範圍(從大到小)
public 所有代碼都可以訪問
protected 本類,包及其子類的代碼可以訪問
包 本類,同一個包中訪問
private 私有的,它修飾的屬性,方法,或內部類只能本類使用

********************************************************************
14,方法重寫
1),概念:在子類中對父類的方法重新實現一遍,即在子類中對父類中某方法的預設邏輯進行修改。
2),語法:a,方法名一樣
b,方法的參數一樣
c,子類重寫的方法返回值類型要與父類返回值類型一樣或者是其子類
d,子類訪問控制修飾符的範圍不能比父類不能小
e,子類拋出的異常不能比父類拋出的異常多或範圍更大
3),以下方法不能重寫:
a,private方法
b,構造方法(Constructor)
c,static方法
d,final方法
********************************************************************
15,Object類
(1),java是單根繼承,在java中不允許多根繼承。
(2),Object是所有類的最終父類,所有類或者是數組都可以直接或間接繼承Object類。
(3),Object類來自java.lang包。
(4),可以將所有的引用類型值賦給Object類型聲明的變數,包括null。
(5),Object提供9中可用方法,所有的子類都都可以使用,其中
getClass(),notiFy(),notiFyall(),wait()不可以被子類重寫
toString(),equals(),hashCode(),clone(),finalize()可以被子類重寫
(6),toString()方法
1),自動調用toString()方法的場景:字元串拼接和控制台輸出,如下列:
 1 package com.zhi.java.course;
 2 public class Dog {
 3     String name;
 4     int age;
 5     public String getName() {
 6         return name;
 7     }
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     public int getAge() {
12         return age;
13     }
14     public void setAge(int age) {
15         this.age = age;
16     }
17     public static void main(String[] args) {
18         Dog dog = new Dog();
19         dog.setName("大黃");
20         dog.setAge(300);
21         System.out.println(dog);//等同於System.out.println(dog.toString());會自動調用toString方法,故有以下結果
22     }
23 }
運行結果: com.zhi.java.course.Dog@2a139a55 //預設實現輸出格式:全限定類名@哈希碼的16進位 

2),重寫toString()方法
 1 package com.zhi.java.course;
 2 public class Dog {
 3     String name;
 4     int age;
 5     public String getName() {
 6         return name;
 7     }
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     public int getAge() {
12         return age;
13     }
14     public void setAge(int age) {
15         this.age = age;
16     }
17     @Override//重寫註解,可判斷是否重寫
18     public String toString() {
19         return "名字:"+name+"\n年齡:"+age;  //重寫獲得需要的值
20     }
21     public static void main(String[] args) {
22         Dog dog = new Dog();
23         dog.setName("大黃");
24         dog.setAge(300);
25         System.out.println(dog);//等同於System.out.println(dog.toString());已經重寫toString()方法
26     }
27 }
運行結果:名字:大黃
   年齡:300
(7),equals()方法重寫
1),當類有邏輯上的等同意義而不僅是對象意義上的等同時 需要重寫equals()方法。
2),以下情況不能重寫:
a,每個類實列本質上是唯一的。
b,不關心類是否提供了“邏輯意義上的等同”測試。
c,超類已經重新了equals,該方法也適合子類。
3),回顧 "==":比較基本數據類型的值是否相等(按值比較),比較引用數據類型是否是同一個對象(按址比較)。
equals:預設與"=="相同,重寫可自定義比較規則。
4),未重寫時結果如下:
 1 package com.zhi.java.course;
 2 class Game {
 3     private String name;
 4     private int age;
 5     public String getName() {
 6         return name;
 7     }
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     public int getAge() {
12         return age;
13     }
14     public void setAge(int age) {
15         this.age = age;
16     }
17 }
18 public class EqualsJob {
19     public static void main(String[] args) {
20         Game g1 = new Game();
21         g1.setName("LOL");
22         g1.setAge(6);
23         Game g2 = new Game();
24         g2.setName("LOL");
25         g2.setAge(6);
26         System.out.println(g1.equals(g2));// 用equals直接比較兩個相同的引用類型,等同System.out.println(g1==g2);
27     }
28 }
運行結果:false
5),重寫equals()後如下:
 1 package com.zhi.java.course;
 2 class Game {
 3     private String name;
 4     private int age;
 5     public String getName() {
 6         return name;
 7     }
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     public int getAge() {
12         return age;
13     }
14     public void setAge(int age) {
15         this.age = age;
16     }
17     @Override
18     public boolean equals(Object obj) {
19         if (this == obj) {
20             return true;
21         }
22         if (obj instanceof Game) {//向下轉型需要通過instanceof判斷obj和Game是否同一類型
23             Game g = (Game) obj;//類型一致則強轉類型,向下轉型
24             return g.getAge() == age && g.getName().equals(name);//自定義比較規則
25         }
26         return false;
27     }
28 }
29 public class EqualsJob {
30     public static void main(String[] args) {
31         Game g1 = new Game();
32         g1.setName("LOL");
33         g1.setAge(6);
34         Game g2 = new Game();
35         g2.setName("LOL");
36         g2.setAge(6);
37         System.out.println(g1.equals(g2));// 使用equals直接比較兩個相同的引用類型
38     }
39 }
運行結果:true
6),equals()重寫約定
a,自反性
b,對稱性
c,傳遞性
d,一致性
e,任何非空x,x.equals(null)總是false
f,重寫equals方法時永遠要重載hashCode方法
********************************************************************
16,向上轉型與向下轉型:
(1),向上轉型:子類的實例可以自動轉換為父類的類型
(2),向下轉型:父類型需要強制轉化為子類型,前提是該對象本身就是子類型的對象,使用instanceof做判斷
********************************************************************
17,抽象類:
(public abstract class shape{}就是一個抽象類)
(1),使用abstract聲明抽象類或抽象方法
(2),抽象類可以有抽象方法,也可以沒有抽象方法,但是抽象方法必須在抽象類中
(3),抽象類不能實例化
(4),抽象類可以有構造方法
抽象方法:(public sbstract void sss();就是一個抽象方法)
(1),沒有實現體
(2),不能被final,private,static修飾
(3),主要給子類來重寫的

如果抽象類的子類是一個具體的類,該具體類必須實現父類的所有抽象方法
如果子類也是抽象類,子類既可以實訓父類的抽象方法,也可以不實現
 ********************************************************************
18,介面
(1),概念:它是一個純粹的抽象類,其它的方法全部都是抽象方法。它是一種約定,一種能力
(2),聲明語法:使用interface關鍵字,eg:public interface Swimable{}
1),可以聲明屬性,該屬性預設是public static final修飾的,必須賦初始值
2),可以有方法,全部是抽象方法,
3),介面不能直接實例化(介面是一個純粹的抽象類)
(3),介面成員-常量屬性
1),介面中所有的屬性都是public static final修飾的
2),常量可以是基本數據類型,也可以是引用數據類型
(4),註意:1),常量的命名規範是全部字母大寫,eg:public static final int NUM=10;
2),介面的修飾符可能是包級訪問級別的,所以public常量有可能訪問不到
3),推薦使用枚舉保存一組相關的值(至少java5)
(5),繼承介面
1),介面可以使用extends關鍵字繼承另一個介面
2),可以繼承:抽象方法和預設方法,常量屬性,嵌套類型
3),不能繼承靜態方法
(6),實現介面
1),實現介面的具體類需要使用implements關鍵字,並且需要重寫介面中所有的抽象方法。eg:public class Fish implements Swimable{}
2),實現介面的抽象類可以重寫介面中的部分抽象方法。
3),一個類可以實現多個介面,但是只能繼承一個類,而且應先繼承後實現。
4),介面可以作為數據類型用來聲明變數。
5),介面也可以繼承介面。
********************************************************************
19,面向對象的三大特征:封裝,繼承,多態
(1),封裝:將實現的代碼或屬性放在一個類或方法中,不讓外部代碼隨意訪問。
好處:安全。
使用訪問控制修飾符 private
(2),繼承:子類會將父類的部分屬性或方法繼承下來。
好處:做到代碼重用,提高系統的維護性能
使用關鍵字:extends
(3),多態:在不同的場景下,類或方法有不同的指向。
好處:代碼量可以減少
體現:1),方法上的多態:重寫和重載
2),類的多態:類作為方法的參數或返回值類型
********************************************************************
20,介面與抽象類的區別?
1),語法上,介面是使用interface聲明,使用implements實現,
抽象類是使用abstract聲明,使用extends繼承。
2),特定,介面不能有具體的方法,屬性都是靜態常量,
抽象類可以有構造方法、抽象方法、普通方法,還有屬性。
3),設計上,表達某種能力使用介面,

********************************************************************
21,方法重寫與重載的區別?
方法重寫是在子類中對父類的方法重新實現一遍,即在子類中對父類中某方法的預設邏輯進行修改。方法名和參數列表都相同。
方法重載是在一個類中,具有相同的方法名,但是參數列表不同的方法。
                                                  
   為了這個東西,從早上10點弄到現在,除了中午下午吃飯時間,一直沒間斷,好累...
                                                   A_zhi
							                2016/8/28/22/50
******************** 持 續 修 改、補 充... ***************************
 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 註:本組件適用於.net2.0+的winform項目 樣子: 實際效果比這gif順滑,建議下載文末的Tester體驗 介紹: 如圖所見,這種提示在網頁、手機上用的較多,相比正經的消息框(如MessageBox),我認為好處有: 不需要用戶對消息本身做出響應,點啥【確定】什麼的 不阻塞、不幹預用戶的後 ...
  • Quart 的 API Quartz API 中的關鍵介面和類如下: IScheduler—與調度器(scheduler)進行交互的主要 API; IJob—被組件繼承和實現,由調度器來執行的介面; IJobDetail—通常被用於定義任務實例; ITrigger—對於給定的任務定義出了它將被執行的... ...
  • Linq的好處非常明顯,不僅把資料庫訪問層真正做到面向對象,而且也可以把系統的許可權封裝到資料庫訪問層去了。 微軟目前穩定的Linq框架是Entity Framework 6.1,我自己編寫了一個資料庫工具Mr.E,可以用來設計資料庫結構,並且把資料庫結構編譯成Entity Framework的對象, ...
  • C# 為支持LINQ添加了許多語言特性: 隱式類型局部變數 對象初始化器 Lambda表達式 擴展方法 匿名類型 瞭解這些新特性是全面瞭解LINQ的重要先解條件,因此請不要忽視它們. (一) 隱式類型局部變數 processData這個類中的亮點是 {get;set;} 它是一個新特性, 系統會自動 ...
  • 摘一段模式的說明, F#的: msdn是這麼描述它的:“模式”是用於轉換輸入數據的規則。模式將在整個 F# 語言中使用,採用多種方式將數據與一個或多個邏輯結構進行比較、將數據分解為各個構成部分,或從數據中提取信息。 模式匹配自有其定義,同時也有很多種類,這裡針對相對複雜的【結構比較】和【數據抽取】進 ...
  • 早上下起了暴雨 鬧鐘還未響起就聽到雨滴嘩啦啦擊打窗戶的聲音,被吵醒了。起床上班,在樓下的十字路口,暴雨大到完全看不清對面,兩個穿著雨衣的交警站在路口中間指揮著過往的車輛,大家都慌慌張張、急急忙忙的打著各式各樣的雨傘在走,有的往地鐵站,有的往公交站,而我,站在樓下等車來... 這是前兩天的看到了,不是 ...
  • 原因: 因為在網上下載視頻教程,有的名字特別長,一般都是機構或者網站的宣傳,不方便直接看到視頻的簡介,所以做了下麵的第一個功能。 因為老師發的課件中,文件夾太多,想把docx都放在同一個文件夾下麵,一個一個找出來太麻煩,所以做了第二個功能。 最近剛剛學了Java文件和流的知識,所以正好練練手,這也是 ...
  • 搞了個簡單的Excel導入, 用的是PHPExcel(百科:用來操作Office Excel文檔的一個PHP類庫, 基於微軟的OpenXML標準和PHP語言) 好, 不說了, 開始吧... 首先得有PHPExcel類庫, 點這裡下載 https://github.com/Zmwherein/PHPE ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...