你定義了Monitor類,它實(shí)現(xiàn)了接口中唯一的一個(gè)抽象函數(shù),所以這個(gè)Monitor類就是一個(gè)普通的類了,不能稱之為抽象類。這樣的Monitor類是可以實(shí)例化的。
創(chuàng)新互聯(lián)建站于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元陽(yáng)信做網(wǎng)站,已為上家服務(wù),為陽(yáng)信各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
而抽象類是不能實(shí)例化的。比如假如一個(gè)接口中有多個(gè)抽象函數(shù),你只實(shí)現(xiàn)了其中一個(gè)抽象函數(shù),那么這樣一個(gè)類就是抽象類,依然不能實(shí)例化。只有實(shí)現(xiàn)了接口中所有抽象函數(shù),才可以被實(shí)例化。
這就是為什么有適配器的原因。例如在WindowListener中,有多個(gè)抽象函數(shù);如果直接實(shí)現(xiàn)它,那么你的類里就要實(shí)現(xiàn)全部的這些函數(shù);而WindowAdapter采用空實(shí)現(xiàn)的方法實(shí)現(xiàn)了WindowListener中全部抽象函數(shù),我們的類繼承于WindowAdapter,就相當(dāng)于實(shí)現(xiàn)了WindowListener中全部抽象函數(shù),再重寫(xiě)我們?cè)拘枰獙?shí)現(xiàn)的函數(shù)就可以了。
lst1.addMouseListener(new MouseAdapter(){代碼塊;})
MouseAdapter()是個(gè) 適配器 里面幫你實(shí)現(xiàn)了MouseListener()的所有方法
所以在這里你只要對(duì)你需要的事件重寫(xiě)就可以了,不用寫(xiě)你用不到的方法
lstq.addMouseListener(this); 其中的 this 是繼承MouseListener類的 一個(gè)類 里面 實(shí)現(xiàn)了 MouseListener 類里的 所有方法,即使是空實(shí)現(xiàn) 你也 必須 寫(xiě)出來(lái) 這 就是 2者 的 區(qū)別~~
懂了么~
比如我要監(jiān)聽(tīng)1234這個(gè)端口,代碼如下:
String ip = "127.0.0.1";
int port = 1234;
try {
Socket socket = new Socket(ip, port);
socket.setSoTimeout(5539900);
java.io.OutputStream out = socket.getOutputStream();
byte[] date = "hello world".getBytes();
out.write(data);
out.flush();
byte[] buffer = new byte[1024];
int len = -1;
java.io.FileOutputStream fout = new java.io.FileOutputStream(
"d:/response.txt");
java.io.ByteArrayOutputStream bout = new java.io.ByteArrayOutputStream();
java.io.InputStream in = socket.getInputStream();
while ((len = in.read(buffer, 0, buffer.length)) 0) {
bout.write(buffer, 0, len);
}
in.close();
bout.flush();
bout.close();
byte[] rdata = bout.toByteArray();
System.out.println(new String(rdata));
fout.write(rdata);
fout.flush();
fout.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
服務(wù)器端的
ServerSocket ss = new ServerSocket(1234);
Socket socket=null;
BufferedReader in;
PrintWriter out;
while (true) {
socket = ss.accept();
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(),true);
String line = in.readLine();
out.println("you input is :" + line);
out.close();
in.close();
socket.close();
}
實(shí)際上就是斷點(diǎn)續(xù)傳。思路是在開(kāi)始按鈕點(diǎn)擊的時(shí)候訪問(wèn)(/新建)文件,移動(dòng)文件指針到上次記錄的位置,下載的時(shí)候在HttpURLConnection類下有一個(gè)setRequestProperties("range","byte=xxx")。
點(diǎn)擊暫停的時(shí)候記錄已經(jīng)下載的字節(jié)數(shù),就是上面的xxx變量。
具體看java IO流,RandAccessFile類,HTTP協(xié)議
你直接寫(xiě)一個(gè)方法A,在你要監(jiān)聽(tīng)的那根類的方法B中調(diào)用方法A,這樣B每次執(zhí)行當(dāng)然就會(huì)調(diào)用A了。