本文目錄一覽:
- 1、Java中的「介面」與C中的「函數」有什麼區別?
- 2、java中什麼是介面?介面的作用是什麼?
- 3、java中的介面指的是什麼呀?
- 4、java 為什麼引入函數式介面而不是委託知乎
- 5、java 為什麼引入函數式介面而不是委託
Java中的「介面」與C中的「函數」有什麼區別?
這個我一般都避免在細節上比較這兩種語言,因為一種是動態的,一種是靜態的,導致了數據處理方式上的較大區別。但是鑒於有點想回答你這個問題於是就嘗試著來比較一下:
1.
java
方法對應
java
語言的作用
就相當於
c
函數
對應於
c
語言的作用,這個應該沒有疑問,就算是角色作用相似吧。
2.
java
的靜態方法可以說更接近
c
的函數,它們都有自己的一個名稱、返回值類型和參數列表、和函數體(方法體),並且都是「靜態」的。最後這點就不適合成員方法。這個可以算是形式上的相似點。
3.
java
支持方法重載,c
語言不支持,這是功能上的不同點。
4.
java
方法有四種訪問許可權,c
一視同仁,這是功能上的不同點。
5.
java
方法是屬於類/對象的,c
就說不上屬於哪個了,這算什麼不同?
java中什麼是介面?介面的作用是什麼?
java介面:
1、Java語言中存在的結構,有特定的語法和結構。
2、Java語言中一個類所具有的方法的特徵集合,是一種邏輯上的抽象。
java介面作用:
1、利於代碼的規範
這樣做的目的一方面是為了給開發人員一個清晰的指示,告訴他們哪些業務需要實現;同時也能防止由於開發人員隨意命名而導致的命名不清晰和代碼混亂,影響開發效率。
2、有利於對代碼進行維護
可以一開始定義一個介面,把功能菜單放在介面里,然後定義類時實現這個介面,以後要換的話只不過是引用另一個類而已,這樣就達到維護、拓展的方便性。
3、保證代碼的安全和嚴密
一個好的程序一定符合高內聚低耦合的特徵,能夠讓系統的功能較好地實現,而不涉及任何具體的實現細節。這樣就比較安全、嚴密一些,這一思想一般在軟體開發中較為常見。
擴展資料:
關於java介面的使用規範:
1、介面中可以定義常量,不能定義變數,介面中的屬性都是全局靜態常量,介面中的常量必須在定義時指定初始值。
2、 介面中所有的方法都是抽象方法,介面中方法都會自動用public abstract 修飾,即介面中只有全局抽象方法。
3、 介面不能實例化,介面中不能有構造。
4、 介面之間可以通過extends實現繼承關係,一個介面可以繼承多個介面,但介面不能繼承類。
5、 介面的實現類必須實現介面的全部方法,否則必須定義為抽象類。
參考資料來源:百度百科:java介面
java中的介面指的是什麼呀?
我複製的
在C++中,一個類被允許繼承多個類。但是在Java以後的語言不被允許。
這樣,如果想繼承多個類時便非常困難。所以開發方想出了新辦法:介面。
一個介面內,允許包含變數、常量等一個類所包含的基本內容。但是,介面中的函數不允許設定代碼,也就意味著不能把程序入口放到介面里。由上可以理解到,介面是專門被繼承的。介面存在的意義也是被繼承。和C++里的抽象類里的純虛函數是相同的。不能被實例化。
定義介面的關鍵字是interface,例如:
public interface MyInterface{
public void add(int x,int y);
public void volume(int x,int y,int z);
}
繼承介面的關鍵字是implements,相當於繼承類的extends。
需要注意的是,當繼承一個介面時,介面里的所有函數必須全部被覆蓋。例如:
class Demo implements MyInterface{
public void add(int x,int y){
System.out.println(” “+(x+y));
}
public void volume(int x,int y,int z){
System.out.println(” “+(x*y*z));
}
public static void main(String args[]){
Demo d=new Demo();
d.add(10,20);
d.volume(10,10,10);
}
}
輸出結果:
30
1000
當想繼承多個類時,開發程序不允許,報錯。這樣就要用到介面。因為介面允許多重繼承(,),而類不允許。所以就要用到介面。
Java裡面的介面
Java裡面由於不允許多重繼承,所以如果要實現多個類的功能,則可以通過實現多個介面來實現。
Java介面和Java抽象類代表的就是抽象類型,就是我們需要提出的抽象層的具體表現。OOP面向對象的編程,如果要提高程序的復用率,增加程序的可維護性,可擴展性,就必須是面向介面的編程,面向抽象的編程,正確地使用介面、抽象類這些太有用的抽象類型做為你結構層次上的頂層。
Java介面和Java抽象類有太多相似的地方,又有太多特別的地方,究竟在什麼地方,才是它們的最佳位置呢?把它們比較一下,你就可以發現了。
1、Java介面和Java抽象類最大的一個區別,就在於Java抽象類可以提供某些方法的部分實現,而Java介面不可以,這大概就是Java抽象類唯一的優點吧,但這個優點非常有用。如果向一個抽象類里加入一個新的具體方法時,那麼它所有的子類都一下子都得到了這個新方法,而Java介面做不到這一點,如果向一個Java介面里加入一個新方法,所有實現這個介面的類就無法成功通過編譯了,因為你必須讓每一個類都再實現這個方法才行,這顯然是Java介面的缺點。
2、一個抽象類的實現只能由這個抽象類的子類給出,也就是說,這個實現處在抽象類所定義出的繼承的等級結構中,而由於Java語言的單繼承性,所以抽象類作為類型定義工具的效能大打折扣。在這一點上,Java介面的優勢就出來了,任何一個實現了一個Java介面所規定的方法的類都可以具有這個介面的類型,而一個類可以實現任意多個Java介面,從而這個類就有了多種類型。
3、從第2點不難看出,Java介面是定義混合類型的理想工具,混合類表明一個類不僅僅具有某個主類型的行為,而且具有其他的次要行為。
java 為什麼引入函數式介面而不是委託知乎
一個函數式介面是一個能夠使用類函數做為參數的類型,一個lambda表達式支持提供這樣一個實參。舉個例子,forEach類方法在集合類上有如下簽名:必須為forEach提供並實現一個Block介面的一個單例類方法實例,才能被使用forEach類方法。
java 為什麼引入函數式介面而不是委託
一、Lambda表達式Lambda表達式可以說是Java 8最大的賣點,她將函數式編程引入了Java。Lambda允許把函數作為一個方法的參數,或者把代碼看成數據。一個Lambda表達式可以由用逗號分隔的參數列表、–符號與函數體三部分表示。例如:Arrays.asList( “p”, “k”, “u”,”f”, “o”, “r”,”k”).forEach( e – System.out.println( e ) ); 1 Arrays.asList( “p”, “k”, “u”,”f”, “o”, “r”,”k”).forEach( e – System.out.println( e ) ); 為了使現有函數更好的支持Lambda表達式,Java 8引入了函數式介面的概念。函數式介面就是只有一個方法的普通介面。java.lang.Runnable與java.util.concurrent.Callable是函數式介面最典型的例子。為此,Java 8增加了一種特殊的註解@FunctionalInterface:1 @FunctionalInterface2 public interface Functional {3 void method();4 }二、介面的默認方法與靜態方法我們可以在介面中定義默認方法,使用default關鍵字,並提供默認的實現。所有實現這個介面的類都會接受默認方法的實現,除非子類提供的自己的實現。例如:1 public interface DefaultFunctionInterface {2 default String defaultFunction() {3 return “default function”;4 }5 }我們還可以在介面中定義靜態方法,使用static關鍵字,也可以提供實現。例如:1 public interface StaticFunctionInterface {2 static String staticFunction() {3 return “static function”;4 }5 }介面的默認方法和靜態方法的引入,其實可以認為引入了C++中抽象類的理念,以後我們再也不用在每個實現類中都寫重複的代碼了。三、方法引用通常與Lambda表達式聯合使用,可以直接引用已有Java類或對象的方法。一般有四種不同的方法引用:構造器引用。語法是Class::new,或者更一般的Class T ::new,要求構造器方法是沒有參數;靜態方法引用。語法是Class::static_method,要求接受一個Class類型的參數;特定類的任意對象方法引用。它的語法是Class::method。要求方法是沒有參數的;特定對象的方法引用,它的語法是instance::method。要求方法接受一個參數,與3不同的地方在於,3是在列表元素上分別調用方法,而4是在某個對象上調用方法,將列表元素作為參數傳入;四、重複註解在Java 5中使用註解有一個限制,即相同的註解在同一位置只能聲明一次。Java 8引入重複註解,這樣相同的註解在同一地方也可以聲明多次。重複註解機制本身需要用@Repeatable註解。Java 8在編譯器層做了優化,相同註解會以集合的方式保存,因此底層的原理並沒有變化。五、擴展註解的支持Java 8擴展了註解的上下文,幾乎可以為任何東西添加註解,包括局部變數、泛型類、父類與介面的實現,連方法的異常也能添加註解。六、OptionalJava 8引入Optional類來防止空指針異常,Optional類最先是由Google的Guava項目引入的。Optional類實際上是個容器:它可以保存類型T的值,或者保存null。使用Optional類我們就不用顯式進行空指針檢查了。七、StreamStream API是把真正的函數式編程風格引入到Java中。其實簡單來說可以把Stream理解為MapReduce,當然Google的MapReduce的靈感也是來自函數式編程。她其實是一連串支持連續、並行聚集操作的元素。從語法上看,也很像linux的管道、或者鏈式編程,代碼寫起來簡潔明了,非常酷帥!八、Date/Time API (JSR 310)Java 8新的Date-Time API (JSR 310)受Joda-Time的影響,提供了新的java.time包,可以用來替代 java.util.Date和java.util.Calendar。一般會用到Clock、LocaleDate、LocalTime、LocaleDateTime、ZonedDateTime、Duration這些類,對於時間日期的改進還是非常不錯的。九、JavaScript引擎NashornNashorn允許在JVM上開發運行JavaScript應用,允許Java與JavaScript相互調用。十、Base64在Java 8中,Base64編碼成為了Java類庫的標準。Base64類同時還提供了對URL、MIME友好的編碼器與解碼器。除了這十大新特性之外,還有另外的一些新特性:更好的類型推測機制:Java 8在類型推測方面有了很大的提高,這就使代碼更整潔,不需要太多的強制類型轉換了。編譯器優化:Java 8將方法的參數名加入了位元組碼中,這樣在運行時通過反射就能獲取到參數名,只需要在編譯時使用-parameters參數。並行(parallel)數組:支持對數組進行並行處理,主要是parallelSort()方法,它可以在多核機器上極大提高數組排序的速度。並發(Concurrency):在新增Stream機制與Lambda的基礎之上,加入了一些新方法來支持聚集操作。Nashorn引擎jjs:基於Nashorn引擎的命令行工具。它接受一些JavaScript源代碼為參數,並且執行這些源代碼。類依賴分析器jdeps:可以顯示Java類的包級別或類級別的依賴。JVM的PermGen空間被移除:取代它的是Metaspace(JEP 122)。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/288753.html