Java基礎-基礎語法-變數與常量
常量
常量有哪些
整數常量:包括了所有的整數
小數常量:包括了所有的小數
布林型常量:較為特殊它只有兩個值true和false,這個常量主要用於判斷真與假,應用的較為廣泛,比較常用。
字元常量:將一個字母、數字或者符號用單引號進行(’ ')標識。
字串常量:將一個或者多個字母、數字或者符號用單引號進行(" ")標識。
注意:
1)區分字元常量和字串常量
字元常量是單引號引起來的單個,字串常量是雙引號引起來的不限長度
由於java採用Unicode編碼,每個字元佔兩個位元組,因而可用天十六進位制編碼形式表示,當然也可以用一箇中文表示(單箇中文佔用兩個位元組)
2)"常量"這個名次還會用在另外其他語境中表示值不可變的變數
定義常量的方式有哪些
/**
* Method One 採用介面(Interface)的中變數預設為static final的特性
*/
interface ConstantInterface {
String SUNDAY = "SUNDAY";
String MONDAY = "MONDAY";
String TUESDAY = "TUESDAY";
String WEDNESDAY = "WEDNESDAY";
String THURSDAY = "THURSDAY";
String FRIDAY = "FRIDAY";
String SATURDAY = "SATURDAY";
}
/**
* Method Two 採用了Java 5.0中引入的Enum型別
*/
enum ConstantEnum {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
/**
* Method Three 採用了在final修飾的普通類中使用static final修飾變數的方法
*/
public final class ConstantClassField {
public static final String SUNDAY = "SUNDAY";
public static final String MONDAY = "MONDAY";
public static final String TUESDAY = "TUESDAY";
public static final String WEDNESDAY = "WEDNESDAY";
public static final String THURSDAY = "THURSDAY";
public static final String FRIDAY = "FRIDAY";
public static final String SATURDAY = "SATURDAY";
}
/**
* Method Four 類似方法三,但是通過函式來獲取常量
*/
class ConstantClassFunction {
private static final String SUNDAY = "SUNDAY";
private static final String MONDAY = "MONDAY";
private static final String TUESDAY = "TUESDAY";
private static final String WEDNESDAY = "WEDNESDAY";
private static final String THURSDAY = "THURSDAY";
private static final String FRIDAY = "FRIDAY";
private static final String SATURDAY = "SATURDAY";
public static String getSunday() {
return SUNDAY;
}
public static String getMonday() {
return MONDAY;
}
public static String getTuesday() {
return TUESDAY;
}
public static String getWednesday() {
return WEDNESDAY;
}
public static String getThursday() {
return THURSDAY;
}
public static String getFirday() {
return FRIDAY;
}
public static String getSaturday() {
return SATURDAY;
}
}
public class TestConstant {
static final String day = "saturday";
public static void main(String[] args) {
System.out.println("Is today Saturday?");
System.out.println(day.equalsIgnoreCase(ConstantInterface.SATURDAY));
System.out.println(day.equalsIgnoreCase(ConstantEnum.SATURDAY.name()));
System.out.println(day.equalsIgnoreCase(ConstantClassField.SATURDAY));
System.out.println(day.equalsIgnoreCase(ConstantClassFunction
.getSaturday()));
}
}
分析:首先定義全域性變數似乎有違Java的物件導向的封裝特性,增加的耦合。
所以最佳的方法是避免定義全域性變數。
如果是引數等,可以寫入配置檔案。
如果實在是必須的,方法二是最為推薦的。
方法三是大家都能想到的,非常的直觀。
方法一和方法三本質上一樣。
方法四提供了靈活性。
阿里文件和常量有關說明:
【推薦】介面類中的方法和屬性不要加任何修飾符號(public 也不要加),保持程式碼的簡潔性,並加上有效的javadoc註釋。儘量不要在介面裡定義變數,如果一定要定義變數,肯定是與介面方法相關,並且是整個應用的基礎常量。
正例:介面方法簽名:void f();
介面基礎常量表示:String COMPANY = “alibaba”;
反例:介面方法定義:public abstract void f();
說明:JDK8中介面允許有預設實現,那麼這個default方法,是對所有實現類都有價值的預設實現
【強制】不允許出現任何魔法值(即未經定義的常量)直接出現在程式碼中。
反例: String key=”Id#taobao_”+tradeId;
cache.put(key, value);
【推薦】不要使用一個常量類維護所有常量,應該按常量功能進行歸類,分開維護。如:快取相關的常量放在類:CacheConsts下;系統配置相關的常量放在類:ConfigConsts類下。
說明:大而全的常量類,非得ctrl+f才定位到修改的常量,不利於理解,也不利於維護。
【推薦】常量的複用層次有五層:跨應用共享常量、應用內共享常量、子工程內共享常量、包內共享常量、類內共享常量。
1) 跨應用共享常量:放置在二方庫中,通常是client.jar中的const目錄下。
2) 應用內共享常量:放置在一方庫的modules中的const目錄下。
反例:易懂變數也要統一定義成應用內共享常量,兩位攻城師在兩個類中分別定義了表示“是”的變數:
類A中:public static final String YES = “yes”;
類B中:public static final String YES = “y”;
A.YES.equals(B.YES),預期是true,但實際返回為false,導致產生線上問題。
3) 子工程內部共享常量:即在當前子工程的const目錄下。
4) 包內共享常量:即在當前包下單獨建const目錄下。
5) 類內共享常量:直接在類內部private static final定義。
【強制】避免通過一個類的物件引用訪問此類的靜態變數或靜態方法,無謂增加編譯器解析成本,直接用類名來訪問即可。
變數
概念:
java變數是程式中最基本的儲存單元,其要素包括變數名,變數型別和作用域。
語法:
java程式中每一個變數都屬於特定的資料型別,在使用前必需對其進行宣告,宣告格式為:
type varName [=value]
例如:
int i =100;
foloat f=12.3f;
double d1,d2,d3=0.123;//(宣告瞭三個變數,其中d1,d2是預設值,d3=0.123)
String s="hello"
**注意:**從本質上講,變數其實是記憶體中的一小塊區域,使用變數名來訪問這塊區域,因此,每一個變數使用前必需先宣告,然後必需進行賦值,才能使用。
java變數分類
分類:
按被宣告的位置劃分:
區域性變數:方法或語句塊內部定義的變數,只能在被定義的方法或語句塊內使用
成員變數:方法外部、類的內部定義的變數,可以在整個類中使用,包括類裡的方法或語句塊內也可以使用
注意:類外面是不能有變數的宣告的
成員變數與區域性變數的區別
1、在類中的位置不同
成員變數:在類中方法外面
區域性變數:在方法或者程式碼塊中,或者方法的宣告上(即在引數列表中)
2、在記憶體中的位置不同,可以看看Java程式記憶體的簡單分析
成員變數:在堆中(方法區中的靜態區)
區域性變數:在棧中
3、生命週期不同
成員變數:隨著物件的建立而存在,隨著物件的消失而消失
區域性變數:隨著方法的呼叫或者程式碼塊的執行而存在,隨著方法的呼叫完畢或者程式碼塊的執行完畢而消失
4、初始值
成員變數:有預設初始值
區域性變數:沒有預設初始值,使用之前需要賦值,否則編譯器會報錯(The local variable xxx may not have been initialized)
按所屬的資料型別劃分:
基本資料型別變數
引用資料型別變數
相關文章
- JAVA基礎04——變數與常量Java變數
- Java基礎06:變數、常量、作用域Java變數
- Java培訓基礎知識-Java的常量與變數Java變數
- Java基礎-語法基礎Java
- java基礎06-變數、常量、作用域Java變數
- JAVA基礎6-變數、常量、作用域Java變數
- Go基礎系列:常量和變數Go變數
- Java 基礎語法Java
- JAVA語法基礎Java
- [java基礎]之常量Java
- Python基礎入門_2基礎語法和變數型別Python變數型別
- Java基礎語法1Java
- JAVA基礎語法(一)Java
- Vuejs 基礎與語法VueJS
- [java基礎]之變數Java變數
- 《怎麼鞏固JAVA基礎語法基礎(上)》Java
- Java基礎語法筆記Java筆記
- Java基礎 語法筆記Java筆記
- JavaSE之java基礎語法Java
- Java基礎語法吐血整理Java
- scala基礎語法-----Spark基礎Spark
- Python基礎:語法基礎(3)Python
- java基礎:String — 字串常量池與intern(二)Java字串
- GO語言基礎(結構+語法+型別+變數)Go型別變數
- 基礎語法
- 第一課 php基礎語法 變數 函式PHP變數函式
- 『Java 語法基礎』a = a + b 與 a += b 的區別Java
- golang基礎–常量與運算子Golang
- JavaScript 基礎卷(一):基礎語法JavaScript
- Java學習之基礎語法Java
- 【譯】Java8官方教程:語言基礎—變數Java變數
- GOLANG簡介與基礎語法Golang
- Golang 基礎之基礎語法梳理 (三)Golang
- java基礎變數的交換Java變數
- 『Java 語法基礎』String、StringBuffer 與 StringBuilder 的區別JavaUI
- go 基礎語法Go
- CSS基礎語法CSS
- Markdown基礎語法