📜  Java程序的输出|设置 1

📅  最后修改于: 2022-05-13 01:54:36.268000             🧑  作者: Mango

Java程序的输出|设置 1

难度级别:新手

预测以下Java程序的输出。

方案一:

Java
// filename Main.java
class Test {
    protected int x, y;
}
 
class Main {
    public static void main(String args[]) {
        Test t = new Test();
        System.out.println(t.x + " " + t.y);
    }
}


Java
// filename Test.java
class Test {
    public static void main(String[] args) {
        for(int i = 0; 1; i++) {
            System.out.println("Hello");
            break;
        }
    }
}


Java
// filename Test.java
class Test {
    public static void main(String[] args) {
        for(int i = 0; true; i++) {
            System.out.println("Hello");
            break;
        }
    }
}
// Output: Hello


Java
// filename Main.java
class Main {
    public static void main(String args[]) {  
        System.out.println(fun());
    }
    int fun() {
        return 20;
    }
}


Java
// filename Main.java
class Main {
    public static void main(String args[]) {
        System.out.println(fun());
    }
    static int fun() {
        return 20;
    }
}
// Output: 20


Java
// filename Main.java
class Main {
    public static void main(String args[]) {
          Main obj = new Main();
        System.out.println(obj.fun());
    }
    int fun() {
        return 20;
    }
}
// Output: 20


Java
// filename Test.java
class Test {
   public static void main(String args[]) {
       System.out.println(fun());
   }
   static int fun() {
       static int x= 0;
       return ++x;
   }
}


Java
class Test {
   private static int x;
   public static void main(String args[]) {
       System.out.println(fun());
   }
   static int fun() {
       return ++x;
   }
}
// Output: 1


输出:

0 0

在Java中,同一包的所有类和其他包的继承类都可以访问受保护的成员。由于 Test 和 Main 在同一个包中,因此上述程序中没有访问相关的问题。此外,默认构造函数在Java中将整数变量初始化为 0(有关详细信息,请参阅本文)。这就是我们得到输出为 0 0 的原因。

方案二:

Java

// filename Test.java
class Test {
    public static void main(String[] args) {
        for(int i = 0; 1; i++) {
            System.out.println("Hello");
            break;
        }
    }
}

输出:编译器错误

for 循环的条件检查表达式有错误。 Java在这里不同于 C++(或 C)。 C++ 将所有非零值视为真,将 0 视为假。与 C++ 不同,整数值表达式不能放置在Java中需要布尔值的位置。以下是修正后的程序。

Java

// filename Test.java
class Test {
    public static void main(String[] args) {
        for(int i = 0; true; i++) {
            System.out.println("Hello");
            break;
        }
    }
}
// Output: Hello

方案 3:

Java

// filename Main.java
class Main {
    public static void main(String args[]) {  
        System.out.println(fun());
    }
    int fun() {
        return 20;
    }
}

输出:编译器错误与 C++ 一样,在Java中,如果不创建对象,就不能在静态方法中调用非静态方法。如果我们将 fun() 设为静态,或者如果我们创建 Main 类的一个对象,然后在该对象上调用该方法,那么程序可以正常编译而没有任何编译器错误。以下是修正后的程序。

1.通过将方法定义为“静态”

Java

// filename Main.java
class Main {
    public static void main(String args[]) {
        System.out.println(fun());
    }
    static int fun() {
        return 20;
    }
}
// Output: 20

2.通过创建对象

Java

// filename Main.java
class Main {
    public static void main(String args[]) {
          Main obj = new Main();
        System.out.println(obj.fun());
    }
    int fun() {
        return 20;
    }
}
// Output: 20

程序 4:

Java

// filename Test.java
class Test {
   public static void main(String args[]) {
       System.out.println(fun());
   }
   static int fun() {
       static int x= 0;
       return ++x;
   }
}

输出:编译器错误

与 C++ 不同, Java中不允许使用静态局部变量。有关详细信息,请参阅本文。我们可以使用类静态成员来计算函数调用的次数以及 C++ 局部静态变量所服务的其他用途。以下是修正后的程序。

Java

class Test {
   private static int x;
   public static void main(String args[]) {
       System.out.println(fun());
   }
   static int fun() {
       return ++x;
   }
}
// Output: 1