第一点:static修饰属性和方法:
static 只能声明属性和方法,声明的属性是静态属性,声明方法是静态方法;
(1)声明的静态方法,可以直接有类名打点调用;
(2)static 中不允许使用super和this
(3)static 声明声明的字段,只能被实例化一次;表示该属性被声明static时,就已经被分配了内 存空间;(后面将静态初始化块是再验证)
(4)static 声明的属性,被同一个类的不同实例共享;
第二点:静态块:
static{
}
第三点:静态内部类:
class StaticInner {
private static int a = 4;
// 静态内部类
public static class Inner {
public void test() {
// 静态内部类可以访问外部类的静态成员
// 并且它只能访问静态的
System.out.println(a);
}
}
}
第四点:静态导包:
要使用静态成员(方法和变量)我们必须给出提供这个静态成员的类。
使用静态导入可以使被导入类的静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。
静态导入也是JDK5.0引入的新特性,下面以实例来说明静态导入的用法:
比如先在一个包中定义一个这样的类:
复制代码
package com.example.learnjava;
public class Common
{
public static final int AGE = 10;
public static void output()
{
System.out.println("Hello World!");
}
}
复制代码
在另一个包中使用时,如果不用静态导入,是这样用的:
复制代码
package com.example.learnjava2;
import com.example.learnjava.Common;
public class StaticImportTest
{
public static void main(String[] args)
{
int a = Common.AGE;
System.out.println(a);
Common.output();
}
}
复制代码
前面加入了导入语句,将Common类导入,使用其中的静态成员变量和静态方法时需要加上类名。
使用静态导入
静态导入的语法是:
import static 包名.类名.静态成员变量;
import static 包名.类名.静态成员函数;
注意导入的是成员变量和方法名。
如前面的程序使用静态导入后:
复制代码
package com.example.learnjava2;
import static com.example.learnjava.Common.AGE;
import static com.example.learnjava.Common.output;
public class StaticImportTest
{
public static void main(String[] args)
{
int a = AGE;
System.out.println(a);
output();
}
}
复制代码
缺点
过度地使用静态导入会在一定程度上降低代码的可读性。