JAVA里static 变量在程序执行结束后是否被消毁。
展开全部
//static变量是属于类的,程序结束后,类所占空间会被回收,
//那么static变量自然也就被销毁了。给你个例子:
public class TestStatic001 {
public static void main(String[] args){
MyStatic.num ++;
System.out.println(MyStatic.num);;
}
}
public class TestStatic002 {
public static void main(String[] args){
System.out.println(MyStatic.num);
}
}
public class MyStatic {
static{System.out.println("被加载……");}
public static int num = 15;
}
//当运行TestStatic001时,会打印MyStatic类的静态块消息,
//且static变量值打印为16,
//运行TestStatic002时也会打印MyStatic类的静态块消息,
//且static变量值为15,如果它在程序一结束后没被销毁,
//那么程序二时就也应该是16的(static变量只会有一个),
//因此可以看出,static变量在程序运行结束后是会被销毁的。
//那么static变量自然也就被销毁了。给你个例子:
public class TestStatic001 {
public static void main(String[] args){
MyStatic.num ++;
System.out.println(MyStatic.num);;
}
}
public class TestStatic002 {
public static void main(String[] args){
System.out.println(MyStatic.num);
}
}
public class MyStatic {
static{System.out.println("被加载……");}
public static int num = 15;
}
//当运行TestStatic001时,会打印MyStatic类的静态块消息,
//且static变量值打印为16,
//运行TestStatic002时也会打印MyStatic类的静态块消息,
//且static变量值为15,如果它在程序一结束后没被销毁,
//那么程序二时就也应该是16的(static变量只会有一个),
//因此可以看出,static变量在程序运行结束后是会被销毁的。
展开全部
如果某个方法结束了,这个方法里面的静态变量不会立即销毁,
当然如果主方法main()结束了,系统会回收这个程序所占用的所有的内存空间,不管是堆还是栈里面
当然如果主方法main()结束了,系统会回收这个程序所占用的所有的内存空间,不管是堆还是栈里面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
tudou869,你给的例子不正确。
1.TestStatic001,2是两个不同的类,在它们各自的类中调用第三个类的静态字段,当然是各自用各自的,当1,2各自退出方法后,这个作用域不存在了,对于1,2这两个类来说没有了MyStatic.num的引用而已。
2.你看当这两个类在同一个作用域时调用静态字段的例子:
public class ClassTest {
public static void main(String[] args) {
TestStatic001 a = new TestStatic001();
TestStatic002 b = new TestStatic002();
a.add();
b.show();
}
}
class TestStatic001 {
public void add() {
MyStatic.num++;
System.out.println(MyStatic.num);
}
}
class TestStatic002 {
public void show() {
System.out.println(MyStatic.num);
}
}
class MyStatic {
static {
System.out.println("被加载……");
}
public static int num = 15;
}
1.TestStatic001,2是两个不同的类,在它们各自的类中调用第三个类的静态字段,当然是各自用各自的,当1,2各自退出方法后,这个作用域不存在了,对于1,2这两个类来说没有了MyStatic.num的引用而已。
2.你看当这两个类在同一个作用域时调用静态字段的例子:
public class ClassTest {
public static void main(String[] args) {
TestStatic001 a = new TestStatic001();
TestStatic002 b = new TestStatic002();
a.add();
b.show();
}
}
class TestStatic001 {
public void add() {
MyStatic.num++;
System.out.println(MyStatic.num);
}
}
class TestStatic002 {
public void show() {
System.out.println(MyStatic.num);
}
}
class MyStatic {
static {
System.out.println("被加载……");
}
public static int num = 15;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
恩会的程序运行结束后操作系统会回收程序占用的内存空间。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有外部引用就会被gc否则不会。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询