Saída do programa Java | Conjunto 7
Nível de dificuldade: Intermediário Preveja a saída dos seguintes programas Java. Programa 1: 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 (); } }
Opções: A) 20 B) 100 C) 1000 D) 2 Resposta: A) 20 Explicação: Aqui, o nome da variável de instância da classe (num) é o mesmo que calcular() nome da variável local do método (num). Então, para fazer referência à variável de instância de classe de calcular() método esse palavra-chave é usada. Então, em declaração isto.num = num * 10 num representa a variável local do método cujo valor é 2 e isto.num representa variável de instância de classe cujo valor inicial é 100. Agora em imprimirNum() método, pois não possui variável local cujo nome seja igual à variável de instância de classe, portanto, podemos usar diretamente num para fazer referência à variável de instância, embora isto.num pode ser usado. Programa 2: Java 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 ; } }
Opções: A) A saída é verdadeira e MyStuff cumpre o contrato Object.equals(). B) A saída é falsa e MyStuff cumpre o contrato Object.equals(). C) A saída é verdadeira e MyStuff NÃO cumpre o contrato Object.equals(). D) A saída é falsa e MyStuff NÃO cumpre o contrato Object.equals(). Responder : C) A saída é verdadeira e MyStuff NÃO cumpre o contrato Object.equals(). Explicação: Como é igual (objeto obj) O método na classe Object compara dois objetos com base na relação de equivalência. Mas aqui estamos apenas confirmando se o objeto é nulo ou não, então não cumpre Object.equals() contrato. Como m1 não é nulo verdadeiro será impresso. Programa 3: Java 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 (); } }
Opções: A) alfa beta b b B) alfa beta a b C) beta alfa b b D) beta alfa a b Responder : A) alfa beta b b Explicação: A declaração novo Beta().go() é executado em duas fases. Na primeira fase Beta construtor de classe é chamado. Não há nenhum membro da instância presente em Beta aula. Então agora Beta construtor de classe é executado. Como Beta extensão de classe Alfa aula então a ligação vai para Alfa construtor de classe como primeira instrução por padrão (colocado pelo compilador) é super() no Beta construtor de classe. Agora, como uma variável de instância ( tipo ) está presente em Alfa class para que ele ganhe memória e agora Alfa o construtor da classe é executado e então chama return para Beta próxima instrução do construtor de classe. Então alfa beta é impresso. Na segunda fase ir() método é chamado neste objeto. Como existe apenas uma variável ( tipo ) no objeto cujo valor é um . Então será alterado para b e impresso duas vezes. O super palavra-chave aqui não adianta. Programa 4: Java 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 ); } }
Opções: A) -1 B) 3 C) 4 D) UMA StringIndexOutOfBoundsException é lançado em tempo de execução. Responder : C) 4 Explicação: acrescentar(String str) métodoconcatena o str para s1 . O substring (índice interno) método retorna a String do índice fornecido até o final. Mas como não existe nenhuma variável String para armazenar a string retornada, ela será destruída. indexOf(String s2) método retorna o índice da primeira ocorrência de s2 . Portanto, 4 é impresso como s1='JavaLove'. Programa 5: Java 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 (); } }
Opções: A) Escrevendo... B) Escrevendo livro C) Escrevendo código D) A compilação falha Responder : B) Escrevendo livro Explicação: Como os métodos estáticos não podem ser substituídos, não importa qual objeto de classe é criado. Como um é um Autor tipo referenciado então sempre Autor método de classe é chamado. Se removermos escrever() método de Autor aula então Escritor método de classe é chamado como Autor extensão de classe Escritor aula.