java中关于静态变量的问题
各位大神,我觉得第二段代码应该没问题,但是报空指针异常,特不理解.当我调用该类中的静态方法时,先执行静态代码块,发现cf变量,再给静态变量分配内存,java虚拟机是这样执...
各位大神,我觉得第二段代码应该没问题,但是报空指针异常,特不理解.
当我调用该类中的静态方法时,先执行静态代码块,发现cf变量,再给静态变量分配内存,java虚拟机是这样
执行的么.也就是类加载的时候,静态变量是不是在需要用到的地方再分配内存
当设置为静态变量的时候,如果多次调用该类,那么是不是只会初始化一次
基础没学好,希望能回答的详细点,谢谢... 展开
当我调用该类中的静态方法时,先执行静态代码块,发现cf变量,再给静态变量分配内存,java虚拟机是这样
执行的么.也就是类加载的时候,静态变量是不是在需要用到的地方再分配内存
当设置为静态变量的时候,如果多次调用该类,那么是不是只会初始化一次
基础没学好,希望能回答的详细点,谢谢... 展开
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()时,就没有再初始化了。
展开全部
静态变量和静态激闷块的明旁弯初始化是按照定义的先启戚后顺序。这两种方式没有顺序。
你把static块提到sf上面就可以了。
你把static块提到sf上面就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
private static SessionFactory sf = cf.buildSessionFactory(); 这行放到
static{};方法块下面就没事了。
因为你在cf.buildSessionFactory();的cf是侍中搭null ,这句是错老拿培友的
static{};方法块下面就没事了。
因为你在cf.buildSessionFactory();的cf是侍中搭null ,这句是错老拿培友的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询