terça-feira, 27 de agosto de 2013

perguntas exames SCJP - Atribuindo uma Variavel de Referencia a Outra


Atribuindo uma Variável de Referencia a Outra

Com relacao as variáveis primitivas, a atribuicao de uma variável a outra siguinifica que o conteúdo(peadores de bits) de uma variável sera copiada em outra variável, as variáveis de referencia a objeto funcionao exatamente da mesma maneira. O conteúdo de uma variável de referencia e o padrão de bits, por tanto, se voce atribuir a variável de referencia A a variável de referencia B, o padrão de bits de A sera copiado e a nova copia sera inserido em B. Se atribuirmos a instancia existente de um objeto a uma nova variável de referencia, então, duas variáveis de referencia armazenarão o mesmo padrão de bits – um padrão de bits referenciado um objeto especifico na memoria.Exame do código a seguir:


package outro.pacote.teste.variaveis.tipo.primitivo;

public class DemensionTest
{
     int a ;
     int b ;
public DemensionTest(int a, int b)
  {
     super();
     this.a = a;
     this.b = b ;
  }
}


//--------------------

package outro.pacote.teste.variaveis.tipo.primitivo;

public class Main
{

public static void main(String[] args)
  {
     DemensionTest a = new DemensionTest(5, 10);
     DemensionTest b = a ;
     System.out.println(b.a);
     a.a = 33 ;
     System.out.println(b.a);
  }
}


-----------------------------
o que vai imprimir e:


5
33

-------------------------

Fonte: Livro Kathy Sierra SCJP6 , Capitulo 3, pagina 121

perguntas exames SCJP - blocos de Inicializacao

perguntas exames SCJP - blocos de Inicializacao




    Blocos de inicializacao rodam quando a classe e carregada pela primeira vez(um bloco de inicializacao estático) ou quando a instancia e criada(um bloco de inicializacao de instancia), como podemos ver no exemplo:

package outro.pacote.teste.blocos.inicializacao;

public class SmallInit
{
    static int x ;

    int y ;

    static{x = 7 ;} //bloco de inicializacao estatico

    {y = 8;} //bloco de inicializacao de instancia

}


Como podemos ver, a sintaxe dos blocos de inicializacao e bem complexa. Eles não tem nomes, não usam argumentos e não retornado nada. Um bloco de inicializacao estático roda uma vez quando a classe e carregada pela primeira vez. Um bloco de inicializacao de instancia roda sempre que uma nova instancia e criada. O código de blocos de instancia roda logo depois da chamada a super() em um construtor, ou seja, depois que todos os superconstrutores tenham rodado.

Você pode ter muitos blocos de inicializacao em sua classe. E importante notar que, ao contrario de métodos construtores, a ordem em que os blocos de inicializacao aparecem em uma classe faz diferenca . Quando chega a hora de os blocos de inicializacao executarem, se uma classe tiver mais de um, eles rodarão na ordem em que aparecem no arquivo da classe.. Em outras palavras de cima para baixo.

Podemos ver outro exemplo:


package outro.pacote.teste.blocos.inicializacao;

public class Super
{

  
      System.out.println(" Super bloco Super ");
  }


  Super()
  {
      System.out.println("Metodo Construtor Super Super ");
  }

}

////---------------------


package outro.pacote.teste.blocos.inicializacao;

public class Teste extends Super
{
   static{ System.out.println( " TESTE static 1 ");}

   
      System.out.println( "TESTE block teste ");
   }

static { System.out.println( "TESTE static 2 ");}

   Teste()
   {
      super(); //chamada é implícita

      System.out.println( "Metodo Construtor TESTE teste ");
   }

}



///------------------

package outro.pacote.teste.blocos.inicializacao;

public class Main
{
  public static void main(String[] args)
  {
     new Teste();
  }
}





Qual sera a saida???!!!:
Para saber as respostas, lembre-se das regras:
  • Os blocos de inicializacao rodam na ordem em que aparecem.
  • Os blocos de inicializacao estáticos rodam uma vez, quando a classe e carregada pela primeira vez.
  • Os blocos de inicializacao de instancias rodam sempre que uma instancia de classe e criada.
  • Os blocos de inicializacao de instancias rodam depois da chamada que o construtor faz super().


...
...
...
...

 TESTE static 1 
TESTE  static 2  
 Super bloco Super 
Metodo Construtor Super Super 
TESTE  block teste  
Metodo Construtor  TESTE  teste  



Outro teste, qual sera a saida??

package outro.pacote.teste.blocos.inicializacao;

public class Init
{

   public Init(int x)
   {
      System.out.println("1-arg const ");
   }
   public Init()
   {
      System.out.println("no-arg const");
   }
   static
   {
      System.out.println(" 1st -static init ");
   }
   {
      System.out.println("1st instance init");
   }

   {
      System.out.println("1nd instance init");
   }

   static
   {
      System.out.println(" 2nd -static init ");
   }
   public static void main(String[] args)
   {
      new Init();
      new Init(7);
   }

}


Resposta:
Para saber as respostas, lembre-se das regras:


  • Os blocos de inicializacao rodam na ordem em que aparecem.
  • Os blocos de inicializacao estáticos rodam uma vez, quando a classe e carregada pela primeira vez.
  • Os blocos de inicializacao de instancias rodam sempre que uma instancia de classe e criada.
  • Os blocos de inicializacao de instancias rodam depois da chamada que o construtor faz super().
..
..
..
..
 1st -static init 
 2nd -static init 
1st instance init
1nd instance init
no-arg const
1st instance init
1nd instance init
1-arg const 





segunda-feira, 26 de agosto de 2013

ANIVERSÁRIO - 22 Anos do Kernel / Linux

ANIVERSÁRIO - 22 Anos do Kernel / Linux


Linus Torvalds, anuncia o nascimento do kernel versão 0.01 a 25.08.1991,e assim começa a dança do kernel e a implementação em crescendo do Linux e do software GNU.

Parabéns a Linus Torvalds pelo esforço e dedicação desde esse dia, a toda a equipa que ao longo do tempo vem a contribuir e a desenvolver novas e melhores funcionalidades ao nível do kernel e a todos que usam e abusam de Linux.






perguntas exames SCJP - variaveis de instancia de Tipo Primitivo e de Objeto

perguntas exames SCJP - variáveis de instancia de Tipo Primitivo e de Objeto


      As variáveis de instancia(também chamadas de variáveis membros) são variaveis definidas no nível da classe. Isso significa que a declaracão da variável não e feita dentro de um método, construtor ou de qualquer um dentro de bloco inicializador. As variáveis de instancia são inicializadas com um valor padrão sempre que uma nova instancia e criada, embora possam receber um valor explicito depois de os super construtores do objeto terem finalizado seu trabalho.

package outro.pacote.teste.literais.caracteres;

public class AtribuindoValores
{
  int year ;

  public static void main(String[] args)
  {
      AtribuindoValores atribuindoValores = new AtribuindoValores();
      System.out.println(atribuindoValores.year);
  }

}


   Tabela com valores padrão para os tipos primitivos e de objeto.


Tipo de Variável Valor Padrão
Variável de referencia a Objeto Null não faz referencia a nenhum objeto
byte , short, int, long 0
float 0.0
boolean false
Char \u0000'


perguntas exames SCJP - valor Tipos Primitivos Java

 perguntas exames SCJP - valor Tipos Primitivos Java


             A linguagem Java não é totalmente Orientada a Objetos, e isto se deve principalmente aos atributos do tipo primitivo, pois são tipos de dados que não representam classes, mas sim valores básicos.
 
Os tipos primitivos, assim como em várias outras linguagens tais como o C, existem para representar os tipos mais simples de dados, sendo eles dados numéricobooleano e caractere. Os tipos primitivos da linguagem Java são:

TipoDescrição
booleanPode assumir o valor true ou o valor false
charCaractere em notação Unicode de 16 bits. Serve para a armazenagem de dados alfanuméricos. Também pode ser usado como um dado inteiro com valores na faixa entre 0 e 65535.
byteInteiro de 8 bits em notação de complemento de dois. Pode assumir valores entre -27=-128 e 27-1=127.
shortInteiro de 16 bits em notação de complemento de dois. Os valores possívels cobrem a faixa de -2-15=-32.768 a 215-1=32.767
intInteiro de 32 bits em notação de complemento de dois. Pode assumir valores entre -231=2.147.483.648 e 231-1=2.147.483.647.
longInteiro de 64 bits em notação de complemento de dois. Pode assumir valores entre -263 e 263-1.
floatRepresenta números em notação de ponto flutuante normalizada em precisão simples de 32 bits em conformidade com a norma IEEE 754-1985. O menor valor positivo represntável por esse tipo é 1.40239846e-46 e o maior é 3.40282347e+38
doubleRepresenta números em notação de ponto flutuante normalizada em precisão dupla de 64 bits em conformidade com a norma IEEE 754-1985. O menor valor positivo representável é 4.94065645841246544e-324 e o maior é 1.7976931348623157e+308





sábado, 24 de agosto de 2013

perguntas exames SCJP - Entendendo Pilha e Heap

Entendendo Pilha e Heap



     Pilha: variáveis locais ou "de método" e valores de tipos primitivos. Note qu são apenas as variáveis que ficam na pilha e não os objetos. 

Heap: qualquer variável de instância (seja primitiva ou objeto) e qualquer Objeto (inclusive array, de primitivo ou não, pois qualquer array é um Object) declarado em qualquer ponto do programa. 



Ex.: 

public class Class 
{
     //a variável heapcavalo é de instância e, portanto, será armazenada no heap
     //e o objeto Cavalo criado será armazenado no heap
     Cavalo heapcvalo = new Cavalo();

     //a variável heapCavalos é de instância e, portanto, será armazenada no heap
     //e o array Dog[] é um objeto e, portanto, será armazenado no heap
     Cavalo[] heapCavalos = new Cavalo[]{ new Cavalo(). New Cavalo(). new Cavalo() };

public void rugir() {
     //a variável stackCavalo é local e, portanto, será armazenada na pilha.
     //Mas o objeto Cavalo criado será armazenado no heap.
     Cavalo stackCavalo = new Cavalo();
     System.out...(stackCavalo + " está rugindo...") ;
}

public void realizarSurubaCanina() 
{
     //a variável stackDogs é local e, portanto, será armazenada na pilha.
     //Mas o array Dog[] criado é um objeto e, portanto, será armazenado no heap.
     Cavalos[] stackCavalos = new Cavalos[]{ new Cavalo(). new Cavalo(). new              Cavalo() };
     System.out...(" apostem nos " + stackCavalos + " por que eles estao      correndo...");
}



}



sexta-feira, 23 de agosto de 2013

perguntas exames SCJP - Escopo da Variavel


Escopo da Variável



     Depois que você declarou e inicializou uma variável, uma questão natural e “por quanto tempo esta variável vai existir?” Esta e uma pergunta que se refere ao escopo das variáveis. E o escopo não e apenas uma coisa importante de se entender de modo geral. Examinemos um arquivo de classe.


class Layout   //Classe
{
static int s = 343 ; //variavel estatica
int x ; // variavel de instancia
// {x =7 ; int x2 = 5} // bloco de inicializacao

Layout(){ x +=8; int x3 = 6 ; } //construtor

void doStuff(){ //metodo
int y = 0 ; // variavel local

for(int z = 0 ; z <4 ; z++)
{
y += z + x ;
}
}

}



Como acontece com as variáveis em todos os programas Java, as desde programa(s, x, x2, x3, y e z) tem todas um escopo:

  • s e uma variável estática.
  • x e uma variável de instancia.
  • y e uma variável local(as vezes chamada de variável “local de metodo”)
  • z e uma variável de bloco
  • x2 e uma variável de bloco de inicializacao, um tipo de variável local
  • x3 e uma variável de construtor, um tipo de variável local


Para o proposito de explicacao do escopo das variáveis, podemos dizer que existem quatro escopos básicos:

  •       As variáveis estática tem o escopo mas amplo; elas são criadas quando a classe e carregada, e duram por todo o tempo em que a classe permanecer carregada na JVM.

  •       As variáveis de instancia são o segundo tipo mais duradouro; elas são criadas quando uma nova instancia e criada, e existem ate que a instancia seja removida.

  •       As variáveis locais vem em seguida; elas existem durante todo o tempo em que o seu método permanecer na pilha.

  •      As variáveis de bloco só existem durante o tempo em que o bloco de código esta sendo executado.






quinta-feira, 22 de agosto de 2013

perguntas exames SCJP - float primitivo

float primitivo


Pessoal lés mostro mais um exemplo de perguntas que podem cair no exame OCJP(SCJP) com valores primitivos:

Qual o resultado quando o seguinte fragmento de código for executado?
int a = 8;
int b = 3;
float f = a++/b--;
System.out.println(f);


A. 3.0
B. 4.5
C. 2.0
D. 2.6 


Caso o operador incremento/decremento se apresentasse anteriormente à a/b, o valor de memória já seria passado às variáveis resultando no valor 3.0 (alternativa A). Ainda que os operadores ++ e -- tenham maior procedência que /, não há conflito entre as operações neste exemplo. Portanto, a operação 8/3 resulta em 2.0 para f do tipo float, depois que a é incrementado para 9 e b é decrementado para 2 (alternativa C). Os demais valores não são possíveis de alcançar com as operações apresentadas.
Alternativa correta: C.


Este blog e somente dedicado a questões de exames, questões.