静态(static)
790字约3分钟
2025-09-23
类变量(静态变量)
- 类变量在jdk8以前类变量是在方法区里面的,在jdk8以后类变量就在堆中了
- static变量是对象共存不管static变量在那里,static是同一个类中的所有对象的共享的,static类变量,在类加载的时候就生成了
- 方法中的属性不能使用static修饰符
- 静态变量不用创建对象就可以访问
语法:
- 访问修饰符 static 数据类型 变量名(推荐这种写法)
- static 访问修饰符 数据类型 变量名
public static int a = 10; // 推荐写法
static public int b = 20;
访问类变量:
访问类变量也要遵守访问修饰符的相关规定
- 类名.类变量
- 对象名.类变量
public class staticClass {
public static void main(String[] args) {
// 通过类名访问(推荐)
System.out.println(A.i++);
// 通过对象访问
B b = new B();
System.out.println(b.y);
}
}
class A {
public static int i = 0;
}
class B {
public static int y = 1;
}
类变量(静态变量)的使用细节
static int a = 1;
int b = 2;
// a1是静态变量,所以不能将b直接赋值给a1
static int a1 = a;
类方法(静态方法)
自己编写一个工具类的时候,直接将该该类中的方法设置为 static
类(也就是静态类),这样就可以在不创建对象的情况下直接调用该方法
当方法不涉及到任何任何和对象相关的成员,则可以将方法设计成静态方法提高开发效率
语法:
- 访问修饰符 static 数据类型 方法名() { }(推荐这种写法)
- static 访问修饰符 数据类型 方法名()
public static void a() {} // 推荐写法
static public void b() {}
访问类方法:
访问类方法也要遵守访问修饰符的相关规定
- 类名.类方法
- 对象名.类方法
public class staticClass {
public static void main(String[] args) {
// 通过类名访问(推荐)
C.c();
// 通过对象名访问
C c = new C();
c.c();
}
}
class C {
public static void c() {
}
}
类方法(静态方法)的使用细节
调用静态方法可以不用创建对象
调用普通变量和普通方法则必须创建对象才可以调用
静态方法中不能使用和类有关的关键字(this,super等)
静态方法只能访问静态方法和静态变量
调用依旧遵循就近原则
静态方法和静态变量依旧要遵守访问修饰符的访问规则
public class staticClass { public static void main(String[] args) { A a = new A(); a.judg(); // 输出 a = 2 } } class A { static int a = 1; public void judg() { int a = 2; System.out.println("a = " + a); } }