一个简单的语法问题想跟大家讨论 Print类也是静态的,不需要实例化,当然也可以调它内部的静态方法了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 print是静态属性,在jvm装载时就已经被实例化(初始化),虽然其值为空。所以在该类的任何方法里都可以用它而不用实例化(初始化)。 你的做法叫做“Static member accessed via instance of reference.”。虽然不会出错,但是这样做并不被推荐。增加了阅读的难度,把与实例无关的东西和实例放在了一起。有些开发环境,比如IDEA就会自动警告这类的问题。其实很多人都有类似的写法,都不好,比如:<<Thread.currentThread().sleep(1000);>>为什么不换成 Thread.sleep(1000) 就可以了呢?还有:<<this.assertEquals(a,b);//junit>>为什么不写成 assertEquals(a,b) 或者 TestCase.assertEquals(a,b) 更清楚一些。 觉得 xiaohaiz(老土进城,两眼通红) 的说法很有道理 其实你完全可以把 static Print print=null;注释掉 把 print.output();改成Print.output();这样更清晰易读!!! 这里给出一些对static的理解: 1。static可以应用于成员变量,也可以应用于成员方法。 此时分别称为类变量和类方法,与之相对的称为实例变量和实例方法。 类变量和类方法不需要该类初始化就可以直接由className.classVar or className.calssMethod 来调用。 类方法不能调用成员变量,但能调用类变量。 但实例方法可以调用实例变量和类变量。 2。static 对象(类变量和类方法)在该类第一次调用时初始化,而实例对象(实例变量和实例方法)在new时才初始化。 我一直认为java的语法是不允许上面的这种情况的,至少在运行时应该产生空指针异常可是实际情况是整个运行的都很顺利,理论上讲,上面的代码可以这样来理解print == nullprint.output == null.output在java的语法规则里null是没有任何类型的,那么等于null的变量就是空类型而世纪的情况证明是这个变量成了Print类型的空指针,这个c/c++的指针类型完全一样不知道c++遇到这种情况会怎么样 这样理解?这样的代换是不成立的。虽然print = null,但是print是有类型的。 public void getPrint(){ Print a; a.output(); }刚刚加了这么一段代码,编译的时候出错了对于第一段代码,把static Print print = null;改为Print print;后结果一样那么java在类的成员初始化的时候肯定做过什么 public void getPrint(){ Print a=null; a.output(); }当改成上面的代码的时候运行结果又是正常的 类成员被自动初始化为null而静态函数是可以通过没有初始化的有类型的null变量来调用的还好java的编译器并不允许null varname;的声明 初始化时:1.静态函数初始化 2.构造函数的调用 3.变量初始化(并不是您初始化为你所设的值,而是java默认值) 运行楼主这段代码,偶得不到结果也public void getPrint(){ Print a=null; a.output(); }报java.lang.NullPointerException空指针的错误 我也被static搞得个半死,关注顶! 当Print类的output方法为静态的时候,属于类方法不管Print的实例有没有初始化(不知道没有初始化的算不算实例:)都可以调用它的类方法,虽然它为null,但是它具有类型Print那么可能在编译器实现的时候,它首先指向一个空的结构(Pring类型的null值)而很明显这个结构本身拥有指向类的公用空间的指针,这个公用空间里有所有实例都可以共同调用的方发表,而在运行时java虚拟机显然并没有检查变量是否是个空“指针”,而是直接查找了变量的方法表,不然也不会在程序时产生NullPointerException了。更改过的代码main函数中需要实例化InnerClass类jdk1.4.1_01版编译运行毫无问题 这个问题,很简单,如果你知道JAVA的代码是如何执行,这个问题就清楚了.首先我解释一下为什么要实例化非静态类才能运行,因为非静态类在程序LOAD的过程中,并没有存在与内存中,而实例化使这个类有了相关属性,并存在与内存中.而静态类,在程序开始LOAD时候就已经进入内存,所以他的方法不用实例化直接可以调用了 我就产生了NullPointerException,关注! 加条广告(注:如果你不高兴,可以删除)招聘网页编程人员(1-2名)1-2年的网页编程经验语言:JSP,java,html,javascript请在简历中写明对以上语言的掌握程度以及学历.北京友联创新系统集成有限公司联系方式:010-62984859-8010王先生[email protected] 静态类是不需要实例化了楼主说:对于第一段代码,把static Print print = null;改为Print print;后结果一样可我改成那样运行正常的啊.JDK1.4.1 关于应用程序的路由选择问题 关于线程interrupt方法的问题,请前辈指点。 java编程2个utf文件的问题 decimal类型存储时间 新人,提问 一个Socket通讯例子程序的疑惑! 一个关于I/O重定向的初级问题,我是刚学java的 eclipse newsgroup订阅问题 关于数据库数据的读取!求教! 初学者的问题--- 关于事件处理 下面的错误提示是什么意思? 问个小问题:如何在退出菜单的事件处理中发出一个退出消息?
所以在该类的任何方法里都可以用它而不用实例化(初始化)。
虽然不会出错,但是这样做并不被推荐。增加了阅读的难度,把与实例无关的东西和实例放在了一起。有些开发环境,比如IDEA就会自动警告这类的问题。
其实很多人都有类似的写法,都不好,比如:
<<Thread.currentThread().sleep(1000);>>
为什么不换成 Thread.sleep(1000) 就可以了呢?
还有:
<<this.assertEquals(a,b);//junit>>
为什么不写成 assertEquals(a,b) 或者 TestCase.assertEquals(a,b) 更清楚一些。
xiaohaiz(老土进城,两眼通红)
的说法很有道理
把 print.output();改成Print.output();
这样更清晰易读!!!
1。static可以应用于成员变量,也可以应用于成员方法。
此时分别称为类变量和类方法,与之相对的称为实例变量和实例方法。 类变量和类方法不需要该类初始化就可以直接由className.classVar or className.calssMethod 来调用。 类方法不能调用成员变量,但能调用类变量。 但实例方法可以调用实例变量和类变量。 2。static 对象(类变量和类方法)在该类第一次调用时初始化,而实例对象(实例变量和实例方法)在new时才初始化。
可是实际情况是整个运行的都很顺利,理论上讲,上面的代码可以这样来理解
print == null
print.output == null.output
在java的语法规则里null是没有任何类型的,那么等于null的变量就是空类型
而世纪的情况证明是这个变量成了Print类型的空指针,这个c/c++的指针类型完全一样
不知道c++遇到这种情况会怎么样
虽然print = null,但是print是有类型的。
Print a;
a.output();
}
刚刚加了这么一段代码,编译的时候出错了
对于第一段代码,把static Print print = null;改为Print print;后结果一样
那么java在类的成员初始化的时候肯定做过什么
Print a=null;
a.output();
}
当改成上面的代码的时候运行结果又是正常的
而静态函数是可以通过没有初始化的有类型的null变量来调用的
还好java的编译器并不允许null varname;的声明
2.构造函数的调用
3.变量初始化(并不是您初始化为你所设的值,而是java默认值)
public void getPrint(){
Print a=null;
a.output();
}报java.lang.NullPointerException空指针的错误
不管Print的实例有没有初始化(不知道没有初始化的算不算实例:)
都可以调用它的类方法,虽然它为null,但是它具有类型Print
那么可能在编译器实现的时候,它首先指向一个空的结构(Pring类型的null值)
而很明显这个结构本身拥有指向类的公用空间的指针,这个公用空间里有
所有实例都可以共同调用的方发表,而在运行时java虚拟机显然并没有检查
变量是否是个空“指针”,而是直接查找了变量的方法表,不然也不会在程序时
产生NullPointerException了。更改过的代码main函数中需要实例化InnerClass类
jdk1.4.1_01版编译运行毫无问题
没有存在与内存中,而实例化使这个类有了相关属性,并存在与内存中.而静态类,在程序开始LOAD时候就已经进入内存,所以他的方法不用实例化直接可以调用了
招聘网页编程人员(1-2名)
1-2年的网页编程经验
语言:JSP,java,html,javascript
请在简历中写明对以上语言的掌握程度以及学历.北京友联创新系统集成有限公司
联系方式:
010-62984859-8010王先生
[email protected]
楼主说:对于第一段代码,把static Print print = null;改为Print print;后结果一样可我改成那样运行正常的啊.JDK1.4.1