C# VS JAVA 差异

1. 静态构造函数

C#中有静态构造函数, Java中没有静态构造函数。其实Java中有一个类似静态构造函数的东东,称作静态初始化,或者静态代码块,可以通过这样的代码实现相同的功能:

但是Java中静态代码块和C#静态构造函数还是不一样的。C#中静态构造函数在其他静态成员初始化后再执行,而java中静态代码块和其他静态成员谁在先谁就先执行。

 1 class Parent{
 2     public static StaticVariable staticVariable = new StaticVariable("Parent - Static Variable1");
 3     public StaticVariable inStaticVariable = new StaticVariable("Parent - Instant Variable1");
 4
 5     static
 6     {
 7         System.out.println("Parent - Static block/constructor");
 8         System.out.println(staticVariable == null);
 9         //System.out.println(staticVariable2 == null); not working because staticVariable2 is not defined
10         staticVariable2 = new StaticVariable("Parent - Static Variable2 -  Static block");
11     }
12
13     {
14         System.out.println("Parent - Initializer Block");
15     }
16
17     public static StaticVariable staticVariable2 = new StaticVariable("Parent - Static Variable2");
18     public StaticVariable inStaticVariable2 = new StaticVariable("Parent - Instant Variable2");
19
20     public Parent()
21     {
22         System.out.println("Parent - Instance Constructor");
23     }
24 }

View Java Code

 1     class StaticDemo
 2     {
 3         static int i = 1;
 4
 5         static StaticDemo()
 6         {
 7             Console.WriteLine(i);
 8             Console.WriteLine(j);
 9         }
10
11         public static void Execute()
12         {
13         }
14
15         static int j = 1;
16     }

View C# Code

2常量

Java中声明(实例/类)常量使用关键词(final/static final)。C#中声明(实例/类)常量使用关键词(readonly/const 或者 readonly static).

C#中必须使用类名去访问类层级的变量。Java中可以使用实例去访问类层级的变量,但是编译时会有警告。

Java Code and C# Code

 1 class ParentDef{
 2     public static final String STATICVALUE_STRING="Parent Static Variable";
 3     public String valueString="Parent Instant Variable";
 4 }
 5
 6 class ChildRef extends ParentDef{
 7     public static final String STATICVALUE_STRING="Child Static Variable";
 8     public String valueString="Child Instant Variable";
 9 }
10
11 public class BasicDemo {
12     public static void main(String[] args) {
13         //Child child = new Child();
14
15         ParentDef pdf = new ParentDef();
16         ParentDef pcdf = new ChildRef();
17         ChildRef cdf = new ChildRef();
18         System.out.println("V1");
19         System.out.println(pdf.STATICVALUE_STRING);
20         System.out.println(pdf.valueString);
21
22         System.out.println("V2");
23         System.out.println(pcdf.STATICVALUE_STRING);
24         System.out.println(pcdf.valueString);
25
26         System.out.println("V3");
27         System.out.println(cdf.STATICVALUE_STRING);
28         System.out.println(cdf.valueString);
29
30     }
31
32 }

 1     class InheritenceDemo
 2     {
 3         public static void Execute()
 4         {
 5             ParentDef pdf = new ParentDef();
 6             ParentDef pc = new ChildDef();
 7             ChildDef cdf = new ChildDef();
 8
 9
10             Console.WriteLine("V1");
11             Console.WriteLine(pdf.value);
12
13
14             Console.WriteLine("V2");
15             Console.WriteLine(pc.value);
16
17             Console.WriteLine("V3");
18             Console.WriteLine(cdf.value);
19             Console.WriteLine(cdf.READONLYSTRING);
20
21         }
22     }
23
24     class ParentDef
25     {
26         public const string Const_String = "Parent Const Varialbe";
27         public static string STATICVALUE_STRING = "Parent Static Variable";
28         public string value = "Parent Instant Variable";
29     }
30
31     class ChildDef:ParentDef
32     {
33         public readonly string READONLYSTRING="Child readonly variable";
34         public readonly static string READONLYSTATICSTRING = "Child readonly  static variable";
35         public static string STATICVALUE_STRING = "Child Static Variable";
36         public string value = "Child Instant Variable";
37
38         public ChildDef()
39         {
40             READONLYSTRING = "NEW Child readonly variable";
41             //READONLYSTATICSTRING = "NEW Child readonly  static variable"; ERROR as satatic readonly variable can not be reassianged in instant constructor
42         }
43     }

3参数传递

C#中有ref关键词用来按引用传递参数。Java则没有,无法真正按引用传递参数。Java总是采用按值调用。方法得到的是所有参数值的一个拷贝,特别的,方法不能修改传递给它的任何参数变量的内容。

(1):“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。
(2):在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。就是直接使用双引号定义字符串方式:String str = “Java”;

C# code

  class RefExample
  {
  static void Method(ref int i)
  {
  i = 44;
  }
  static void Main()
  {
  int val = 0;
  Method(ref val); // val is now 44
  }
  }
时间: 2024-10-11 01:50:50

C# VS JAVA 差异的相关文章

C++ 与Java差异总结

工作需要,要学习Qt,之前学过Java,我想C++和Java对比着来学习应该可以很快上手. C++的核心概念:编译单元,头文件,目标文件,库 Qt:信号和槽机制,foreach Qt中没有用到的c++概念:模板类,模板函数的定义    共用体类型,异常   这三个就放在以后再学 差异: 1. C++不会在运行时检验数组是否越界,没有垃圾回收机制 2.C++没有为所有的类提供一个可以从中继承出来的一般类object. 3.Qt则为所有的类型提供了一个简单的基类 4.Java中的"接口"的

从Java/Android到Swift iOS开发:语言与框架对比

本文是我在『移动前线』微信群2016年4月28日的分享总结整理. 我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还不够成熟没有正式发布.2016年初我们正式使用swift开发上线了销售助手App产品,积累了比较丰富的swift项目实战经验,开源框架都是用的swift版本,大量使用了面向协议和函数式编程.iOS App开发人员基本都是以前安卓版本的开发人员,同时维护安卓和iOS 2个版本,效率很高. 今天分享的主题是Jav

Android &Swift iOS开发:语言与框架对比

转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text 从Android到Swift iOS开发:语言与框架对比 我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还

Android与Swift iOS开发:语言与框架对比

Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有SwiftyGPIO库,可以通过GPIO控制一些硬件. Object C is old and ugly,oc是1983年苹果推出的,过于陈旧和臃肿. Swift语法类似Scala,Javascript ES6, Java,OC, C++, Python 这是tiobe发布的编程语言排行 Swift支持

Java(C#)基础差异-语法

1.long类型 Java long类型,若赋值大于int型的最大值,或小于int型的最小值,则需要在数字后加L或者l,表示该数值为长整数,如long num=2147483650L. 举例如下: public static void main(String[] args) { /* * 对于long类型,若赋值大于int型的最大值,或小于int型的最小值, 则需要在数字后加L或者l,表示该数值为长整数 */ // 1.定义普通long类型数据 long longnum1 = 123; // 2

C#与Java多态方面的语法差异

C#与Java多态方面的语法差异 2016-11-29 Java代码: public static void main(String[] args) { Mother mother=new Mother(); mother.showName(); Mother human=new Son(); human.showName(); Son sona=new Son(); sona.showName(); } public class Mother { public void showName(){

Java和CSharp的类继承的执行过程的差异

Java和CSharp的类继承的执行过程的差异: Java的执行过程:子类先初始化父类的成员→初始化父类的构造函数→返回子类执行初始化子类的成员→初始化子类构造函数. CSharp的执行过程:子类先初始化子类的成员→初始化父类的成员→初始化父类的构造函数→初始化子类的构造函数. 假设:A类继承自B类. Java的执行过程:A类先初始化B类的成员→初始化B类的构造函数→ 初始化A类的成员→初始化A类的构造函数. CSharp的执行过程:A类先初始化A类的成员→初始化B类的成员→初始化B类的构函数→

java File的getLastModified在不同操作系统下面存在差异

java对文件读取修改时间(getLastModified())在不同的操作系统下存在差异 //1.在windows下,返回值是毫秒级别,不存在问题 //2.在Linux下,返回的值是毫秒值,但是会舍掉毫秒数字,变成三个零,如1403690647983 在LInux下会是1403690647000 java File的getLastModified在不同操作系统下面存在差异

java File的getLastModified在不同操作系统以下存在差异

java对文件读取改动时间(getLastModified())在不同的操作系统下存在差异 //1.在windows下,返回值是毫秒级别,不存在问题 //2.在Linux下,返回的值是毫秒值,可是会舍掉毫秒数字,变成三个零,如1403690647983 在LInux下会是1403690647000