「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!」
难度等级: 中等
预测以下 Java 程序的输出:
问题
问题一
public class Calculator
{
int num = 100;
public void calc(int num) { this.num = num * 10; }
public void printNum() { System.out.println(num); }
public static void main(String[] args)
{
Calculator obj = new Calculator();
obj.calc(2);
obj.printNum();
}
}
复制代码
选项:
A) 20
B) 100
C) 1000
D) 2
问题二
public class MyStuff
{
String name;
MyStuff(String n) { name = n; }
public static void main(String[] args)
{
MyStuff m1 = new MyStuff("guitar");
MyStuff m2 = new MyStuff("tv");
System.out.println(m2.equals(m1));
}
@Override
public boolean equals(Object obj)
{
MyStuff m = (MyStuff) obj;
if (m.name != null) { return true; }
return false;
}
}
复制代码
选项:
A) 输出为真,MyStuff 履行 Object.equals() 合同。
B) 输出为假并且 MyStuff 履行 Object.equals() 合同。
C) 输出为真并且 MyStuff 不履行 Object.equals() 合同。
D) 输出为假并且 MyStuff 不履行 Object.equals() 合同。
问题三
class Alpha
{
public String type = "a ";
public Alpha() { System.out.print("alpha "); }
}
public class Beta extends Alpha
{
public Beta() { System.out.print("beta "); }
void go()
{
type = "b ";
System.out.print(this.type + super.type);
}
public static void main(String[] args)
{
new Beta().go();
}
}
复制代码
选项:
A) alpha beta bb
B) alpha beta ab
C) beta alpha bb
D) beta alpha ab
问题四
public class Test
{
public static void main(String[] args)
{
StringBuilder s1 = new StringBuilder("Java");
String s2 = "Love";
s1.append(s2);
s1.substring(4);
int foundAt = s1.indexOf(s2);
System.out.println(foundAt);
}
}
复制代码
选项:
A) -1
B) 3
C) 4
D)在运行时抛出StringIndexOutOfBoundsException。
问题五
class Writer
{
public static void write()
{
System.out.println("Writing...");
}
}
class Author extends Writer
{
public static void write()
{
System.out.println("Writing book");
}
}
public class Programmer extends Author
{
public static void write()
{
System.out.println("Writing code");
}
public static void main(String[] args)
{
Author a = new Programmer();
a.write();
}
}
复制代码
选项:
A) Writing…
B) Writing book
C) Writing code
D) Compilation fails
放张可爱妹子的图缓解一下眼睛疲劳,文章后半部分是程序的输出及解析
输出及解析
问题一答案
答案:
A) 20
复制代码
解释:
这里的类实例变量名(num) 与calc()方法的局部变量名(num) 相同。所以为了从calc()方法引用类实例变量,使用了这个关键字。所以在this.num = num * 10语句中,num代表方法的局部变量,其值为 2,this.num代表类实例变量,其初始值为 100。现在在printNum()方法中,因为它没有局部变量name 与类实例变量相同,所以我们可以直接使用num引用实例变量,虽然可以使用this.num。
问题二答案
答案:
C) 输出为真,MyStuff 不履行 Object.equals() 合同。
复制代码
说明:
作为Object类中的equals(Object obj)方法,根据等价关系比较两个对象。但是这里我们只是确认对象是否为空,所以它不履行Object.equals()合同。由于m1不为空,因此将打印 true。
问题三答案
答案:
A) alpha beta bb
复制代码
解释:
语句new Beta().go()分两个阶段执行。在第一阶段Beta类构造函数被调用。Beta类中不存在实例成员。所以现在执行Beta类构造函数。由于Beta类扩展了Alpha类,因此调用Alpha类构造函数,因为默认情况下(编译器放置的)第一条语句是Beta类构造函数中的super()。现在,由于Alpha类中存在一个实例变量(type),因此它将获得内存,现在Alpha类构造函数被执行,然后调用返回到Beta类构造函数的 next 语句。所以打印了alpha beta。
在第二阶段,在这个对象上调用go()方法。由于对象中只有一个变量(类型),其值为a。所以会改成b,打印两次。这里的super 关键字没有用。
问题四答案
答案:
C) 4
复制代码
说明:
append(String str)方法,将 str 连接到s1。的子(INT指数)方法从给定的索引到端返回字符串。但是由于没有任何 String 变量来存储返回的字符串,所以它会被销毁。 现在indexOf(String s2)方法返回s2第一次出现的索引。所以 4 被打印为 s1=”JavaLove”。
问题五答案
答案:
B) Writing book
复制代码
说明:
由于静态方法不能被覆盖,创建哪个类对象并不重要。由于a是Author引用类型,所以总是调用Author类方法。如果我们从Author类中删除write()方法,则调用Writer类方法,因为Author类扩展了Writer类。
相关文章:
我已经写了很长一段时间的技术博客,这是我的一篇技术文章/教程。希望你们会喜欢!这里汇总了我的全部原创及作品源码:Github、Gitee
如果你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。?最后,不要忘了❤或?支持一下哦