java与C#区别整理

1 篇文章 0 订阅

1、属性:Java中定义和访问属性均要用get和set方法,C#则以特殊形式:

public int TaskId
        {
            get { return _taskId; }
            set { _taskId = value; }
        }


2、java中没有virtual关键字,java中基类的所有方法都是virtual的。java中也无法使用override来修饰方法,java中子类所有方法都是override的。


3、java只有继承,没有扩展。


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


5、C#中的base == java中的super。


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


7、C#中有析构器(destructor,~structor),java中没有,但java有finalize函数,finalize函数极不推荐使用。


8、java中没有using关键字,C#中有,它允许为名称空间或者名称空间中的类指定别名:using TheConsole = System.Console,
using也可以用于释放资源,当using代码块执行结束后会调用disposal方法。


9、传值方式:
   在Java中简单数据类型的值传参时,都以传值方式。
   在c#中如果加ref则会以引用的方式传值(方法内部改变该参数,则外部变量一起跟着变),加out与ref基本相同,但out不要求参数一定要初始化.


10、C#的属性声明方式与java不同,java遵循POJO提供getXxx、setXxx,C#需要使用特殊写法:public String Name{ get;set;}


11、C#中有索引器,而java中没有。


12、C#中可以使用委托delegate,可以使用lambda表达式获得一个方法(C#可以此实现代理模式,观察者模式,自动事务处理等)。java中没有delegate,但是有反射和代理,可以实现delegate。


13、C#使用yield实现迭代器,java中没有yield关键字。


14、java中没有LinQ这样查询功能,为集合进行排序查找等操作。


15、C#中可以重载操作符,java中不可以。


16、C#中,不用任何范围修饰符时,默认的是protect,因而不能在类外被访问。java是package级别可以访问


17、因为Java规定,在一个文件中只能有一个public类,而且这个类的名称必须与文件名一模一样,这是一个区别


18、C#预定义的简单数据类型比Java多。例如,C#有unit,即无符号整数。


19、对于常量,C#没有Java中的static final修饰符。在C#中,常量可以用const关键词声明C#的设计者还增加了readonly关键词,readonly域只能通过初始化器或类的构造函数设置


20、在Java中,switch语句只能处理整数。但C#中的switch语句不同,它还能够处理字符变量。


21、goto关键词: 
Java不用goto关键词。在C#中,goto允许你转到指定的标签。不过,C#以特别谨慎的态度对待goto,比如它不允许goto转入到语句块的内部。在Java中,你可以用带标签的语句加上break或continue取代C#中的goto。


22、int[] x = { 0, 1, 2, 3 };
int x[] = { 0, 1, 2, 3 }; 
但在C#中,只有第一行代码合法,[]不能放到变量名字之后。


23、在Java中,命名空间即是包,包的名字同时也是实际存在的实体,它决定了放置.Java文件的目录结构。在C#中,物理的包和逻辑的名称之间是完全分离的。
.NET中包的实体称为程序集(Assembly)。每一个程序集包含一个manifest结构。manifest列举程序集所包含的文件,控制哪些类型和资源被显露到程序集之外,并把对这些类型和资源的引用映射到包含这些类型与资源的文件。程序集是自包含的,一个程序集可以放置到单一的文件之内,也可以分割成多个文件。.NET的这种封装机制解决了DLL文件所面临的问题,即臭名昭著的DLL Hell问题。


24、在Java中,Java.lang包是默认的包,C#中不存在默认的包。


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


public:成员可以从任何代码访问。 
protected:成员只能从派生类访问。 
internal:成员只能从同一程序集的内部访问。 
protected internal:成员只能从同一程序集内的派生类访问。 
private:成员只能在当前类的内部访问。


26、在Java中,接口方法声明可以带有public修饰符,但在C#中,显式为接口的方法指定public修饰符是非法的。


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


38、C#仍旧保留了C++的内存手工管理方法,它适合在速度极端重要的场合使用,而在Java中这是不允许的。


39、在C#中,所有的异常都从一个名为Exception的类派生,java分为两种:RuntimeException、Exception,这两个都继承于ThrowAble。


40、c#保留了指针。unsafe


41、C#线程同步使用 lock 关键字,java中使用synchronized 


42、C#启动线程
Thread t = new Thread(new ThreadStart(FunctionName));
或者Thread t = new Thread(FunctionName);   这就是最基本的创建线程方法。但是ThreadStart是无参数的委托类型,


java中启动线程 new Thread(new Runable()).start();


参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值