所謂靜態,指以static關鍵字修飾的,包括類,方法,塊,字段。
非靜態,指沒有用static 修飾的。
一、靜態類的特點
1.全局唯一,任何一次的修改都是全局性的影響
2.只加載一次,優先於非靜態
3.使用方式上不依賴於實例對象。
4.生命周期屬於類級別,從JVM 加載開始到JVM卸載結束。
二、靜態類和非靜態類之間的區別
- 內部靜態類不需要有指向外部類的引用。但非靜態內部類需要持有對外部類的引用
- 非靜態內部類能夠訪問外部類的靜態和非靜態成員。靜態類不能訪問外部類的非靜態成員。他只能訪問外部類的靜態成員
- 一個非靜態內部類不能脫離外部類實體被創建,一個非靜態內部類可以訪問外部類的數據和方法,因為他就在外部類里面
package com.example.mybatisplus.controller; /** * @ClassName: OutClass * @Description: * @Author: xf * @Date: 19.6.27 10:59 * @Version: 1.0 */ public class OutClass { /** * 全局靜態變量 */ private static final String msg = "i love java"; // 創建靜態類 public static class staticInnerClass{ public void showMsg() { System.out.println("靜態內部類展示信息:"+msg); } } // 創建非靜態內部類 public class InnerClass{ public void disPlayMsg() { System.out.println("非靜態內部類展示信息:"+msg); } } public static void main(String[] args) { // 創建靜態內部類實例 staticInnerClass sic = new OutClass.staticInnerClass(); sic.showMsg(); // 創建非靜態內部類實例,需要先創建外部類的實例 OutClass().new InnerClass ic = new OutClass().new InnerClass(); ic.disPlayMsg(); } }
其實就是靜態類不用先創建外部類。可以靜態類看做外部類的靜態變量,使用就不要外部類實例;而非靜態就必須先實例化。