了解static修饰

82 阅读2分钟

staic

静态变量

​ 某些特定的数据在内存中只有一份,而且能被一个类的所有实例对象共享。可以使用 类名.变量名 的形式来访问。也可以先实例化对象在用对象,变量名访问

class Student{
    static String schoolName;
}
public class test{
    public static void main(String[] args){
        Student.schoolName="STUT";//不创建对象就可以访问变量
        Student s1 = new Student();//创建学生对象
        Student s2 = new Student();
        System.out.println("我的学校:"s1.schoolName);//两个对象可以共享静态变量
        System.out.println("我的学校:"s2.schoolName);
    }
}

​ 如果没有static修饰的变量,则应该给每一个对象都要进行赋值操作

​ static关键字只用于修饰成员变量,不能用于修饰局部变量

静态方法

​ 可以在不创建对象的情况下调用某个方法,使方法和对象解绑.

​ 用 类名.方法名() 来调用方法

class Person{
    public static hello(){
        System.out.println("hello!");
    }  
}
public class test{
    public static void main(String[] args){
        Person.hello();//直接用类名调用
    }
}

​ 非static修饰方法需要通过实例化方法调用

静态代码块

​ 当类被加载时,静态代码块会执行一次,因为一个类只加载一次,所以静态代码块只执行一次,通常使用静态代码块对类的成员变量进行初始化

class Person{
    static String country;//静态变量
    static{//静态代码块
        country = "China";//静态代码块中只能访问静态成员
        System.out.println("Person类中的静态代码执行了");
    } 
}
public static class test{
    static{
        System.out.println("测试类中的静态代码执行了");
    }
    public static void main(String[] args){
        Person p1 = new Person();
        Person p2 = new Person();
    }
}

​ 结果 - 测试类中的静态代码执行了

​ Person类中的静态代码执行了

​ 在静态代码块中只能访问static修饰的成员

内部类
总结
1. static方法:方法体内可以调用其他静态方法,不能调用非静态方法;只可以访问方法外部的static变量;不能定义静态变量,可以定义非静态变量。
1.static方法,方太体内不能定义static变量;能调用static方法;能调用非static方法。
1. static关键字只能用于修饰成员变量,不能修饰局部变量(如形参、方法体内部变量)。
1. 静态内部类中只能访问外部类的静态成员。
1. 静态内部类中可以定义静态成员,而非静态的内部类中不允许定义静态成员。