1. 程式人生 > >實習培訓——Java基礎(2)

實習培訓——Java基礎(2)

rgs 精度 img 包含 st2 static exce 培訓 for

實習培訓——Java基礎(2)

1 Java 變量類型

在Java語言中,所有的變量在使用前必須聲明。聲明變量的基本格式如下:

type identifier [ = value][, identifier [= value] ...] ;

格式說明:type為Java數據類型。identifier是變量名。可以使用逗號隔開來聲明多個同類型變量。

以下列出了一些變量的聲明實例。註意有些包含了初始化過程。

int a, b, c;         // 聲明三個int型整數:a、 b、c
int d = 3, e = 4, f = 5; // 聲明三個整數並賦予初值
byte z = 22;         //
聲明並初始化 z String s = "runoob"; // 聲明並初始化字符串 s double pi = 3.14159; // 聲明了雙精度浮點型變量 pi char x = ‘x‘; // 聲明變量 x 的值是字符 ‘x‘。

Java語言支持的變量類型有:

  • 類變量:獨立於方法之外的變量,用 static 修飾。
  • 實例變量:獨立於方法之外的變量,不過沒有 static 修飾。
  • 局部變量:類的方法中的變量。

例子

public class Variable{
    static int allClicks=0;    // 類變量
 
    String str="hello world";  //
實例變量 public void method(){ int i =0; // 局部變量 } }

1.1 Java 局部變量

  • 局部變量聲明在方法、構造方法或者語句塊中;
  • 局部變量在方法、構造方法、或者語句塊被執行的時候創建,當它們執行完成後,變量將會被銷毀;
  • 訪問修飾符不能用於局部變量;
  • 局部變量只在聲明它的方法、構造方法或者語句塊中可見;
  • 局部變量是在棧上分配的。
  • 局部變量沒有默認值,所以局部變量被聲明後,必須經過初始化,才可以使用。

實例

在以下實例中age是一個局部變量。定義在pupAge()方法中,它的作用域就限制在這個方法中。

package yqq.study;

public class Test {
public void pupAge() {
int age = 0;// 不初始化會報錯
age = age + 7;
System.out.println("小狗的年齡是:" + age);
}

public static void main(String[] args) {
Test test = new Test();
test.pupAge();
}

}

1.2 實例變量

  • 實例變量聲明在一個類中,但在方法、構造方法和語句塊之外;
  • 當一個對象被實例化之後,每個實例變量的值就跟著確定;
  • 實例變量在對象創建的時候創建,在對象被銷毀的時候銷毀;
  • 實例變量的值應該至少被一個方法、構造方法或者語句塊引用,使得外部能夠通過這些方式獲取實例變量信息;
  • 實例變量可以聲明在使用前或者使用後;
  • 訪問修飾符可以修飾實例變量;
  • 實例變量對於類中的方法、構造方法或者語句塊是可見的。一般情況下應該把實例變量設為私有。通過使用訪問修飾符可以使實例變量對子類可見;
  • 實例變量具有默認值。數值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null。變量的值可以在聲明時指定,也可以在構造方法中指定;
  • 實例變量可以直接通過變量名訪問。但在靜態方法以及其他類中,就應該使用完全限定名:ObejectReference.VariableName。

實例

import java.io.*;

public class Employee {
    // 這個實例變量對子類可見
    public String name;
    // 私有變量,僅在該類可見
    private double salary;

    // 在構造器中對name賦值
    public Employee(String empName) {
        name = empName;
    }

    // 設定salary的值
    public void setSalary(double empSal) {
        salary = empSal;
    }

    // 打印信息
    public void printEmp() {
        System.out.println("名字 : " + name);
        System.out.println("薪水 : " + salary);
    }

    public static void main(String args[]) {
        Employee empOne = new Employee("yqq");
        empOne.setSalary(1000.000);
        empOne.printEmp();
    }
}

1.3 類變量(靜態變量)

  • 類變量也稱為靜態變量,在類中以static關鍵字聲明,但必須在方法構造方法和語句塊之外。
  • 無論一個類創建了多少個對象,類只擁有類變量的一份拷貝。
  • 靜態變量除了被聲明為常量外很少使用。常量是指聲明為public/private,final和static類型的變量。常量初始化後不可改變。
  • 靜態變量儲存在靜態存儲區。經常被聲明為常量,很少單獨使用static聲明變量。
  • 靜態變量在程序開始時創建,在程序結束時銷毀。
  • 與實例變量具有相似的可見性。但為了對類的使用者可見,大多數靜態變量聲明為public類型。
  • 默認值和實例變量相似。數值型變量默認值是0,布爾型默認值是false,引用類型默認值是null。變量的值可以在聲明的時候指定,也可以在構造方法中指定。此外,靜態變量還可以在靜態語句塊中初始化。
  • 靜態變量可以通過:ClassName.VariableName的方式訪問。
  • 類變量被聲明為public static final類型時,類變量名稱一般建議使用大寫字母。如果靜態變量不是public和final類型,其命名方式與實例變量以及局部變量的命名方式一致。
import java.io.*;

public class Employee {
    // salary是靜態的私有變量
    private static double salary;
    // DEPARTMENT是一個常量
    public static final String DEPARTMENT = "開發人員";

    public static void main(String args[]) {
        salary = 10000;
        System.out.println(DEPARTMENT + "平均工資:" + salary);
    }
}

2 Java修飾符

Java中,可以使用訪問控制符來保護對類、變量、方法和構造方法的訪問。Java支持4種不同的訪問權限。

默認的,也稱為 default,在同一包內可見,不使用任何修飾符。

私有的,以 private 修飾符指定,在同一類內可見。

共有的,以 public 修飾符指定,對所有類可見。

受保護的,以 protected 修飾符指定,對同一包內的類和所有子類可見。

我們可以可以通過以下表來說明訪問權限:

訪問控制

修飾符當前類同一包內子孫類其他包
public Y Y Y Y
protected Y Y Y N
default Y Y N N
private Y N N N

static 修飾符

  • 靜態變量:

    static 關鍵字用來聲明獨立於對象的靜態變量,無論一個類實例化多少對象,它的靜態變量只有一份拷貝。 靜態變量也被稱為類變量。局部變量不能被聲明為 static 變量。

  • 靜態方法:

    static 關鍵字用來聲明獨立於對象的靜態方法。靜態方法不能使用類的非靜態變量。靜態方法從參數列表得到數據,然後計算這些數據。

對類變量和方法的訪問可以直接使用 classname.variablenameclassname.methodname 的方式訪問。

如下例所示,static修飾符用來創建類方法和類變量。

package yqq.study;

public class InstanceCounter {
    private static int numInstances = 0;

    protected static int getCount() {
        return numInstances;
    }

    private static void addInstance() {
        numInstances++;
    }

    InstanceCounter() {
        InstanceCounter.addInstance();
    }

    public static void main(String[] arguments) {
        System.out.println("Starting with " + InstanceCounter.getCount() + " instances");
//InntanceCounter.getCount()不用new,也可以直接使用
for (int i = 0; i < 500; ++i) { new InstanceCounter(); } System.out.println("Created " + InstanceCounter.getCount() + " instances"); } }

3 讀寫文件

下圖是一個描述輸入流和輸出流的類層次圖。

技術分享

實例

下面是一個演示 InputStream 和 OutputStream 用法的例子:

import java.io.*;
 
public class fileStreamTest{
  public static void main(String args[]){
    try{
      byte bWrite [] = {11,21,3,40,5};
      OutputStream os = new FileOutputStream("test.txt");
      for(int x=0; x < bWrite.length ; x++){
      os.write( bWrite[x] ); // writes the bytes
    }
    os.close();
 
    InputStream is = new FileInputStream("test.txt");
    int size = is.available();
 
    for(int i=0; i< size; i++){
      System.out.print((char)is.read() + "  ");
    }
      is.close();
    }catch(IOException e){
      System.out.print("Exception");
    }  
  }
}

上面的程序首先創建文件test.txt,並把給定的數字以二進制形式寫進該文件,同時輸出到控制臺上。

以上代碼由於是二進制寫入,可能存在亂碼,你可以使用以下代碼實例來解決亂碼問題:

//文件名 :fileStreamTest2.java
import java.io.*;

public class fileStreamTest2 {
    public static void main(String[] args) throws IOException {

        File f = new File("a.txt");
        FileOutputStream fop = new FileOutputStream(f);
        // 構建FileOutputStream對象,文件不存在會自動新建

        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
        // 構建OutputStreamWriter對象,參數可以指定編碼,默認為操作系統默認編碼,windows上是gbk

        writer.append("中文輸入");
        // 寫入到緩沖區

        writer.append("\r\n");
        // 換行

        writer.append("English");
        // 刷新緩存沖,寫入到文件,如果下面已經沒有寫入的內容了,直接close也會寫入

        writer.close();
        // 關閉寫入流,同時會把緩沖區內容寫入文件,所以上面的註釋掉

        fop.close();
        // 關閉輸出流,釋放系統資源

        FileInputStream fip = new FileInputStream(f);
        // 構建FileInputStream對象

        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
        // 構建InputStreamReader對象,編碼與寫入相同

        StringBuffer sb = new StringBuffer();
        while (reader.ready()) {
            sb.append((char) reader.read());
            // 轉成char加到StringBuffer對象中
        }
        System.out.println(sb.toString());
        reader.close();
        // 關閉讀取流

        fip.close();
        // 關閉輸入流,釋放系統資源

    }
}

4 Java 異常處理

http://www.runoob.com/java/java-exceptions.html

有點藍

參考 菜鳥教程

實習培訓——Java基礎(2)