Java static关键字
Java static关键字
java static关键字主要是方便在没有创建对象的情况下进行调用,这里面包括变量和方法。也就是说,只要类被加载了,就可以通过类名进行访问,static关键字可以修饰类的成员变量以及成员方法。注意,被static修饰的变量和方法通常放在内存的静态区里。
1. 静态变量
如果在声明变量时使用了static关键字,那么这个变量就称之为静态变量。静态变量只是在类加载的时候获取一次内存空间,这使得静态变量很节省空间。例如:
class StaticClass{
static int value=255;
}
class Demo{
public static void main(String[] args){
StaticClass.calue
}
}
2. 静态方法
静态方法具有以下特点:
- 静态方法属于这个类而不是这个类的对象;
- 调用静态方法时不需要创建这个类的对象;
- 静态方法可以访问静态变量。
例如:
class Student{
String name;
int age;
static String address;
public sttaic void sayHello(){
}
}
到时其它类如果想访问静态变量和静态方法时只需要:
Student.address
Student.sayHello()
需要注意的是,静态方法不能访问非静态变量和非静态方法,例如,如下操作是错误的:
Student.name; //error
Student.sayHello(); //error
main主方法是静态的,如果main方法不设置为静态方法,则Java虚拟机在执行的时候还要创建一个对象才能调用main方法,而main方法作为程序的入口,没有必要专门创建一个对象来调用main方法。
3. 静态代码块
用一个static关键字和一对大括号括起来的代码称之为静态代码块。例如:
public class Demo{
static {
System.out.println("静态代码块执行...");
}
public static void main(String[] args) {
System.out.println("main...");
}
}
程序运行结果是:
静态代码块执行...
main...
也就是说,静待代码块优先于main方法先执行!
但是如果没有main方法是否可以直接执行静态代码块?例如:
public class Demo {
static {
System.out.println("静态代码块执行...");
}
// public static void main(String[] args) {
// System.out.println("主方法执行");
// }
}
执行如下命令:
javac Demo.java
java Demo
//...
则会抛出NoClassDefFoundError错误。
需要注意的是,静态代码块通常用于加载配置文件到内存中。
4. 静态内部类
Java允许开发人员在一个类中声明一个内部类,常见的内部类有四种:
- 成员内部类
- 局部内部类
- 匿名内部类
- 静态内部类
这里只说明静态内部类。例如:
public class Demo{
public Demo(){
}
public static class StaticClass{
public static Demo demoInstance = new Demo();
}
public static Demo getDemoInstance(){
return StaticClass.demoInstance;
}
}
在这里第一次加载Demo类的时候,并不会并不会初始化demoInstance,只有在第一次调用getDemoInstance()方法的时候Java虚拟机才会加载StaticClass这个类并初始化demoInstance,这样不仅可以保证线程安全性,也可以保证Demo类的唯一性。
需要注意的是:
- 静态内部类不能访问外部类的所有成员变量;
- 静态内部类可以访问外部类所有的静态变量,这里也包括私有静态变量;
- 外部类不允许被声明为static。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理