1. 程式人生 > >Java面向物件程式設計思想(一)

Java面向物件程式設計思想(一)

宣告:學基礎,在校學生,本文所有內容來自純書本,然後通過自己的理解和參考編寫而來,如有說的不對的地方,歡迎評論指錯!(僅做學習交流)

類和物件的建立

  1. 類的建立:(public private protected)+ class + 類名 { <類體>; }
  2. 物件的建立: 類名 + 物件名 = new 類名(); 同時建立多個物件 類名 + 物件名 = new 類名(),物件名1 = new 類名() …….
  3. 類中成員的修飾符:public(公有的),private(私有的),friendly(友好的),protected(受保護的),final(最終的),abstract(抽象的); 在這裡插入圖片描述
  4. -this- this只有在例項方法中使用 This 解決同名的問題 我所理解的是當前的意思 this(引數)。此方法用來在建構函式中呼叫建構函式

公有成員和私有成員

  1. 類的成員變數和成員方法如果它的訪問許可權是public,它就可以被其它所有類訪問宣告一個類中的成員為公有的,那麼該類必須是公有類。
  2. 建立公有成員: public 變數名 //類成員變數 public int lichaowu(){ //類成員方法 ……… } 以上用的公有的修飾。成員修飾有多種見上章表,用法一樣,但要注意許可權
  3. 一個類至少有一個公有的,保護的或者友好的成員方法
  4. 如果一個成員方法不會產生任何不希望的後果,它可以被宣告為公有的
  5. 如果一個成員方法可能使物件失效或不被其它類使用,它應當是私有的
  6. 一個物件所有的成員變數如有可能應當是私有的,至少應當是保護型別的
  7. 封裝(null)

建構函式與過載

  1. 建構函式與類名同名,沒有返回值,一個類可以定義多個建構函式,但每個建構函式的引數內容必須不同;

  2. 建立建構函式:類名(引數列表){ ……. }

  3. 成員方法的過載:過載的是意思是一個類中有多個相同名的方法。但是每個方法的引數不同(可以沒有引數); 作用:Java程式中方法的過載是實現面向物件多型性的一個重要方法

    1. 引數個數不同 2. 引數型別不同 3. 與方法前面的修飾符,返回值無關 4. 呼叫時根據它的實參的型別,個數以及順序來區分呼叫哪個方法(順序時型別必須不一樣) 5. 不能通過訪問許可權。返回型別,丟擲異常進行過載。 6. 方法的異常型別和數目不會對過載造成影響 7. 對於繼承來說,如果某一個方法在父類中是priavte(私有的),那麼就不能在子類對其進行過載,若要定義,也只是定義了一個新的方法,而不會達到過載的效果。 8. Java中支援建構函式的過載(建構函式可以省略不寫,會自動生成的,為了符合類的定義),格式同上。

  4. 建構函式怎麼呼叫建構函式,前面在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,聊天不可能是客戶和伺服器聊,伺服器只是處理髮送過來的資料,然後轉發給指定的客戶,所以怎麼寫多個客戶端(類似群聊),你有沒有發現如果我傳送的是一串中文,而文字是佔兩個位元組,而接收是一個位元組接收,會出現什麼問題?這將在下一章講,考慮到時間和篇幅〜(由於時間關係很多細節和點沒講到位歡迎指錯。。。。)
  • 順便祝我科二一把過哈哈哈哈哈哈