Java 型別轉換、變數、常量、作用域
阿新 • • 發佈:2020-12-14
Java 型別轉換、變數常量作用域
java型別轉換
強型別語言在運算時需要用到型別轉換。運算中,不同型別資料先轉化成同一型別然後進行運算,
public class day4 { public static void main(String[] args) { int i =128; byte b = (byte)i;//強制轉換 double c =i; System.out.println(b);//byte此時記憶體溢位,輸出-128 double c = i;//容量級低->高不需要轉換型別,int->double不需要轉換型別 } }
強制型別轉換:(型別)變數名 實現轉換
容量級 高->低需要強制型別轉換,而低->高不需要轉換。
容量級
布林型不能轉換
不能把物件型別轉換為不相關的型別
在把高容量轉到低容量型別時,強制轉換,但可能存在記憶體溢位或精度問題。
System.out.println((int)23.7);//輸出23
System.out.println((int)-45.89f);//輸出-45
char d = 'a';
int e = d+1;//此時是char->int,低轉高,自動轉,不需要強制轉換
System.out.println( e);//輸出為Unicodea的97+1,98
System.out.println((char)e);//此時將int型別強制轉換為char型,(char)int變數即可,輸出為b
操作比較大的數時,注意溢位問題。
public class day4 {
public static void main(String[] args) {
//操作比較大的數的時候注意溢位問題
//jdk7的新特性;大數字之間可以用下劃線分割
int money = 10_0000_0000;
int years = 20;
int total = money* years;
System.out.println(total);//輸出-1474836480,計算時溢位
long total2 = money*years;//int型計算,得到int型結果,再將 //int型結果賦值給long,仍然溢位
System.out.println(total2);//輸出仍為-1474836480
/*因為在long total2 = money*years;語句中
money跟years本身為int型,運算後還是int型,將計算後的int型賦 給long型的total2時,低到高自動轉換型別,但本身的原始值仍未 int型的溢位後的值,因此計算結果不準確*/
}
}
long total3 = (long)money * years;//賦值前,將運算表示式中 的一項先進行轉換再運 算,這樣預設右側為整體先 轉換再賦值。
System.out.println(total3);//輸出為20000000000,正確
java變數、常量、作用域
變數代表一塊空間,其位置(指定的記憶體空間)是確定的,而空間內的內容是可以變化(不同賦值)的。
變數型別、變數名、作用域。
public class day4_part2 {
public static void main(String[] args) {
int a,b,c;
int q=1,w=2,e=3;//風格不可取,程式可讀性不好
String name = "china";
char x ='x';
double pi = 3.14;
}
}
//資料型別 變數名 = 值;可以用逗號隔開來生命多個同類型變數
變數作用域:
三種作用域:類變數、例項變數、區域性變數
public class Var
區域性變數
區域性變數是在方法中的
public class day4_part2_2 {
//在類中可以定義屬性
//例項變數作用域在類中,定義在方法外面,從屬於物件,使用在整個類中都可以
//例項變數可以通過類來使用
String name;
int age;
//在類中寫main方法
public static void main(String[] args) {
//區域性變數在方法中定義,有效在此方法內
//區域性變數使用時必須宣告且初始化值
//區域性變數定義完可以直接用
int i =10;//這個i僅在main方法內有用,即main的{}中有效
//變數型別(自定義的型別) 變數名字為demo = new day4_part2_2
day4_part2_2 demo = new day4_part2_2();//
System.out.println(demo.age);//呼叫了類day4_part2_2中的例項變數,且age未賦值時預設輸出0
}
//在類中定義其他方法
public void add(){
}
}
例項變數
//例項變數:數值型別、字元型別的例項變數未賦值,預設為0;布林值預設為false;除了基本型別其他型別預設值都是null(空)
public class day4_part2_2 {
//在類中可以定義屬性
//例項變數作用域在類中,定義在方法外面,從屬於物件,使用在整個類中都可以
//例項變數可以通過實際的類來呼叫
String name;
int age;
public static void main(String[] args) {
int i =10;//這個i僅在main方法內有用,即main的{}中有效,是區域性變數
System.out.println(i);//輸出10
//變數型別(自定義的型別) 變數名字為demo = new day4_part2_2
day4_part2_2 demo = new day4_part2_2();
System.out.println(demo.age);//呼叫了類day4_part2_2中的例項變數,且age未賦值時預設輸出0
//通過實際的物件呼叫例項變數。
}
}
通過實際的物件才可以呼叫例項變數
類變數:
類變數是前面含static的,定義在類中(定義位置與例項變數一致),較例項變數前多了個static定義
public class day4_part2_2 {
//類變數
static double salary = 2500;//static+資料型別+變數名 = 賦值
//此時可以直接在類的方法中呼叫並輸出salary
//在類中寫main方法
//在方法中呼叫類變數
public static void main(String[] args) {
System.out.println(salary);//如果定義時沒static,為例項變數,不能直接呼叫例項變數
}
}
類變數可以直接進行呼叫,不需要結合實際物件
常量
使用關鍵詞 final,用final對類變數進行修飾,成為常量。
final 常量名 = 常量值;常量名通常使用大寫字元 如:PI等
final作為修飾符,不存在出現的夏侯順序。
public class day4_part2_3 {
static final double PI = 3.14;
final static double OI = 3.14;//final位置可放static前後,無影響
public static void main(String[] args) {
System.out.println(PI);
System.out.println(OI);
}
}
變數命名規範
- 所有變數、方法:見名知意
- 類變數:首字母小寫+駝峰原則:monthSalary、lastName(除了第一個單詞以外,後面單詞首字母大寫)
- 區域性變數:首字母小寫+駝峰原則
- 常量:大寫字母跟下劃線組成:MAX_NAME
- 類名:首字母大寫+駝峰原則:Man、GoodMan
- 方法名:首字母小寫+駝峰原則:runRun()