java-基礎(chǔ)

1.java中的final關(guān)鍵字:http://www.importnew.com/7553.html

final關(guān)鍵字的含義?
final在Java中是一個(gè)保留的關(guān)鍵字,可以聲明成員變量、方法、類以及本地變量。一旦你將引用聲明作final,你將不能改變這個(gè)引用了,編譯器會(huì)檢查代碼,如果你試圖將變量再次初始化的話,編譯器會(huì)報(bào)編譯錯(cuò)誤。

  • final變量經(jīng)常和static關(guān)鍵字一起使用,作為常量。final變量是只讀的
    • final成員變量必須在聲明時(shí)初始化或者在構(gòu)造器中初始化,否則會(huì)報(bào)編譯錯(cuò)誤。
    • final本地變量(在方法中的或者代碼塊中的變量稱為本地變量)必須在聲明時(shí)賦值。
    • 不能夠?qū)inal變量再次賦值。
  • final方法不可以被子類覆寫(xiě)
  • final類不能被繼承,它們通常是完整的類。java中有許多類是final的,如String,Integer以及其他包裝類。
2.java中的static關(guān)鍵字:http://www.cnblogs.com/dolphin0520/p/3799052.html

static方法就是沒(méi)有this的方法。在static方法內(nèi)部不能調(diào)用非靜態(tài)方法,反過(guò)來(lái)是可以的。而且可以在沒(méi)有創(chuàng)建任何對(duì)象的前提下,僅僅通過(guò)類本身來(lái)調(diào)用static方法。這實(shí)際上正是static方法的主要用途

簡(jiǎn)而言之:方便在沒(méi)有創(chuàng)建對(duì)象的情況下來(lái)進(jìn)行調(diào)用(方法/變量)。
很顯然,被static關(guān)鍵字修飾的方法或者變量不需要依賴于對(duì)象來(lái)進(jìn)行訪問(wèn),只要類被加載了,就可以通過(guò)類名去進(jìn)行訪問(wèn)。

  • static方法
    static方法一般稱作靜態(tài)方法,由于靜態(tài)方法不依賴于任何對(duì)象就可以進(jìn)行訪問(wèn),因此對(duì)于靜態(tài)方法來(lái)說(shuō),是沒(méi)有this的,因?yàn)樗灰栏接谌魏螌?duì)象,既然都沒(méi)有對(duì)象,就談不上this了。并且由于這個(gè)特性,在靜態(tài)方法中不能訪問(wèn)類的非靜態(tài)成員變量和非靜態(tài)成員方法,因?yàn)榉庆o態(tài)成員方法/變量都是必須依賴具體的對(duì)象才能夠被調(diào)用。
    雖然在靜態(tài)方法中不能訪問(wèn)非靜態(tài)成員方法和非靜態(tài)成員變量,但是在非靜態(tài)成員方法中是可以訪問(wèn)靜態(tài)成員方法/變量的。
  • static變量
    static變量也稱作靜態(tài)變量,靜態(tài)變量和非靜態(tài)變量的區(qū)別是:靜態(tài)變量被所有的對(duì)象所共享,在內(nèi)存中只有一個(gè)副本,它當(dāng)且僅當(dāng)在類初次加載時(shí)會(huì)被初始化。而非靜態(tài)變量是對(duì)象所擁有的,在創(chuàng)建對(duì)象的時(shí)候被初始化,存在多個(gè)副本,各個(gè)對(duì)象擁有的副本互不影響。
    static成員變量的初始化順序按照定義的順序進(jìn)行初始化。
  • static代碼塊
    static塊可以置于類中的任何地方,類中可以有多個(gè)static塊。在類初次被加載的時(shí)候,會(huì)按照static塊的順序來(lái)執(zhí)行每個(gè)static塊,并且只會(huì)執(zhí)行一次。
    很多時(shí)候會(huì)將一些只需要進(jìn)行一次的初始化操作都放在static代碼塊中進(jìn)行。

在C/C++中static是可以作用于局部變量的,但是在Java中切記:static是不允許用來(lái)修飾局部變量。不要問(wèn)為什么,這是Java語(yǔ)法的規(guī)定。

3.toArray()中參數(shù)的作用

String[] result = set.toArray(new String[0]);

  • 使用無(wú)參數(shù)的toArray()有一個(gè)缺點(diǎn),就是轉(zhuǎn)換后的數(shù)組類型是Object[]。 雖然Object數(shù)組也不是不能用,但當(dāng)你真的想用一個(gè)具體類型的數(shù)組時(shí)轉(zhuǎn)化就非常麻煩。
    需要用到這個(gè)String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
    還是一開(kāi)始就弄成String[]比較好。所以需要使用帶參數(shù)的toArray.
  • String[] a = collection.toArray(new String[0]);
    如果指定的數(shù)組能容納該 collection,則返回包含此 collection 元素的數(shù)組。否則,將根據(jù)指定數(shù)組的運(yùn)行時(shí)類型和此 collection 的大小分配一個(gè)新數(shù)組。這里給的參數(shù)的數(shù)組長(zhǎng)度是0,因此就會(huì)返回包含此 collection 中所有元素的數(shù)組,并且返回?cái)?shù)組的類型與指定數(shù)組的運(yùn)行時(shí)類型相同。
4. java可變參數(shù)

Java1.5增加了新特性:可變參數(shù):適用于參數(shù)個(gè)數(shù)不確定,類型確定的情況,java把可變參數(shù)當(dāng)做數(shù)組處理。

注意:可變參數(shù)必須位于最后一項(xiàng)。當(dāng)可變參數(shù)個(gè)數(shù)多余一個(gè)時(shí),必將有一個(gè)不是最后一項(xiàng),所以也只支持有一個(gè)可變參數(shù)。

因?yàn)閰?shù)個(gè)數(shù)不定,所以當(dāng)其后邊還有相同類型參數(shù)時(shí),java無(wú)法區(qū)分傳入的參數(shù)屬于前一個(gè)可變參數(shù)還是后邊的參數(shù),所以只能讓可變參數(shù)位于最后一項(xiàng)。
可變參數(shù)的特點(diǎn):

  • 只能出現(xiàn)在參數(shù)列表的最后;
  • ...位于變量類型和變量名之間,前后有無(wú)空格都可以;
  • 調(diào)用可變參數(shù)的方法時(shí),編譯器為該可變參數(shù)隱含創(chuàng)建一個(gè)數(shù)組,在方法體中以數(shù)組的形式訪問(wèn)可變參數(shù)。
    示例代碼:
public class Varable {
   public static void main(String [] args){
       System.out.println(add(2,3));
       System.out.println(add(2,3,5));
   }
   public static int add(int x, int... args){
       int sum=x;
       for(int i=0;i<args.length;i++){
          sum+=args[i];
       }
      return sum;
   }
}
5.Arrays.asList()
public class NodeNetwork {
  private List<Node> nodes;
  public NodeNetwork(Node...  nodes) {
      this.setNodes(Arrays.asList(nodes));
  }
  public void setNodes(List<Node> nodes) {
        this.nodes = nodes;
    }
}
    Node[] nodes = new Node[3];
    nodes[0] = node1;
    nodes[1] = node2;
    nodes[2] = node3;
    nnw=new NodeNetwork(nodes);
    nnw.addNode(node2); 

此時(shí)會(huì)報(bào)錯(cuò):UnsupportedOperationException
原因:

Returns a fixed-size list backed by the specified array.

it is documented not to support any structural modification (i.e. removing or adding elements)
因?yàn)锳rrays.asList()返回的是一個(gè)固定大小的列表,故無(wú)法對(duì)其進(jìn)行add操作。

6.StringBuilder()

String對(duì)象是不可改變的。每次使用 System.String類中的方法之一時(shí),都要在內(nèi)存中創(chuàng)建一個(gè)新的字符串對(duì)象,這就需要為該新對(duì)象分配新的空間。在需要對(duì)字符串執(zhí)行重復(fù)修改的情況下,創(chuàng)建新的 String對(duì)象相關(guān)的系統(tǒng)開(kāi)銷可能會(huì)非常昂貴。如果要修改字符串而不創(chuàng)建新的對(duì)象,則可以使用System.Text.StringBuilder類。例如,當(dāng)在一個(gè)循環(huán)中將許多字符串連接在一起時(shí),使用 StringBuilder類可以提升性能。

7.transient 詳見(jiàn)http://www.importnew.com/21517.html
  • 一旦變量被transient修飾,變量將不再是對(duì)象持久化的一部分,該變量?jī)?nèi)容在序列化后無(wú)法獲得訪問(wèn)。

  • transient關(guān)鍵字只能修飾變量,而不能修飾方法和類。注意,本地變量是不能被transient關(guān)鍵字修飾的。變量如果是用戶自定義類變量,則該類需要實(shí)現(xiàn)Serializable接口。

  • 被transient關(guān)鍵字修飾的變量不再能被序列化,一個(gè)靜態(tài)變量不管是否被transient修飾,均不能被序列化。

8. Scanner用法

當(dāng)通過(guò)new Scanner(System.in)創(chuàng)建一個(gè)Scanner,控制臺(tái)會(huì)一直等待輸入,直到敲回車鍵結(jié)束,把所輸入的內(nèi)容傳給Scanner,作為掃描對(duì)象。如果要獲取輸入的內(nèi)容,則只需要調(diào)用Scanner的nextLine()方法即可。

public class TestScanner { 
        public static void main(String[] args) { 
                Scanner s = new Scanner(System.in); 
                System.out.println("請(qǐng)輸入字符串:"); 
                while (true) { 
                        String line = s.nextLine(); 
                        if (line.equals("exit")) break; 
                        System.out.println(">>>" + line); 
                } 
        } 
}
請(qǐng)輸入字符串: 
234 
>>>234 
wer 
>>>wer 
bye 
>>>bye 
exit 

Process finished with exit code 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一:java概述:1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)工...
    ZaneInTheSun閱讀 2,691評(píng)論 0 11
  • 1、一個(gè)".java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?答:可以有多個(gè)類,但只能有一個(gè)publ...
    岳小川閱讀 970評(píng)論 0 2
  • 這個(gè)系列面試題主要目的是幫助你拿輕松到offer,同時(shí)還能開(kāi)個(gè)好價(jià)錢(qián)。只要能夠搞明白這個(gè)系列的絕大多數(shù)題目,在面試...
    獨(dú)念白閱讀 354評(píng)論 0 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,778評(píng)論 18 399
  • Win7下如何打開(kāi)DOS控制臺(tái)? a:開(kāi)始--所有程序--附件--命令提示符 b:開(kāi)始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,614評(píng)論 4 12