傳遞和引用

1,傳值和傳引用html

對於基本類型,傳遞的是自身的副本java

對於對象類型而言,傳遞的是指向本身的地址的副本數組

(經過引用副本找到地址並修改地址中的值)鑰匙和倉庫。安全

基本類型,傳值的副本;對象類型,傳引用的副本服務器

 

2,靜態變量和私有變量網絡

 

(2)靜態變量、靜態方法和靜態塊併發

 

       一般狀況下,類成員必須經過它的類的對象訪問,可是能夠建立這樣一個成員,它可以被它本身使用,而沒必要引用特定的實例。在成員的聲明前面加上關鍵字static就能建立這樣的成員。若是一個成員被聲明爲static,它就可以在它的類的任何對象建立以前被訪問,而沒必要引用任何對象(跟類是否有static修飾無關)。dom

 

       你能夠將方法和變量都聲明爲static。static 成員的最多見的 例子是main( ) 。聲明爲static的方法有如下幾條限制(main也是??):  ·ui

 

A,它們僅能調用其餘的static 方法this

 

B,它們只能訪問static數據

 

C,它們不能以任何方式引用this 或super(this涉及到對象,super 與繼承有關)

 

       示例:Static 塊僅在該類被加載時執行一次。下面的例子顯示的類有一個static方法,一些static變量,以及一個static 初始化塊。

 

[java]  view plain  copy
 
  1. public class TestNew {  
  2.     static int a = 3;  
  3.     static int b;  
  4.     static void meth(int x){  
  5.         System.out.println("x = "+x);  
  6.         System.out.println("a = "+a);  
  7.         System.out.println("b = "+b);  
  8.     }  
  9.     static {  
  10.         System.out.println("static block initialized");  
  11.         b = a*4;  
  12.     }  
  13.     public static void main(String[] args) {  
  14.         // TODO Auto-generated method stub  
  15.         meth(42);  
  16.     }  
  17. }  

 

       執行結果是:

 

static block initialized
x = 42
a = 3
b = 12

 

上述class TestNew的執行順序是:首先static 塊執行(打印一條消息),a被設置爲3,最後b被初始化爲a*4 成12。而後調用main(),main () 調用meth() ,把值42傳遞給x。3個println ( ) 語句引用兩個static變量a和b,以及局部變量x 。
(3)外部使用靜態變量或者靜態方法

 

       在定義它們的類的外面,static 方法和變量能獨立於任何對象而被使用,你只要在類的名字後面加點號運算符便可。能夠看到,這種格式與經過對象引用變量調用非static方法或者變量的格式相似。示例:

 

[java]  view plain  copy
 
  1. class StaticDemo{  
  2.     static int a = 42;  
  3.     static int b = 99;  
  4.     static void callme(){  
  5.         System.out.println("a = "+a);  
  6.     }  
  7. }  
  8. public class TestNew {  
  9.     public static void main(String[] args) {  
  10.         // TODO Auto-generated method stub  
  11.         StaticDemo.callme();  
  12.         System.out.println("b = "+StaticDemo.b);  
  13.     }  
  14. }  

 

     執行結果:

 

a = 42
b = 99

 

3,輸入流/輸出流

 

 

連接:http://blog.csdn.net/hguisu/article/details/7418161

在整個Java.io包中最重要的就是5個類和一個接口。5個類指的是File、OutputStream、InputStream、Writer、Reader;一個接口指的是Serializable.掌握了這些IO的核心操做那麼對於Java中的IO體系也就有了一個初步的認識了

 

 

 

      Java I/O主要包括以下幾個層次,包含三個部分:

 

 

 

   1.流式部分――IO的主體部分;

 

   2.非流式部分――主要包含一些輔助流式部分的類,如:File類、RandomAccessFile類和FileDescriptor等類;

 

   3.其餘類--文件讀取部分的與安全相關的類,如:SerializablePermission類,以及與本地操做系統相關的文件系統的類,如:FileSystem類和Win32FileSystem類和WinNTFileSystem類。

 

   主要的類以下:

 

     1. File(文件特徵與管理):用於文件或者目錄的描述信息,例如生成新目錄,修改文件名,刪除文件,判斷文件所在路徑等。

 

     2. InputStream(二進制格式操做):抽象類,基於字節的輸入操做,是全部輸入流的父類。定義了全部輸入流都具備的共同特徵。

 

     3. OutputStream(二進制格式操做):抽象類。基於字節的輸出操做。是全部輸出流的父類。定義了全部輸出流都具備的共同特徵。

 

     Java中字符是採用Unicode標準,一個字符是16位,即一個字符使用兩個字節來表示。爲此,JAVA中引入了處理字符的流。

 

     4. Reader(文件格式操做):抽象類,基於字符的輸入操做。

 

     5. Writer(文件格式操做):抽象類,基於字符的輸出操做。

 

     6. RandomAccessFile(隨機文件操做):它的功能豐富,能夠從文件的任意位置進行存取(輸入輸出)操做

 

 

 

     Java中IO流的體系結構如圖:

 

ps:

Java中BufferedReader和scanner的對比

 

Scanner 和BufferedReader一樣能實現將鍵盤輸入的數據送入程序,

import java.io.*;
import java.util.Scanner;
public class C {
public static void main(String []args) throws IOException
{

    String x1,x2;
    int sum=0;

    System.out.print("BufferedReader方法\ninput two number:");

    //BufferedReader對象只將回車看做輸入結束,獲得的字符串
    BufferedReader myReader=new BufferedReader(new InputStreamReader(System.in));

    x1=myReader.readLine();
    x2=myReader.readLine();
    int a=Integer.parseInt(x1);
    int b=Integer.parseInt(x2);
    sum=a+b;
    System.out.printf("Sum=%d",sum);

    System.out.println("\n\nScanner 方法");
    Scanner sc=new Scanner(System.in);
    int a1,b1;
    a1=sc.nextInt();  

    //Scanner對象把回車,空格,tab鍵都看做輸入結束,直接用sc.next()獲得的是字符串形式
    b1=sc.nextInt();
    System.out.print("sum="+(a1+b1));    
  }
}

BufferedReader是字符輸入流中讀取文本,緩衝各個字符,從而提供字符、數組和行的高效讀取!速度要比Scanner快!並且也能夠設置緩衝區的大小,或者可以使用默認的大小。大多數狀況下,默認值就足夠大了。


在建立Scanner類的對象時,須要用System.in做爲它的參數,也能夠將Scanner看做是System.in對象的支持者,System.in取得用戶輸入的內容後,交給Scanner來做一些處理.
Scanner類中提供了多個方法:
      next():取得一個字符串;
      nextInt():將取得的字符串轉換成int類型的整數;
      nextFloat():將取得的字符串轉換成float型;
      nextBoolean():將取得的字符串轉換成boolean型;

   Scanner類位於java.util包中,要加上import java.util.Scanner; 用Scanner得到用戶的輸入很是的方便,可是Scanner取得輸入的依據是空格符,包括空格鍵,Tab鍵和Enter鍵.當按下這其中的任一鍵時,Scanner就會返回下一個輸入.當你輸入的內容中間包括空格時,顯然,使用Scanner就不能完整的得到你輸入的字符串.這時候咱們能夠考慮使用BufferedReader類取得輸入.其實在Java SE 1.4及之前的版本中,尚沒有提供Scanner方法,咱們得到輸入時也是使用BufferReader的.


  BufferedReader類位於java.io包中,因此要使用這個類,就要引入java.io這個包

import java.io.BufferedReader. readLine()方法會返回用戶在按下Enter鍵以前的全部字符輸入,不包括最後按下的Enter返回字符.使用BufferedReader對象的readLine()方法必須處理java.io.IOException異常(Exception).使用BufferedReader來取得輸入,理解起來要複雜得多.可是使用這個方法是固定的,每次使用前先如法炮製就能夠了

 

4,序列化和反序列化

 連接:http://www.cnblogs.com/xdp-gacl/p/3777987.html

1、序列化和反序列化的概念

  把對象轉換爲字節序列的過程稱爲對象的序列化
  把字節序列恢復爲對象的過程稱爲對象的反序列化
  對象的序列化主要有兩種用途:
  1) 把對象的字節序列永久地保存到硬盤上,一般存放在一個文件中;
  2) 在網絡上傳送對象的字節序列。

  在不少應用中,須要對某些對象進行序列化,讓它們離開內存空間,入住物理硬盤,以便長期保存。好比最多見的是Web服務器中的Session對象,當有 10萬用戶併發訪問,就有可能出現10萬個Session對象,內存可能吃不消,因而Web容器就會把一些seesion先序列化到硬盤中,等要用了,再把保存在硬盤中的對象還原到內存中。

  當兩個進程在進行遠程通訊時,彼此能夠發送各類類型的數據。不管是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方須要把這個Java對象轉換爲字節序列,才能在網絡上傳送;接收方則須要把字節序列再恢復爲Java對象

2、JDK類庫中的序列化API

  java.io.ObjectOutputStream表明對象輸出流,它的writeObject(Object obj)方法可對參數指定的obj對象進行序列化,把獲得的字節序列寫到一個目標輸出流中。  java.io.ObjectInputStream表明對象輸入流,它的readObject()方法從一個源輸入流中讀取字節序列,再把它們反序列化爲一個對象,並將其返回。  只有實現了Serializable和Externalizable接口的類的對象才能被序列化。Externalizable接口繼承自 Serializable接口,實現Externalizable接口的類徹底由自身來控制序列化的行爲,而僅實現Serializable接口的類能夠 採用默認的序列化方式 。  對象序列化包括以下步驟:  1) 建立一個對象輸出流,它能夠包裝一個其餘類型的目標輸出流,如文件輸出流;  2) 經過對象輸出流的writeObject()方法寫對象。  對象反序列化的步驟以下:  1) 建立一個對象輸入流,它能夠包裝一個其餘類型的源輸入流,如文件輸入流;  2) 經過對象輸入流的readObject()方法讀取對象。

相關文章
相關標籤/搜索