java中关于静态变量的问题

各位大神,我觉得第二段代码应该没问题,但是报空指针异常,特不理解.当我调用该类中的静态方法时,先执行静态代码块,发现cf变量,再给静态变量分配内存,java虚拟机是这样执... 各位大神,我觉得第二段代码应该没问题,但是报空指针异常,特不理解.
当我调用该类中的静态方法时,先执行静态代码块,发现cf变量,再给静态变量分配内存,java虚拟机是这样
执行的么.也就是类加载的时候,静态变量是不是在需要用到的地方再分配内存
当设置为静态变量的时候,如果多次调用该类,那么是不是只会初始化一次
基础没学好,希望能回答的详细点,谢谢...
展开
 我来答
睡神之神2010
推荐于2017-09-05 · 超过34用户采纳过TA的回答
知道答主
回答量:100
采纳率:66%
帮助的人:41.3万
展开全部

不是先执行静态代码快。
当调用静态方法时,首先执行静态类属性,static代码块也相当于一个类属性(我是这样理解的);执行的顺序是你属性的排列顺序。当第一次调用静态属性或静态方法以及第一次创建对象时,都会初始化静态属性,分配内存,而且以后不再初始化。如下例:

package edu.hu.my;

public class Demo4
{
    public static Demo4_1 d1 = new Demo4_1(1);
    public static Demo4_1 d2 = new Demo4_1(2);
    
    public static void f()
    {
        System.out.println("。。。。。");
    }
    
    public static void main(String[]args)
    {
        System.out.println("..."+Demo4.d2+"...");
        Demo4.f();
    }

}

class Demo4_1
{
    public Demo4_1(int i)
    {
  洞册掘      System.out.println(i++);
    纳核}
}

输出:

1
2
...edu.hu.my.Demo4_1@15bdc50...
。。。。。

当第一次调用静态属性d2时初姿碧始化,所有静态属性;再调用方法f()时,就没有再初始化了。

wudawei121
2013-10-20 · TA获得超过272个赞
知道小有建树答主
回答量:119
采纳率:0%
帮助的人:64.8万
展开全部
静态变量和静态激闷块的明旁弯初始化是按照定义的先启戚后顺序。这两种方式没有顺序。
你把static块提到sf上面就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
renlongnian123
2013-10-20 · TA获得超过179个赞
知道答主
回答量:207
采纳率:0%
帮助的人:88.1万
展开全部
private static SessionFactory sf = cf.buildSessionFactory(); 这行放到
static{};方法块下面就没事了。
因为你在cf.buildSessionFactory();的cf是侍中搭null ,这句是错老拿培友的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式