关键字 | 基础用法 | 误区 |
---|---|---|
static | 修饰方法、变量 |
<<java编程思想>>中写到
"static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途"
static是静态变量,意味着在程序启动时只加载一次。如果一个程序多次访问一个不变值的时候,可以在前加上static关键字,这样可以提高程序运行的性能。
//打印日志
public static final Logger logger = LoggerFactory.getLogger(DataContainer.class);
//没加static的时候每个对象都要重复创建,造成资源浪费
public final Logger logger = LoggerFactory.getLogger(DataContainer.class);
- 误区
static关键字不会改变类中成员的访问权限(public、protected、private)
非静态方法中可以通过this访问静态成员变量
static是不允许用来修饰局部变量。不要问为什么,这是Java语法的规定。
package com.javabase.keywords;
public class KeyWord {
static int id = 1;
public static void main(String[] args) {
new KeyWord().test();
}
private void test() {
int id = 2;
System.out.println(id);
System.out.println(this.id);
}
}
结果:
2
1
-
类加载的顺序
先加载main方法中的静态方法,然后按顺序执行main中的代码。
如果new一个对象时,它继承了父类对象,先执行父类对象中的静态方法,然后执行子类的静态方法,静态方法执行完,执行父类中的代码块,再执行子类中的代码块,再继续执行接下来的代码
图左表示包含main的实例化过程,右图子类继承父类,实例化过程
网友评论