Saída do programa Java | Conjunto 8
Nível de dificuldade : Intermediário
Preveja a saída dos seguintes programas Java.
Programa 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' ); } }
Saída:
Not equal
Explicação: Como s1 e s2 são dois objetos diferentes, as referências não são iguais e o operador == compara a referência do objeto. Portanto, ele imprime 'Not equal' para comparar os caracteres reais na string. O método equals() deve ser usado.
Programa 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 (); } }
Saída:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Explicação: A ligação estática (ou tempo de compilação) acontece para métodos estáticos. Aqui p.quemAmI() chama o método estático para que seja chamado durante o tempo de compilação, resultando em ligação estática e imprime o método na classe Person.
Enquanto p.quem é você() chama o método em Criança classe, pois por padrão o Java o considera um método virtual, ou seja, ligação dinâmica.
Programa 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' ); } }
Saída:
First statement of try block 15 finally block Main method
Explicação:
Como não há exceção, o bloco catch não é chamado, mas o finalmente O bloco é sempre executado após um bloco try, independentemente de a exceção ser tratada ou não.
Programa 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 (); } }
Saída:
gfg1gfg1gfg3
Explicação: Inicialmente um novo Thread é iniciado com o nome gfg1 então na classe Dois o primeiro método run executa o thread com o nome gfg1 depois disso, um novo thread é criado chamando o método run, mas como um novo thread pode ser criado chamando apenas o método start, o thread anterior executa a ação e novamente gfg1 é impresso. Agora um novo thread é criado chamando o método start para que um novo thread comece com gfg3 nome e, portanto, imprime gfg3 .