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

求助关于静态数据初始化问题,很简单的,快进来看看。

    来源: 互联网  发布时间:2015-02-03

    本文导语:  程序代码如下:     class Bowl(){    Bowl(int marker){    System.out.println("Bowl("+marker +")");   }   void f(int marker){   System.out.println("f("+marker+")"); }   class Table{    static Bowl b1=new Bowl(1);   Table(){    System.out.println(...

程序代码如下:
 
  class Bowl(){
   Bowl(int marker){
   System.out.println("Bowl("+marker +")");
  }
  void f(int marker){
  System.out.println("f("+marker+")");
}
  class Table{
   static Bowl b1=new Bowl(1);
  Table(){
   System.out.println("table()");
   b2.f(1);
   }
   void f2(int marker){
   System.out.println("f2("+marker+")");

  }
  static Bowl b2=new Bowl(2);
}
  class cupboard{
  Bowl b3=new Bowl(3);
 static Bowl b4=new Bowl(4);
   cupboard(){
   System.out.println("cupboard()")}
   b4.f(2);
}
   void f3(int marker){
  System.out.println("f3("+marker+")");
}
    static Bowl b5=new Bowl(5);
}
  public class static Initialization{
     public static void main(String[] args){
    System.out.println("creating new cupboard() in main");
   new cpboard();
   System.out.println("creating new cupboard() in main");
   new cupboard();
  t2.f2(1);
   t3.f3(1);
   }
 static Table t2=new Table();
  static cupboard te=new cupboard();
}

输出结果如下:


  Bowl(1)
  Bowl(2)
  Table()
  f(1)
  Bowl(4)
  Bowl(5)
  .....
我不再写了,
问题是:1.程序应从void main开始运行的,为什么不先输出

  creating new cupboard() in main
 而输出为Bowl(1)?
2.Bowl类的对象b1是在类table中创建的,而类bowl在这之前创建的,什么时候调用到class Bowl?这几个类的
运行顺序是怎样的?

|
先 运行 Initialization  static Table t2=new Table();
////////////运行Table() 先运行 static Bowl b1=new Bowl(1); //print  Bowl(1)
///////////                   static Bowl b2=new Bowl(2); //       Bowl(2)
//////////                    Table()--->System.out.println("table()");
/////////                     Table()--->b2.f(1);
           
   运行  Initialization  static cupboard te=new cupboard();
/////////////运行cupboard() 先运行  static Bowl b4=new Bowl(4);//Bowl(4)
///////////// /              运行  static Bowl b5=new Bowl(5);//Bowl(5)
////////////// 初始化cupboard ----〉 Bowl b3=new Bowl(3);
                     cupboard()----〉System.out.println("cupboard()")// cupboard()
                               ----〉    b4.f(2);//f(2)

然后开始运行public static void main(String[] args){ 
                       剩下的你就应该明白如何运行的了

            写了这么多,累死我了



|
编译器对静态数据是提前优先处理的!

|
"public class static Initialization",这里的static用的不对吧。
根据java语言规范,static 只能用于成员类(即内部类),而且位于class之前。把这里的static去掉试试看。

|
我的看法是:

对于static Initialize的,是JAVA在JVM一运行的时候立刻执行的部分
对于method来说,只能调用大家都是static的变量和方法
对于变量来说,每一个instance都是使用同样一块内存,也就是说无论建立多少个instance,这个static的初始值都是一样的,而在同一个instance中的则是跟普通变量没有什么不同了。

这是我的理解,希望有人补充

|
和你调用的顺序有关

|
还记得那个吗
int i=0;
(i++)+(++i);
System.out.println(i);

|
老大,你这程序错误百出
这样还差不多
class Bowl
{
  Bowl(int marker)
  {
    System.out.println("Bowl("+marker +")");
  }
  void f(int marker)
  {
    System.out.println("f("+marker+")");
  }
}
class Table
{
  static Bowl b1=new Bowl(1);
  Table()
  {
    System.out.println("table()");
    b2.f(1);
  }
  void f2(int marker)
  {
    System.out.println("f2("+marker+")");
  }
  static Bowl b2=new Bowl(2);
}
class cupboard
{
  Bowl b3=new Bowl(3);
  static Bowl b4=new Bowl(4);
  cupboard()
  {
    System.out.println("cupboard()");
    b4.f(2);
  }
  void f3(int marker)
  {
    System.out.println("f3("+marker+")");
  }
  static Bowl b5=new Bowl(5);
}
public class Initialization
{
  public static void main(String[] args)
  {
    System.out.println("creating new cupboard() in main");
    new cupboard();
    System.out.println("creating new cupboard() in main");
    new cupboard();
    t2.f2(1);
    te.f3(1);
  }
  static Table t2=new Table();
  static cupboard te=new cupboard();
}

|
你的程序编译都过不去!!!

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












  • 相关文章推荐
  • 求助!!! 超简单问题... 大虾们进来,菜鸟也进来!!
  • 求助:一个makefile,大虾们进来看看
  • 美女求助:用过CVSTrac的大侠们进来帮个忙!
  • 求助linux普通用户下内存共享(系统V共享)大家进来看看啊!急!!
  • [求助]求程序的思路,请大家进来看看
  • 求助一个linux shell编程问题 高手进来啊
  • 求助,乱码的问题,高手请进来!!!!
  • 浙ICP备11055608号-3 iis7站长之家
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题
  • 求助:信号 --13 进程中断
  • 求助,安装了红帽子后进不了
  • 新装linux求助
  • linux的 iptables问题求助
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 一个简单的问题,高分求助!!!
  • 紧急求助:Unix下给文件夹重命名用什么命令?谢谢!!!!
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求助


  • 站内导航:


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

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

    浙ICP备11055608号-3