当前位置: 技术问答>java相关
有兴趣的朋友跟我谈谈java中的关键字:static
来源: 互联网 发布时间:2015-05-07
本文导语: 一开始理解static是静态的,是永远不变的,后来有理解为static是常驻内存的,占用一个空间以后,将永不释放。请各位考察一下代码: //Untitled1.java public class Untitled1 { public static int x=0; }...
一开始理解static是静态的,是永远不变的,后来有理解为static是常驻内存的,占用一个空间以后,将永不释放。请各位考察一下代码:
//Untitled1.java
public class Untitled1 {
public static int x=0;
}
//Untitled2.java
public class Untitled2 {
public static void main(String[] args) {
System.out.println(Untitled1.x);
Untitled1.x++;
}
}
//Untitled3.java
public class Untitled3 {
public static void main(String[] args) {
System.out.println(Untitled1.x);
Untitled1.x++;
}
}
我的本意是想每次启动Untitled2或者Untitled3都能够让X加1,第一次运行Untitled2,结果为0,第二次运行结果要为1,第三次运行结果为2,如此类推,可我每次运行的结果都是0。
请问各位有什么好的方法能实现我的原意吗?
谢谢!!!
//Untitled1.java
public class Untitled1 {
public static int x=0;
}
//Untitled2.java
public class Untitled2 {
public static void main(String[] args) {
System.out.println(Untitled1.x);
Untitled1.x++;
}
}
//Untitled3.java
public class Untitled3 {
public static void main(String[] args) {
System.out.println(Untitled1.x);
Untitled1.x++;
}
}
我的本意是想每次启动Untitled2或者Untitled3都能够让X加1,第一次运行Untitled2,结果为0,第二次运行结果要为1,第三次运行结果为2,如此类推,可我每次运行的结果都是0。
请问各位有什么好的方法能实现我的原意吗?
谢谢!!!
|
如果你是要实现那种功能。
public class Untitled1 {
private int x=0;
private static Untitled1 u=null;
private Untitled1()
{}
public static Untitled1 getInstance()
{
if(u!=null)
return u;
else
{
return new Untitled1();
}
}
public void addX()
{
x++;
}
public int getX()
{
return x;
}
}
}
在Untitled2,Untiled3中
getInstance().addX();
其实这就是设计模式中的singleton模式。他每次都返回原来的实例。
public class Untitled1 {
private int x=0;
private static Untitled1 u=null;
private Untitled1()
{}
public static Untitled1 getInstance()
{
if(u!=null)
return u;
else
{
return new Untitled1();
}
}
public void addX()
{
x++;
}
public int getX()
{
return x;
}
}
}
在Untitled2,Untiled3中
getInstance().addX();
其实这就是设计模式中的singleton模式。他每次都返回原来的实例。
|
static 表示该成员在没有实例化对象的情况下也可以使用。是吗?
那你那种方式肯定不行吧。
那你那种方式肯定不行吧。
|
我的理解:
你这样的每次重新运行的时候,Untitled1都是第一次调用的,如果实现你的问题的时候,你应该保证Untitled2,Untitled3在同一个java调用中,免得每次调用Untitled1时,它都重新初始化。
解决方法:
1实现系列化接口
2用一个文件来存储,如何采用单一实例的方法!
你这样的每次重新运行的时候,Untitled1都是第一次调用的,如果实现你的问题的时候,你应该保证Untitled2,Untitled3在同一个java调用中,免得每次调用Untitled1时,它都重新初始化。
解决方法:
1实现系列化接口
2用一个文件来存储,如何采用单一实例的方法!
|
其实你的那种调用方法不可能得到你要的结果的
因为Untitled2和Untitled3运行时虚拟机建立的是不同的内存堆,
也就是说他们每次运行都会建立新的静态区!静态区仍然不能脱离实际运行环境存在,所以出现了这种结果!
静态对象通常用于在不同的对象之间共享数据的。
因为Untitled2和Untitled3运行时虚拟机建立的是不同的内存堆,
也就是说他们每次运行都会建立新的静态区!静态区仍然不能脱离实际运行环境存在,所以出现了这种结果!
静态对象通常用于在不同的对象之间共享数据的。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。