static靜態代碼塊和靜態方法
static關鍵字
- static修飾的方法或變數,優先于物件執行,所以記憶體會先有static修飾的內容,后有物件的內容
- 可以用來修飾類的成員方法、類的成員變數,還可以撰寫static靜態代碼塊
- 修飾變數就是類變數,修飾方法就是類方法
- 總結:類變數或者類方法,可以直接通過類名.方法名或者變數名進行呼叫,不用經過物件
public static class Student{ static int age; public static String name; public static void speak() { System.out.println("唱歌??"); } }
public class Student { static int age; public static String name; public static void speak() { System.out.println("唱歌??"); } }
static變數也稱作靜態變數
- 和非靜態變數的區別是,靜態變數被所有的物件所共享,在記憶體中只有一份,它當且僅當在類初次加載時會被初始化,非靜態變數是物件所擁有的,在創建物件的時候被初始化,存在多個副本,各個物件擁有的副本互不影響
- static成員變數的初始化順序按照定義的順序進行初始化
static方法也稱作靜態方法
- 不依賴于任何物件就可以進行訪問,類名.方法名
- 不能訪問類的非靜態成員變數和非靜態成員方法
注意事項
- 靜態方法不能直接訪問非靜態變數
- 靜態方法當中不能使用this
- 核心:一個類里面static修飾的不能訪問非static修飾的成員或方法,而非static修飾的可以訪問static修飾的成員或方法
靜態代碼塊
- 加載類的時候,靜態代碼塊會被執行一次,且只能執行一次
- 靜態內容優先于非靜態內容,所以靜態代碼比構造方法先執行
- 使用場景:用來一次性對靜態成員變數進行賦值,或者類資源初始化等操作
class Person { static { System.out.println("我是靜態代碼塊"); } }
常考面試題
記得博主,在一次面試程序中,面試官出了這道題被吊打了,,,靜態代碼塊、構造代碼塊、建構式執行順序
默認執行順序為:靜態代碼塊 > 構造代碼塊 > 建構式
public class Student { static { System.out.println("我是靜態代碼塊"); } { System.out.println("我是構造代碼塊"); } public Student() { System.out.println("我是建構式"); } }
執行順序

繼承關系時的執行順序
老師類
class Teacher { static { System.out.println("我是【老師】靜態代碼塊"); } { System.out.println("我是【老師】構造代碼塊"); } public Teacher() { System.out.println("我是【老師】建構式"); } }
學生類繼承老師
public class Student extends Teacher{ static { System.out.println("我是【學生】靜態代碼塊"); } { System.out.println("我是【學生】構造代碼塊"); } public Student() { System.out.println("我是【學生】建構式"); } }
執行順序
public class MyMain { public static void main(String[] args) { Student student=new Student(); } }<style>p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }</style>
列印結果:我是【老師】靜態代碼塊 》我是【學生】靜態代碼塊》我是【老師】構造代碼塊 》我是【老師】建構式》我是【學生】構造代碼塊》我是【學生】建構式

<style>p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }</style> <style>p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }</style> <style>p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }</style> <style>p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }</style> <style>p.p1 { margin: 0; font: 12px Menlo; color: rgba(42, 0, 255, 1) }</style>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/135880.html
標籤:Java
下一篇:[Java基礎]面向物件
