难度等级: 中等
预测以下 Java 程序的输出:
问题
问题一
class GfG { public static void main(String args[]) { String s1 = new String("geeksforgeeks"); String s2 = new String("geeksforgeeks"); if (s1 == s2) System.out.println("Equal"); else System.out.println("Not equal"); } }
点此跳转到答案
问题二
class Person { private void who() { System.out.println("Inside private method Person(who)"); } public static void whoAmI() { System.out.println("Inside static method, Person(whoAmI)"); } public void whoAreYou() { who(); System.out.println("Inside virtual method, Person(whoAreYou)"); } } class Kid extends Person { private void who() { System.out.println("Kid(who)"); } public static void whoAmI() { System.out.println("Kid(whoAmI)"); } public void whoAreYou() { who(); System.out.println("Kid(whoAreYou)"); } } public class Gfg { public static void main(String args[]) { Person p = new Kid(); p.whoAmI(); p.whoAreYou(); } }
问题三
class GfG { public static void main(String args[]) { try { System.out.println("First statement of try block"); int num=45/3; System.out.println(num); } catch(Exception e) { System.out.println("Gfg caught Exception"); } finally { System.out.println("finally block"); } System.out.println("Main method"); } }
点此跳转到答案
问题四
class One implements Runnable { public void run() { System.out.print(Thread.currentThread().getName()); } } class Two implements Runnable { public void run() { new One().run(); new Thread(new One(),"gfg2").run(); new Thread(new One(),"gfg3").start(); } } class Three { public static void main (String[] args) { new Thread(new Two(),"gfg1").start(); } }
点此跳转到答案
放张可爱妹子的图缓解一下眼睛疲劳,文章后半部分是程序的输出及解析
输出及解析
问题一答案
输出:
Not equal
解释:
由于 s1 和 s2 是两个不同的对象,因此引用不相同,并且 == 运算符比较对象引用。所以它打印“不等于”,来比较字符串中的实际字符,必须使用 .equals() 方法。
问题二答案
输出:
Inside static method, Person(whoAmI) Kid(who) Kid(whoAreYou)
说明:
静态绑定(或编译时)发生在静态方法上。这里p.whoAmI()调用静态方法,因此它在编译时被调用,因此导致静态绑定并在 Person 类中打印该方法。 而p.whoAreYou()调用Kid类中的方法,因为默认情况下 Java 将其作为虚拟方法,即动态绑定。
问题三答案
输出:
First statement of try block 15 finally block Main method
解释:
由于没有异常,所以不调用catch块,但不管异常是否处理,finally块总是在try块之后执行。
问题四答案
输出:
gfg1gfg1gfg3
说明:
最初新线程以名称gfg1启动,然后在类二中,第一个 run 方法运行名为gfg1的线程,然后创建一个新线程调用 run 方法,但由于只能通过调用 start 方法创建新线程所以以前的线程执行的行动,并再次gfg1是printed.Now一个新的线程是通过调用start方法使一个新的线程启动创建gfg3名称,因此打印gfg3。
