自學Java之二

上回學了import。話說,相比之下C#的using要好用些。比如using可以這麼寫:

using WindowsForm = System.Windows.Forms.Form;
using MobileWebForm = System.Web.UI.MobileControls.Form;

這種寫法讓一個.cs文件裏的名稱更簡潔。但import顯然不能這麼靈活。

這次要來學習寫一個真正的Hello World程序了。同樣說一下C#的寫法:

using System;

namespace RobbieTests
{
    public class HelloWorld
    {
        public static void Main()
        {
            Console.WriteLine("Hello World!");
        }
    }
}

簡潔明瞭。直截了當。當然也可以加上string[] args和一個int類型的返回值。然後,跟着Java官方tutorial,來學習一下怎樣寫命令行上的Hello World程序。

http://docs.oracle.com/javase/tutorial/getStarted/cupojava/win32.html

教程裏詳細講了怎樣編譯及運行這個Hello World。(簡化的)源代碼如下:

class HelloWorldApp
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");
    }
}

要保存成HelloWorldApp.java。這一點和C#不一樣。C#的源文件名和其中包含的類名可以完全沒有關係。它只是會簡單地把所有源文件中的類編譯出來。而且,C#編譯出來的文件,一般是可以把多個源文件編譯到同一個dll或exe中去的。Java有所不同,每個源文件(因爲類名和源文件名必須相同的緣故,也就相當於每個類)會編譯出一個.class文件(我目前的理解是這樣的,將來再仔細研究)。

另外,C#在class前面要寫public,顯式地表示這個類是可以在assembly(也就是包含它的那個dll)的所有程序代碼之外訪問的。

Java的方法名通常用駱駝命名法(camelCase),不像C#的方法名一般用PascalCase(那是當然啦,C#之父Anders Hejlsberg也是Turbo Pascal之父嘛,不用PascalCase用什麼呢?)。但Java的類名通常用PascalCase,比如這裏的System。

編譯成.class文件以後,就可以運行java HelloWorldApp來編譯了。需要指出的是,不要寫成java HelloWorldApp.class,否則是跑不通的,會得到一個異常exception in thread 'main' java.lang.NoClassDefFoundError。

還有一點就是,main這個函數,C#和Java也很不一樣。前面說過,C#裏面的Main函數可以加參數和返回值,也可以不加。但Java則要求精確的函數原型匹配:必須加參數,且沒有返回值。否則,運行時就會報另一種異常:Exception in thread “main” java.lang.NoSuchMethodError: main。

其實在HelloWorldApp裏也可以用package關鍵字指明它所在的package。比如:

package com.fandecheng.test;

class HelloWorldApp
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");
    }
}

編譯出來之後,把那個.class文件扔到一個叫com\fandecheng\test的子目錄(我用的是Windows,所以這裏用反斜槓),然後執行java com.fandecheng.test.HelloWorldApp即可。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章