之前我们学习了JAVA 面向对象的一些基本知识,今天来进阶一下!!!
static关键字
static表示静态,是JAVA中的一个修饰符,可以修饰成员方法,成员变量,可用于修饰类的成员(变量、方法、代码块)和嵌套类。
静态变量
静态变量属于类,并非类的某个实例。
无论创建多少个类的对象,静态变量只有一份存储在内存中。
静态变量可通过类名直接访问,也能通过对象实例访问。
class Student {static int totalStudents; // 静态变量,记录学生总数//被所有 Student 对象共享。每创建一个 Student 对象,totalStudents 的值就会加 1。String name;public Student(String name) {this.name = name;totalStudents++; // 每创建一个学生对象,总数加 1}
}public class StaticVariableExample {public static void main(String[] args) {Student s1 = new Student("Alice"); //new关键字,堆内存Student s2 = new Student("Bob");System.out.println("Total students: " + Student.totalStudents); // 通过类名访问静态变量System.out.println("Total students (via s1): " + s1.totalStudents); // 通过对象实例访问静态变量}
}
静态方法
静态方法属于类,而非类的某个实例;
可以通过类名直接调用静态方法,无需创建类的对象;
静态方法只能访问静态成员(静态变量和静态方法),不能访问实例成员(实例变量和实例方法),因为静态方法在类加载时就已存在,此时可能还没有创建对象。
class MathUtils {static int add(int a, int b) { // 静态方法return a + b;}
}public class StaticMethodExample {public static void main(String[] args) {int result = MathUtils.add(3, 5); // 通过类名调用静态方法System.out.println("3 + 5 = " + result);}
}
拓展:工具类
工具类是帮我们做一些事情的,但是不描述任何事物的类!
JavaBean类 | 用来描述一类事物的类 e.g. Student,Teacher,Dog,Cat 等 |
测试类 | 用来检查其他类是否书写正确,带有main方法的类,使程序的入口 |
工具类 | 帮我们做一些事情的,但是不描述任何事物的类 |
工具类书写规则:
1.类名见名知意
2.私有化构造方法
public class ArrUtil{private ArrUtil(){}
}
3.方法定义为静态
静态代码块
静态代码块在类加载时执行,且仅执行一次。它通常用于对静态变量进行初始化操作。
class MyClass {static int value;static {// 静态代码块value = 10; //对value静态变量进行初始化System.out.println("Static block executed.");}
}public class StaticBlockExample {public static void main(String[] args) {System.out.println("Value: " + MyClass.value);}
}
静态嵌套类
静态嵌套类是定义在另一个类内部的静态类。它可以直接访问外部类的静态成员,但不能直接访问外部类的实例成员。
class OuterClass {static int outerStaticVar = 10;int outerInstanceVar = 20;static class StaticNestedClass {void display() {System.out.println("Outer static variable: " + outerStaticVar);// 不能访问 outerInstanceVar,因为它是实例变量// System.out.println("Outer instance variable: " + outerInstanceVar); }}
}public class StaticNestedClassExample {public static void main(String[] args) {OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();nested.display();}
}
StaticNestedClass
是静态嵌套类,可直接访问外部类的静态变量 outerStaticVar
。
static的注意事项
1.静态方法只能访问静态变量和静态方法;
2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态成员的成员变量和非静态的成员方法;
3.静态方法中是没有this关键字的。
重新认识main方法
public class HelloWorld{public static void main(String[] args){System.out.println("HelloWorld");}
}
public | 被JVM调用,访问权限足够大 |
static | 被JVM调用,不用创建对象,直接类名访问 因为main方法是静态的,所以测试类中的其他方法也需要是静态的 |
void | 被JVM调用,不需要给JVM返回值 |
main | 一个通用的名称,虽然不是关键字,但是被JVM识别 |