夯实基础—static关键字
2018-01-20 10:27
148 查看
static 静态的
它是Java里面的修饰词,被static修饰的类、方法、变量等等都会在类加载的时候自动在方法区分配一次,此后便不在创建。这说明了被static修饰之后有且只有一个存在,而且调用的时候并不需要对象(也可以用但是不提倡),可以直接用类名来调用。
被stati修饰之后,将不会属于任何类的任何一个对象,但是可以被类的所有对象共有。
static的五种用法
可以自己去尝试来验证我说的到底是否正确,印象会更加深刻
一.修饰内部类
static不能被用来修饰普通的类,但是可以被修饰内部类。被修饰的内部不可以调用任何非静态类方法和成员变量,但是非静态方 法可以调用静态内部类。
二.修饰成员变量
static修饰成员变量的时候就会在类加载的时候存放于方法区,所有类的实例对象共享。static不会改变访问修饰权限
三.修饰方法
跟修饰成员变量差不多。四.静态块
格式static{ }说到了静态块就不得不说下,jvm的加载机制,来通过一个例子观察:
public class StaticTest { MyPrint my=new MyPrint(); static{ System.out.println("StaticTest静态块输出"); } public StaticTest(){ System.out.println("StaticTest构造方法输出"); } public static void main(String[] args) { StaticTest aa= new MyTest(); } } class MyTest extends StaticTest{ MyPrint my=new MyPrint(); static{ System.out.println("MyTest静态块输出"); } public MyTest(){ System.out.println("MyTest构造方法输出"); } } class MyPrint{ static{ System.out.println("MyPrint静态块输出"); } public MyPrint(){ System.out.println("MyPrint构造方法输出"); } }
大家可以猜猜输出是什么。
输出
StaticTest静态块输出
MyTest静态块输出
MyPrint静态块输出
MyPrint构造方法输出
StaticTest构造方法输出
MyPrint构造方法输出
MyTest构造方法输出
为什么这样呢?来看下jvm加载做的事情
1.jvm会去找main所在的类,并加载。在加载的时候遇到静态块会优先加载,所以输出 StaticTest静态块输出。
2.然后会执行main方法,发现需要实例MyTest类,所以会去加载此类发现有父类,会去加载父类,因为静态块只加载一次所以不会再有输出。
3.发现父类已经加载过,继续往下走静态方法优先加载 输出 :MyTest静态块输出。
4.加载完毕开始实例化发现成员变量就开始加载实例成员变量,发现静态块输出 MyPrint静态块输出。
5.继续实例化成员变量类发现构造方法输出:MyPrint构造方法输出。
6.成员变量实例化完毕开始走MyTest构造方法,因为有隐形的super(),
所以开始运行父类的构造方法又发现隐藏的super()一直到Object类,然后开始向下运行回到StaticTest构造方法,运行完毕输出:StaticTest构造方法输出
7.然后实例化父类的成员变量输出:MyPrint构造方法输出(静态块只运行一次所有没有上面那句了)
8.最后回到本类完成构造方法输出 MyTest构造方法输出。
五.静态引包
import static java.xx.xx;这样导包后可以直接使用静态方法和变量,而不用再去用类名点,但是如果引入两个相同方法名不同包的静态方法,去使用会报错。
以上就是本人理解的static关键词的使用,有错可以一起讨论
相关文章推荐
- java夯实基础系列:深入理解static、final关键字
- 夯实基础——static关键字
- 面向对象基础——static关键字和代码块的使用
- 大数据Java基础系列-static关键字
- JAVA基础6.34——Static关键字(1)
- JAVA基础 - static关键字简单总结
- Java中的基础-----static关键字的作用
- java基础技术知识点总结——static关键字
- java基础_构造方法、this、static关键字
- java基础之关键字static
- java基础之equal()方法、static关键字、单例设计模式
- I学霸官方免费教程十:Java基础之关键字static和this
- 大数据Java基础系列-static关键字
- java 基础 static 关键字
- JAVA基础知识(2)--关键字static的使用
- Java基础(八) Java修饰符及接口详解之(一)static/final/abstract关键字及接口的使用
- Java 基础总结--static关键字
- JAVA 基础之Static关键字和类加载
- 智渔课堂官方免费教程十:Java基础之关键字static和this
- JAVA基础(005_static关键字)