相信不少朋友在面试过程当中都遇到过关于static的相关题目,接下来咱们来分析一下static。java
static(静态的),用来修饰成员变量,成员方法,它随着类的加载而加载,使用static修饰的数据能够直接使用类名来调用。由此能够得出,静态的方法是不能够访问非静态的成员方法和成员变量的,由于非静态须要依赖对象来调用。可是相反的,非静态的方法是能够访问静态的成员方法和成员变量的。web
使用static修饰的方法不能使用this,这是由于static随着类的加载而加载,不存在依赖对象的状况。面试
根据上述两点咱们能够总结出来静态的特性:只在类加载时执行一次,根据这个特性还能够得出静态使用的地方,那就是在建立对象前就须要调用方法或者变量。svg
最后你们能够看一下下面这个题的运行结果学习
public class son extends Farther{ static { System.out.println("子类的静态代码块被调用了"); } public son() { System.out.println("子类的构造方法执行了"); } public static void main(String[] args) { new son(); } } class Farther { static { System.out.println("父类的静态代码块被调用了"); } public Farther() { System.out.println("父类的构造方法执行了"); } }
执行结果 |
---|
父类的静态代码块被调用了 |
子类的静态代码块被调用了 |
父类的构造方法执行了 |
子类的构造方法执行了 |
咱们如今来分析一下这道题,首先进来后程序先准备加载son,发现son是farther的子类后,开始加载farther,因为静态代码块是随着类的加载而加载的,就首先输出了“父类的静态代码块被调用了”,
随后输出“子类的静态代码块被调用了”,这时类加载完毕,执行主方法,主方法是建立son的对象,son是farther的子类,因此执行父类的构造方法,随后执行子类的构造方法。this
通过上述的描述,你们应该也对static有了初步的认识,若是有问题能够在评论中提出来,我会及时更改或者回答你们的问题的。code
我是一个正在偷偷努力学习java的大胖子,有任何问题你们均可以发在个人我的公众号上边,我也会尽可能帮你们解决,固然,我也只是一个正在学习java的人,并不能保证“每一个(实际上是大部分问题都不能)”问题都能回答上来。xml
还有个人我的公众号会不定时更新个人java学习之路,你们若是也在学习java能够在公众号上边与我交流哦。
对象