static关键字
在Java中,static
是一个关键字,用于修饰类的成员(变量、方法等)。静态成员属于类本身而不是类的实例,这意味着每个类都有唯一的静态变量副本,所有该类的对象共享这个副本,而不论创建了多少个对象。
有static修饰的代码和没有static修饰的代码的区别:
有static修饰的代码属于类,没有static修饰的代码属于对象
属于类的东西是被所有对象所共享的
初始static关键字
代码:
Test类
public class Test {
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
p1.name ="李四”;
p1.address=“北京”;
p2.name ="王五”;
p2.address="上海";
System.out.println(p1.tostring());
System.out.println(p2.tostring());
}
}
Person类
public class Person {
public String name ="张三";
public static string address ="保定";
public static void run(string num){
System.out.println("跑了====》"+num+"米");
}
}
拿上面的图片来举例子:
右侧代码写入了一个Person类,而该类中的adress是static类型的,所以adress和其他的存储变量在存储空间上是有所区别的。
对象的创建:
下图是对象创建的时候,流程图是一个怎样的过程。因为有static修饰的adress是属于类的,所以在方法区中有一个静态常量池,这里面是专门存储静态内容的。随着对象的创建,编译器会分配空间并初始化变量。但因为adress是属于类的,所以无论是实例化对象p1或是p2中的哪一个,他们都是静态常量池中的那个adress,所以上面那个代码最终两个对象的adress都是上海。
这里还需要注意的是,代码是按照顺序执行的,如果将p1的打印放在生成p2之前,打印的结果是有所不同的。
static修饰不同的区别
修饰变量:
成为类变量,被所有该类产生的对象所共享的
修饰方法:
成为静态方法
静态方法和非静态方法
静态方法能够直接被类使用,非静态方法不能被main方法所使用
static修饰的方法才能够调用static方法,而main方法是一种静态方法
修饰代码块:
static修饰的代码块在程序运行之前执行,其目的是优化