0
点赞
收藏
分享

微信扫一扫

Java中的static关键字

我阿霆哥 2022-01-28 阅读 77


update on 20200504:修改相关格式;补充相关内容

0 总结

Get to the points first. The article comes from LawsonAbs!



  • static关键字可以使多个对象共享一份数据资源。【java没有全局变量】
  • static修饰的函数或属性,可以根据 “类名点” 的方式去调用。【class.count】 
  • 它修饰的成员,在类加载的时候加载并完成初始化,只执行一次。【修饰变量只占一份内存空间】
  • 无法从静态的上下文中引用非静态属性或者方法。this也不可以用在static修饰的上下文中。
  • 在jvm读取class文件时,就对static的属性和函数进行处理。
  • static变量脱离对象存在,而是属于类,所以也称为类变量。只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了
  • 由static修饰的变量,方法,代码块分别称为静态变量,静态方法,静态代码块


1.Java中的static关键字

《Java编程实现》Chapter 11,持有对象

在本章的第二个代码中【如下】,

package holding;
import java.util.ArrayList;
class Apples {
private static int number;// 表示苹果数量
private final long id = number++;
public long id(){
return id;
}
}

public class CopyOfApplesAndOrangesWithoutGenerics {
public static void main(String [] args){
ArrayList<Apples> apples = new ArrayList<Apples>();
for (int i = 0; i<4; i++)
apples.add(new Apples());

for(int i=0;i<apples.size();i++){
System.out.println((apples.get(i)).id());
}

for(Apples a:apples){
System.out.println(a.id());
}
}
}

我们可以看到程序的执行效果图【如下】:

Java中的static关键字_加载

如果将代码public static int number;修改为public int number;得到的程序执行结果如下:

Java中的static关键字_静态变量_02

这个时候我们看到输出全部成0,这是为什么呢?

【知识点1】在程序中,被static 修饰的成员变量只有一份,占一个固定空间,所以虽然在后面申请了三个Apples对象,但是仍然只有一个number ,所以对其做number++赋值给id,然后便可以输出0-3。

【知识点2】通过使用泛型,就可以在编译期防止将错误类型的对象放到容器中。比如此例中的ArrayList<Apples> apples = new ArrayList<Apples>();


举报

相关推荐

0 条评论