【Java练习题】Java程序的输出 | 第七套(含解析)

·  阅读 2552
【Java练习题】Java程序的输出 | 第七套(含解析)

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,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

点此跳转到答案


放张可爱妹子的图缓解一下眼睛疲劳,文章后半部分是程序的输出及解析

9992fc8fbcb7d37eac355b3c01f68bb3.jpg


输出及解析

问题一答案

答案

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类。


相关文章:

【Java练习题】Java程序的输出 | 第一套(含解析)

【Java练习题】Java程序的输出 | 第二套(含解析)

【Java练习题】Java程序的输出 | 第三套(含解析)

【Java练习题】Java程序的输出 | 第四套(含解析)

【Java练习题】Java程序的输出 | 第五套(含解析)

【Java练习题】Java程序的输出 | 第六套(含解析)

我已经写了很长一段时间的技术博客,这是我的一篇技术文章/教程。希望你们会喜欢!这里汇总了我的全部原创及作品源码:GitHubGitee

如果你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。🤗最后,不要忘了❤或📑支持一下哦

分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改