zoukankan      html  css  js  c++  java
  • 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、此句会报错,因为int型的最大值为2147483647
        //long longnum2 = 2147483650;
        // 3、正确定义为
        long longnum3=2147483650L;
        System.out.println(longnum3);
    }

    运行结果如下,第二句会报错为:

    C#

    举例如下:

    public static void TestMethod()
    {
        long longnum3 = 2147483650;
        Console.WriteLine(longnum3);
    }

    C#下可以直接定义long类型变量并输出。

    2、foreach语句差异

    Java

    举例如下:

    public static void main(String[] args) {
        /*
         * foreach语句差异
         */
        int arr[] = { 1, 2, 3, 4, 5 };
        for (int x : arr) {
            System.out.println(x);
        }
    }

    C#

    举例如下:

    public static void TestMethod()
    {
        List<int> tempList = new List<int>() { 1, 2, 3, 4, 5 };
        foreach (var item in tempList)
        {
            Console.WriteLine(item);
        }
    }

    3、定义不定长参数

    Java

    格式为:参数数据类型...参数名称 例如:int...a

    举例如下:

    public static void main(String[] args) {
        // 定义不定长参数: 参数数据类型...参数名称 例如:int...a
        System.out.println("求和结果为" + add(1, 2, 3, 4, 5));
    }
    
    public static int add(int... a) {
        int s = 0;
        for (int i = 0; i < a.length; i++) {
            s += a[i];
        }
        return s;
    }

    C#

    举例如下:

    public static void TestMethod(params int[] paras)
    {
        int sumResult = 0;
        for (int i = 0; i < paras.Length; i++)
        {
            sumResult += paras[i];
        }
        Console.WriteLine(sumResult);
    }

    4、常量

    Java

    定义为final的数据无论是常量、对象引用还是数组,都不能被改变。

    一个被定义为final的对象引用只能指向唯一一个对象,不可以将它再指向其他对象,但是一个对象本身的值却是可以改变的。

    那么为了使一个常量真正做到不可修改,可以将常量声明为static final。

    在Java中定义全局常量,通常使用public static final 修饰,这样的常量只能在定义时被赋值。 

    举例如下:

    private static Random rand = new Random();// 实例化一个Random类对象
    // 随机产生0~10之间的随机数赋予定义为final的a1
    private final int a1 = rand.nextInt(10);
    // 随机产生0~10之间的随机数赋予定义为static final的a2
    private static final int a2 = rand.nextInt(10);
    
    public static void main(String[] args) {
        Demo4 testObj1 = new Demo4(); // 实例化一个对象
        // 调用定义为final的a1
        System.out.println("调用a1的值为:" + testObj1.a1);
        // 调用定义为static final的a2
        System.out.println("调用a2的值为:" + testObj1.a2);
        // 实例化另外一个对象
        Demo4 testObj2 = new Demo4();
        System.out.println("调用a1的值为:" + testObj2.a1);
        System.out.println("调用a2的值为:" + testObj2.a2);
    }

    运行结果如下:

    可以看出,定义为final的常量不是恒定不变的,将随机数赋予定义为final的常量,可以做到每次运行程序时改变a1的值。但是a2与a1不同,由于它被声明为static final形式,所以在内存中为a2开辟了一个恒定不变的区域,当再次实例化一个Demo4对象时,仍然指向a2这块内存区域,所以a2的值保持不变。a2是在装载时被初始化,而不是每次创建新对象时都被初始化;而a1会在重新实例化对象时被更改。

    C#

    举例如下:

    public const int CONST_TEST_ONE = 1;
    
    public static void TestMethod()
    {
        Console.WriteLine(CONST_TEST_ONE);
    }

    5、this关键字

    共性:

    (1)this关键字代表本类对象的引用,可以调用类的成员变量和成员方法;

    (2)this可以作为方法的返回值;

    Java

    举例如下:

    import static java.lang.System.out;
    
    public class thisDemo {
        private String studentName;
        public String getStduentName() {
            return this.studentName;
        }
        public thisDemo(String name) {
            this.studentName = name;
        }
        public thisDemo GetObject() {
            return this;
        }
    
        public static void main(String[] args) {
             thisDemo thisObj = new thisDemo("terry");
             thisDemo currentObj= thisObj.GetObject();
             out.println(currentObj.studentName);
        }
    }

    运行结果如下:

    C#

    举例如下:

    public class ThisDemo
    {
        public string StduentName { get; }
    
        public ThisDemo(string name)
        {
            StduentName = name;
        }
    
        public ThisDemo GetObject()
        {
            return this;
        }
    }
    static void Main(string[] args)
    {
        SyntaxDesc.ThisDemo thisObj = new SyntaxDesc.ThisDemo("terry");
        var currentObj= thisObj.GetObject();
        Console.WriteLine(currentObj.StduentName);
        Console.ReadKey();
    }

    运行结果如下:

    从两例可以看出,我实例化了一个对象,并传递了学生姓名(StudentName)值,随后通过调用GetObject获得this对象。根据打印的结果可以看出,this引用的就是本类当前的对象。

    差异:

    (1)Java中,this可以调用类中的构造方法。但使用这种方式需要注意的是只可以在构造方法的第一句使用this调用另外的构造方法

    Java

    举例如下:

    public class ThisDemoTwo {
    
        public ThisDemoTwo() {
            this("terry_test");
            System.out.println("无参构造方法");
        }
    
        // 定义有参构造方法
        public ThisDemoTwo(String name) {
            System.out.println("有参构造方法" + name);
        }
    
        public static void main(String[] args) {
            ThisDemoTwo obj=new ThisDemoTwo();
        }
    
    }

    运行结果如下:

    C#

    不可以 

    6、导入API类库

    (1)导入包(导入命名空间)

    Java

    语法如下:

    import关键字的语法如下:

    import com.terrydemo.*; //指定com.terrydemo包中的所有类在程序中都可以使用   

    import com.terrydemo.Math; //指定com.terrydemo包中的Math类在程序中可以使用

    在使用import关键字时,可以指定类的完整描述,如果为了使用包中更多的类,可以在使用import关键字指定时在包指定后加上*,这表示可以在程序中使用包中的所有类。

    注意:当使用import指定了一个包中的所有类时,并不会指定这个包的子包中的类,如果用到这个包中的子类,需要再次对子包作单独引用。

    C#

    语法如下:

    using System.Text;

    using System.Threading.Tasks;

    (2)导入静态成员

    Java

    语法如下:

    使用import导入静态成员的语法如下:

    import static 静态成员

    举例如下:

    package syntaxdesc;
    import static java.lang.Math.max; //导入静态成员方法
    import static java.lang.System.out;//导入静态成员变量
    
    public class ImportTest {
        public static void main(String[] args) {
            //在主方法中可以直接使用这些静态成员
            out.println("1和4的较大值为:"+max(1,4));
        }
    }

    C#

    语法如下:

    在C#6.0之前是无法实现的,在C#6.0中新增了相关语法,如下:

    using  static  静态类命名空间

    举例如下:

    using static System.Math;
    
    namespace JavaVSNet.SyntaxDesc
    {
        public class UsingTest
        {
            public int X { get; } = 2;
    
            public int Y { get; set; } = 1;
    
            public int GetMax
            {
                get { return Max(X, Y); }
            }
        }
    }

    Code

    JavaCode-->JavaVSNet/syntaxdesc

    C#Code-->JavaVSNet/SyntaxDesc

  • 相关阅读:
    Node.js安装及环境配置之Windows篇
    盘点.NET JIT在Release下由循环体优化所产生的不确定性Bug
    开源!一款功能强大的高性能二进制序列化器Bssom.Net
    开源 , KoobooJson一款高性能且轻量的JSON框架
    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
    .Net Web开发技术栈
    web安全:通俗易懂,以实例讲述破解网站的原理及如何进行防护!如何让网站变得更安全。
    .Net高级进阶,教你如何构建企业模型数据拦截层,动态控制字段验证
    .Net 如何模拟会话级别的信号量,对http接口调用频率进行限制(有demo)
    .Net高级进阶,在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码?
  • 原文地址:https://www.cnblogs.com/SimplePerson/p/6395554.html
Copyright © 2011-2022 走看看