C#和java的语法区别
通过这几天,看java视频,总结了一下java与C#的部分语法区别。
1.基本类型
Java是由byte,short,int,long,float,dboule组成,所有类型都是有符号的。
C#除了这些以外,还包括sbyte(有符号) uint,ulong等,还有decimal(java中没有)
java中的byte是从-128到127(有符号),而C#中的byte是0-255 (无符号)
注意:
赋值给float类型是,值后面一定得带"f"或者"F",否则编译不过去,因为系统默认是dboule类型。
2.String类型
基本上也是相同的
直接上图
java中比较字符串建议使用equals,C#中两个都可以。
如果Java像这样
String s1="abc";
String s2="abc";
那么返回的都是true了。因为java和C# 对于字符串来说都有驻留池的概念。
3. 操作符
java与C#唯一的不同就是 java多了一个>>>操作符(被移位二进制最高位无论是0或者是1,空缺位都用0补)
4.流程控制
流程控制包括选择结构(if else switch while,),循环结构 (for) 基本相同的.
不同点包括以下几个方面
4.1 java有一个特殊的控制语句,C# 是没有的。(当然C#通过一些技巧变成方法实现这种控制。具体大家可以自己试着做,这个在开发中应用不大。)
label1: { ……
label2: { ……
label3: { ……
break label2;
……
}
}
}
4.2 C# 有个goto关键字(参考),java中的goto是保留字,似乎没有用的。
5. 类
java与C#的使用方法上基本相同。
不同点包括以下几点
5.1 如果类中的方法和变量没有修饰符,java中同一个包中的类可以访问,C# 默认为private(我就不做例子)
5.2 静态方法,静态变量 java中可以通过类,也可以通过对象访问(基本上也都通过类来访问),但是C# 只能通过类访问
5.3 this关键字的使用,主要是构造函数不同,
C# 写法
class TestClass { public string Name { get; set; } public TestClass():this("") { } public TestClass(string name) { this.Name = name; } }
java写法
public class TestClass { private String name; public TestClass() { this(""); } public TestClass(String name) { this.name=name; } }
5.4 引用父类构造函数的不同。java是通过super关键字,C# 是通过 base关键字,使用方法上跟各自的this相同
注意:
java中this,super必须写在构造函数的第一条语句中。
5.5 继承的不同。java继承类通过extends,实现接口通过implements,接口继承接口通过extends C# 都是通过":"
5.6 java包括静态代码块和非静态代码块,
实例化对象的时候,先执行静态代码块(等同于C#的静态构造函数),只执行一次, 非静态代码块先于构造函数执行。实例化一次就执行一次。C#没有这种写法,java写法如下
//非静态代码块 { System.out.println("非静态代码块"); } //静态代码块 static { System.out.println("静态代码块"); }
5.6 java中的方法默认都是虚拟的,子类都可以重写,而C# 必须标记为virtual才可以。
6.接口的不同
java中接口可以定义变量,C# 不可以,C# 只能是属性,方法,索引器。
java可以这样定义
public interface Runner { int id = 1; public void start(); public void run(); public void stop(); }
7. 异常
java中的方法可以通过throws关键字来抛出异常,然后用try catch 截获。当然,也可以通过throw,C# 只能通过throw
java中这样的写法:
class A{ void method () throws FileNotFoundException{ } }
8.java中的final关键字,final修饰类和方法的时候, 等同于C#中的sealed。
final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次,等同于C#的readonly
C# 有一个const关键字,用const修饰的变量是编译时常量。显示的初始化,不能通过构造函数初始化
9.java的方法命名是Camel 标记法。C# 是Pascal 标记法。
10.java中的属性实现,必须写get和set方法。不如C#简便。
先写到这里吧,总结的还不够全面,欢迎大家补充说明。