1. 編寫應用程序,建立類的對象,分別設置圓的半徑、圓柱體的高,計算並分別顯示圓半徑、圓面積、圓周長,圓柱體的體積。
/** * 定義父類--圓類 */ public class Circle { /** * 私有屬性:成員變量--圓半徑 */ private double radius; /** * 構造方法 */ public Circle() { radius = 0.0; } public Circle(double radius) { this.radius = radius; } /** *成員方法--求圓周長 */ double getPerimeter(){ return 2*Math.PI*radius; } /** * 成員方法--求圓面積 */ double getArea(){ return Math.PI*radius*radius; } /** * 成員方法--顯示圓半徑、周長、面積 */ void show(){ System.out.println("圓半徑:"+radius); System.out.println("圓周長:"+getPerimeter()); System.out.println("圓面積:"+getArea()); } }
/** * 定義子類--圓柱類 */ public class Cylinder extends Circle { /** * 私有屬性:成員變量--圓柱體的高 */ private double hight; /** * 構造方法、調用父類方法 */ public Cylinder() { } public Cylinder(double r, double h) { super(r); this.hight = h; } /** * 成員方法--求圓柱體的體積 */ public double getVolume(){ return getArea()*hight; } /** * 成員方法--顯示圓柱體體積 */ void showVolume(){ System.out.println("圓柱體的體積 = "+getVolume()); } }
/** * 測試類 */ public class Test { public static void main(String[] args) { /** * 建立圓類對象、調用方法 */ Circle c = new Circle(); /** * 調用圓類方法 */ c.show(); /** * 建立圓柱體對象(實例)、調用方法 */ Cylinder cy = new Cylinder(); /** *調用父類方法 */ cy.show(); /** * 調用子類方法 */ cy.showVolume(); } }
2.設計4個線程,其中兩個線程每次對j增長1,另外兩個線程對j每次減小1。java
編寫實現,要求:使用內部類實現線程,對j增減的時候不考慮順序問題。編程
/** * 測試類 */ public class ThreadTest { /** * 聲明成員變量 */ private int j; /** * 程序主入口:main方法 */ public static void main(String[] args) { /** * 建立對象 */ ThreadTest tt = new ThreadTest(); /** * 建立線程內部類對象 */ Inc inc = tt.new Inc(); Dec dec = tt.new Dec(); for (int i = 0;i < 2;i++){ /** * 建立線程對象並啓動線程 */ Thread t = new Thread(inc); t.start(); t = new Thread(dec); t.start(); } } /** * 實現同步對j的值+1操做 */ private synchronized void inc(){ j++; System.out.println(Thread.currentThread().getName()+"-inc :"+j); } /** * 實現同步對j的值-1操做 */ private synchronized void dec(){ j--; System.out.println(Thread.currentThread().getName()+"-dec :"+j); } /** * 內部類 */ private class Inc implements Runnable { @Override public void run() { for (int i = 0;i < 100;i++){ /** * 調用加的方法 */ inc(); } } } private class Dec implements Runnable{ @Override public void run() { for (int i = 0; i < 100; i++) { /** * 調用減的方法 */ dec(); } } } }
3.Java的通訊編程,用Java Socket編程,要求從客戶端錄入幾個字符,發送到服務器端,由服務器端將接收到的字符進行輸出。服務器
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * 線程通訊--服務器端 */ public class Server { /** * 聲明ServerSocket對象 */ private ServerSocket ss; /** * 聲明Socket對象 */ private Socket socket; /** * 聲明輸入流對象BufferedReader */ private BufferedReader br; /** * 聲明輸出流對象 */ private PrintWriter pw; public Server(){ try { /** * 建立一個ServerSocket對象,指定等待端口 */ ss = new ServerSocket(8848); while (true){ /** * 使用ServerSocket接收用戶請求(服務器端處於監聽狀態) */ /** * 得到客戶端的socket對象 */ socket = ss.accept(); /** * 建立輸入流並讀取信息 */ br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = br.readLine(); System.out.println("客戶端請求:"+line); /** * 建立輸出流並輸出信息 */ pw = new PrintWriter(socket.getOutputStream(),true); pw.print("請求已接收!"); /** * 關閉流 */ pw.close(); br.close(); socket.close(); } } catch (IOException e) { pw.println("出現異常!"); } } /** * 程序主入口 */ public static void main(String[] args) { /** * 建立服務器端對象 */ new Server(); } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; /** * 線程通訊--客戶端 */ public class Client { /** * 聲明Socket對象 */ Socket socket; /** * 聲明輸入流對象 */ BufferedReader br; /** * 聲明輸出流對象 */ PrintWriter pw; /** * 構造方法 */ public Client(){ try { /** * 建立Socket對象用來發送請求 */ socket = new Socket("127.0.0.1",8848); /** * 建立字符緩衝區對象並輸出 */ BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); /** * 建立輸出流對象並輸出 */ pw = new PrintWriter(socket.getOutputStream(),true); pw.println(line.readLine()); /** * 建立輸入流對象 */ br = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println(br.readLine()); /** * 關閉流 */ pw.close(); br.close(); socket.close(); } catch (IOException e) { System.out.println("請求出錯!"); } } /** * 程序主入口 */ public static void main(String[] args) { /** * 建立客戶端對象 */ new Client(); } }
線程通訊在本身的電腦上測試過程:socket
一、先運行服務器端程序,運行結果以下圖ide
*紅色方框中的紅色方塊按鈕亮起表明程序已運行,正在等待(監聽)客戶端請求測試
二、再運行客戶端程序,並輸入請求,運行以下圖this
2.1 客戶端處於等待輸入指令狀態spa
2.2 客戶端完成指令輸入並獲得服務器端迴應,紅色方塊按鈕滅掉.net
2.3 服務器端,收到客戶端請求給出回饋信息,並未關閉監聽狀態,需手動中止(現實中服務器通常是時刻處於監聽狀態的,維護期間會關閉)線程