“C#” 与 “Java” (发展历史、编程环境及开发工具、语言特点)的详细介绍与区别。

目录

  • 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)

你可能感兴趣的:(C#,c#,java)