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);
}
}
{
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);
}
}
解决方案 »
- ThreadLocal一般用在哪些地方?有何用?
- 如何将一个InputStream类型保存为本地文件?
- Linux下运行rmiregistry出问题了
- 如何判断文件是否正被其他程序写?
- 我想给JTextArea加一个滚动条,为什么不能显示??? 在retrieve()部分!
- 为何我得到的月份值是当前月份减一:month=Calendar.getInstance().get(Calendar.MONTH);比如当前时间为10月,month的值为9。
- j2sdk1.4.1_02怎样编译程序?
- ##############3如何得到当前的目录?
- 我是一个菜鸟,请问各位高手,怎么配置java编译环境
- 请问各位大虾:能不能把一个activeform加入到applet中,如果可以,在vj中怎么做?
- 从数据库中读出的字符串只能显示一行
- 怎样把一个字符转换成ASCII码?
他被初始成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);
}
}
一般访问一个类的静态数据或者静态的方法,是通过类名访问。
你声明了:
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~");
}
}
看看在什么时候打的
系统载入Base类后其静态成员存放在一固定地址(专用于存放类的静态成员,对象实例不存放在此处),t本身储存的是指向实例对象的地址,对象分配在堆里。
-------------------------------------------------------------
t都已经是null的了,还存什么实例对象的地址啊,访问一个类里面static的成员要么是类名,要么是该类对像的引用,在这里t是一个类名?一个对象的引用?而这个引用是个null的东西,所以他什么都引用不了,谁都没有引用那就谁也不能访问,而他在这里偏偏是访问了一个staitc的成员变量i.难道static Base t;是一种特殊的机制?当t和i都在静态存储区域的时候就发生了这种怪现象
static Base t;
t 为NULL;t与Base 的初始化地址相同。
哈哈,我就是这么笨~0~
-----------------------------------
佩服!
t和Base的地址相同,那就再清楚不过了,地址相同也就是说他们是同一个东西,只是给那段内存里的东西起了不同的两个名字