首页 > 试题广场 >

阅读代码,以下说法正确的是?

[单选题]
public class Test
{
    public int x;
    public static void main(String []args)
    {
        System. out. println("Value is" + x);
    }
}

对于上面这段代码,以下说法正确的是:
  • 程序会打出 "Value is 0"
  • 程序会抛出 NullPointerException
  • 非静态变量不能够被静态方法引用
  • 编译器会抛出 "possible reference before assignment"的错误
因为还没有创建对象,所以静态方法main不能访问非静态变量x,x是从属于对象的
发表于 2016-09-18 16:53:35 回复(0)
更多回答
推荐
答案:C
非静态成员只能被类的实例化对象引用,因此这里在静态方法中访问x会造成编译出错
编辑于 2015-01-28 10:07:09 回复(12)
C
当类加载时,static静态方法随着类加载而初始化,此时实例对象还未被创建,但是非静态成员变量需要等到实例对象创建才会被初始化,故无法被引用。
发表于 2015-12-19 15:21:29 回复(6)
静态方法先行执行,导致变量x还未被初始化,所以编译出错
发表于 2016-05-10 12:10:41 回复(0)
主方法是static方法,只能使用static的成员。想使用x,需要开辟对象的空间,new 一个对象,分配一个空间。
发表于 2015-11-21 21:38:52 回复(1)
注意: 1.静态方法和静态变量在jvm中,随着类的加载便存在于静态方法区中,可以用类名直接调用。 2.而对于非静态方法和非静态变量,只能通过类的对象来进行访问 3.静态方法中只能调用静态方法和引用静态成员变量,但是非静态方法却可以调用静态方法和引用静态变量
发表于 2017-03-01 23:42:08 回复(0)
编译运行情况:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Cannot make a static reference to the non-static field x
发表于 2015-09-09 23:54:23 回复(0)
C: 关键字static(类方法,实例方法)
     1:静态方法和静态变量是属于某一个类,而不属于类的对象。
     2:静态方法和静态变量的引用直接通过类名引用。
     3:在静态方法中不能调用非静态的方法和引用非静态的成员变量。非静态方法中可以调用静态方法和变量,即(反之,则可以)。(静态方法)
发表于 2015-04-20 22:28:34 回复(0)
选C
非静态变量只有实例化之后才能被静态方法引用。
D中意思为可能抛出未赋值前引用的错误。就算给x初始时有值,也没法直接在静态方法中直接调用非静态变量。
发表于 2016-10-20 21:22:49 回复(0)
C. 若想引用x,则将x定义成静态的,或者实例化一个Test类的对象,然后对象名.x调用。
发表于 2014-10-27 09:26:10 回复(0)
这是我在手写代码时常常犯的错,应该先初始化类实例
Test t = new Test();
 System. out. println("Value is"+ t.x);
发表于 2016-07-10 10:15:42 回复(0)
倾头像
这题arg[]后面明显缺少括号啊,编译不报错的嘛。
发表于 2016-03-20 16:15:00 回复(2)
C
发表于 2014-10-24 16:29:43 回复(0)
有图有真相

发表于 2020-02-25 21:46:43 回复(0)
对,类方法(静态方法)不能调用实例成员(非静态成员变量或方法),因为类方法加载在前,比如你这里直接调用了类方法Class.main会导致什么,会导致你的实例成员还没定下来就被调用了,那谁知道后来谁会new这个成员变量,谁知道谁(哪个对象)会做手脚,就是先人不知后人,所以不能这么调用
发表于 2023-02-03 08:17:14 回复(1)
非静态成员只能实例化对象后,通过实例化对象使用
发表于 2022-04-03 19:51:07 回复(0)
你以为是在考默认值 其实是在考细心
发表于 2021-08-23 05:45:12 回复(0)
非静态变量不能够被静态方法引用!
发表于 2020-06-17 20:26:34 回复(0)
静态方法内只能引用静态变量和静态方法
发表于 2019-04-24 08:57:45 回复(0)
补充一下D项,类里面的成员,在new的时候发生初始化。double默认0.0,int默认0~
发表于 2018-06-10 13:10:16 回复(0)

正确答案

C

答案解析

当类加载时,static静态方法随着类加载而初始化,此时实例对象还未被创建,但是非静态成员变量需要等到实例对象创建才会被初始化,故无法被引用,会出现编译错误。

发表于 2018-04-15 19:46:49 回复(0)
类的静态方法在类加载时被第一时间初始化,而非静态成员变量时在创建实例对象时才会被初始化,这里没有创建实例对象,所以x未被初始化,故调用出错
发表于 2018-04-08 14:37:49 回复(0)