난이도 : 중급
다음 Java 프로그램의 출력을 예측하십시오.
프로그램 1:
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'); } }
산출:
Not equal
설명: s1과 s2는 서로 다른 두 개체이므로 참조는 동일하지 않으며 == 연산자는 개체 참조를 비교합니다. 따라서 문자열의 실제 문자를 비교하려면 '같지 않음'을 인쇄합니다. .equals() 메서드를 사용해야 합니다.
프로그램 2:
Java
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(); } }
산출:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
설명: 정적 바인딩(또는 컴파일 시간)은 정적 메서드에 대해 발생합니다. 여기 p.whoAmI() 정적 메서드를 호출하여 컴파일 시간 동안 호출되므로 정적 바인딩이 발생하고 Person 클래스에 메서드가 인쇄됩니다.
반면 p.whoAreYou() 에서 메소드를 호출합니다. 어린이 클래스는 기본적으로 Java가 이를 가상 메소드, 즉 동적 바인딩으로 사용하기 때문입니다.
프로그램 3:
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'); } }
산출:
First statement of try block 15 finally block Main method
설명:
예외가 없으므로 catch 블록은 호출되지 않지만 마지막으로 블록은 예외 처리 여부에 관계없이 항상 try 블록 이후에 실행됩니다.
프로그램 4:
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(); } }
산출:
gfg1gfg1gfg3
설명 : 처음에는 새 스레드가 이름으로 시작됩니다. gfg1 그런 다음 클래스 2에서 첫 번째 실행 메소드는 다음 이름의 스레드를 실행합니다. gfg1 그런 다음 run 메소드를 호출하여 새 스레드가 생성되지만 start 메소드를 호출해야만 새 스레드가 생성될 수 있으므로 이전 스레드가 작업을 수행하고 다시 수행합니다. gfg1 인쇄됩니다. 이제 start 메소드를 호출하여 새 스레드가 생성되므로 새 스레드는 gfg3 이름을 붙여서 인쇄합니다. gfg3 .
Java에서 int를 문자열로 변환하는 방법