一、static的作用
在Java中,static是一个关键字,用于表示静态的特性。它可以用于修饰变量、方法和内部类。
二、用static修饰有什么不一样
2.1静态成员变量
static int number;
number用了static修饰,所以number就是静态成员变量。它属于类而不是对象,只会在内存中存在一份副本。可以直接通过类名访问静态变量,无需创建对象。静态变量在程序运行期间始终存在,直到程序结束或被显式销毁。
2.2静态方法
public static void printHello() {
System.out.println("hello");
}
静态方法不需要依赖于对象,可以直接通过类名调用。不能在静态方法中直接访问非静态成员,因为非静态成员的生命周期与对象相关。
2.3静态内部类
静态内部类与外部类相互独立,可以直接通过外部类名访问。静态内部类可以拥有静态和非静态成员,且不依赖于外部类的实例。
三、使用static的情况
在工具类中定义常量,如public static final int MAX_COUNT = 100;。
创建单例模式中的静态方法,如public static Singleton getInstance() { return instance; }。
在静态方法中调用其他静态方法或访问静态变量。
在静态内部类中定义静态成员或方法。
四、注意
4.1静态成员属于类级别,与对象无关:
静态变量和静态方法属于类本身,而不是类的实例。
静态成员在内存中只有一份副本,被所有类的对象所共享。
4.2静态成员不能直接访问非静态成员:
静态方法和静态变量不能直接访问非静态方法和非静态变量,因为非静态成员是依赖于对象存在的。
若要在静态方法中访问非静态成员,需要通过创建对象来访问。
4.3静态方法中不能使用this关键字:
this
关键字代表当前对象,在静态方法中没有当前对象的引用,因此不能在静态方法中使用this
关键字。
如果静态方法需要访问对象的成员,可以将对象作为参数传递给静态方法。
4.4静态成员可以通过类名直接访问:
静态成员可以直接使用类名进行访问,无需创建对象。
例如:ClassName.staticVariable
或者 ClassName.staticMethod()
。
4.5静态块(static block):
可以使用静态块初始化静态变量或执行其他静态操作。
静态块在类加载时执行,并且只会执行一次。
4.6单例模式中常用静态成员:
静态变量和静态方法常用于创建单例模式,保证全局只有一个实例。
静态变量可以存储单例对象的引用,静态方法用于获取该实例。
4.7注意线程安全性:
多个线程同时访问静态成员可能导致并发冲突,需要注意线程安全性。
可以通过使用同步关键字或其他线程安全机制来解决并发问题。