Вихід програми Java | Набір 8
Рівень складності : Середній
Передбачте вихід наступних програм 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:
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() викликає метод in малюк оскільки за замовчуванням 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 тоді в класі Two перший запущений метод запускає потік з іменем gfg1 тоді після цього створюється новий потік із викликом методу run, але оскільки новий потік можна створити лише за допомогою виклику методу start, тому дію виконує попередній потік і знову gfg1 друкується. Тепер новий потік створюється шляхом виклику методу start, щоб новий потік починався з gfg3 назву і, отже, відбитки gfg3 .