3. Basic Exercises 3

  1. Quais das seguintes declarações são ilegais? (escolha uma ou mais)

    1.a.

    friendly String s;

    1.b.

    transient int i = 41;

    1.c.

    public final static native int w();

    1.d.

    abstract double d;

    1.e.

    abstract final double hyperbolicCosine();

  2. Qual das seguintes declarações é correta?

    2.a.

    Uma abstract class não pode ter nenhum método final

    2.b.

    Uma final classe não pode ter nenhum método abstrato

  3. Qual é a ‘mínima’ modificação que deverá ser feita no código abaixo para que ele compile corretamente?

    1.      final class Aaa
    2.      { 
    3.         int xxx 
    4.        void yyy() {xxx = 1;} 
    5.      } 
    6. 
    7. 
    8.      class Bbb extends Aaa 
    9.      { 
    10.     final Aaa finalref = new Aaa() 
    11.      
    12.     final void yyy() 
    13.     { 
    14.        System.out.println(“In method yyy()"); 
    15.        finalref.xxx = 12345; 
    16.     } 
    17.  }
    3.a.

    Na linha 1, remover o modificador ‘final’

    3.b.

    Na linha 10, remover o modificador ‘final’

    3.c.

    Remover linha 15

    3.d.

    Nas linhas 1 e 10, remover o modificador ‘final’

    3.e.

    O código será compilado como é, e nenhuma modificação é necessária

  4. Qual das seguintes statements são verdadeiras?

    4.a.

    Métodos transient não podem ser overridden

    4.b.

    Métodos transient devem ser overridden

    4.c.

    Classes transient não podem ser serialized

    4.d.

    Variáveis transient devem ser estatic

    4.e.

    Variáveis transients não são serialized

  5. Qual statements é verdadeiro sobre a aplicação abaixo?

    1.      class StaticStuff
    2.      { 
    3.         static int x = 10; 
    4.        
    5.      static { x += 5;} 
    6.        
    7.          public static void main(string args[]) 
    8.         { 
    9.             System.out.println(“x = “ + x); 
    10.      } 
    11.    
    12.      static {x /= 5; } 
    13.  }
    5.a.

    As linhas 5 e 12 nao compilarão, porque o nome do método e o type de retorno estão errados

    5.b.

    A linha 12 não compilará, porque pode haver somente um inicializador static

    5.c.

    O código compilará, e a execução produzirá a saída x = 10;

    5.d.

    O código compilará, e a execução produzirá a saída x = 15;

    5.e.

    O código compilará, e a execução produzirá a saída x = 3;

  6. Qual afirmação é verdadeira para o código abaixo?

    1.      class HasStatic; 
    2.      { 
    3.          private static int x = 100; 
    4.        
    5.          public static void main(String args[]) 
    6.          { 
    7.               HasStatic hs1 = new HasStatic(); 
    8.               hs1.x++; 
    9.               HasStatic hs2 = new HasStatic(); 
    10.           hs2.x++; 
    11.           hs1 = new HasStatic(); 
    12.           hs1.x++; 
    13.           HasStatic.x++; 
    14.           System.out.println(“x = “ + x); 
    15.        } 
    16.   }
    6.a.

    A linha 8 não compilará, porque ela é uma referencia static a uma variável private.

    6.b.

    A linha 13 nao compilará, porque ele é uma referencia static para uma variável private

    6.c.

    O programa compilará, e a saída será: x = 102;

    6.d.

    O programa compilará, e a saída será: x = 103

    6.e.

    O programa compilará, e a saída será: x = 104

  7. Dado o código abaixo, e não fazendo outra mudança, qual modificador de acesso ( public, protected, private) pode ser colocado antes de aMethod() na linha 3? Se a linha 3 for deixada como ela é, qual keyword pode ser colocada antes de ‘aMethod’ na linha 8?

    1.      class SuperDuper 
    2.      { 
    3.            void aMethod() { } 
    4.       } 
    5.        
    6.      class Sub extends SuperDuper 
    7.      { 
    8.          void aMethod() { } 
    9.      }

    As proximas relacionam-se à seguinte definição de class.

    1.      package abcde; 
    2.        
    3.      public class Bird   { 
    4.         protected static int referenceCount = 0; 
    5.         public Bird() { referenceCount++; } 
    6.         protected void fly() { /* Flap wings, etc.*/ } 
    7.         static int getRefCount() { return referenceCount; } 
    8.      }
  8. Qual afirmação é verdadeira sobre a class Bird acima e a class Parrot abaixo?

    1.      package abcde; 
    2.        
    3.      class Parrot extends abcde.Bird { 
    4.         public void fly() { /* Parrot specific flight code. */} 
    5.         public int getRefcount() { return referenceCount; } 
    6.      }
    8.a.

    Compilação de Parrot.java falha na linha 4, porque o method fly() é protected na superclasse e classes Bird e Parrot estão no mesmo pakage.

    8.b.

    Compilação de Parrot.Java falha na linha 4, porque o método fly() é protected na superclasse e public na suclasse e o método não pode ser ‘overhidden’ para ser public.’

    8.c.

    Compilação de Parrot falhará na linha 5, porque o método getRefCount() é static na superclasse e metidos static não podem ser ‘overhidden’para ser não-static.

    8.d.

    O programa compilará e executará, mas surge uma runtime exceptions se o método fly() é sempre chamado na instancia da class Parrot.

    8.e.

    Compilação de Parrot.Java tem sucesso, mas surge uma runtime exceptions se o método getRefCount() é sempre chamado na instância da class Parrot.

  9. Qual afirmação é verdadeira sobre a class Bird acima e sobre a class Nightingale abaixo:

    1.      pachage singers; 
    2.        
    3.      class Nightingale extends abcde.Bird { 
    4.         Nightingale() { referenceCount++; } 
    5.        
    6.         public static void main(String args[]) { 
    7.             System.out.print(“Before: “ + referenceCount); 
    8.             Nightingale florence = new Nightingale(); 
    9.             System.out.println(“   After: “ + referenceCount); 
    10.         florence.fly(); 
    11.     } 
    12.  }
    9.a.

    O programa compilará e executará. A saída será: Before: 0 After: 2.

    9.b.

    O programa compilará e executará. A saída será: Before: 0 After: 1

    9.c.

    Compilação de Nightingale falhará na linha 4, porque membros static não podem ser ‘overhidden’

    9.d.

    Compilação de Nightingale falhará na linha 10, porque o método fly() é protegido na superclasse

    9.e.

    Compilação de Nightingale terá sucesso, mas surge uma exception na linha 10, porque o método fly() é protected na superclasse