logo

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.