概述:static(特殊修饰符)是用来修饰类,方法(静态方法),成员变量(静态成员变量),代码块(静态代码块)。
成员变量和类变量(static 修饰的成员变量)区别
- 成员变量又被称为对象变量/实例变量,它是随着对象的创建而产生的,对象之间互不影响。
成员变量是通过对象名,属性名来进行访问和操作的
- 类变量(静态变量),它是随着类的加载而产生的,该类所有的对象所共享。
类变量是通过类名,属性名来进行访问和操作(也是可以采用对象名,类变量名来访问,不建议)
// 类变量建议采用类名,属性名方式使用
类名.属性名
public class Student {
// 年龄
int age;
// 班级编号
static String classId;
}
public class Demo01 {
public static void main(String[] args) {
Student stu1 = new Student();
stu1.age = 18;
Student.classId= "358";
Student stu2 = new Student();
stu2.age = 20;
Student.classId= "359";
System.out.println(stu1.age); // 18
System.out.println(Student.classId); // 359
System.out.println(stu2.age); // 20
System.out.println(Student.classId); // 359
}
}
成员方法和静态方法的区别:
- 在同一个类中,成员方法之间可以直接互相调用,也可以调用静态方法。
成员方法可以直接使用成员变量,也可以直接使用静态变量。
- 在同一个类中,静态方法之间可以直接互相调用,但不可以调用成员方法。
静态方法可以直接使用静态变量,但不可以直接使用成员变量。
代码块/非静态代码块/成员代码块/构造代码块和静态代码块区别:
public class 类名 {
// 代码块:用于存储一些希望在构造方法执行前执行的程序段
// 总是在构造方法执行前执行
{
// 若干代码
// 若干程序段
}
// 静态代码块:由于存储一些希望在类加载是只需执行一次的程序段
// 类加载时执行,且只执行一次
static {
// 程序段
}
}
public class Test {
public Test(){
System.out.println("构造方法执行了!");
}
static {
System.out.println("静态代码段执行了!");
}
{
System.out.println("代码段执行了!");
}
}
public class Demo01 {
public static void main(String[] args) {
Test test = new Test();
Test test1 = new Test();
}
}
注意:(暂时可以用它解决的问题)
一些工具类的方法,可以定义为静态的,这样不需要创建对象就可以使用。
有一些内容需要被多个对象共享,就可以将这些内容定义静态的。
在类加载时,希望执行一些代码段,可以将其定义在静态代码块中。
...