實習培訓——Java基礎(2)
實習培訓——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.variablename 和 classname.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)