JAVA static關鍵字 和 static 關鍵字誤區

      網友投稿 1132 2025-03-31

      JAVA static關鍵字 和 static 關鍵字誤區

      1.static方法(靜態方法)

      static方法就是沒有this的方法,因為static方法不依賴于任何對象就可以進行調用了。

      在static方法的內部不能調用非靜態方法,但是非靜態方法是可以調用static方法的。

      (static方法的內部不能調用非靜態方法:這不是完全不可能。如果傳遞一個對象的引用到靜態方法里,然后通過這個引用(this效果相同),你就可以調用非靜態方法和訪問非靜態成員變量了,但通常要達到這樣的效果,只需寫一個非靜態方法即可。)

      public class student{ ?? ?static String name ;//靜態成員變量(靜態屬性) ?? ?int age ;//非靜態成員變量(非靜態屬性) ?? ? ?? ?//static方法,程序的入口實質是一個靜態方法 ?? ?public static void main(String[] args) ?? ?{ ????????setName();? //靜態方法直接調用 ?? ??? ?new student().setAge(); //需傳遞一個對象的引用到靜態方法 ?? ?} ?? ? ?? ?//靜態方法 ?? ?public static void setName()? ?? ?{System.out.println("靜態方法!");?} ?? ? ?? ?//非靜態方法 ?? ?public void setAge()? ?? ?{System.out.println("非靜態方法!");?}}

      2.static變量

      static變量(靜態變量):

      靜態變量可以被所有對象調用(所有對象所共享的),當且僅當在類初次加載時就被初始化。另外,static成員變量的初始化順序按照定義的順序進行初始化。所以靜態區里面存放的東西是唯一的。

      非靜態變量:

      非靜態變量是對象擁有的、私有的,在創建對象的時候才會初始化,各個對象所擁有的變量相互隔離、互不影響。

      public class student{ ????static String name ; ?? ?int age ; ?? ?public static void setName()?{System.out.println("靜態方法!");?} ?? ?public void setAge()?{System.out.println("非靜態方法!");} ?? ?public static void main(String[] args) ?? ?{ ?? ??? ?student stu1 = new student(); ????????student stu2?= new student();}}

      當運行程序時,靜態的屬性和方法會放進在靜態區。

      而非靜態的屬性和方法,在運行程序時,它們是不會直接進入到內存的,當程序執行創建對象的時候,它們才會進入到堆內存中。即new student()被執行的時候,創建了一個新對象,非靜態的屬性和方法依附于創建的新對象進入到內存中。

      3.static代碼塊

      static關鍵字可以用來形成靜態代碼塊以優化程序性能,因為只會在類加載的時候執行一次。

      import java.sql.Date; public class student{ ?? ?private Date birthday;? ?? ?public student() {} ?? ?public student(Date birthday)? ?? ?{?this.birthday = birthday ;} ?? ? ????public String judge() ?? ?{ ?? ??? ?Date startDate = java.sql.Date.valueOf("2000-1-1"); ?? ??? ?Date endDate = java.sql.Date.valueOf("2022-1-1"); ????????return????????(birthday.compareTo(startDate) >= 0 && ?????????????????????????birthday.compareTo(endDate) <=0)?"True":"Flase"; ?? ??? ?//三元運算符判斷是否生日在startDate到endDate之間 ?? ?}? ?? ?public static void main(String[] args) ?? ?{ ?? ??? ?Date studentbirthday = java.sql.Date.valueOf("2020-12-31"); ?? ??? ?student student = new student(studentbirthday); ?? ??? ?System.out.println(student.judge()); ?? ?}}

      在每次judge被調用的時候,堆內存當中都會開辟空間,創建生成startDate和endDate兩個對象,造成了空間浪費。代碼只將startDate,endDate在judge()方法中移去,改成:

      private static Date startDate,endDate; //定義為靜態變量 ?? ?static? ?? ?{ ?? ??? ?Date startDate = java.sql.Date.valueOf("2000-1-1"); ?? ??? ?Date endDate = java.sql.Date.valueOf("2022-1-1"); ?? ?}

      這樣,效率會更高,startDate,endDate存在靜態區被對象所共享,進行多次操作的時候就不需要占更多的空間。

      static 關鍵字誤區:

      1.靜態成員變量雖然獨立于對象,但是不代表不可以通過對象去訪問,所有的靜態方法和靜態變量都可以通過對象訪問(只要訪問權限足夠)。非靜態方法中能否夠通過this訪問靜態成員變量?

      public class student? { ?? ?static String name = "小黑"; //靜態變量 ?? ? ?? ?public static void main(String[] args){ ?? ??? ?new student().printname(); ?? ?} ?? ?public void printname() ?? ?{ ?? ??? ?String name = "小白"; //非靜態變量 ?? ??? ?System.out.println(this.name);? ?? ?} }

      所以非靜態方法中能夠通過this訪問靜態成員變量。

      2.Java中能夠影響到訪問權限的只有private、public、protected(包括包訪問權限)這幾個關鍵字,而static關鍵字不會影響到變量或者方法的作用域。

      3.static是不允許用來修飾局部變量,Java語法的規定。

      Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel中進行表格邊框的設置技巧
      下一篇:深度學習與圖像識別:原理與實踐》—2.1.5 PyTorch
      相關文章
      老汉色老汉首页a亚洲| 亚洲va久久久噜噜噜久久| 亚洲高清不卡视频| 国产成人精品日本亚洲| 国产亚洲精品国看不卡| 亚洲精品久久久www| 亚洲精品成a人在线观看| 国内成人精品亚洲日本语音 | 亚洲国产精品无码久久98| 456亚洲人成在线播放网站| 激情亚洲一区国产精品| 色偷偷女男人的天堂亚洲网| 亚洲日本乱码卡2卡3卡新区| 99亚偷拍自图区亚洲| 亚洲人成网站免费播放| 亚洲国产精品无码观看久久| 亚洲成a人无码亚洲成www牛牛| 亚洲精品无码mⅴ在线观看| 欧美激情综合亚洲一二区| 国产亚洲精品成人久久网站| 亚洲国产主播精品极品网红| 亚洲日韩涩涩成人午夜私人影院| 亚洲综合久久夜AV | 丁香五月亚洲综合深深爱| 亚洲日产无码中文字幕| 国产亚洲成av片在线观看| 久久精品国产精品亚洲色婷婷| 日木av无码专区亚洲av毛片| 亚洲激情黄色小说| 亚洲偷自拍另类图片二区| 在线精品自拍亚洲第一区| 中文字幕在线亚洲精品| 亚洲av综合avav中文| 亚洲综合在线成人一区| 国产成人精品亚洲2020| 亚洲大尺度无码无码专线一区| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲高清日韩精品第一区| 亚洲成人动漫在线观看| 亚洲精品亚洲人成在线播放| 亚洲AV无码一区二区三区鸳鸯影院 |