t被初始化为null;因为是指向对象的的reference。测试程序如下:class Base
{
    static int i=100;
    public static void fun()
    {
          System.out.println("shit~");
    }
}public class TestOne
{
    static Base t;
    public static void main(String []args)
    {
        //System.out.println(t.i);
        //t.fun();
        System.out.println(t);
    }
}

解决方案 »

  1.   

    如果不进行new初始化
    他被初始成null
    static的作用主要是:
    只占用内存中的一块地址。
    那个实例中的static改变都会使其他实例中
    的static变量改变,下面是测试的例子。
    class test 
    {
    static int t = 100;
    public static void print()
    {
    System.out.println("This is static");
    }
    }
    public class statics
    {
    public static test t1;
    public static test t2 = new test();
    public static void main(String args[])
    {
    System.out.println(t1);
    t1 = new test();
    t1.t = 200;

    System.out.println("This is t1.t:"+t1.t);
    t2.t = 300;
    System.out.println("This is t2.t:"+t2.t);

    System.out.println("This is t1.t when t2.t changed:"+t1.t);
    }
    }
      

  2.   

    Object类成员默认初始化为null,此处t==null,t.i为什么他能够访问类的静态数据和静态方法呢?系统载入Base类后其静态成员存放在一固定地址(专用于存放类的静态成员,对象实例不存放在此处),t本身储存的是指向实例对象的地址,对象分配在堆里。调用t.i首先查看确认t的类型为Base,再看Base这个类i成员是什么类型,是静态成员则从此Class获得i,是实例成员则到t所指的对象中获得数据。因为此处i是静态的,故而t本身指向哪个实例对象或为null均不影响访问。
    一般访问一个类的静态数据或者静态的方法,是通过类名访问。
      

  3.   

    楼上的说得是对的,
    你声明了:
    static Base t;这时java就将此类加载了,你就可以用Base.fun()来调用fun,
    你用t.fun是一样的,不过推荐用Base.fun()
    你可以这样试试:
    class Base
    {
        static int i=100;
        static{
           System.out.println("static test!");
        }
        public static void fun()
        {
              System.out.println("shit~");
        }

    看看在什么时候打的
      

  4.   

    “楼上说的是对的”,可是和我问的好想没什么关系
    系统载入Base类后其静态成员存放在一固定地址(专用于存放类的静态成员,对象实例不存放在此处),t本身储存的是指向实例对象的地址,对象分配在堆里。
    -------------------------------------------------------------
    t都已经是null的了,还存什么实例对象的地址啊,访问一个类里面static的成员要么是类名,要么是该类对像的引用,在这里t是一个类名?一个对象的引用?而这个引用是个null的东西,所以他什么都引用不了,谁都没有引用那就谁也不能访问,而他在这里偏偏是访问了一个staitc的成员变量i.难道static Base t;是一种特殊的机制?当t和i都在静态存储区域的时候就发生了这种怪现象
      

  5.   

    你声明了:
    static Base t;
    t 为NULL;t与Base 的初始化地址相同。
      

  6.   

    to ntzls(三星堆):
    哈哈,我就是这么笨~0~
      

  7.   

    我都看不下去了,ntzls(三星堆)应该是讲得很清楚了,慢慢领会吧
      

  8.   

    t 为NULL;t与Base 的初始化地址相同。
    -----------------------------------
    佩服!
      

  9.   

    其实JAVA在编译t.i的时候,会将他编译成getstatic的指令,该指令运行时,直接就去一个固定的地址去读了(该值在常量池中),根本不需要用到t这个对象,而如果时实例变量的话,会编译成getfield指令,虚拟机运行时,才会先找到t的对象,然后再取值(该值在堆中)
      

  10.   

    在java中有什么办法可以看一个“东西”的地址?如果真如D_O_N_G(ilmmvilo)兄弟说的
    t和Base的地址相同,那就再清楚不过了,地址相同也就是说他们是同一个东西,只是给那段内存里的东西起了不同的两个名字