變量就是申請內存來存儲值嘱支。也就是說勤婚,當創(chuàng)建變量的時候贮乳,需要在內存中申請空間屠升。
內存管理系統(tǒng)根據變量的類型為變量分配存儲空間,分配的空間只能用來儲存該類型數據誉尖。
Java的兩大數據類型:
- 內置數據類型
- 引用數據類型
內置數據類型
Java語言提供了八種基本類型罪既。六種數字類型(四個整數型,兩個浮點型)铡恕,一種字符類型琢感,還有一種布爾型。
byte
byte數據類型是8位探熔、有符號的以二進制補碼表示的整數驹针;
-128(-27)~127(27-1);
默認值是0诀艰;
例子:byte a = 100
short
short數據類型是16位柬甥、有符號的以二進制補碼表示的整數;
-32768(-215)~32767(215 - 1)涡驮;
一個short變量是int型變量所占空間的二分之一暗甥;
默認值是0;
例子:short s = 1000
int
int數據類型是32位捉捅、有符號的以二進制補碼表示的整數撤防;
-2,147,483,648(-231)~2,147,483,647(231 - 1);
一般地整型變量默認為int類型棒口;
默認值是0寄月;
long
long數據類型是64位、有符號的以二進制補碼表示的整數无牵;
-(263)~(263 -1)漾肮;
默認值是0L;
例子: long a = 100000L
float
float數據類型是單精度茎毁、32位的浮點數克懊;
默認值是0.0f;
浮點數不能用來表示精確的值七蜘;
例子:float f1 = 234.5f谭溉。
double
double數據類型是雙精度、64位浮點數橡卤;
浮點數的默認類型為double類型扮念;
double類型同樣不能表示精確的值;
默認值是0.0d碧库;
例子:double d1 = 123.4柜与。
boolean
boolean數據類型表示一位的信息巧勤;
只有兩個取值:true和false;
默認值是false弄匕;
例子:boolean one = true颅悉。
char
char類型是一個單一的16位Unicode字符;
’\u0000’(即為0)~’\uffff’(即為65,535)迁匠;
char數據類型可以儲存任何字符签舞;
例子:char letter = ‘A’。
例子
public class PrimitiveTypeTest {
public static void main(String[] args) {
// byte
System.out.println("基本類型:byte 二進制位數:" + Byte.SIZE);
System.out.println("包裝類:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
System.out.println();
// short
System.out.println("基本類型:short 二進制位數:" + Short.SIZE);
System.out.println("包裝類:java.lang.Short");
System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
System.out.println();
// int
System.out.println("基本類型:int 二進制位數:" + Integer.SIZE);
System.out.println("包裝類:java.lang.Integer");
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
System.out.println();
// long
System.out.println("基本類型:long 二進制位數:" + Long.SIZE);
System.out.println("包裝類:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
System.out.println();
// float
System.out.println("基本類型:float 二進制位數:" + Float.SIZE);
System.out.println("包裝類:java.lang.Float");
System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
System.out.println();
// double
System.out.println("基本類型:double 二進制位數:" + Double.SIZE);
System.out.println("包裝類:java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
System.out.println();
// char
System.out.println("基本類型:char 二進制位數:" + Character.SIZE);
System.out.println("包裝類:java.lang.Character");
// 以數值形式而不是字符形式將Character.MIN_VALUE輸出到控制臺
System.out.println("最小值:Character.MIN_VALUE="
+ (int) Character.MIN_VALUE);
// 以數值形式而不是字符形式將Character.MAX_VALUE輸出到控制臺
System.out.println("最大值:Character.MAX_VALUE="
+ (int) Character.MAX_VALUE);
}
}
運行
基本類型:byte 二進制位數:8
包裝類:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127
基本類型:short 二進制位數:16
包裝類:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767
基本類型:int 二進制位數:32
包裝類:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647
基本類型:long 二進制位數:64
包裝類:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807
基本類型:float 二進制位數:32
包裝類:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38
基本類型:double 二進制位數:64
包裝類:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308
基本類型:char 二進制位數:16
包裝類:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535
引用類型
- 在Java中柒瓣,引用類型的變量非常類似于C/C++的指針。引用類型指向一個對象吠架,指向對象的變量是引用變量芙贫。這些變量在聲明時被指定為一個特定的類型,變量一旦聲明后傍药,類型就不能被改變了磺平。
- 對象、數組都是引用數據類型拐辽。
- 所有引用類型的默認值都是null拣挪。
- 一個引用變量可以用來引用與任何與之兼容的類型。
Java常量
整形和浮點型常量
使用 final 關鍵字來修飾常量俱诸,聲明方式如下(常量通常使用大寫字母):
final double PI = 3.1415927;
byte菠劝、int、long睁搭、和short都可以用十進制赶诊、16進制以及8進制的方式來表示。
當使用常量的時候园骆,前綴0?表示8進制舔痪,而前綴0x代表16進制:
int decimal = 100;
int octal = 0144;
int hexa = 0x64;
Java字符串常量
Java字符串常量也是包含在兩個引號之間的字符序列。
"Hello World"
"two\nlines"
"\"This is in quotes\""
字符串常量和字符常量都可以包含任何Unicode字符锌唾。
char a = '\u0001';
String a = "\u0001";
Java轉義字符
符號 字符含義
\n 換行 (0x0a)
\r 回車 (0x0d)
\f 換頁符(0x0c)
\b 退格 (0x08)
\s 空格 (0x20)
\t 制表符
\" 雙引號
\' 單引號
\\ 反斜杠
\ddd 八進制字符 (ddd)
\uxxxx 16進制Unicode字符 (xxxx)
Java 變量類型
Java支持的變量類型有:
局部變量
成員變量
類變量
Java局部變量
局部變量聲明在方法锄码、構造方法或者語句塊中;
局部變量在方法晌涕、構造方法滋捶、或者語句塊被執(zhí)行的時候創(chuàng)建,當它們執(zhí)行完成后渐排,變量將會被銷毀炬太;
訪問修飾符不能用于局部變量;
局部變量只在聲明它的方法驯耻、構造方法或者語句塊中可見亲族;
局部變量是在棧上分配的炒考。
局部變量沒有默認值,所以局部變量被聲明后霎迫,必須經過初始化斋枢,才可以使用。
實例1
在以下實例中age是一個局部變量知给。定義在pubAge()方法中瓤帚,它的作用域就限制在這個方法中。
package com.runoob.test;
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();
}
}
運行結果:
小狗的年齡是: 7
實例2
在下面的例子中age變量沒有初始化涩赢,所以在編譯時會出錯:
public class Test{
public void pupAge(){
int age;
age = age + 7;
System.out.println("小狗的年齡是 : " + age);
}
public static void main(String args[]){
Test test = new Test();
test.pupAge();
}
}
運行結果:
Test.java:4:variable number might not have been initialized
age = age + 7;
^
1 error
實例變量
實例變量聲明在一個類中戈次,但在方法、構造方法和語句塊之外筒扒;
當一個對象被實例化之后怯邪,每個實例變量的值就跟著確定;
實例變量在對象創(chuàng)建的時候創(chuàng)建花墩,在對象被銷毀的時候銷毀悬秉;
實例變量的值應該至少被一個方法、構造方法或者語句塊引用冰蘑,使得外部能夠通過這些方式獲取實例變量信息和泌;
實例變量可以聲明在使用前或者使用后;
訪問修飾符可以修飾實例變量祠肥;
實例變量對于類中的方法武氓、構造方法或者語句塊是可見的。一般情況下應該把實例變量設為私有仇箱。通過使用訪問修飾符可以使實例變量對子類可見聋丝;
實例變量具有默認值。數值型變量的默認值是0工碾,布爾型變量的默認值是false弱睦,引用類型變量的默認值是null。變量的值可以在聲明時指定渊额,也可以在構造方法中指定况木;
實例變量可以直接通過變量名訪問。但在靜態(tài)方法以及其他類中旬迹,就應該使用完全限定名: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 : " + name );
System.out.println("salary :" + salary);
}
public static void main(String args[]){
Employee empOne = new Employee("Ransika");
empOne.setSalary(1000);
empOne.printEmp();
}
}
運行結果:
name : Ransika
salary :1000.0
類變量(靜態(tài)變量)
類變量也稱為靜態(tài)變量奔垦,在類中以static關鍵字聲明屹耐,但必須在方法構造方法和語句塊之外。
無論一個類創(chuàng)建了多少個對象椿猎,類只擁有類變量的一份拷貝惶岭。
靜態(tài)變量除了被聲明為常量外很少使用寿弱。常量是指聲明為public/private,final和static類型的變量按灶。常量初始化后不可改變症革。
靜態(tài)變量儲存在靜態(tài)存儲區(qū)。經常被聲明為常量鸯旁,很少單獨使用static聲明變量噪矛。
靜態(tài)變量在程序開始時創(chuàng)建,在程序結束時銷毀铺罢。
與實例變量具有相似的可見性艇挨。但為了對類的使用者可見,大多數靜態(tài)變量聲明為public類型韭赘。
默認值和實例變量相似雷袋。數值型變量默認值是0,布爾型默認值是false辞居,引用類型默認值是null。變量的值可以在聲明的時候指定蛋勺,也可以在構造方法中指定瓦灶。此外,靜態(tài)變量還可以在靜態(tài)語句塊中初始化抱完。
靜態(tài)變量可以通過:ClassName.VariableName的方式訪問贼陶。
類變量被聲明為public static final類型時,類變量名稱必須使用大寫字母巧娱。如果靜態(tài)變量不是public和final類型碉怔,其命名方式與實例變量以及局部變量的命名方式一致。
實例:
import java.io.*;
public class Employee {
//salary是靜態(tài)的私有變量
private static double salary;
// DEPARTMENT是一個常量
public static final String DEPARTMENT = "開發(fā)人員";
public static void main(String args[]){
salary = 10000;
System.out.println(DEPARTMENT+"平均工資:"+salary);
}
}
以上實例編譯運行結果如下:
開發(fā)人員平均工資:10000.0import java.io.*;
public class Employee {
//salary是靜態(tài)的私有變量
private static double salary;
// DEPARTMENT是一個常量
public static final String DEPARTMENT = "開發(fā)人員";
public static void main(String args[]){
salary = 10000;
System.out.println(DEPARTMENT+"平均工資:"+salary);
}
}
以上實例編譯運行結果如下:
開發(fā)人員平均工資:10000.0
注意:如果其他類想要訪問該變量禁添,可以這樣訪問:Employee.DEPARTMENT撮胧。