一、关于Static关键字
[1]static修饰的方法,变量不需要创建对象便可直接调用;
1 package com.zyy.servlet;
2
3 public class ServletTest {
4
5 public static void main(String[] args) {
6 System.out.println(Test.name); //直接调用static修饰的name属性
7 Test.getName(); //直接调用static修饰的getName()方法
8 }
9
10 }
11
12 class Test {
13 public static String name = "静态变量";
14
15 public static void getName () {
16 System.out.println("静态方法");
17 }
18 }
[2]静态方法中不允许调用非静态成员;
有Static修饰的方法跟变量在初次加载时就存在于内存中了,而非静态成员这时候还没有被创建,存在的东西去调用不存在的东西当然会出错。
[3]static代码块
static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。因此很多时候将只需要进行一次的初始化操作放在静态代码块中;
static块的执行顺序优先于"构造块""构造方法";
1 package com.zyy.servlet; 2 3 public class ServletTest { 4 static { 5 System.out.println("我是静态代码块"); 6 } 7 8 { 9 System.out.println("我是构造块"); 10 } 11 12 public ServletTest () { 13 System.out.println("我是构造方法"); 14 } 15 16 public static void main(String[] args) { 17 new ServletTest(); 18 new ServletTest(); 19 20 /*打印结果: 21 我是静态代码块(只会被加载一次) 22 我是构造块 23 我是构造方法 24 25 我是构造块 26 我是构造方法 27 */ 28 } 29 30 }
[4]值得注意的是static对象通常不会被GC回收;
二、关于final关键字
关于final关键字只需要掌握以下几点便可:
[1]final修饰变量,该变量初次初始化后无法被修改;
[2]final修饰方法,该方法无法被重写;
[3]final修饰类,该类无法被继承;