浅谈对static的理解

相信不少朋友在面试过程当中都遇到过关于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能够在公众号上边与我交流哦。
在这里插入图片描述对象

相关文章
相关标签/搜索