logo

Saída do programa Java | Conjunto 9

Nível de dificuldade : Intermediário

Preveja a saída dos seguintes programas Java:

Programa 1:

Java
class Gfg {  // constructor  Gfg()  {  System.out.println('Geeksforgeeks');  }    static Gfg a = new Gfg(); //line 8  public static void main(String args[])  {  Gfg b; //line 12  b = new Gfg();  } } 

Saída:



Geeksforgeeks  
Geeksforgeeks

Explicação:

Sabemos que variáveis ​​estáticas são chamadas quando uma classe é carregada e variáveis ​​estáticas são chamadas apenas uma vez. Agora a linha 13 resulta na criação do objeto que, por sua vez, chama o construtor e 'Geeksforgeeks' é impresso pela segunda vez. Se na linha 8 a variável estática não tivesse sido usada, o objeto teria sido chamado recursivamente infinitamente, levando ao erro StackOverFlow.

java booleano

Programa 2:

Java
class Gfg {  static int num;  static String mystr;  // constructor  Gfg()  {  num = 100;  mystr = 'Constructor';  }  // First Static block  static  {  System.out.println('Static Block 1');  num = 68;  mystr = 'Block1';  }  // Second static block  static  {  System.out.println('Static Block 2');  num = 98;  mystr = 'Block2';  }  public static void main(String args[])  {  Gfg a = new Gfg();  System.out.println('Value of num = ' + a.num);  System.out.println('Value of mystr = ' + a.mystr);  } } 

Saída:

Static Block 1  
Static Block 2
Value of num = 100
Value of mystr = Constructor

Explicação:

O bloco estático é executado quando a classe é carregada na memória. Uma classe pode ter vários blocos estáticos que são executados na mesma sequência em que foram escritos no programa.

Observação : Métodos estáticos podem acessar variáveis ​​de classe sem usar o objeto da classe. Como o construtor é chamado quando uma nova instância é criada, primeiro os blocos estáticos são chamados e depois o construtor é chamado. Se tivéssemos executado o mesmo programa sem usar object, o construtor não teria sido chamado.  

Programa 3:

Java
class superClass {  final public int calc(int a int b)  {  return 0;  } } class subClass extends superClass {  public int calc(int a int b)  {  return 1;  } } public class Gfg {  public static void main(String args[])  {  subClass get = new subClass();  System.out.println('x = ' + get.calc(0 1));  } } 

Saída:

Compilation fails. 

Explicação:

O método calc() na classe superClass é final e portanto não pode ser substituído.  

Programa 4:

Java
public class Gfg {  public static void main(String[] args)  {  Integer a = 128 b = 128;  System.out.println(a == b);  Integer c = 100 d = 100;  System.out.println(c == d);  } } 

Saída:

false  
true

Explicação:

java instanciado

No código-fonte do objeto Integer encontraremos um método 'valueOf' no qual podemos ver que o intervalo do objeto Integer vai de IntegerCache.low(-128) a IntegerCache.high(127). Portanto, os números acima de 127 não darão o resultado esperado. O intervalo de IntegerCache pode ser observado no código-fonte da classe IntegerCache.