(JAVA基礎) 理解複用的程式設計思想!
問題:
*1.昨天,有個才學JAVA one month 的朋友跟我說:”我還是覺得直接把程式碼寫在 Main方法裡簡單點,為什麼還要用方法呢?”
*2.”還有那個執行緒,用Runnable實現多一點還是Thread多一點?”
引用塊內容
由於本人學習時是沒有任何人交流的,所以後來走了不少彎路,特以此記錄!(部落格1)
探討:
一: 首先我們來談談“方法”,它無非就是把你寫在main方法的一塊程式碼 !用一個單獨的容器裝了起來,那他有什麼好處呢?
1.首先是==> 可複用 ! 你想一下,當你在多個地方要呼叫那塊程式碼的功能時,難道你要在每個地方都去把你那段寫在main裡的臭長程式碼copy過去嘛?還是直接調一行方法的程式碼簡單。
2.!第二點:可維護性~~,想想,當你在10個地方copy使用過那段臭長程式碼,然後老闆要你去改下這段程式碼的功能,難道你要翻十個地方去一個個改? 這樣會噁心死你的,這樣子不是一個優雅的程式設計師!
~~其他的像 可讀性,程式碼規範,這些我就不講了~…..
說了上面這些,就是為了讓我們更理解下面這個話題,也就我們前言的第2點!
二: 實現執行緒用Runnable還是繼承Thread :
這裡分兩種:
1. (當我們以!Runnable為操作物件!的時候)
這個時候用Runnable 就有我們上面所說的兩個好處==>!複用,可維護性! !比如我可以將這個Runnable物件同時傳給10個執行緒,易維護。
引用塊內容
(介面你可以暫理解為方法,但是他跟”方法”不一樣的是方法不能當物件,即當做一個引數傳給別人,但是介面可以當物件使用!)
*Runnable頻道!例:
Thread thread1=new Thread(runnable); Thread thread2=new Thread(runnable); Thread thread3=new Thread(runnable); private static Runnable runnable=new Runnable() { @Override public void run() { } }; PS:注意這裡的可複用性不是你覺得很簡單的那種!"匿名"物件的寫法!,例: Thread thread=new Thread(new Runnable() { @Override public void run() { } }); 所有一定要像第一種Runnable寫法 宣告一個Runnable runnable 物件時==> 才有我說的效果! 第二種直接在()裡傳new Runnable匿名寫法是一次性的。
*Thread頻道!
上面說了我們生成一個Runnable runnable物件的好處,那都是基於對Runnable方法做操作的時候!~~所以這個時候用第二實現執行緒的方式就不合適了,因為很噁心!你懂的! :
class MyThread1 extends Thread{
@Override
public void run() {
*執行同樣的功能*
}
}
class MyThread2 extends Thread{
@Override
public void run() {
*執行同樣的功能*
}
} PS:…我改個run裡的功能要同時改10個Thread裡的Run方法55
2.* 但是為什麼又存在第二種寫法呢?
因為操作物件的不同:
~~~上面我們是針對Runnable物件去做討論,但是我們要複用Thread的時候呢? 如果我們是針對Thread做改變的話,用runnable實現的方式就很不合適了
例:比如有多個類中都開始了某個執行緒:
class Test1{
MyThread1 mythread=new MyThread1;
//main方法中
myThread1.start
}
class Test2{
MyThread1 mythread=new MyThread1;
MyThread2 mythread=new MyThread2;(這裡同時用多個執行緒也是一樣的,都很方便)
//main方法中執行
myThread1.start;
myThread2.start;
}
所以我們要複用Thread的時候,再使用Runnable方式就很SB了!(運用前言的思維模型)
//這裡是在一個class類中
Thread thread3=new Thread(runnable);
(因為這個時候Thread就屬於一次性的,沒有複用性!)
private static Runnable runnable=new Runnable() {
@Override
public void run() {
}
};
==》還是那句話,因為*易維護性差!!
(所以要提前預判,你是一次性的程式碼還是需要多次複用!)
> 總結:所以 沒有哪種方式好不好,而是要根據你的業務場景去選擇適合你優雅 的方式!
三:
1.最後就是()裡面的引數是用來幹嘛的,無非就是這個方法內部需要用到某些物件,然後可以如(String str) 直接讓別人傳進來,進而去操作這個引數物件, 總結就是 便於資料互動!
總結:所以引數是資料互動的很重要的一部分,在類class與另外一個class類的
資料互動中,它也經常會用到靠 構造“方法” 裡面的引數傳遞資料!
2.介面是用來幹嘛的?介面無非就是,在一個類class1裡面實現了一個動作(即實現了一個介面),然後能讓另外一個類class2 通過 impleptent(連線介面物件) 順利的捕捉到class1的動作, 然後在動作執行時立即在介面方法裡面做出對應的操作!
PS:在實際使用中一般都是不同的類之間監聽介面比較多,在同一個class中也是可以使用介面監聽的!
作者:-風行雲K
----2018/07/27 11:46