目錄
- C# 與 java的發展曆史
-
- JAVA
- C#
- C# 與 java的程式設計環境
-
- JAVA
-
- 程式設計環境
- 程式設計工具
- C#
-
- 程式設計環境
- 程式設計工具
- C# 與 java的語言特點
-
- Java語言特點
- C#語言特點
- C# 與 java的差別
C# 與 java的發展曆史
JAVA
==Java==是一門面向對象程式設計語言,不僅吸收了C++語言的各種優點,還摒棄了C++裡難以了解的多繼承、指針等概念,是以Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜态面向對象程式設計語言的代表,極好地實作了面向對象理論,允許程式員以優雅的思維方式進行複雜的程式設計
。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動态性等特點
。Java可以編寫桌面應用程式、Web應用程式、分布式系統和嵌入式系統應用程式等 。
1995 Java語言誕生。
1996 Sun公司釋出了Java的第一個開發工具包(JDK 1.0),這是Java發展曆程中的重要裡程碑,标志着Java成為一種獨立的開發工具。
1997 JDK1.1釋出。
1998 JDK1.1下載下傳量超過200萬次,JDK1.2(稱Java2)釋出,JFC/Swing技術釋出, JFC/Swing被下載下傳了50多萬次。
1999 Java被分成J2SE、J2EE 和J2ME,JSP/Servlet技術誕生。
==2000 ==釋出, JDK1.4釋出。
2001 Nokia公司宣布到2003年将出售1億部支援Java的手機,J2EE1.3釋出
2002 J2SE1.4釋出,自此Java的計算能力有了大幅度提升。J2EE SDK的下載下傳量達到200萬次。
=2003 5.5億台桌面機上運作Java程式,75%的開發人員将Java作為首要開發工具。
2004 J2SE1.5釋出,這是Java語言的發展史上的又一裡程碑事件。為了表示這個版本的重要性,J2SE1.5更名為J2SE5.0。
2005JavaOne大會召開,Sun公司公開Java SE6。此時,Java的各種版本被更名,取消其中的數字"2":J2EE更名為Java EE, J2SE更名為Java
SE,J2ME更名為Java ME
C#
C#是 微軟公司釋出的一種由C和C++衍生出來的面向對象的程式設計語言、運作于.NET Framework和[.NET Core](https://docs.microsoft.com/zh-cn/dotnet/core/introduction)(完全開源,跨平台)之上的進階程式設計語言。并定于在微軟職業開發者論壇(PDC)上登台亮相。C#是微軟公司研究員Anders Hejlsberg的最新成果。C#看起來與Java有着驚人的相似;它包括了諸如單一繼承、接口、與Java幾乎同樣的文法和編譯成中間代碼再運作的過程。但是C#與Java有着明顯的不同,它借鑒了Delphi的一個特點,與COM(元件對象模型)是直接內建的,而且它是微軟公司
.NET windows網絡架構的主角。
C#是由C和C++衍生出來的一種安全的、穩定的、簡單的、優雅的面向對象程式設計語言。它在繼承C和C++強大功能的同時去掉了一些它們的複雜特性**(例如沒有宏以及不允許多重繼承)**。C#綜合了VB簡單的可視化操作和C++的高運作效率,以其強大的操作能力、優雅的文法風格、創新的語言特性和便捷的面向元件程式設計的支援成為.NET開發的首選語言。
C#是面向對象的程式設計語言。它使得程式員可以快速地編寫各種基于MICROSOFT .NET平台的應用程式,MICROSOFT
.NET提供了一系列的工具和服務來最大程度地開發利用計算與通訊領域。
C#使得C++程式員可以高效的開發程式,且因可調用由 C/C++
編寫的本機原生函數,而絕不損失C/C++原有的強大的功能。因為這種繼承關系,C#與C/C++具有極大的相似性,熟悉類似語言的開發者可以很快的轉向C#。
C#語言是Microsoft近幾年新推出的一種純面向對象的語言。Microsoft公司自從1996年開始由著名架構師Anders
Hejlsberg 上司C#語言的開發工作,并在微軟 .NET 架構中扮演了重要的角色。直到Microsoft正式釋出了
Microsoft Visual Studio .NET 2003 ,現在發展到==.NET 2005==,我們可以看到Microsoft公司的野心,想吞并整個市場,打敗JAVA。
C# 與 java的程式設計環境
JAVA
程式設計環境
JDK(Java Development
Kit)稱為Java開發包或Java開發工具,是一個編寫Java的Applet小程式和應用程式的程式開發環境。JDK是整個Java的核心,包括了Java運作環境(Java
Runtime Environment),一些Java工具和Java的核心類庫(Java
API)。不論什麼Java應用伺服器實質都是内置了某個版本的JDK。主流的JDK是Sun公司釋出的JDK,除了Sun之外,還有很多公司群組織都開發了自己的JDK,例如,IBM公司開發的JDK,BEA公司的Jrocket,還有GNU組織開發的JDK
。
另外,可以把Java API類庫中的Java SE
API子集和Java虛拟機這兩部分統稱為JRE(JAVA
Runtime Environment),JRE是支援Java程式運作的标準環境 。
JRE是個運作環境,JDK是個開發環境。是以寫Java程式的時候需要JDK,而運作Java程式的時候就需要JRE。而JDK裡面已經包含了JRE,是以隻要安裝了JDK,就可以編輯Java程式,也可以正常運作Java程式。但由于JDK包含了許多與運作無關的内容,占用的空間較大,是以運作普通的Java程式無須安裝JDK,而隻需要安裝JRE即可
。
程式設計工具
Eclipse:一個開放源代碼的、基于Java的可擴充開發平台
。
NetBeans:開放源碼的Java內建開發環境,适用于各種客戶機和Web應用。
IntelliJ
IDEA:在代碼自動提示、代碼分析等方面的具有很好的功能。
MyEclipse:由Genuitec公司開發的一款商業化軟體,是應用比較廣泛的Java應用程式內建開發環境
。
EditPlus:如果正确配置Java的編譯器“Javac”以及解釋器“Java”後,可直接使用EditPlus編譯執行Java程式
C#
程式設計環境
.Net 架構(.Net
Framework)
.Net 架構是一個創新的平台,能幫您編寫出下面類型的應用程式:
Windows 應用程式 Web 應用程式 Web 服務 .Net
架構應用程式是多平台的應用程式。架構的設計方式使它适用于下列各種語言:C#、C++、Visual Basic、Jscript、COBOL
等等。所有這些語言可以通路架構,彼此之間也可以互互相動。
.Net 架構由一個巨大的代碼庫組成,用于 C# 等用戶端語言。
程式設計工具
Visual Studio
2019:Microsoft Visual
Studio是VS的全稱。VS是美國微軟公司的開發工具包系列産品。VS是一個基本完整的開發工具集,它包括了整個軟體生命周期中所需要的大部分工具,如UML工具、代碼管控工具、內建開發環境(IDE)等等。
C# 與 java的語言特點
Java語言特點
1.簡單性
Java看起來設計得很像C++,但是為了使語言小和容易熟悉,設計者們把C++語言中許多可用的特征去掉了,這些特征是一般程式員很少使用的。例如,Java不支援go
to語句,代之以提供break和continue語句以及異常處理。Java還剔除了C++的操作符過載(overload)和多繼承特征,并且不使用主檔案,免去了預處理程式。因為Java沒有結構,數組和串都是對象,是以不需要指針。Java能夠自動處理對象的引用和間接引用,實作自動的無用單元收集,使使用者不必為存儲管理問題煩惱,能更多的時間和精力花在研發上。
2.面向對象
Java是一個面向對象的語言。對程式員來說,這意味着要注意應中的資料和操縱資料的方法(method),而不是嚴格地用過程來思考。在一個面向對象的系統中,類(class)是資料和操作資料的方法的集合。資料和方法一起描述對象(object)的狀态和行為。每一對象是其狀态和行為的封裝。類是按一定體系和層次安排的,使得子類可以從超類繼承行為。在這個類層次體系中有一個根類,它是具有一般行為的類。Java程式是用類來組織的。
Java還包括一個類的擴充集合,分别組成各種程式包(Package),使用者可以在自己的程式中使用。例如,Java提供産生圖形使用者接口部件的類(java.awt包),這裡awt是抽象視窗工具集(abstract
windowing toolkit)的縮寫,處理輸入輸出的類(java.io包)和支援網絡功能的類(java.net包)。
3.分布性
Java設計成支援在網絡上應用,它是分布式語言。Java既支援各種層次的網絡連接配接,又以Socket類支援可靠的流(stream)網絡連接配接,是以使用者可以産生分布式的客戶機和伺服器。
網絡變成軟體應用的分布運載工具。Java程式隻要編寫一次,就可到處運作。
4.編譯和解釋性
Java編譯程式生成位元組碼(byte-code),而不是通常的機器碼。Java位元組碼提供對體系結構中性的目标檔案格式,代碼設計成可有效地傳送程式到多個平台。Java程式可以在任何實作了Java解釋程式和運作系統(run-time
system)的系統上運作。
在一個解釋性的環境中,程式開發的标準“連結”階段大大消失了。如果說Java還有一個連結階段,它隻是把新類裝進環境的過程,它是增量式的、輕量級的過程。是以,Java支援快速原型和容易試驗,它将導緻快速程式開發。這是一個與傳統的、耗時的“編譯、連結和測試”形成鮮明對比的精巧的開發過程。
5.穩健性
Java原來是用作編寫消費類家用電子産品軟體的語言,是以它是被設計成寫高可靠和穩健軟體的。Java消除了某些程式設計錯誤,使得用它寫可靠軟體相當容易。
Java原來是用作編寫消費類家用電子産品軟體的語言,是以它是被設計成寫高可靠和穩健軟體的。Java消除了某些程式設計錯誤,使得用它寫可靠軟體相當容易。
Java是一個強類型語言,它允許擴充編譯時檢查潛在類型不比對問題的功能。Java要求顯式的方法聲明,它不支援C風格的隐式聲明。這些嚴格的要求保證編譯程式能捕捉調用錯誤,這就導緻更可靠的程式。
可靠性方面最重要的增強之一是Java的存儲模型。Java不支援指針,它消除重寫存儲和訛誤資料的可能性。類似地,Java自動的“無用單元收集”預防存儲漏洩和其它有關動态存儲配置設定和解除配置設定的有害錯誤。Java解釋程式也執行許多運作時的檢查,諸如驗證所有數組和串通路是否在界限之内。
異常處理是Java中使得程式更穩健的另一個特征。異常是某種類似于錯誤的異常條件出現的信号。使用try/catch/finally語句,程式員可以找到出錯的處理代碼,這就簡化了出錯處理和恢複的任務。
6.安全性
Java的存儲配置設定模型是它防禦惡意代碼的主要方法之一。Java沒有指針,是以程式員不能得到隐蔽起來的内幕和僞造指針去指向存儲器。更重要的是,Java編譯程式不處理存儲安排決策,是以程式員不能通過檢視聲明去猜測類的實際存儲安排。編譯的Java代碼中的存儲引用在運作時由Java解釋程式決定實際存儲位址。
Java運作系統使用位元組碼驗證過程來保證裝載到網絡上的代碼不違背任何Java語言限制。這個安全機制部分包括類如何從網上裝載。例如,裝載的類是放在分開的名字空間而不是局部類,預防惡意的小應用程式用它自己的版本來代替标準Java類。
7.可移植性
Java使得語言聲明不依賴于實作的方面。例如,Java顯式說明每個基本資料類型的大小和它的運算行為(這些資料類型由Java文法描述)。
Java環境本身對新的硬體平台和作業系統是可移植的。Java編譯程式也用Java編寫,而Java運作系統用ANSIC語言編寫。
8.高性能
Java是一種先編譯後解釋的語言,是以它不如全編譯性語言快。但是有些情況下性能是很要緊的,為了支援這些情況,Java設計者制作了“及時”編譯程式,它能在運作時把Java位元組碼翻譯成特定CPU(中央處理器)的機器代碼,也就是實作全編譯了。
Java位元組碼格式設計時考慮到這些“及時”編譯程式的需要,是以生成機器代碼的過程相當簡單,它能産生相當好的代碼。
9.多線程性
Java是多線程語言,它提供支援多線程的執行(也稱為輕便過程),能處理不同任務,使具有線索的程式設計很容易。Java的lang包提供一個Thread類,它支援開始線索、運作線索、停止線索和檢查線索狀态的方法。
Java的線索支援也包括一組同步原語。這些原語是基于監督程式和條件變量風範,由C.A.R.Haore開發的廣泛使用的同步化方案。用關鍵詞synchronized,程式員可以說明某些方法在一個類中不能并發地運作。這些方法在監督程式控制之下,確定變量維持在一個一緻的狀态。
10.動态性
Java語言設計成适應于變化的環境,它是一個動态的語言。例如,Java中的類是根據需要載入的,甚至有些是通過網絡擷取的。
C#語言特點
C#是一種簡單、先進、面向對象和類型安全的程式設計語言,由CC++派生而來,深深植根于C和C++語言家族,是Microsfot
VisualStudio的一個組成部分,對于開發人員來說,全新的簡單上手的C#是一個非常好用的程式設計語言。C#有很多優秀的特點:
簡單:
- 在C#中沒有CC++中的指針,這樣程式不容易發生錯誤,也阻止了一些不安全的操作;同時C#繼承了.NET平台自動記憶體管理和垃圾回收的特點,減輕了開發人員的負擔,也使得開發者可以使用更少的代碼做更多的事,且不易出錯,提高工作效率。
- 類型安全:在C#中我們不能進行不安全的類型轉換,如将double轉變為boolean。值類型被初始化為零,而引用類型被編譯器自動初始化。數組類型下标從零開始而且進行越界檢查,類型溢出将被檢查。
- 支援現有的網絡程式設計新标準:C#程式員可以在Microsoft.NET平台上構件應用程式的擴充架構。C#包含了内置的特性,使任何元件可以輕松轉化為XML網絡服務,通過Internet被任何作業系統上運作的任何程式調用。從這點可以看出,C#編寫的元件的相容性非常的好。
現代:C#建立在目前的潮流上,對于建立互相相容的、可伸縮的、健壯的應用程式來說是非常強大和簡單的,C#擁有内建的支援來将任何元件轉換成一個Web
Service,運作在任何平台上的任何應用程式都可以通過網際網路來使用這個服務。
- 消除大量程式錯誤:C#的現代化設計可以消除很多常見的程式設計錯誤,程式員編寫和維護那些複雜商業問題的程式就更加友善了,進一步降低開發成本。
面對對象:
- C#支援資料封裝、繼承、多态和接口。
- 功能、表達與靈活性:C#語言允許類型定義的、擴充的中繼資料,這些中繼資料可以應用于任何對象。定制的中繼資料和程式代碼之間的緊密對應有助于加強程式的預期行為和實作之間的對應關系。
- 互相相容性:C#提供對COM和基于windows的應用程式的原始的支援,允許對原始指針有限制的使用。C#允許使用者将指針作為不安全的代碼段以支援向下相容。
- 擴充互動性:C# 适用于大多數企業應用程式,可以解決需要底層代碼的特殊情況。 原因: 1.内置對元件對象模型和基于windows的API的支援。 2.允許有限的使用純指針。 在C#中每個對象都自動地生成了一個COM對象,開發者不需要顯示的實作unknown和其它COM接口。這些功能都是内置的,還可以調用其它語言編寫的COM對象。C#包含了一個特殊的功能,使程式可以調用任何純API。在特别标記的代碼中,開發者可以使用指針和傳統的C++特性,這意味着C#程式員可以再原有的C/C++代碼的基礎上編寫程式,而不是徹底放棄那些代碼。
C# 與 java的差別
1.
屬性: java中定義和通路均要用get和set方法,可以不成對出現。
c#中是真正的屬性,定義時get和set必須同時出現,房問時用.号即可。不用get,set
2.
對象索引 就是對象數組 csharp public Story this [int index] {
3.
C#中,不用任何範圍修飾符時,預設的是protect,因而不能在類外被通路.
4.
因為JAVA規定,在一個檔案中隻能有一個public類,而且這個類的名稱必須與檔案名一模一樣,這是一個差別
5.
在C#中,它是以Main方法來定位入口的.如果一個程式中沒有一個名為Main的方法,就會出"找不到入口的錯誤".不要把Main寫成main喲
6.
C#預定義的簡單資料類型比Java多。例如,C#有unit,即無符号整數
7.
忘掉Java中的static
final修飾符。在C#中,常量可以用const關鍵詞聲明C#的設計者還增加了readonly關鍵詞,readonly域隻能通過初始化器或類的構造函數設定
8.
公用類的入口點:c#是可以對Main進行重載(java中是main),允許有int傳回值和空參數的Main
9.
在Java中,switch語句隻能處理整數。但C#中的switch語句不同,它還能夠處理字元變量。請考慮下面用switch語句處理字元串變量的C#代碼
10.
C#沒有>>>移位操作符
11.
goto關鍵詞:
Java不用goto關鍵詞。在C#中,goto允許你轉到指定的标簽。不過,C#以特别謹慎的态度對待goto,比如它不允許goto轉入到語句塊的内部。在Java中,你可以用帶标簽的語句加上break或continue取代C#中的goto。
12.
int[] x = { 0, 1, 2, 3 };
int x[] = { 0, 1, 2, 3 };
但在C#中,隻有第一行代碼合法,[]不能放到變量名字之後。
13.
與Java不同的是,C#允許為名稱空間或者名稱空間中的類指定别名: csharp using TheConsole = System.Console;
14.
在Java中,包的名字同時也是實際存在的實體,它決定了放置.java檔案的目錄結構。在C#中,實體的包和邏輯的名稱之間是完全分離的.NET中包的實體稱為程式集(Assembly)。每一個程式集包含一個manifest結構。manifest列舉程式集所包含的檔案,控制哪些類型和資源被顯露到程式集之外,并把對這些類型和資源的引用映射到包含這些類型與資源的檔案。程式集是自包含的,一個程式集可以放置到單一的檔案之内,也可以分割成多個檔案。.NET的這種封裝機制解決了DLL檔案所面臨的問題,即臭名昭著的DLL Hell問題。
15.
在Java中,java.lang包是預設的包,C#中不存在預設的包
16.
C#中的通路修飾符與Java中的基本對應,但多出了一個internal。簡而言之,C#有5種類型的可通路性,如下所示:
public:成員可以從任何代碼通路。
protected:成員隻能從派生類通路。
internal:成員隻能從同一程式集的内部通路。
protected internal:成員隻能從同一程式集内的派生類通路。
private:成員隻能在目前類的内部通路。
17.由于C#中不存在final關鍵詞,如果想要某個類不再被派生,你可以使用sealed關鍵詞
18.
與Java不同,C#中的接口不能包含域(Field)。
注意,在C#中,接口内的所有方法預設都是公用方法。在Java中,方法聲明可以帶有public修飾符(即使這并非必要),但在C#中,顯式為接口的方法指定public修飾符是非法的。例如,下面的C#接口将産生一個編譯錯誤。
19.
C#中的is操作符與Java中的instanceof操作符一樣,兩者都可以用來測試某個對象的執行個體是否屬于特定的類型。在Java中沒有與C#中的as操作符等價的操作符。as操作符與is操作符非常相似,但它更富有“進取心”:如果類型正确的話,as操作符會嘗試把被測試的對象引用轉換成目标類型;否則,它把變量引用設定成null。
20.
C#仍舊保留了C++的記憶體手工管理方法,它适合在速度極端重要的場合使用,而在Java中這是不允許的
21.
在C#中,所有的異常都從一個名為Exception的類派生
22.
枚舉器即enum類型(java無),把它作為一個變量值的類型使用,進而把變量可能的取值範圍限制為枚舉器中出現的值。
23.
結構(Struct)與類很相似,而結構是一種值類型,它存儲在棧中或者是嵌入式的,結構可以實作接口,可以象類一樣擁有成員,但結構不支援繼承
24.
屬性聲明文法的第一部分與域聲明很相似,第二部分包括一個set過程和/或一個get過程
25.
傳值方式: 在java中簡單資料類型的值傳參時,都以傳值方式;
在c#中如果加ref則會以引用的方式傳值(方法内部改變該參數,則外部變量一起跟着變);
加out與ref基本相同,但out不要求參數一定要初始化.
26.
c#保留了指針。 unsafe
27
.代理:代理(delegate)可以看作C++或者其他語言中的函數指針
代理用來封裝可調用方法。你可以在類裡面編寫方法并在該方法上建立代理,此後這個代理就可以被傳遞到第二個方法。這樣,第二個方法就可以調用第一個方法。
代理是從公共基類System.Delegate派生的引用類型。定義和使用代理包括三個步驟:聲明,建立執行個體,調用。代理用delegate聲明文法聲明。
28.
c#中的命名空間是namespace類似于Java中的package(包),在Java中導入包用import而c#中用using。
29.
c#和Java都是從main函數入口的,但是c#中的main函數的首字母必須大寫
30.
資料類型:Java跟c#基本都差不多,但是Java的String類型的首字母必須大寫,而c#中可以小寫也可以大寫,還有布爾型,Java中是boolean,c#中是bool。
31.
變量的命名:Java中可以用$符号,而c#中不可以使用。
32.
輸出:c#有三種方式輸出:Cosole.WriteLine(); Cosole.WriteLine(要輸出的值); Cosole.WriteLine(“格式字元串”,變量清單); 前兩種的用法與Java中的ystem.out.println()方法的用法相同,第三種方式是根據占位符輸出的,比Java更友善了
33.
控制流語句:c#跟Java類似,還有c#中的switch如果case後面有内容必須要有break;Java可以沒有break;
34.
Java中的static final修飾符。在C#中,常量可以用const關鍵詞聲明
35.
由于C#中不存在final關鍵詞,如果想要某個類不再被派生,你可以使用sealed關鍵詞密封。
36.
C#中的is操作符與Java中的instanceof操作符一樣,兩者都可以用來測試某個對象的執行個體是否屬于特定的類型。在Java中沒有與C#中的as操作符等價的操作符。as操作符與is操作符非常相似,但它更富有"進取心":如果類型正确的話,as操作符會嘗試把被測試的對象引用轉換成目标類型;否則,它把變量引用設定成null。
這是部落客自己在網上搜尋的總結歸納,如有錯誤的地方,請留言,部落客看到,第一時間會改正。最後歡迎各位大佬,點個贊 (QAQ)