02、 什么是静态方法
如果方法上加了 static 关键字,那么它就是一个静态方法:
静态方法属于这个类而不是这个类的对象;
调用静态方法的时候不需要创建这个类的对象;
静态方法可以访问静态变量。
/** * @author 微信搜「沉默王二」,回复关键字 PDF */ public class StaticMethodStudent { String name; int age; static String school = "郑州大学"; public StaticMethodStudent(String name, int age) { this.name = name; this.age = age; } static void change() { school = "河南大学"; } void out() { System.out.println(name + " " + age + " " + school); } public static void main(String[] args) { StaticMethodStudent.change(); StaticMethodStudent s1 = new StaticMethodStudent("沉默王二", 18); StaticMethodStudent s2 = new StaticMethodStudent("沉默王三", 16); s1.out(); s2.out(); } }
change() 方法是静态方法,所以它可以直接方位静态变量 school,把它的值更改为“河南大学”;并且,可以通过类名直接调用 change() 方法。
程序输出结果如下所示:
沉默王二 18 河南大学
沉默王三 16 河南大学
1
2
静态方法不能访问非静态变量和调用非静态方法。
“二哥,我想到了一个问题,为什么 main 方法是静态的啊?”没想到,三妹串联知识点的功力还是不错的。
“如果 main 方法不是静态的,就意味着 Java 虚拟机在执行的时候需要先创建一个对象才能调用 main 方法,而 main 方法作为程序员的入口,创建一个额外的对象显得非常多余。”我不假思索地回答令三妹感到非常的钦佩。
03、什么是静态代码块?
用一个 static 关键字,外加一个大括号括起来的代码被称为静态代码块。
静态代码块通常用来初始化一些静态变量;
静态代码先于 main() 方法执行。
/** * @author 微信搜「沉默王二」,回复关键字 PDF */ public class StaticBlock { static { System.out.println("静态代码块"); } public static void main(String[] args) { System.out.println("main 方法"); } }
程序输出结果如下所示:
静态代码块
main 方法
1
2
“二哥,既然静态代码块先于 main() 方法执行,那没有 main() 方法的 Java 类能执行成功吗?”三妹的脑回路越来越令我敬佩了。
“Java 1.6 是可以的,但 Java 7 开始就无法执行了。”我胸有成竹地回答到。
/** * @author 微信搜「沉默王二」,回复关键字 PDF */ public class StaticBlockNoMain { static { System.out.println("静态代码块,没有 main"); } }
在命令行中执行 java StaticBlockNoMain 的时候,会抛出以下错误。
04、ending
“三妹,static 关键字我们就学到这里吧,你还有什么问题吗?”三妹学习 Java 的劲头让我对她未来的编程生涯充满了信心。
“没有了,二哥,你讲的挺棒的,我再去网上找一些资料学习下。”三妹还愿意再去深入地学习,让我很开心。