日期:2014-05-20  浏览次数:20899 次

弱弱的问个static的问题,求解释
我在声明static变量之后,是否需要立即初始化,如果不初始化的话,会出现怎么样的情况或者异常?还有一个小问题,如果我希望一个对象只实例化一次,之后变可以使这个对象在很多方法里使用,该怎么实现呢?用static可以,但是觉得不直接初始化不是很好。求解释

我的程序类似这种

private static Demo _demo;//这里没有进行初始化

public boolean login(){
    _demo = getConnection();//这里进行初始化,
}


按照上面的代码,这样是否存在不合理之处呢?
java static

------解决方案--------------------
static变量在定义的时候可以不用立即初始化,static的特点在于整个class的所有object在内存中只有一个变量copy存在。
后面说的那个,正是static的作用啊~
------解决方案--------------------
单例模式可以满足你的需求
------解决方案--------------------
被static修饰过的对象一直会存在与内存之中,也就是说并不是用到采取加载的。速度比较快,但是也因为如此,所以被static修饰的建议是多个类都用到的。
static修饰的不用立即实例化,但是用之前必须实例化。如果不实例化报错空指针异常。当然,既然声明为静态的了,还是声明的同时实例化比较合适。。
后一个问题,一个对象在多个类中用,如果想等到需要用到才创建的话用单例模式中的懒汉模式,如果像一开始就创建的话就用单例模式中的懒汉模式。
------解决方案--------------------
/*
1.static修饰的变量不一定创建就要初始化,等你在后面用到这个变量时再初始化也行,但不建议这样做。因为被static修饰的成员变量是被所有的对象所共享的,所以建议创建静态变量的时候就直接初始化。
2.要让一个对象只实例化一次,之后便可以使这个对象在很多方法里使用的话。那么可以使用单例设计模式。
  先解释下单例模式解决的问题:保证了一个类在内存中只有一个对象。
  如何做到呢?
  (1).要不想其他类创建该类对象的话,那么将构造函数私有化即可。
  (2).在自己类中创建一个对象并将其私有化。
  (3).对象创建了是给其他类使用的,那么在该类中提供一个方法供其他类使用。
 单例设计模式分为2种,可以形象的称之为饿汉式和懒汉式
   饿汉式:先创建对象
   懒汉式:先不创建对象,进行判定,需要用时才创建对象。
 下面来代码示例下吧:
*/

//----------------------------

//饿汉式
class Single
{
private stetic Single s = new Single();//创建对象
private Single(){}//将构造函数私有化,防止其他类创建该类对象
public static Single/*返回值类型为类类型*/ getInstance()//提供一个方法供其他类使用
{
return s;
}
}

//懒汉式
class Single2
{
private stetic Single2 s = null;//先不创建对象
private Single(){}//将构造函数私有化,防止其他类创建该类对象
public static Single2 getInstance2()//提供一个方法供其他类使用
{
//进行判断,需要用时才创建对象
if(s == null)
s = new SIngle2();
else
return s;
}
}

希望对楼主有用!
------解决方案--------------------
在调用login前不要使用_demo.成员