Questões


Para as questões a seguir, responda verdadeiro ou falso.

  1. Na expressão booleana (i >= 0 & ++j < 10), o valor de j pode não ser incrementado se o valor de i for negativo.
  2. As expressões String s = new String("xyz"); e String s = "xyz"; são equivalentes.
  3. As expressões int x = new int(10); e int x = 10; são equivalentes.
  4. Sobrecarga de métodos (overloading) é o mecanismo que permite o uso de polimorfismo na programação orientada a objetos.
  5. Se uma classe X tem atributos privativos (private), nem mesmo objetos de classes derivadas de X terão acesso a esses atributos.
  6. Uma classe só pode ser definida como abstract se tiver pelo menos um método que também seja abstract.
  7. A expressão Object a = "abc"; é inválida, pois a coerção (cast) explícita de String para Object é requerida.
  8. Dada a declaração Object[] str = {"a","ab","abc"};, a expressão str[1].length() é válida e retorna o valor 2.
  9. Se uma classe implementa uma interface, todos os métodos especificados na interface implementada devem ser definidos.
  10. Se uma classe é derivada de uma classe abstrata, todos os métodos abstratos da superclasse devem receber uma definição na classe derivada.
  11. A expressão String s; cria um objeto da classe String cujo conteúdo é inicialmente vazio.
  12. Um método declarado como private não utiliza o mecanismo de ligação tardia (late binding).
  13. A classe RandomAccessFile é uma classe derivada de InputStream que permite a leitura e escrita de valores binários em posições arbitrárias de um arquivo.
  14. Uma classe é uma coleção de objetos.
  15. O mecanismo de herança permite que objetos de uma classe derivada tenham acesso a todos os atributos definidos em sua superclasse.
  16. O uso de uma linguagem de programação orientada a objetos enforça a aplicação dos conceitos de encapsulação e de ocultamento da informação.
  17. O mecanismo de sobrecarga de métodos é uma das formas de especificação de polimorfismo.
  18. Se s1 é um objeto da classe java.lang.String cujo conteúdo é "abc", a expressão a seguir modifica seu conteúdo para "abc.suf":
            s1 = s1.concat(".suf");
    	

Responda as questões a seguir tendo em conta o seguinte diagrama UML e o código Java que (em princípio) o implementa:

    class A {
      private int x;
      boolean z;
    }


	
    public class B extends A {
      private int y;
      public void set(int a, int b) {
        x = a;
        y = b;
      }
    }
  1. Qual deveria ser o nome do arquivo que contém esse código Java?
  2. O código reflete de forma correta a herança expressa na hierarquia de classes do diagrama UML?
  3. O código reflete de forma correta a estrutura interna da classe A?
  4. O código reflete de forma correta a estrutura interna da classe B?
  5. Qual o erro na implementação do método set classe B?

Para que o programa abaixo funcione, algumas modificações são necessárias nas linhas em destaque. Apresente as modificações realizadas e descreva o que o programa (após corrigido) apresentaria na tela para a linha de execução "java ContaL ab cde fgh"

1    class ContaL {
2      static final int size;
3      public static void main(String[] args) {
4        int i = 0;
5        int[] a;
6        size = args.length();
7        a = new int[size];
8        while(i < size) {  
9          a[i] = args[i].length;
10         ++i;
11       }
12       for(i=1; i<=size; ++i)
13         System.out.println(args[i]+": "+a[i]);
14     }
15   }

Considere o seguinte programa Java que recebe um argumento inteiro na linha de comando e apresenta na tela sua representação binária e hexadecimal:

1       public class BinRepres {
2          public static void main(String[] args) {
3	      Integer m = new Integer(args[0]);
4	      int value = m.intValue();
5             String binario = m.toBinaryString(value);
6             String hexadec = Integer.toHexString(value);
7	      System.out.println("[ 2] " + binario);
8	      System.out.println("[16] " + hexadec);
9          }
10      }
  1. Que exceções podem ocorrer na execução da linha 3?
  2. Compare a forma utilizada para invocar métodos estáticos nas linhas 5 e 6. Algumas delas provocaria erro? Qual a forma recomendada?

Considerando as seguintes definições de objetos,

    String s1 = new String("A");
    String s2 = new String("A");
  1. Qual o resultado da expressão s1 == s2?
  2. Qual o resultado da expressão s1.equals(s2)?

Para a seguinte classe e procedimento,

1  public class Y {
2    int x;
3    public Y() {    x = 0;  }
4    public void set(int i) {    x = i;  }
5    public static void main(String[] args) {
6      final Y o1 = new Y();
7      o1.set(10);
8      o1 = new Y();
9    }
10 }

Justifique se você concorda ou não com as seguintes afirmações:

  1. A expressão da linha 7 gera um erro de compilação pois há uma tentativa de se alterar o conteúdo de um objeto declarado como final.
  2. A expressão da linha 8 gera um erro de compilação pois há uma tentativa de se alterar a referência a um objeto declarada como final.

Suponha que duas classes sejam definidas como

  class ApBase implements Listener
  class ApDeriv extends ApBase implements Enumeration
e duas variáveis são definidas:
  ApBase aBase = new ApBase();
  Object obj = aBase;

Para cada atribuição abaixo, indique se há ou não erro; se houver erro, indique se é de compilação ou de execução. Justifique suas respostas.

  1. Listener ln = obj;
  2. Listener ln = (Listener) obj;
  3. Enumeration en = (Enumeration) obj;

Dada a seguinte definição de classe:

 public class Derived extends Base {
   int r, s, t;
   public Derived(int x, int y) {
     r = x;
     s = y;
   }
   public Derived(int x) {
     super(x);
   }
}

Quais as assinaturas dos construtores que devem existir na classe Base? Justifique.


Exceções relacionadas a índices de arranjos e de string pertencem à seguinte hierarquia:

  Exception
    |
    +-- RuntimeException
          |
          +--IndexOutOfBoundsException
               |
               +-- ArrayIndexOutOfBoundsException
               |
               +-- StringIndexOutOfBoundsException

Suponha que um método X manipule arranjos e strings sem especificar nenhum bloco try-catch. Indique se as afirmações a seguir são verdadeiras ou falsas, justificando suas respostas:

  1. A declaração do método X deve obrigatoriamente incluir a sentença
          throws ArrayIndexOutOfBoundsException,
                 StringIndexOutOfBoundsException
          
  2. Se um método que invoca X captura a exceção IndexOutOfBoundsException, ambos tipos de exceção para arranjos e strings são capturadas.

O método a seguir cria vários objetos Integer durante sua execução:

1   public void contagemRegressiva( ) {
2     for (int i=10; i>=0; i--) {
3        Integer tmp = new Integer(i);
4        // algum processamento usando tmp
5     }
6     System.out.println("Kabum!");
7   }

Quantos objetos Integer estarão disponíveis para o garbage collector caso ele entre em execução após a criação do quarto objeto Integer? E caso ele venha a executar quando o método estiver na linha 6?


Considerando a seguinte definição de classe, responda às questões que seguem:

01   public class Teste {
02     String   enunciado;
03     String[] opcoes;
04     int      alternativaCorreta;
05     public void Teste(String e, String[] opcoes, int correto) {
06       enunciado = e;
07       this.opcoes = opcoes;
08       alternativaCorreta = correto;
09     }
10     public void show() {
11       System.out.println(enunciado);
12       for (int i=0; i < opcoes.length; ++i) 
13         System.out.println(opcoes[i]);
14       System.out.println(">> " + opcoes[alternativaCorreta]);
15     }  
16     public static void main(String[] args) {
17       String s = "Qual e a musica?";
18       Teste t = new Teste(s,args,args.length);
19       t.show();
20     }
21   }
  1. Na linha 12, a expressão opcoes.length deve ser substituída pela expressão opcoes.length()?
  2. Qual a assinatura do único construtor da classe? (Preste atenção!)
  3. A execução do programa sem argumentos na linha de comando gera uma exceção. Qual é a exceção e em que linha ela se manifesta?

Uma expressão condicional tem a forma B?X:Y, onde B é uma expressão booleana e X e Y são expressões quaisquer. Se B for verdadeira, o resultado da expressão condicional é o resultado da expressão X; caso contrário, o resultado é o de Y. A execução do seguinte trecho de um método, no qual j, k e m são variáveis do tipo int,

      if(j==0?k<1:m>=1)
           System.out.println(k<1? "AA" : "BB");
      else
           System.out.println(m<1? "CC" : "DD");
    

obteve como resultado de uma execução a mensagem CC impressa na tela. Indique qual combinação de valores de j, k e m, respectivamente, pode ter gerado essa situação. Assinale todas as possibilidades corretas:

(a) 0, 0, 0   (b) 0, 1, 0  (c) 1, 0, 1    (d) 0, 1, 1    (e) 1, 1, 0


Para as questões a seguir, assinale verdadeiro ou falso considerando a definição da classe Anom abaixo.

1	class 	Anom {
2		private int x;
3		private static int y;
4		public 	Anom(int y) { this.y = y; }
5		public 	int f() { return y; }
6		public 	static void main(String[] args) {
7			Anom a = new Anom(1);
8			x = a.f();
9		}
10	}
  1. Essa classe não precisa estar definida em um arquivo de nome Anom.java

  2. Na linha 4 está faltando o tipo de retorno do método.

  3. Na linha 5 ocorrerá um erro por incompatibilidade de modificadores do método (public) e da variável usada para gerar o retorno (private e static).

  4. Na execução da linha 8 o atributo x receberá o valor 1.

Para as questões a seguir, selecione a resposta correta (das opções entre colchetes) para cada afirmação considerando a definição das classes abaixo.

1	class Fulan {
2	  protected int a;
3	  public int conta() { ++a; return 1; }
4	}
5	class Beltran extends Fulan {
6	  private int b;
7	  public int conta() { ++a; ++b; return 2; }
8	}
9	class Sicran {
10	  public static void main(String[] args) {
11	     XXXX obj = new YYYY();
12	     System.out.println(obj.conta());
13	  }
14	}
  1. O atributo a, protected em Fulan, [pode | não pode] ser usado na linha 7 por um método de Beltran.

  2. Na linha 11 ocorrerá um erro se XXXX for [Fulan | Beltran] e YYYY for [Fulan | Beltran].

  3. Se XXXX for Fulan e YYYY for Beltran na linha 11, na linha 12 será impresso o valor [1 | 2].


Quais das seguintes afirmações sobre as interfaces java.util.List e java.util.SortedMap são corretas?

  1. Um objeto do tipo List pode conter referências tanto para objetos como para valores primitivos.
  2. Um objeto do tipo List preserva a ordem de inserção das referências a seus objetos.
  3. Um objeto do tipo SortedMap requer objetos String como chaves.
  4. Um objeto do tipo SortedMap mantém referências a objetos na ordem em que eles são adicionados.

O novo framework de coleções de Java introduz novas classes e interfaces na API Java padrão. Das opções a seguir, quais representam interfaces?

  1. java.util.List
  2. java.util.TreeMap
  3. java.util.AbstractList
  4. java.util.SortedMap
  5. java.util.Iterator
  6. java.util.Collections

Qual das classes a seguir no novo framework de coleções de Java está mais próxima à classe Vector?

  1. LinkedList
  2. TreeSet
  3. AbstractCollection
  4. ArrayList
  5. Collections

Qual a diferença entre java.util.Collection e java.util.Collections?


Um objeto da classe histórica Hashtable pode armazenar e recuperar referências a objetos baseados em objetos "chaves" associados. Qual das interfaces a seguir é implementada por Hashtable?

  1. SortedMap
  2. Map
  3. List
  4. SortedSet

Explique como seria possível criar um objeto do tipo TreeSet com um conteúdo que não pode ser modificado por outras classes que o utilizem. O que acontece nesse caso se os métodos de modificação (como add e remove) forem invocados?


Que ações são tomadas pelo sistema de arquivos quando o código a seguir é executado e o objeto myFile é criado? Assuma que name representa o nome de um arquivo, incluindo um caminho válido, que não existe no momento:

      File createFile(String name) {
        File myFile = new File(name);
        return myFile;
      }
    
  1. Um novo arquivo vazio é criado com esse nome, mas não é aberto.
  2. O diretório corrente passa a ser aquele especificado no nome do arquivo.
  3. Um novo arquivo vazio é criado e aberto.
  4. Nenhuma das anteriores.

Quais das seguintes afirmações sobre a saída padrão System.out são corretas?

  1. System.out é um PrintStream.
  2. System.out é um OutputStream.
  3. System.out é um FilterOutputStream.
  4. System.out gera exceções da classe IOException quando acontece um erro.

Quais dos objetos a seguir não poderiam ser utilizados no construtor de um objeto DataInputStream?

  1. FileInputStream
  2. RandomAccessFile
  3. BufferedInputStream
  4. ByteArrayInputStream

Quais das classes a seguir não são classes abstratas ou interfaces?

  1. InputStream
  2. PrintStream
  3. Reader
  4. DataInput
  5. InputStreamReader

© Ivan Luiz Marques Ricarte
DCA/FEEC/UNICAMP

Last modified: Thu Mar 13 16:22:58 BRT 2003