Java关键字之static

  1. 从内存角度来分析static关键字
    对于这个问题,我们只需简单知道三件事,栈、堆和方法区
    栈区:存放对象的引用或者数组的引用
    堆区:存放具体的对象或者数组
    方法区:存放方法和共享变量(static修饰)
  2. static修饰类的属性
    如果一个属性没有被static修饰,那么当这个类的一个对象被new出来的时候,这个变量是跟随这个对象放在堆区的。当这个变量被static修饰,那么它会随着类的加载而被初始化到方法区。因此,我们不仅可以通过一个对象来访问该属性,还可以直接通过类名访问。
  3. static修饰方法
    对于一个类来说,它的方法本来就存在于方法区,即使被static修饰了,它依然在方法区。如果某个方法被static修饰了,那么我们可以直接通过类名来调用方法,当然也可以通过对象来访问该方法。
    需要注意的是,被static修饰的方法是不能调用非static修饰的方法的,因为非static修饰的方法要通过对象来调用。
  4. static修饰代码块
 class Foo{
    //代码块,在创建对象的时候执行,使用很少,和构造器差不多
    {
        System.out.println("创建对象了!");
    }
    //静态代码块,在类加载期间执行,用于加载配置文件或者其他信息等
    static{
        System.out.println("类加载了!");
    }
    public Foo(){
        System.out.println("调用了构造器!");
    }
}

当类加载的时候,静态代码块就会执行,当new一个对象的时候,非静态代码块会执行。

  1. static修饰类
    普通类是不能被static修饰的,只有内部类才能被static修饰。一旦一个内部类被static修饰,那么这个静态内部类对象可以脱离外部类对象而存在,否则的话,要绑定一个内部类对象才可以。
public  class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Apple apple = new Apple();
        Apple.Seed seed = apple.new Seed();//绑定一个外部类对象
        Apple.Skin skin = new Apple.Skin();
    }
    static class Fruit{
        public Fruit(){
            Log.d("MainActivity","create Fruit");
        }
    }
    static class Apple extends Fruit{
        public Apple(){
            super();
            Log.d("MainActivity","Apple create");
        }
        public static class Skin{
        }
        public class Seed{
            public Seed(){
            }
        }
    }
}

关于static我们就说这么多吧。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 更多详情请戳-原文点我,点我 java中有很多的关键字,这些关键字在面试的时候还是在编写的时候的使用以及原理的了解...
    yinbin_code阅读 455评论 0 0
  • static学习笔记 static表示“全局”或者“静态”的意思,用来修饰成员变量或者是成员方法,也可以形成静态的...
    张潇_64df阅读 796评论 0 1
  • Advanced Language Features 知识点:一. static修饰符 static修饰符可以用来...
    风景凉阅读 524评论 0 0
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,864评论 0 11
  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 597评论 0 2

友情链接更多精彩内容