1. static修饰的类只能为内部类,普通类无法用static关键字修饰。static修饰的内部类相当于一个普通的类,访问方式为(new 外部类名.内部类的方法() )。如下所示:
public class OuterClass {
public static class InnerClass{
InnerClass(){
System.out.println("============= 我是一个内部类'InnerClass' =============");
}
}
}
public class TestStaticClass {
public static void main(String[] args) {
// 不需要new一个InnerClass
new OuterClass.InnerClass();
}
}
注:普通内部类的访问方式为 (外部类对象.new 内部类方法())
2.static修饰静态方法的访问方式为 (类名.方法名)
3.静态变量和实例变量的区别
static修饰的变量为静态变量,静态变量在内存中只有一份存储空间,静态变量不属于某个实例对象,被一个类中的所有对象所共享,属于类,所以也叫类变量,可以直接通过类名来引用。
实例变量属于某个固定对象所私有,实例变量的使用必须先创建一个类的实例,然后通过这个实例来引用使用。
public class Person {
int age = 10;
static int age1 =11;
}
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.age=11;
person.age1 = 12;
Person person1 = new Person();
System.out.println(person.age);
System.out.println(person.age1);
System.out.println(person1.age);
System.out.println(person1.age1);
}
}
结果: 11
12
10
12
static |
静态变量 |
静态方法 |
别名 |
类变量 |
类方法 |
级别 |
与类同级 |
与类同级 |
加载 |
随着类的加载而被加载到方法区的静态区域 |
随着类的加载而被加载到方法区的静态区域 |
初值 |
赋予系统默认初始值 |
不赋予系统默认初始值,被调用时会被加载到栈中执行 |
调用 |
1.类名. 2.对象. |
1.类名. 2.对象. |
|
类产生的对象可共享同一个静态变量 |
支持重载 |
|
方法(普通方法和构造方法)里不能定义静态变量 |
不支持重写(重写针对的是对象) |
|
|
Java中静态信息只能 直接使用静态信息 |
|
|
但是非静态信息可以 直接使用非静态以及静态 |
5.静态代码块的格式是:
public class 类名称{
static {
//静态代码块的内容
}
特点:当第一次用到本类时,静态代码块执行唯- -的一次。
静态内容总是优先于非静态,所以静态代码块比构造方法先执行。
静态代码块的典型用途:
用来一次性地对静态成员变量进行赋值。