当前位置:  技术问答>java相关

谁能讲的明白就送分,共同探讨一下关于static。

    来源: 互联网  发布时间:2015-04-26

    本文导语:  public class Q1 {     static void processorB() {       System.out.println(" is a boolean Operator.");     }          static Q1 processorA(){        Q1 q=null;        if (("java").startsWith("null"))           return q;   ...

public class Q1 { 
   static void processorB() { 
     System.out.println(" is a boolean Operator."); 
   } 
    
   static Q1 processorA(){ 
      Q1 q=null; 
      if (("java").startsWith("null")) 
         return q; 
      else 
         return null; 
   } 
    
   static { 
      System.out.print("Java".startsWith("")); 
   } 
    
  public static void main(String[] args) { 
     processorA().processorB(); //静态调用。顺利通过!
  } 

输出为“true is a boolean Operator.”。我觉得processorA()返回一个null给main后再调用processorB()时应该抛出一个NullPointerException,可是实际却正常输出了,这是怎么回事?

|

processorA().processorB(); 
编译时:编译器发现processorA()的返回类型是Q1 
Q1的processorB()是static,不需要把processorA()返回的对象传递给processorB(),所以不会抛出NullPointerException

((Q1)null).processorB();一样可以正常运行



|
都说了这么多了,来晚了:(
一切都是因为static被它修饰的对象是存放在内存中的静态存储区当中,而不是堆载中.它在你还没有执行main以前就已经被初始化了,并一直存放在静态存储区之中,它只有一个拷贝,不属于你的某一个实例,而属于该类的所有实例共享之.static方法的最大特征就是不必实例化它所在的类就可以直接调用它,为什么??因为编译器早就已经在静态存储区里面加载了它.常用的NEW是动态实例创建,在堆里面加载对象实例在载里面分配指针,它的指针必须指向一个对象才有意义(所以不允许为NULL).而现在static方法他奶奶的早就在静态存储区中创建好了,直接区调就是了,还在乎什么指针???
   Q1.processorB();
   奶奶的,今天怎么老碰到问static的??!!到C++那边看看去...要加分啊!!!

|
因为static是属于类的而不是属于蒙一个对象,所以,系统在调用static
函数时不回去验证对象是不是为NULL,因为他现在类的时候初始化了(即已经分配了地址空间了),而不是在对象调用的时候,才初始化
所以,系统是能找到其地址的,并能调用属于类调用而不是对象调用
明白了吗?
给分给分,^-^

|
http://www.csdn.net/expert/topic/587/587079.xml?temp=.7879602

|
这只是一种规范,没什么其他的,你可以这样理解。
对于static的成员,我们都知道是他是属于类的,因此与这个类的对象没有关系,所以无论这个类是否是null,都可以调用类的static 函数

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 这几个是什么服务,不明白为什么一直开启?一直都没弄明白过
  • 请教大家!!!java如何实现多重继承?接口该如何使用?份数可以再加,只要我明白了
  • 一个问题,有点不明白!!!
  • linux crontab 设定老是想不明白。。。。
  • 有句话不明白,求解释
  • 关于终端的一些小问题,不明白。。。
  • Makefile中的一句不明白,关于shell中sed函数
  • 我在看一个GNU软件时发现有这么一句,不明白什么意思
  • 不明白seteuid()的作用
  • i=$(($i+1))。为什么i=$($i+1)就不行呢?不明白里面那层括号起什么作用。
  • 在init脚本中屡屡看到类似命令,不明白的说:mount -t sysfs /sys /sys
  • VMWare上装了个Fedora,但装不上VMWareTools,新手,不明白为什么
  • 总算明白gettext函数是怎么用的了!散分
  • 想了解LINUX一定能明白汇编语言吗?
  • 请问:什么是组合?看了THINGKING IN JAVA后,还是不是很明白
  • 我不是很明白,请帮忙!
  • method overriding 的意思我明白,但在中文里应该翻译成什么为好?
  • 关于字体的问题?实在是看不明白sun的api文档!!!!!!!!!!!!
  • 灌水贴子,有什么不明白到www.52jsp.com论坛看看
  • 小弟一直弄不明白this这个关键字。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3