我的Thinking in Java學習筆記(二)
來源:互聯網
上載者:User
打造第一個java程式
名稱的可視性
名稱問題有些人覺得不是什麼大問題,我開始也覺得那不是個什麼大問題,但是當你有一天寫了很多的類時,你就發現,名稱其實真的很重要,假如你有這麼一個類,他需要調用其他幾個類, 當這幾個被類名相同時,問題就出現了,那麼
怎麼區分他們,並且使他們的名稱不衝突呢?畢竟我們不可能把每個聲明過的類的名字一一記住,以便在下次聲聲明其他名稱時,加以區分。這個時候我們就需要使用包(package)了,一個包就是一個命名空間。命名空間的使用規則是:反轉internet網域名稱,例如,我的blog是blog.csdn.com/maoerzuozuo你可以在類的開頭使用package maoerzuozuo.com.csdn.blog,這樣就好了~每個包都是一個獨一無二的命名空間。需要注意一點:當使用package說明一個包時,該包的階層必須和檔案目錄的結構相同!就想c:/maoerzuozuo/com/csdn/blog
使用其他組件
包定義了之後一定要使用的,怎麼使用呢?在檔案的開頭使用import關鍵字,假如我要匯入我開發的一個叫hello.class組件,我只要import maoerzuozuo.com.csdn.blog.hello;就匯入了我所建立的包,當然你也可以偷懶,用import maoerzuozuo.com.csdn.blog.*;
匯入該檔案夾裡所有的包(也許你有的包根本用不上),但是這樣有個弊端,就是在編譯的速度要比直接指明包的編譯速度要慢。
關鍵字static(靜態)
一個class只有在你使用new來產生對象時,他的函數才能被外界使用,但是也有2中情況是用上面的方法無法實現的。
1、不管產生多少的對象或沒有對象產生對象時,一些特定的資料存放區只有一份;
2、類中的某個函數不想和對象綁定在一起,既我不想產生對象,但是我還想用類中的一個函數;
一般情況下, 你要使用一個非靜態(non-static)的成員的話,必須先產生一個對象使用對象來調用這個資料或函數,所以你必須知道這個函數/資料屬於哪個對象才行,因為static是不用產生對象就可以使用的,所以在static的函數中不能直接調用non-static的函數或變數。
解決1、把static關鍵字擺在成員變數或函數定義之前,就可以使他們變為靜態。
class StaticDemo
{
static int i=888;
public static void main(String args[])
{
StaticDemo sd1=new StaticDemo();
StaticDemo sd2=new StaticDemo();
System.out.println(sd1.i);//888
System.out.println(sd2.i);//888
StaticDemo.i++;
System.out.println(sd1.i);//889
System.out.println(sd2.i);//889
}
}
現在即使你產生n個StaticDemo對象,但是i只有原始的一份,不管你是sd1.i還是sd2.i,其實就是同一個i,全部引用自這個StaticDemo.i,所以,只要改變StaticDemo.i記憶體儲的資料,這些sd1和sd2的i都會改變,因為他們的i的控制代碼全部指向的是StaticDemo.i這一個記憶體空間,就相當於,有一個人在a公司工作,還在b公司兼職,而他假如死掉了,則同時影響2家公司,就是這個意思,同樣的道理也適用於static的函數
解決2、要想不產生對象就能使用函數,這樣需要在函數名前加上static
class StaticDemo
{
public static void show(String s)
{
System.out.println(s);
}
public static void main(String args[])
{
show("one");//調用方法1
StaticDemo.show("two");//調用方法2
new StaticDemo().show("three");//調用方法3
}
}
對於調用方法1,其實他隱藏了一個關鍵子,就是this,他的完整形式應當是this.show("one"),這個this的用法以後會學到
對於調用方法2,使用的是className.method()的形式,這個也就是static的函數調用的典型形式,non-static的函數是不能使用這樣的方法調用的!
對於調用方法3,這個方法就是我們調用函數的一般方法,建立對象,由對象調用函數,這個方法對於static和non-static是同樣適用的。某個成員變數在聲明為static的時候,其建立的方式有很大的變化,但是static的函數變化不大,static函數最大的一點用處就是可以在不建立對象的情況下,調用函數,就像我們經常見到的main函數一樣。
你的第一個java程式
java程式預設的回把java.lang下的包匯入到你所建立的檔案中,我們沒有必要再使用import來匯入。一個public的class的名稱一定要和檔案名稱是一樣的,並且一個class裡面只允許有一個public的class,附則程式是編譯不過去的。如果你要運行這個類的話,那麼這個類中一定要有一個main()函數,他的固定格式為public static void main(String args[]),其中,public表示這是一個公開給外界使用的函數,並且是個static的不允許有傳回值,而傳入main()的參數必須是個String對象數組,即使你從來沒有過,這個args[]的string數組可以儲存cmd的參數。
編譯與執行
使用javac 檔案名稱.java來編譯java檔案,使用java className來執行className這個類,這裡要注意2點,一個是當你使用java命令執行一個類時,這個類必須要有main函數;第二個className不一定等於檔案名稱,一個java檔案中假如有public類,那麼這個類名必須要和檔案名稱相同,其他情況你可以隨你自己的意思起名字
注釋及內嵌文檔
//注釋單行 /*.......*/注釋多行,多行注釋內不能嵌套多行注釋。
寓文檔於注釋
javadoc命令可以將內嵌在程式碼中的文檔提取出來,產生html格式的檔案,使用瀏覽器就可以查看。
文法
這個部分我就跳過去了,有興趣的朋友自己看看,很簡單的
編碼風格
類名在編寫的時候,應當第一個字母大寫,如果名稱是由多個單片語成,則把這些個單詞並在一起寫,並且把他們的第一個字母大寫 例如 public class MaoErZuoZuo
本章總結:
這一章總算ko了,呵呵~其實這章講的不難,大家就是要仔細看書,好好體會tij的精髓
本章習題解答
這章的習題總體不難,惟專屬一個題是運用了後面學習的知識,我們就把他作為難題來對付好了
"撰寫某個程式,使他能夠接受由命令列傳入的3個引數,為此,你需要對代表命令列引數的string數組進行索引"
public class Solve
{
public static void main(String args[])
{
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);
}
}
這個程式可以接受3個引數,並且把他顯示出來,有的人會問了:我們怎麼把引數傳遞進來呢。大家在運行時,要在java Solve後面加個空格,在加三個引數,每個使用空格隔開,例如 java Solve aaa bbb ccc這樣程式就會接受到這3個引數,並且把他顯示。當你輸入引數和接受引數的數量不符時候,會抱ArrayIndexOutOfBoundsException的錯誤,希望大家注意!
大家如果在學習的過程中,有什麼問題,可以這樣聯絡我
E-mail molmd@163.net /163.com QQ:31349283 我們可以共同學習進步!
歡迎訪問我的blog,http://blog.csdn.com/maoerzuozuo 裡面有更多學習內容!
未完待續...............