首頁  >  文章  >  Java  >  菜鳥初學Java的備忘錄(一)

菜鳥初學Java的備忘錄(一)

黄舟
黄舟原創
2016-12-20 13:44:251618瀏覽


雖然以前間或的也看了些書籍,但多是隔靴撓癢,上不了正席,絕不敢說自己懂java。接觸一門新的技術和初戀一樣,都是第一次,但不同的是後者一般開始無比甜蜜,結局卻很痛苦,而前者則往往開始很痛苦,越到後來卻越是有味,簡直是欲罷不能.現在我就正處於這個很痛苦的階段,連一個最簡單的Helloworld都運行不出來,總是提示Excepion in thread "main" java.lan.NoClassDefFoundError. 只好上網去查,去搜.記性又不好,所以搜出來趕緊保存下來,常備無患.

一般來說安裝完JDK之後,一定要按一下步驟配置,才可正確編譯運行
(假定jdk版本為1.4.0)
1.將jdk1.4.0-安裝在自己機器的某個盤子的根目錄下,如:可安裝在C:jdk下。
***(以下出現的c:jdk改為你自己安裝JDK的目錄)***
2.假如你的運行環境是win98,則在C盤根目錄下,autoexec.bat檔案中,加入下面兩個語句:
set Path=%PATH%;c:jdk in
set CLASSPATH=.;c:jdklibdt.jar;c:jdklib ools.jar
保存後,重新啟動機器,就完成了jdk1.4的安裝。
3.假如你的運行環境是win2000的話,則需在「控制面板」的「系統」下,「進階」選項的「環境變數」中,加入兩個使用者變數。
其中一個使用者變數的名稱為“path”,值為“.;d:j2sdk1.4.0_01 in”,
另一個使用者變數的名稱為"CLASSPATH",值為“.;d"j2sdk1.4.0_01libdt .jar;d:j2sdk1.4.0_01lib ools.jar”,單擊“確定”即可。即完成了jdk1.4.0的安裝。

至於這樣做的意義何在,我想應該是讓Java系統在編譯字節代碼(.java)的時候需要一個什麼東東的支持,假如你不告訴它這個東東放在哪個地方的話,它就犯傻了?!

看到屏幕上終於顯示出Hello world對我來說意義重大.這是我近一年來寫的第一個程序!再次踏上程序之路,簡直有恍如隔世的感覺,已經快找不准我的位置了.還好原來學的一些關於C++和麵向對象的皮毛沒忘光光,所以費點周折熟悉了JDK的環境之後,接下來的事情就好辦多了,心裡也踏實多了.

用String類直接定義字符串變量比起C中討厭的指標,感覺確實好的多,用慣了Object Pascal的我,假如再回去數* *,真要瘋掉不可.

數組的定義和C,C++似乎略有不同,記不清了,先記下來再說

int[] number=new int[5]
String[] message=new String[5]

變數這一部分想起來要交待的也就這麼多吧。 ,總是如譚浩強般在語法上面死摳的人簡直是白痴:大多數情況下,漂亮的程序根本不需要無謂的點綴,工工整整,思路清楚就可以了.
倒是對於Java程序的框架我倒想備忘一下,一個簡單的java程式似乎是應該是這樣的框架

class PRogramName
{
public static void main(String[] args)
{
file://程式的主體
}

static int othermethod()
{
file://其它方法
}
}

整個程式在一個大的類別中,這個類別的概念應該就跟pascal裡面的單元差不多的。要與單元名-在這裡是類名-一樣.Java對大小寫要求的非常嚴格,我語法錯了好幾次都是因為這個.
Java程序就是由一個或者多個或者很多方法在這樣一個大類別當中組成的.
在如上的程式碼中,定義方法的參數表示的意思分別為:

public表示此成員函數是公有的,可以被其他類別直接呼叫

static表示main成員函數在ProgramName類別的所有物件中是唯一的,Java將為其分配永久儲存空間

(1月17日)關於Static,我想再延伸一下。有時候我們創建一個類,希望這個類的所有實例都公用一個變量,也就是說,所有這個類的對像都只有實例變量的一個Copy.那麼這樣一個靜態實例變量的內存就不能在創建類的實例的時候分配了,因為大家用的都是這麼一個,不需要再重新分配.因此Java為其分配永久存儲空間。
例如:
class Block{
static int number=50
}
這樣定義之後,所有Block類別的實例,不管是Block1,還是Block2,它們都存取同一個number.這個number叫做類別的變數,而不是實例變數.實際上靜態變數又叫做類別變數。

(1月17日)繼續深入.用Static定義的靜態成員函數或靜態變量,可以透過其所屬類名來直接調用.為什麼可以這樣?因為既然這個類的所有對像都是使用的這一個變量,那麼理所當然我不需要去從其中的任何一個對象去引用它,而只是通過類名引用就可以了嘛.這樣不是可以方便的實現一些全局函數和全局變量嗎?把所有全局的函數或者全局的變量都定義在一個靜態類別中,呼叫的時候直接透過這一個類別名稱就可以方便的存取所有的全域變數和全域函數了.

(1月20日)定義所有程式都要存取的全域變數需要使用
public final static

另外碰到一個初學者常會碰到的問題
non-static variable mainframe cannot be referenced from a static context 
即在靜態變數中不能引用非靜態變數
為什麼?
因為我們知道靜態的方法可以在沒有創建實例時使用,而申明為非靜態的成員變量是一個對象屬性,它只有在對象存在時引用,因此假如在對象未創建實例時我們在靜態方法中調用了非靜態成員方法自然是非法的,所以編譯器會在這種時候給各錯誤.

簡單說來,靜態方法可以不用創建對象就調用,非靜態方法必須有了對象的實例才能調用.因此想在靜態方法中引用非靜態方法是不可能的,因為它究竟引用的是哪個對象的非靜態方法呢?編譯器不可能給出答案,因為沒有對像啊,所以要報錯.

最後我們看看Think in Java裡面的精闢闡述,這個問題我想就非常非常的清楚了

2.6.3 static要害字
通常,我們創建類時會指出那個類的對象的外觀與行為。除非用new創建那個類別的一個對象,否則實際上並未得到任何東西。只有執行了new後,才會正式產生資料儲存空間,並可使用對應的方法。
但在兩種非凡的情況下,上述方法並不堪用。一種情形是只想用一個儲存區域來保存一個特定的資料??無論要建立多少個對象,甚至根本不建立物件。另一種情況是我們需要一個非凡的方法,它沒有與這個類別的任何物件關聯。也就是說,即使沒有創建對象,也需要一個能呼叫的方法。為滿足這兩方面的要求,可使用static(靜態)要害字。一旦將某些東西設為static,資料或方法就不會同那個類別的任何物件實例聯繫在一起。所以儘管從未創建那個類別的一個對象,仍能呼叫一個static方法,或是存取一些static資料。而在這之前,對於非static資料和方法,我們必須建立一個對象,並用那個對象存取資料或方法。這是由於非static資料和方法必須知道它們操作的特定物件。當然,在正式使用前,由於static方法不需要建立任何對象,因此它們不可簡單地呼叫其他那些成員,同時不引用一個已命名的對象,從而直接存取非static成員或方法(因為非static成員和方法必須同一個特定的物件關聯到一起)。

Whoops!現在應該回到主幹上來了

void 表示方法傳回的值的型別為空。如果返回特定的類型的話,則該方法實際上就是函數,否則就是一個過程而已.

我不知道這些東西是不是老的掉了牙,大家要是想砸就砸吧.還有我問高手一個問題,為什麼jdk的編譯速度這麼慢啊? 

 以上就是菜鳥初學Java的備忘錄(一)的內容,更多相關內容請關注PHP中文網(www.php.cn)! 


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn