Java面向物件程式設計思想(一)
宣告:學基礎,在校學生,本文所有內容來自純書本,然後通過自己的理解和參考編寫而來,如有說的不對的地方,歡迎評論指錯!(僅做學習交流)
類和物件的建立
- 類的建立:(public private protected)+ class + 類名 { <類體>; }
- 物件的建立: 類名 + 物件名 = new 類名(); 同時建立多個物件 類名 + 物件名 = new 類名(),物件名1 = new 類名() …….
- 類中成員的修飾符:public(公有的),private(私有的),friendly(友好的),protected(受保護的),final(最終的),abstract(抽象的);
- -this- this只有在例項方法中使用 This 解決同名的問題 我所理解的是當前的意思 this(引數)。此方法用來在建構函式中呼叫建構函式
公有成員和私有成員
- 類的成員變數和成員方法如果它的訪問許可權是public,它就可以被其它所有類訪問宣告一個類中的成員為公有的,那麼該類必須是公有類。
- 建立公有成員: public 變數名 //類成員變數 public int lichaowu(){ //類成員方法 ……… } 以上用的公有的修飾。成員修飾有多種見上章表,用法一樣,但要注意許可權
- 一個類至少有一個公有的,保護的或者友好的成員方法
- 如果一個成員方法不會產生任何不希望的後果,它可以被宣告為公有的
- 如果一個成員方法可能使物件失效或不被其它類使用,它應當是私有的
- 一個物件所有的成員變數如有可能應當是私有的,至少應當是保護型別的
- 封裝(null)
建構函式與過載
-
建構函式與類名同名,沒有返回值,一個類可以定義多個建構函式,但每個建構函式的引數內容必須不同;
-
建立建構函式:類名(引數列表){ ……. }
-
成員方法的過載:過載的是意思是一個類中有多個相同名的方法。但是每個方法的引數不同(可以沒有引數); 作用:Java程式中方法的過載是實現面向物件多型性的一個重要方法
1. 引數個數不同 2. 引數型別不同 3. 與方法前面的修飾符,返回值無關 4. 呼叫時根據它的實參的型別,個數以及順序來區分呼叫哪個方法(順序時型別必須不一樣) 5. 不能通過訪問許可權。返回型別,丟擲異常進行過載。 6. 方法的異常型別和數目不會對過載造成影響 7. 對於繼承來說,如果某一個方法在父類中是priavte(私有的),那麼就不能在子類對其進行過載,若要定義,也只是定義了一個新的方法,而不會達到過載的效果。 8. Java中支援建構函式的過載(建構函式可以省略不寫,會自動生成的,為了符合類的定義),格式同上。
-
建構函式怎麼呼叫建構函式,前面在this講過。如下:
public class Person{
String name;
int age;
public Person(String name){
this.name = name;
}
public Person(String name,int age){
this(name); //呼叫了Person(String name)
this.age = age;
}
}
知識提前擴充套件(網路程式設計+netchatroom)
對於學習要勇於探索新的知識,其實有的時候我們都存在一個誤區,也是我以前一直存在的,那就是覺得自己基礎不好(特別對待英語,數學等),導師講一個小專案,然後用得是一種我們沒學過的語言或者一種工具來寫,他在講的時候可能我們聽不懂,我們會覺得老師怎麼樣怎麼樣,心裡覺得這老師不會講,不會體會同學們的感受,為什麼不從基礎講起,然後乾脆不聽了,反正聽不懂。然而你想過沒有其實完全可以通過課後時間來學,而且甚至可以比老師講的還快。對於不聽這是一種自己內心本就抵抗的心理+一個懶字。解決方法:你要正確全面認真的認識這門語言或者工具。另外對於我來說就一個字:狠。就是對自己狠!對一件事連續堅持一個星期,慢慢你會發現原來也沒有那麼難。接著一個月,你會發現你堅持的事不止一件了。
- 首先感謝華信IT教育的王海斌校長和蔣斌老師犧牲您們寶貴的周未時間給我上課,每一次聽課都是對這個行業的一種新的認知!感謝!不負眾望!交流學習扣扣群:866512107
- 網路程式設計是什麼? 答:網路程式設計我理解成為兩點;1.網路是什麼?網路是建立使用者與使用者之間的通訊的類;2.網路程式設計就是把網路給例項化。然後實現一些功能,如:接收/傳送也就是實現通訊等。
- 網路程式設計的應用? 簡單點說就是隻要你連網就會用到已經寫好的網路程式設計。沒有網路程式設計你任何事都做不了發不了QQ訊息,打不了遊戲。反正只要你想通訊,你就得用到網路程式設計。這是我的理解
- 如何建立伺服器 我這裡不做文字講述直接寫程式碼+註釋:
package FHVK;
/**
* 建立伺服器的程式
* @author 李超武
*本程式還不能實現通訊,1.沒有連線物件 2.沒有傳送和接收的功能*/
import java.net.*; /*java中與網路相關的功能都定義在此包
建立伺服器的方法就在此中包括下面要講的連線伺服器,
所以這句就是把它匯入到本程式中,方便進行呼叫其中的方法*/
public class Server { //建立一個類
//主函式程式的入口
public static void main(String[] args){
Server server = new Server(); //建立物件
server.CreateServer(8888); //呼叫server物件中建立伺服器的方法
}
//建立伺服器的方法
public void CreateServer(int port){ /*port代表埠,1,埠代表程式在計算機中的位置,2.ip地址代表計算機在網路中的位置*/
//捕獲異常(還有丟擲異常,最好用捕獲直播解決。麻煩少)
try{
//這是最關鍵的,建立連線伺服器物件傳給它一個埠
ServerSocket serversocket = new ServerSocket(port);
//提示語句
System.out.println("代表伺服器建立成功。等待使用者的連線...");
}catch (Exception e){
e.printStackTrace();
}
}
}
執行本程式將輸出:代表伺服器建立成功。等待使用者的連線… 所以差個使用者連線接著往下看哈哈。
- 如何使用本地客戶端連線伺服器/如何自己寫伺服器並連線 為了更好的表達出來我將在建立伺服器的方法中寫一個傳送功能。傳送一條:“Successful connection to server!”的資訊,怎麼寫見下圖(什麼意思我會在寫連線伺服器的時候寫): 我先介紹使用本地客戶端連線,由於Win不會預設開啟本地客戶端所以需要我們自己進行開啟 開啟方法:控制面板->程式和功能->啟用或關閉Windows功能 顯示下圖,開啟Telnet客戶端,確定即可; 開啟之後,我們來進行連線; 先開啟cmd(win+r) 然後在裡面輸入:telnet localhost 8888 (回車) //意思我會在寫連線伺服器的時候寫 由於本人使用的不是Win,所以沒辦法貼圖; 回車之後將顯示:Successful connection to server!(本地客戶端有自帶的傳送和接收方法) 到這裡說明你己成功到伺服器; 接下來我們寫連線伺服器(同樣貼程式碼)
package FHVK;
/**
* 建立一個客戶端
* 連線到伺服器端
* @author 李超武
* 實現傳送和接收功能
*/
import java.net.*; //講過,同理也要導進來
import java.io.*; /* i/o流包,代表輸入輸出
(我們將使用它的InputStream流類和OutputStream流類進行接收和寫入)*/
public class Client {
//全域性變數,全域性變數的使用是為了某個變數或者常量的作用域達到整個類
InputStream in; /*為什麼定義成全域性的?這會討論到作用域,在本程式用不到
但在後面寫UI的時候用得到,在後續說*/
//偷下懶,寫過的註釋不寫啦
public static void main(String[] args){
Client client = new Client();
/*locahlost代表本地ip地址
8888代表埠其它計算機就是通過這兩個資料找到對應計算機的伺服器
*/
client.ConnectClient("localhost", 8888); /*telnet localhost 8888 是cmd中的命令
telnet是Win內部命令用於連線到指定伺服器,localhost 8888在上面說過 那如果是別人想連怎麼辦
很簡單,把localhost改成伺服器ip地址就好啦,但要注意前提得在同一區域網*/
}
//建立連線伺服器方法
public void ConnectClient(String ip,int port){
try{
//最重要的,建立連線物件並把ip和埠給它
Socket connect = new Socket(ip,port);
//獲取輸入流物件用於接收訊息
in = connect.getInputStream();
/*在伺服器中我們加了getBytes()方法就是用來把字元轉換為位元組
在傳送過程中所有資料都會轉換成位元組進行傳送和接收*/
int data = in.read(); //int data使用者接收位元組資料
while(data != 13){
/*為什麼迴圈?因為資料是一個一個位元組讀取的
有個結束判斷為什麼不等於13,在伺服器中
我們在message後面是不是加了\r\n,\r的ASCII值為13
所以當讀取到\r的時候就跳出迴圈啦 \n的值為10*/
System.out.print((char)data); //接收的位元組,為了更好的表示出來我們把它強轉成字元
data = in.read(); //繼續接收
}
}catch (Exception e){
e.printStackTrace();
}
}
}
執行:先執行Server 再執行客戶端
- 你們有沒有發現只是單方面在接收和傳送訊息,如何把客戶端做成可以傳送和接收並還可以貼上UI,聊天不可能是客戶和伺服器聊,伺服器只是處理髮送過來的資料,然後轉發給指定的客戶,所以怎麼寫多個客戶端(類似群聊),你有沒有發現如果我傳送的是一串中文,而文字是佔兩個位元組,而接收是一個位元組接收,會出現什麼問題?這將在下一章講,考慮到時間和篇幅〜(由於時間關係很多細節和點沒講到位歡迎指錯。。。。)
- 順便祝我科二一把過哈哈哈哈哈哈