A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

马胜骁

初级黑马

  • 黑马币:0

  • 帖子:10

  • 精华:0

class A
    {
        public static int X;
        static A()
        {
            X = B.Y + 1;
        }
    }
    class B
    {
        public static int Y ;
        static B()
        {
            Y = A.X + 1;
        }
        static void Main()
        {
            Console.WriteLine("x={0},y={1}",A.X,B.Y);
            Console.ReadKey();
        }
    }

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

12 个回复

倒序浏览
本帖最后由 许庭洲 于 2013-3-16 19:50 编辑

1. 不用new就能用的方法:static方法,static方法其实就是普通函数;
2. 在static方法中可以调用其他static成员,但是不能调用非static成员。
3. 在非static方法中可以调用static成员。

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2013-3-16 19:29
1. 不用new就能用的方法:static方法,ststic方法其实就是普通函数;
2. 在static方法中可以调用其他static ...

这个题具体是让答什么的啊? 然后Console类里有WriteLine 和ReadKey的两个静态方法 ??我肿么木有找到
回复 使用道具 举报
都没有说你具体哪不懂
回复 使用道具 举报
static的其中一个作用是默认初始化为0(对int),还有就是使局部变量变成了全局变量,这道题应该就是考查对static的理解。然后根据输出的顺序,一步一步调用就是了,不懂就单步调试一下应该也清楚了,输出结果:X=2,Y=3
如果不对请海涵啊,我没运行代码。

点评

额,错了哈  发表于 2013-3-17 15:48
回复 使用道具 举报
你上面用的是C#写的,下面我将它用java语言写了出来:



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class A
{
    public static int X;
    static void A()
    {
        X = B.Y + 1;
    }
}
public class B
{
    public static int Y ;
    static void B()
    {
        Y = A.X + 1;
    }
   public  static void main(String []args) throws InterruptedException, IOException
    {
       // Console.WriteLine("x={0},y={1}",A.X,B.Y);
            System.out.println("x="+A.X+",y="+B.Y);//与上面等价。
        //Console.ReadKey();//等待键盘输入才退出程序。为了使调试时看到输出结果。如果没有此句,命令窗口会一闪而过。与下面两句等效。
           
           
            BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
                    String str=bw.readLine();//程序在这处于阻塞状态,等待键盘输入。
    }
}

结果:x=0,y=0

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
不好意思,没看清楚,进错地方了,请原谅!!!!
回复 使用道具 举报
初始化为A.X=0,B.Y=0;
A.X=B.Y+1;
B.Y=A.X+1;
结果
A.X=1B.Y=2

点评

错了哈,看看是不是哪里理解失误了  发表于 2013-3-17 15:48
回复 使用道具 举报
孔健 中级黑马 2013-3-17 14:13:43
9#
楼上  正解!!
回复 使用道具 举报
本帖最后由 曾玉锋 于 2013-3-17 15:50 编辑

调试后才清楚运行过程,谢楼主了哈。
回复 使用道具 举报
class A
    {
        public static int X;
        static A()
        {
            X = B.Y + 1;
        }
    }
    class B
    {
        public static int Y ;
        static B()
        {
            Y = A.X + 1;
        }
        static void Main()
        {
            Console.WriteLine("x={0},y={1}",A.X,B.Y);
            Console.ReadKey();
        }
    }


A.X、B.Y都是int 类型的属性,默认值为0;
程序执行到A.X的时候,因为没有A对象,所以先调用构造函数A(){X=B.Y+1;} ,这里遇到B.Y
程序运行遇到B.Y,因为没有B对象,所以调用构造函数B(){Y=A.X+1;}  因为A已经存在,所以调用A.X=0;则Y=0+1 ;     ->  得到B.Y=1;
将B.Y=1;返回A(){X=B.Y+1;},得出结果A.X=2;   A.X运行结束,
程序运行到B.Y,因为B对象已经存在,所以直接调用B.Y=1;

打印出最后结果:x=2,y=1

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
class A
    {
        public static int X;
        static A()
        {
            X = B.Y + 1;
        }
    }
    class B
    {
        public static int Y ;
        static B()
        {
            Y = A.X + 1;
        }
        static void Main()
        {
            Console.WriteLine("x={0},y={1}",A.X,B.Y);
            Console.ReadKey();
        }
    }

这里要注意的是类的调用,看到的是类名和“方法名”一样。所以会照成误解。。。。
但是关注一他的”方法“
static A()
        {
            X = B.Y + 1;
        }
其实这是重写了他的构造函数,如不重写系统自动调用无参构造函数。。。
既然重写了无参构造函数,当调用类时会自动调用构造函数执行结果A.X=2,B.Y=1
回复 使用道具 举报
这是黑马的面试题吗?看楼主说的意思是去找工作的面试?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马