1. 程式人生 > >Java(C#)基礎差異-語法

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

 

from: https://www.cnblogs.com/SimplePerson/p/6395554.html