深度重之,广度次之,剖析java深的知识
本知识点总结都是在看多个人的博客总结的,适合我自己的复习,更希望给向我这样的新手一些帮助
本文大纲:
1、static 是什么?
2、static 有什么作用
3、static 深度理解以及相关点
一.static 是什么?
在一个类中,主要的组成就是属性和方法(分为构造方法与普通方法两种),而每一个对象都分别拥有各自的属性内容(不同对象的属性保存在不同的堆内存中),如果现在类中的某个属性希望定义为公共属性(所有对象都可以使用的属性)则可以在声明属性前加上static关键字。
以我的理解就是:static关键词,可以修饰属性和方法,被修饰的属性和方法,都是在类初始化时就把修饰的属性和方法,初始化了,它们只有一个(jvm的方法区中一直有这个属性和方法)不会随着对象的创建而多次的创建,然次它们的调用都是通过类.方法|属性去获取方法和属性,静态方法中只能调用静态变量,静态方法不能调用非静态属性和方法,否则会报错
对象第一次初始化,也就是类的初始化,它先执行的是静态的方法属性或者静态代码块,然后在执行构造方法
二、static 有什么作用
1、修饰成员变量
给变量加上static关键字后,此变量变为全局变量,JVM在加载时会直接将此变量加载到方法区里而不是堆里,无论哪一个方法修改了此变量,此变量就会改变,可以让对象共享属性
并且,当再次new该类的对象时,static修饰的类成员不会被再次初始化,在程序运行过程中,static只会在第一次new时被初始化,当然final另当别论
2、修饰成员方法
static修饰成员方法最大的作用,就是可以使用"类名.方法名"的方式操作方法,避免了先要new出对象的繁琐和资源消耗
3、静态导包:
静态导包用法,将类和类的方法(该类或方法必须要用static或final 修饰)直接导入到当前类中,从而直接使用“方法名”即可调用类方法或类.属性,更加方便。
4、代码块:
代码块分为两种种:普通代码块,静态代码块。他们和构造函数的运行顺序如下所示:
静态块总是最先执行的,第二执行的是普通代码块,第三执行的是构造方法。并且构造块和构造方法在每次new的时候都会创建新的,static方法只会在第一次new时运行
三、static 深度理解以及相关点
类加载与对象的构造,类加载就是在第一次调用这个类的时候jvm虚拟机会通过类加载器在一个叫做方法区的逻辑内存中将所要用到的类的信息存放在里边,其中方法区有一个静态区,存放的是类中的静态(类变量),而对象构造则只是在堆中开辟一个内存空间将实例化的对象存放在里边,在生命周期中要远远小于类。
java中关于静态代码块与动态代码块的注释,静态代码块只有在类加载时仅且执行一次,而动态代码块是在每次构造对象时执行一次,然后才是构造方法,也就有了一个顺序,静态代码块>动态代码块>构造方法,
类的加载只有在引用它的时候才会加载,而不是直接加载进方法区的,这也是类加载与构造对象的区别。构造对象并不是类加载,它们是两个完全不一样的概念,类加载要在对象构造之前。
本文档大多数都是借鉴前人的理解,感谢你们