Nível de dificuldade : Intermediário
Preveja a saída dos seguintes programas Java:
Programa 1:
Javaclass 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:
Javaclass 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:
Javaclass 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:
Javapublic 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.