为了账号安全,请及时绑定邮箱和手机立即绑定

请问:静态变量在实际使用当中有有什么作用?还有课程里说,“直到该类被卸载才会进行资源回收”,这句话怎么理解?是不是当静态变量被重新赋值就是被卸载?

正在回答

6 回答

fub yuyfcd

0 回复 有任何疑惑可以回复我~

静态变量又被称为类变量,是与类共生共灭的,如果你声明了一个对象,则对象也可以通过对象.静态变量 的方式使用这个静态变量,如果你不声明任何对象,这个静态变量也是存在的,使用 类名.静态变量 来使用.

而普通变量是不能直接使用 类名.变量名 来使用的!!!!

在实际的开发过程中,往往static静态变量被定义成常量final,用于各个对象间共享数据使用.

下面的代码,希望能帮到你,你可以执行以下看看:

package com.sellcar;

public class test5 {
	static double Pi = 3.14;
	double r =0;
	
	public static void main(String[] args){
		System.out.println("Static静态变量:" + test5.Pi);//没有声明任何对象,直接使用类名.静态变量名 来调用
		//System.out.println("普通变量:" +test5.r); //普通变量使用 类名.静态变量名 调用时报错!!!
		test5 t1 = new test5(1.2);
		test5 t2 = new test5(1.8);
		System.out.println("第一个对象的内容 : t1.r="+t1.r + " t1.Pi="+t1.Pi + " Static test5.Pi="+ test5.Pi );
		System.out.println("第二个对象的内容 : t2.r="+t2.r + " t2.Pi="+t2.Pi + " Static test5.Pi="+ test5.Pi );
		
		//某个对象对static变量修改值,则static值会对整个类和所有的对象改变
		//普通变量被修改,则只有一个对象中的变量的值被修改,其他对象值不变
		//static变量被修改,则所有对象中的static变量的值被修改!!!
		t1.Pi = 5;
		System.out.println("第一个对象的内容 : t1.r="+t1.r + " t1.Pi="+t1.Pi + " Static test5.Pi="+ test5.Pi );
		System.out.println("第二个对象的内容 : t2.r="+t2.r + " t2.Pi="+t2.Pi + " Static test5.Pi="+ test5.Pi );
		t2.Pi = 8;
		System.out.println("第一个对象的内容 : t1.r="+t1.r + " t1.Pi="+t1.Pi + " Static test5.Pi="+ test5.Pi );
		System.out.println("第二个对象的内容 : t2.r="+t2.r + " t2.Pi="+t2.Pi + " Static test5.Pi="+ test5.Pi );
		test5.Pi =10;
		System.out.println("第一个对象的内容 : t1.r="+t1.r + " t1.Pi="+t1.Pi + " Static test5.Pi="+ test5.Pi );
		System.out.println("第二个对象的内容 : t2.r="+t2.r + " t2.Pi="+t2.Pi + " Static test5.Pi="+ test5.Pi );
	}
	
	public test5(double r){
		this.r = r;
	}
}

输出结果:

Static静态变量:3.14

第一个对象的内容 : t1.r=1.2 t1.Pi=3.14 Static test5.Pi=3.14

第二个对象的内容 : t2.r=1.8 t2.Pi=3.14 Static test5.Pi=3.14

第一个对象的内容 : t1.r=1.2 t1.Pi=5.0 Static test5.Pi=5.0

第二个对象的内容 : t2.r=1.8 t2.Pi=5.0 Static test5.Pi=5.0

第一个对象的内容 : t1.r=1.2 t1.Pi=8.0 Static test5.Pi=8.0

第二个对象的内容 : t2.r=1.8 t2.Pi=8.0 Static test5.Pi=8.0

第一个对象的内容 : t1.r=1.2 t1.Pi=10.0 Static test5.Pi=10.0

第二个对象的内容 : t2.r=1.8 t2.Pi=10.0 Static test5.Pi=10.0


12 回复 有任何疑惑可以回复我~
#1

我也是猫

所以类里面的静态变量有点类似VB的全局静态变量,可以这么理解么
2016-12-17 回复 有任何疑惑可以回复我~
#2

Ecin

非常感谢!完美诠释
2017-01-05 回复 有任何疑惑可以回复我~

java 中是会自动回收的、静态变量意思差不多就是绑定在哪个类当中、如果想要使用、就必须先调用该类、还有问题中的重载、字面上的意思就是重新载入、也就是说当对之前的变量所赋的值不满、或有独立的值等、就会被覆盖、之前所定义的数据值就是随之消失、还有问题中所涉及到的消失是怎么消失的、这里帮扩展下、java当中有一个垃圾回收器、当垃圾达到一定量时、java回收器就会过来清理垃圾、之前所消失的数据开始是清理在垃圾器里边的、就好比现实生活中的垃圾站或垃圾篓一样、满了就清理了!!这样就很好理解了!!不知道有没有解决您这边的问题!谢谢!!

4 回复 有任何疑惑可以回复我~

静态变量是和类同生共死的,也就是说的当一个类被加载初始化时,这个静态变量就在内存中占据一定的空间,直到这个类不再有任何的引用被当成垃圾回收掉的时候,静态成员才会从内存中消失。所以说静态成员的也就是类成员的生命周期要比其他的非静态成员要长。

2 回复 有任何疑惑可以回复我~

既然有构造函数,相对应就有析构函数,构造函数是用来创建对象,而析构函数就是用来卸载对象的,对象不存在了,资源就会被回收

0 回复 有任何疑惑可以回复我~
#1

AfterStories

请问如何理解这个 资源被回收 这个类占用了什么资源? 在用在哪里?不回收又如何?回收的形式是怎样做的?
2015-12-07 回复 有任何疑惑可以回复我~
#2

_Jack_Han_

这里的卸载等于delete吗?
2015-12-26 回复 有任何疑惑可以回复我~
#3

我也是猫 回复 AfterStories

占用了内存资源吧。className = "Java开发一班" 这句话本来是储存在硬盘里的,一旦该类被调用,为了方便使用,就把这个变量拿出来放到内存里了。但是内存是有限的,所以快满了的时候就要“回收”,就是从内存里删掉的意思。就好比你的书柜里有很多书,这可以看作是硬盘,然后你今天相查某一本书,就要把他拿出来放到书桌上,这样看起来比较方便,书桌就可以看作内存。但是当你拿了好几本书出来,书桌就放满了,这时候就要把不要的书放回去。。。
2016-12-17 回复 有任何疑惑可以回复我~
#4

qq_纵横四海_2

赞一个!
2017-05-25 回复 有任何疑惑可以回复我~
查看1条回复

静态变量,可以看作全局变量,后面这句话是说的一个回收机制,不是重新赋值就卸载了,而是类被卸载了,它才会卸载。也就是说类不加载了,他就不加载了

3 回复 有任何疑惑可以回复我~
#1

paddy 提问者

那左侧实例中静态变量hobby最后被赋新值 “爱慕课”,可否这样理解:只是变量hobby被赋新值。它本身依然是静态变量,只是值变了而已?
2014-10-30 回复 有任何疑惑可以回复我~
#2

慕的地2165916 回复 paddy 提问者

是这样的
2015-09-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530714    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程
意见反馈 帮助中心 APP下载
官方微信