您当前的位置:首页 > 互联网教程

c#和java的区别是什么

发布时间:2025-05-21 22:29:52    发布人:远客网络

c#和java的区别是什么

一、c#和java的区别是什么

1、从语言语法与原理上来讲,如出一辙,都是继承自C的风格,初学者一看到代码段就知道结构,但是未必认识关键字。

2、因为从开发环境、框架上来讲,天壤之别,微软与SUN的开发环境不会融会贯通的,不敌对就不错了。C#所寄宿的Visaul Studio比起JAVA的MyEclpipse要好用得多,在国内,很多企业为了推销自己的产品过分鼓吹C#好或者Java好,其实都是主观的。

3、对产品用户来说,他们的好坏不在于使用C#开发还是JAVA开发,而是开发的是否合理。JAVA所谓的跨平台也是有条件的,要虚拟机。至于WEB项目,任何开发环境制作的WEB他都是跨平台的,这只和浏览器有关系,其实SUN和Microsoft都是做了一样的事情,JAVA用虚拟机,C#用Framework。

4、从开发难度来讲C#并不是比Java简单,而是比JAVA设计得好,你看下VS多么清晰好用,再去看下MyEclipse多凌乱,N多错误和翻墙下载链接。而且比较滑稽的是SUM鼓吹开源却到处都要Lisence,VS被说成高收费却网上大把下载终身免费。

5、从资源来讲,java有个宝库,实际上大部分公司还沉浸在java大潮里,像google、facebook比较牛的公司提供的技术支持偏向JAVA,使得java在网络编程中地位显著,C#反而像个毛头小子,框架很少,特别是手机框架。比如Android Studio,就要求JAVA功底,与微软背道而驰,微软wphone也做的可以,可是市场差劲,这个就是两者生存环境区别,C#比较生不逢时,处处得让着老大。

6、C#其实比JAVA好用,但程序员真心便宜,我打个比方:

7、我建立一个OA,导航和菜单按照JAVA的一贯做法是用Jquery+CSS控制滑动,整个布局下来,这种代码你废寝忘食去思考计算写出来至少要一天。高手见怪,反正我要,除非你到网上去下载个现成的一改动再使用,那就肯定快了,JAVA程序员伸手党其实不少。C#来编写就不一样了,比Java的AddControl功能更灵活,比如我要动态出现一排按钮

二、C#与Java有什么区别啊

Java和C#都是编程的语言,它们是两个不同方向的两种语言

他们都是面向对象的语言,也就是说,它们都能实现面向对象的思想(封装,继承,多态)

1.c#中的命名空间是namespace类似于Java中的package(包),在Java中导入包用import而c#中用using。

2.c#和Java都是从main函数入口的,但是c#中的main函数的首字母必须大写,它有四种写法如下:

static void Main(string args[]){}

static int Main(string args[]){}

而Java中只有一种形式:static void main(String [] args){}

3.数据类型:Java跟c#基本都差不多,但是Java的String类型的首字母必须大写,而c#中可以小写也可以大写,还有布尔型,Java中是boolean,c#中是bool。

4.变量的命名:Java中可以用$符号,而c#中不可以使用。

5.注释:Java比c#少一种"///"的文档注释。

6.输出:c#有三种方式输出:Cosole.WriteLine(); Cosole.WriteLine(要输出的值); Cosole.WriteLine("格式字符串",变量列表);前两种的用法与Java中的ystem.out.println()方法的用法相同,第三种方式是根据占位符输出的,比Java更方便了。

7.控制流语句:c#跟Java类似,还有c#中的switch如果case后面有内容必须要有break;Java可以没有break;

8.数组:两种语言的声明都是用new关键字的。都可以在创建数组的同时初始化如:int a[]={1,2,3,5,5};但是c#比Java多两种初始化如:int a[]=new int[3]{1,2,3}; int a[]=new int[]{1,2,3};

9.方法中传递的参数:两种语言都使用值传递与引用传递。

C#的引用传递的关键字是ref与out,ref侧重于修改,out侧重于输出。而Java中都以传值方式;

10.访问修饰符:C#中的访问修饰符与Java中的基本对应,但多出了一个internal。简而言之,C#有5种类型的可访问性,如下所示:

public:成员可以从任何代码访问。 protected:成员只能从派生类访问。

internal:成员只能从同一程序集的内部访问。

protected:成员只能从同一程序集内的派生类访问。

private:成员只能在当前类的内部访问。

11.由于C#中不存在final关键词,如果想要某个类不再被派生,你可以使用sealed关键词密封。

12.集合:两种语言都有集合ArrayList,还有通过键访问值的Java中是HashMap而c#中是HashTable。c#比Java多泛型集合List<T>与Dictionary<K,V>更容易了,无需拆箱装箱了,更安全了。

13.继承:Java中用关键字extends,c#只用":"就行了.调用父类的构造方法Java用super关键字,而c#用base关键字。

14.多态:抽象类和抽象方法两种语言都用abstract关键字。Java中另外一个类如果继承了它,实现直接重写此方法就可以了;而c#必须加上关键字override实现。C#还比Java多一种虚方法来实现多态。

15.接口:都用关键字interface定义,Java实现用关键字implements;c#用":"实现。在C#中,接口内的所有方法默认都是公用方法。在Java中,方法声明可以带有public修饰符(即使这并非必要),但在C#中,显式为接口的方法指定public修饰符是非法的。

16.C#中的is操作符与Java中的instanceof操作符一样,两者都可以用来测试某个对象的实例是否属于特定的类型。在Java中没有与C#中的as操作符等价的操作符。as操作符与is操作符非常相似,但它更富有"进取心":如果类型正确的话,as操作符会尝试把被测试的对象引用转换成目标类型;否则,它把变量引用设置成null。

17.枚举器即enum类型(java无),把它作为一个变量值的类型使用,从而把变量可能的取值范围限制为枚举器中出现的值。

18.结构(Struct)与类很相似,而结构是一种值类型,它存储在栈中或者是嵌入式的,结构可以实现接口,可以象类一样拥有成员,但结构不支持继承。

19.c#保留了指针。Unsafe。(C#使用指针不安全,最后这条有待考证)

三、c#调用java

1、c#调用java是什么,让我们一起了解一下?

2、首先我们要知道,c#是什么?C#是微软公司发布的一种面向对象的、运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计语言。

3、那么我们如何用c#调用java,来完成我们的工作?

4、 IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序。它包含了以下的组件:用.NET实现的java虚拟机,java类库的.NET实现,致力于在java和.NET之间交互的工具。

5、我们有一个JAVA写好的Demo,传的参数是用Gzip进行压缩传到服务器的,代码如下:

6、 package Demo; import java.io.BufferedReader; import java.io.ByteArrayInputstream; import java.io.ByteArrayoutputstream; import java.io.IOException: import javaio.Inputstream import java.io.InputstreamReader; import java.io.objectInputStream; import java.io.0bjectoutputstream; import java.util.zip.GZIPInputstream; import java.util.zipGZIPOutputStream; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod: import org.apache.commons.httpclient.params.HttpClientParams; import com.google.gson.Gsonj public class Demo{ public static string dopostClient(string json, string url){ HttpClient httpClient =new HttpClient(); String rval =""; PostMethod postMethod =new PostMethod(url); try{ Gson gson =new Gson(); Inputstream in =new ByteArrayInputstream(objectToByte(json)); postMethod.setRequestBody(in); HttpClientParams params =new HttpClientParams(); httpClient.setParams(params); httpClient.executeMethod(postMethod); byte[1 b=postMethod.getResponseBody(); String rtnData =(String)byteTo0bject(b); rval=gson.toJson(rtnData);} catch(Exception e){ rval="erro:"+e.getMessage();} finally postMethod.releaseConnection() return rval;} public static byte[] objectToByte(javalang.0bject obj){ byte[] bytes = null; Objectoutputstream oo = hull; try{ ByteArrayOutputStream out=newByteArrayOutputstream(); GZIPOutputStream gzip =newGZIPOutputStream(out); gzip.write(obj.toString()getBytes("utf-8")); gzip.close(); bytes=out.toByteArray();}catch(Exception e) e.printstackTrace();}finally{ if(oo != null){ try{ oo.close();}catch(IOExceptione){ e.printstackTrace();} return bytes; private static java.lang.Object byteToobject(byte[] bytes){ String obj =""; ObjectInputstream oi =null; try{ ByteArrayInputstream bi = new ByteArrayInputstream(bytes); GZIPInputstream gzipi=new GZIPInputstream(bi); BufferedReader bufferedReader = new BufferedReader(new InoutStreamReader(azipi."UTF-8")) String line; while((line =bufferedReader.readLine())!=null){ obj+=line;}} catch(Exception e){ e.printStackTrace();}finally{ if(oi != null){ try oi.close();}catch(I0Exception e) e.printstackTrace();}} return obj;}}

7、这个代码我用C#改写了,用HttpWebRequest的方式传到服务器,服务器那边Gzip解压不了,查了原因是因为Java与C#的Byte类型值范围不同,我们有两种解决思路,一种是将这个JAVA做成webservice挂在服务器上,c#再去调用。第二种就是将这个方法编译成可由C#直接调用的DLL,由于这个方法功能比较单一,我们选取了后者。