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