java 基础 --静态
2. 獨立于該類的任何對象,不依賴于特定的實例,被類的所有實例(對象)所共享
3. 可以通過類名調用 比如:Student.age;
4. 靜態是隨類的加載而加載,this是隨對象的創建而存在(靜態比對象優先)
因此,靜態方法中沒有this關鍵字,即靜態方法中不能使用非靜態變量
舉例:class Student{public int num = 0;public static void method(){System.out.println(num)} //NG無法從靜態上下文中引用非靜態變量num }
5. 靜態方法只能訪問靜態的成員變量和靜態的成員方法 6. 靜態發法和普通方法一樣,當使用時被調用,不同的是一開始系統為其分配內存空間。
舉例1:
public class Student{public static void main(String[] args) {method2(); //調用靜態方法new Student().method1(); //調用非靜態方法 }public void method1{System.out.println("XXX")}public static void method2{System.out.println("XXX")}}舉例2:class Student{private Student(){} //把構造方法私有化,外界就不能創建對象了public static void method1{System.out.println("XXX")}public static void method2{System.out.println("XXX")}}使用:Student.method1();Student st = new Student();ss.method1(); //NG用途:工具類,都是靜態方法,直接通過類名調用方法
7. 父類靜態代碼塊 >> 子類靜態代碼塊 >> 父類構造方法 >> 子類構造方法
class Code{
// 靜態代碼塊 >> 構造代碼塊 >> 構造方法
// 靜態代碼塊隨著類的加載而加載因此優先執行
// 靜態代碼塊,最優先執行,一般對類進行初始化,只執行一次(第一次)
① static {
System.out.println("XXX")
}
// 構造代碼塊,每次構造函數執行之前執行
// 可以把多個構造方法中共同代碼放在一起,對對象初始化
{
System.out.println("XXX");
}
public Code(){}
{
System.out.println("xxx");
}
// ①比main方法先執行
public static void main(String[]){
{
int XXX= 1;
// 局部代碼塊,限定變量生命周期,及早釋放,提高內存利用率
System.out.println("XXX");
}
}
}
8. 舉例數據庫緩存
public class CacheDemo {
即使new了一個新對象,map里數據還是保存的。棧是用完就沒了,堆是賦值為null/結束是才會被jvm回收。
static ?Map<String, User> cacheMap = new HashMap<String, User>();
public User getUser(String id){
? ? String key = User.class.getName() + id;
? ? User user =?cacheMap.get(key));
? ? if(user != null){
? ? ? ? return user;
? ? }
? ? user = QueryDB();
? ? cacheMap.put(key, user);
? ? return user;
}
public User updateUser(User user){
? ? updateDB(user);
? ? String key = User.class.getName() + user.id;
? ? cacheMap.remove(key);
}
}
9.靜態代碼塊static{},靜態方法static void method{}
一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;
需要在項目啟動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的.
靜態方法在類加載的時候 就已經加載 可以用類名直接調用 比如main方法就必須是靜態的 這是程序入口。
兩者的區別就是:靜態代碼塊是自動執行的; 靜態方法是被調用的時候才執行的.
?
?
轉載于:https://www.cnblogs.com/ysloong/p/6502273.html
總結
以上是生活随笔為你收集整理的java 基础 --静态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dapper用法小记
- 下一篇: 响应式 媒体查询 盒模型