Prova 1 Flashcards

1
Q

O que acontece ao tentar rodar um código sem o método main?

A

Quando um programa é executado, a JVM procura por um método main.
Se não encontra, ela lança um erro na execução.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

O código abaixo compila?

public class TestClass{   
    public static long main(String[] args){      
       System.out.println("Hello");      
       return 10L;   
    } 
}
A

Sim

Mas só será executado se chamado através de outra classe.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

O que acontece ao chamar o método main através de outra classe?

A

O código executa normalmente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

O código abaixo executa?

public class Gato {
	public static void main(String[] args){
		System.out.println("GATO");
	}
}
public class Principal{
	public static void main(String[] args){
		Gato gato = new Gato();
		String[] argss = {};
		gato.main(argss);
	}
}
A

Sim

Compila normalmente!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

O código abaixo executa?

public class Gato {
	public static void main(String[] args){
		System.out.println("GATO");
	}
}
public class Principal{
	public static void main(String[] args){
		Gato gato = new Gato();
		String[] argss;
		gato.main(argss);
	}
}
A

Não! O código não compila!

A variável argss não foi inicializada.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

O código abaixo executa?

public class Gato {
	public void main(){
		System.out.println("GATO");
	}
}
public class Principal{
	public static void main(String[] args){
		Gato gato = new Gato();
		gato.main();
	}
}
A

Sim, o código compila normalmente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Quais dos pacotes abaixo são importados automaticamente pela linguagem java?

java. util.*
java. lang.*
java. io.
java. awt.

A

java.lang.*

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

O código abaixo compila?

String mStr = "123"; 
long m = new Long(mStr);
A

Sim compila!
A classe long possui um construtor que recebe uma String.

Todas as classes wrapers possuem um construtor que recebe uma String.

Integer num = new Integer(“123”);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

O que o código abaixo retorna?

String mStr = “123”;
Long.parseLong(mStr);

A

Retorna um tipo long (primitivo)
O método parse sempre recebe uma string.
O método valueOf recebe um objeto e retorna um wrapper.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

O que o código abaixo imprime?

int i,j,k;
i = j = k = 20;
System.out.println(i+” “+j+” “+k);

A

20 20 20

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

O que o código abaixo imprime?

int i,j,k;
int b = i = j = k = 20;
System.out.println(b+ “ “ +i+” “+j+” “+k);

A

20 20 20 20

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

O que o código abaixo imprime?

int i;
int b = i = j = k = 20;
System.out.println(b+ “ “ +i+” “+j+” “+k);

A

Não compila

As variáveis j e k não foram declaradas antes.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

O que o código abaixo imprime?

int i,j,k;
int l = 10;
int b= i= j=k = l =20;
System.out.println(b+” “+i+” “+j+” “+k+” “+l);

A

20 20 20 20 20

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

O código abaixo compila?

float f2 = 123__345_______667F;

A

Sim compila!

Pode ocorrer mais de um underline na operação. Contato que estejam entre números o código compila.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

O código abaixo compila?

String s = ‘a’;

A

Não

Char não pode ser convertido para String.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

O código abaixo compila?

char a = ‘a’;
String s = (String)a;

A

Não

Char não pode ser convertido para String.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Posso converter char para String?

A

Não
Char não pode ser convertido para String.

char a = ‘a’;
String s = (String)a; //Não Compila

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q
Quanto imprime o código abaixo?
Integer var = new Integer(5);
var++;
A

6
Classes Wrappers são imutáveis.
Mas neste caso o código é iterado e depois reatribuído para a variável.

var = new Integer( var.intValue()+ 1);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Qual a saída do programa abaixo?

public static void main(String[] args){
	Integer val1 = new Integer(5);
	testInts(val1++);
	System.out.println(val1);
}

public static void testInts(Integer obj){
obj++;
System.out.println(obj);
}

A

6 6

Ao usar o obj++ no método testInts é criada uma nova referência para variável. Não alterando o valor externo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Qual a saída do programa abaixo?

public static void main(String[] args){
	Integer val1 = new Integer(5);
	testInts(val1++);
	System.out.println(val1);
}
public static void testInts(Integer obj){
	obj++;
        obj++;
	System.out.println(obj);
}
A

7 6

Ao usar o obj++ no método testInts é criada uma nova referência para variável. Não alterando o valor externo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q
O que imprime o código abaixo?
int i = 0;
switch(i){
	case 0 : System.out.print("Saulo ");
	case 1 : System.out.print("Java "); break;
	default : System.out.print("Good Bye");
}
A

Saulo Java

O método default só é executado quando nenhum dos outros cases são aceitos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q
O que imprime o código abaixo?
int i = 0;
switch(i){
	case 0 : System.out.print("Saulo ");
	case 1 : System.out.print("Java ");
	default : System.out.print("Good Bye");
}
A

Saulo Java Good Bye

O método default só é executado quando nenhum dos outros cases são aceitos. Mas na ausência de um break, todos os outros cases são executados.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q
O que imprime o código abaixo?
int i = 0;
switch(i){
	default : System.out.print("Good Bye");
	case 0 : System.out.print("Saulo ");
	case 1 : System.out.print("Java ");

}

A

Saulo Java

O método default não precisa ser obrigatoriamente o último.
Mas prevalece a obrigação de usar um break.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q
O que imprime o código abaixo?
int i = 5;
switch(i){
	default : System.out.print("Good Bye");
	case 0 : System.out.print("Saulo ");
	case 1 : System.out.print("Java ");

}

A

Good ByeSaulo Java

O método default não precisa ser obrigatoriamente o último.
Mas prevalece a obrigação de usar um break.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

O código abaixo compila?

Boolean bool = false;

A

Sim

Apesar de ser um Wrapper, a atribuição sofre um autobox.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

O que o código abaixo imprime?
String V1 = “Um”;
String V2 = “Dois”;
System.out.println( V1.equals(V1=V2) );

A

False

Primeiro o valor de V1 é avaliado. 
V1.equals(V1=V2)
"Um".equals(V1=V2)
Em seguida a operação é executada.
"Um".equals("Dois")
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Qual o resultado da operação abaixo?

double x = 39.21;
float y = 2.1;
double z = x + y;

A

Não compila!
2.1 é um double, e não pode ser convertido diretamente para float.
float y = 2.1f;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

O código abaixo compila?

int x = !5;

A

Não

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

O código abaixo compila?

boolean x = !true;

A

Sim

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Qual o resultado de x e y?

int x = 3;
int y = ++x * 5 / x– + –x;

A
x is 2
y is 7
Primeiro resolve todos os operadores de incremento e decremento.
int y = 4 * 5 / 4 + 2;
Só então se executa a operação
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

O que imprime a operação abaixo?

System.out.println((1>2==4>45)?(“True”):(“False”));

A

True

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

O que imprime a operação abaixo?

System.out.println((1>2=4>45)?(“True”):(“False”));

A

Não compila!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

O que o código abaixo imprime?

int x = 0;
if(true||x++>0)
System.out.println(x);

A

0

A segunda parte da operação não será executada pois a primeira já valida a operação.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

O que o código abaixo imprime?

int x = 0;
if(true|x++>0)
System.out.println(x);

A

1

Mesmo que a primeira parte da operação seja true, será executada a segunda verificação.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

O que o código abaixo imprime?

int x = 0;
if(true&&x++>0)
System.out.println(x);

A

1

A segunda operação será executada.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

O que o código abaixo imprime?

int x = 0;
if(false&x++>0)
System.out.println(x);

A

O valor de X será 1, mas nada será impresso!

Mesmo que a primeira condição já invalide a operação, a segunda condição será executada.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

O que o codigo abaixo imprime?

public class Value{
	public static void main(String[] args){
		for(String val:args){
			System.out.println(val);
		}
	}
}

> > java Value 1 2 3

A

1
2
3

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

O que o código abaixo imprime?

public class Switcher{
   public static void main(String[] args){
       switch(Integer.parseInt(args[1]))  
       {
          case 0 :
             boolean b = false;
             break;
          case 1 :
             b = true; 
             break;
       }
       if(b) System.out.println(args[2]);
   }
}

> > java Switcher 1 2 3

A

Não compila

A variável b foi instanciada dentro do switch. Portanto não pode ser acessada por um membro externo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

O código abaixo compila?

String[] arr = new String[2];
for(String str:arr){
System.out.println(str);
}

A

Sim! Imprime:
null
null

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

O que imprime o código abaixo?

String[] vet = new String[2];
for(int i = 0; i < vet.length ; i++){
vet[i].concat(“Num”);
}

for(String ar:vet){
System.out.println(ar);
}

A

Compila mas lança exceção!
Ele lança uma NullPointerException!
Pois se está tentando concatenar um valor a uma posição null.

Todo vetor de String recebe null a seus valores não atribuídos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

O que imprime o código abaixo?

String[] arr = new String[2];
for(int i = 0; i < arr.length; i++){
arr[i]=i;
}

for(String ar:arr){
System.out.println(ar);
}

A

Não compila!
int não pode ser convertido para String.

Para funcionar, converta int para String:
arr[i]=(new Integer(i).toString());
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

O que imprime o código abaixo?

String[] arr = new String[2];
for(int i = 0; i < arr.length; i++){
    arr[i]=(new Integer(i).toString());
}

for(String ar:arr){

A

0
1

O código compila normalmente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
43
Q

O que imprime o código abaixo?

int[] arr = new int[2];
try{
	System.out.println(arr[2]);
}catch(Exception e) { }
System.out.println(arr[1]);
A

0

Mesmo que se tente acessar um index inexistente do array, o catch pega a exceção.
Vale ressaltar que o mesmo array foi preenchido com o valor padrão do tipo int, que é 0.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
44
Q

O que imprime o código abaixo?

int[] arr = new int[2];
System.out.println(arr[2]);

A

Lança ArrayIndexOutOfBoundsException

Pois se tenta fazer acesso a uma posição inexistente do array.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
45
Q
Qual das linhas abaixo não compila?
String[] sA = new String[] { "aaa"}; // 1
String[] sA = new String[1] { "aaa"}; // 2
String[] sA = new String[1] ; sA[0] = "aaa"; // 3
String[] sA = {new String( "aaa")}; // 4
String[] sA = { "aaa"}; // 5
A

2

Não se pode inicializar diretamente o vetor que possui tamanho definido.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
46
Q

O código abaixo compila?

String[] sA = new String[1] { “aaa”};

A

Não

Não se pode inicializar diretamente o vetor que possui tamanho definido.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
47
Q

O que imprime o código abaixo?

String[] arr = new String[2];
try{
	System.out.println(arr[2]);
}catch(Exception e) { }
System.out.println(arr[1]);
A

null

Apesar de fazer um acesso a uma posição invalida do array, esta exceção é tratada.
Portanto a execução segue normalmente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
48
Q

Qual a ordem de inicialização de uma classe?

A

Primeiro se instancia os membros estáticos, na ordem que eles aparecem.

Em segundo os membros de instância, na ordem que aparecem.

Só então o construtor é executado.

O ultimo item da lista é o método main.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
49
Q

O que imprime o código abaixo?

public class Inicializadores {
    static{
        s1 = metodo1("a");
    }
    public Inicializadores() {
        s1 = metodo1("g");
    }
static String s1 = metodo1("b");

String s3 = metodo1("d");

{
    s1 = metodo1("e");
}

static String s2 = metodo1("c");

String s4 = metodo1("f");

private static String metodo1(String s) {
    System.out.println(s);
    return s;
}
    public static void main(String args[]) {
        //Inicializadores it = new Inicializadores();
    }
}
A
a
b
c
d
e
f
g
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
50
Q

O que imprime o código abaixo?

public class Inicializadores {
    static{
        s1 = metodo1("a");
    }
    public Inicializadores() {
        s1 = metodo1("g");
    }
static String s1 = metodo1("b");

String s3 = metodo1("d");

{
    s1 = metodo1("e");
}

static String s2 = metodo1("c");

String s4 = metodo1("f");

private static String metodo1(String s) {
    System.out.println(s);
    return s;
}
    public static void main(String args[]) {
        //Inicializadores it = new Inicializadores();
    }
}
A

a
b
c

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
51
Q

O que o código abaixo imprime?

public static void main(String[] args){
	int i = 10;
	tx(i);
        System.out.println(i);
}

public void tx(int i){
i = 15;
System.out.println(i);
}

A

Não compila!

O código tenta chamar um método não estático de um método estático.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
52
Q

O que o código abaixo imprime?

public static void main(String[] args){
	ref r = new ref();
	int i = 10;
	r.tx(i);
	System.out.println(i);
}

public void tx(int i){
i = 15;
System.out.println(i);
}

A

15

10

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
53
Q

O que o código abaixo imprime?

public static void main(String[] args){
	ref r = new ref();
	StringBuilder sb = new StringBuilder("Saulo");
	r.tx(sb);
	System.out.println(s);
}

public void tx(String s){
System.out.println(s);
}

A

Não compila!

StringBuilder não pode ser convertido para String.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
54
Q

O que o código abaixo imprime?

public static void main(String[] args){
	ref r = new ref();
	StringBuilder sb = new StringBuilder("Saulo");
	r.tx(sb);
	System.out.println(sb);
}

public void tx(StringBuilder s){
s.append(“V1”);
System.out.println(s);
}

A

SauloV1

SauloV1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
55
Q

O que o código abaixo imprime?

public static void main(String[] args){
	ref r = new ref();
	int i = 10;
	StringBuilder sb = new StringBuilder("Saulo");
	r.tx(sb);
	System.out.println(sb);
}
public void tx(StringBuilder s){
	s = new StringBuilder("SauloV2");
	s.append("V1");
	System.out.println(s);
}
A

SauloV2V1

Saulo

56
Q

O que o código abaixo imprime?

public static void main(String[] args){
	ref r = new ref();
	int i = 10;
	StringBuilder sb = new StringBuilder("Saulo");
	r.tx(sb);
	System.out.println(sb);
}
public void tx(StringBuilder s){
	s = new StringBuilder(s + "SauloV2");
	s.append("V1");
	System.out.println(s);
}
A

SauloSauloV2V1

Saulo

57
Q

O que o código abaixo imprime?

public static void main(String[] args){
	ref r = new ref();
	int i = 10;
	StringBuilder sb = new StringBuilder("Saulo");
	r.tx(sb);
	System.out.println(sb);
}
public void tx(StringBuilder s){
        s.append("V1");
	s = new StringBuilder(s + "SauloV2");
	s.append("V1");
	System.out.println(s);
}
A

SauloV1SauloV2V1

SauloV1

58
Q

O que o código abaixo imprime?

public static void main(String[] args){
	ref r = new ref();
	int i = 10;
	StringBuilder sb = new StringBuilder("Saulo");
	r.tx(sb);
	System.out.println(sb);
}
public void tx(StringBuilder s){
        s.append("V1");
	s = new StringBuilder("SauloV2");
	s.append("V1");
	System.out.println(s);
}
A

SauloV2V1

SauloV1

59
Q

O que imprime o código abaixo?

public static void main(String[] args){
System.out.println(10 + “ “ + p());
}

public static int p(){
System.out.println(“Go”);
return 1;
}

A

Go

10 1

60
Q

O que imprime o código abaixo?

public static void main(String[] args){
System.out.println(10 + “ “ + p());
}

public int p(){
System.out.println(“Go”);
return 1;
}

A

Não compila!

O código faz uma chamada a um método de instância a partir de um método estático.

61
Q

O que imprime o código abaixo?

public class ca{
	public void m1(){
		System.out.println("M1CA");
	}
}
public class cb extends ca{
	public static void main(String[] args){
		cb cb1 = new cb();
		cb1.m1();
	}
	public int m1(){
		System.out.println("M1CB");
		return 0;
	}
}
A

Não compila!

Ao sobrescrever um método o retorno não pode ser mais amplo que o método da classe pai.

Neste caso, ao sobrescrever um método que retorna void, o retorno só pode ser void, já que não existe um tipo mais especifico que void.

62
Q

O que imprime o código abaixo?

public class ca{
	public void m1(){
		System.out.println("M1CA");
	}
}
public class cb extends ca{
	public static void main(String[] args){
		cb cb1 = new cb();
		cb1.m1(1);
	}
	public void m1(int i){
		System.out.println("M1CB" + i);
	}
public void m1(int i, int j){
	System.out.println("M1CB" + i + " " + j);
} }
A

M1CB1

Neste caso não ocorre um Overriding, mas sim a overloading do código. Pois a assinatura do método é diferente.

63
Q

O que imprime o código abaixo?

public class ca{
	public String m2(){
		System.out.println("M2CA");
                return(" ");
	}
}
public class cb extends ca{
	public static void main(String[] args){
		cb cb1 = new cb();
		cb1.m2();
	}
	public void m2(){
		System.out.println("M2CB");
	}
}
A

Não compila!

String é considerado um tipo primitivo! Portanto não permite a mudança do tipo de retorno.

64
Q

O que imprime o código abaixo?

public class ca{
	public int m2(){
		System.out.println("M2CA");
		return 1;
	}
}
public class cb extends ca{
	public static void main(String[] args){
		cb cb1 = new cb();
		cb1.m2();
	}
	public short m2(){
		System.out.println("M1CB");
		return 1;
	}
}
A

Não compila!

O overriding não se aplica para tipos primitivos.
Neste caso o retorno na classe filha deveria ser int.

65
Q

O que imprime o código abaixo?

public class ca{
	public int m2(){
		System.out.println("M2CA");
		return 1;
	}
}
public class cb extends ca{
	public static void main(String[] args){
		cb cb1 = new cb();
		cb1.m2();
	}
	public void m2(){
		System.out.println("M1CB");
	}
}
A

Não compila!
O overriding não se aplica para tipos primitivos.
Neste caso o retorno na classe filha deveria ser void.

66
Q

O código abaixo compila?

public class carro extends veiculo{
	public static void main(String[] args){
	}
	public veiculo getVeiculo(){
		System.out.println("Veiculo Carro");
		return new veiculo();
	}
}
------------
public class fiat extends carro{
	public static void main(String[] args){
	}
	public veiculo getVeiculo(){
		System.out.println("Veiculo fiat");
		return new carro();
	}

}

A

Sim!

Neste caso se aplica o overriding no método getVeiculo()

67
Q

O código abaixo compila?

public class carro extends veiculo{
	public static void main(String[] args){
	}
	public veiculo getVeiculo(){
		System.out.println("Veiculo Carro");
		return new veiculo();
	}
}
------------
public class fiat extends carro{
	public static void main(String[] args){
	}
	public carro getVeiculo(){
		System.out.println("Veiculo fiat");
		return new carro();
	}

}

A

Sim!

Neste caso o overriding permite que o método da classe filha retorne um tipo mais especifico.

68
Q

O código abaixo compila?

public class carro extends veiculo{
	public static void main(String[] args){
	}
	public veiculo getVeiculo(){
		System.out.println("Veiculo Carro");
		return new veiculo();
	}
}
------------
public class fiat extends carro{
	public static void main(String[] args){
}
public void getVeiculo(){
	System.out.println("Veiculo fiat");
}

}

A

Não compila!

69
Q

O código abaixo compila?

public class carro extends veiculo{
	public static void main(String[] args){
	}
	public Object getVeiculo(){
		System.out.println("Veiculo Carro");
		return new veiculo();
	}
}
------------
public class fiat extends carro{
	public static void main(String[] args){
	}
	public carro getVeiculo(){
		System.out.println("Veiculo fiat");
                return new carro();
	}

}

A

Compila normalmente!

Toda classe herda de Object. O que torna a classe carro uma subclasse de Object.

70
Q

O código abaixo compila?

public class carro extends veiculo{
	public static void main(String[] args){
	}
	public Object getVeiculo(){
		System.out.println("Veiculo Carro");
		return new veiculo();
	}
}
------------
public class fiat extends carro{
	public static void main(String[] args){
	}
	public String getVeiculo(){
		System.out.println("Veiculo fiat");
                return (" ");
	}

}

A

Compila normalmente!

Toda classe herda de Object. O que torna a String carro uma subclasse de Object.

71
Q

O que retorna o código abaixo?

public static void main(String[] s){
		her h = new her();
		h.metodo();
		h.metodo(1);
	}
public void metodo(){
	System.out.println("void");
}

public String metodo(int i){
	System.out.println("String int");
	return " ";
}
A

void

String int

72
Q

O que retorna o código abaixo?

public static void main(String[] s){
		her h = new her();
		h.metodo();
		h.metodo(1);
		h.metodo(1,1);
	}
public void metodo(){
	System.out.println("void");
}
	public String metodo(int i){
		System.out.println("String int");
		return " ";
	}
	public boolean metodo(int k, int b){
		System.out.println("int int");
		return true;
	}
}
A

void
String int
int int

73
Q

Porque o código abaixo não compila?

interface Bozo{
int type = 0;
public void jump();
}

public class Type1Bozo implements Bozo{
    public Type1Bozo(){
		type = 1;
    }
}
A

Todos os membros de uma interface são automaticamente public static e final. Mesmo que você não os defina assim!

Portanto a variável type não pode ser redefinida.

74
Q
O código abaixo não compila porque?
package yo;
import mm.C;
public class B extends C{
	B( ){ }
	public static void main(String[] str){
		new B();
	}
}
-----------------------------------
package mm;
public class C{
	C(){};
}
A

O construtor da classe C é default, portanto não pode ser acessado fora do pacote.

75
Q

O que é um covariant return?

A

Um método que for sobrescrito, pode alterar o tipo do retorno contato que o novo retorno seja uma subclasse do retorno da classe pai.

É importante lembrar que o covariant return não se aplica para tipos primitivos.

76
Q

O que imprime o código abaixo?

package mm;
public class C{
	public static int k = 10;
}
-----------------------------------
package yo;
import mm.C;
public class B extends C{
public static int k = 20;
	public static void main(String[] str){
		C b = new B();
		System.out.println(b.k);
	}
}
A

10

Neste caso, mesmo que o membro seja estático, o valor acessado é o da classe pai.

O acesso a membros estáticos, de instância e também de métodos estáticos depende da classe da variável, e não do objeto armazenado.
Nestes casos membro acessado é o da classe pai.

Os métodos de instância são uma exceção à regra. Ao serem acessados o método chamado será o da classe filho.

77
Q

O que imprime o código abaixo?

package mm;
public class C{
	public int k = 10;
}
-----------------------------------
package yo;
import mm.C;
public class B extends C{
public int k = 20;
	public static void main(String[] str){
		C b = new B();
		System.out.println(b.k);
	}
}
A

10

Neste caso, o membro é uma variável de instância. O valor acessado é o da classe pai.

O acesso a membros estáticos, de instância e também de métodos estáticos depende da classe da variável, e não do objeto armazenado.
Nestes casos membro acessado é o da classe pai.

Os métodos de instância são uma exceção à regra. Ao serem acessados o método chamado será o da classe filho.

78
Q

O que imprime o código abaixo?

package mm;
public class C{
	public static void print(){System.out.println("C");}
}
package yo;
import mm.C;
public class B extends C{
	public static void main(String[] str){
		C b = new B();
		b.print();
	}
	public static void print(){
		System.out.println("B");
	}
}
A

C

Se faz acesso à um método estático. O método que será acessado é o da classe pai. Se o método fosse de instância, o método acionado seria o da classe filho.

O acesso a membros estáticos, de instância e também de métodos estáticos depende da classe da variável, e não do objeto armazenado.
Nestes casos membro acessado é o da classe pai.

Os métodos de instância são uma exceção à regra. Ao serem acessados o método chamado será o da classe filho.

79
Q

O que imprime o código abaixo?

package mm;
public class C{
	public void print(){System.out.println("C");}
}
package yo;
import mm.C;
public class B extends C{
	public static void main(String[] str){
		C b = new B();
		b.print();
	}
	public void print(){
		System.out.println("B");
	}
}
A

B

O método acessádo é um método de instância. Neste caso é acionado o método da classe filha.

O acesso a membros estáticos, de instância e também de métodos estáticos depende da classe da variável, e não do objeto armazenado.
Nestes casos membro acessado é o da classe pai.

Os métodos de instância são uma exceção à regra. Ao serem acessados o método chamado será o da classe filho.

Ao tentar acessar os membros destas variáveis (Exceto os membros de instância) você estará acessando a classe que foi declarada, e não a classe do objeto.

80
Q

O que imprime o código abaixo?

package mm;
public class C{
	public int x = 1;
	public int printx(){return x;}
}
-----------------------------------
package yo;
import mm.C;
public class B extends C{
	int x = 11;	
	public static void main(String[] str){
		C b = new B();
		C c = (B)b;
	System.out.println(c.printx());
	System.out.println(c.x);
}

public int printx(){return x;} }
A

11
1

O valor a ser retornado depende da variável que foi declarada. Em ambos os casos, o tipo declarado é um C.

Então ao tentar acessar os membros destas variáveis (Exceto os membros de instância) você estará acessando a classe que foi declarada, e não a classe do objeto.

81
Q

O que o código abaixo imprime?

public interface B{
int var = 10;
}

-----------------------------------
public class A implements B{
	public static void main(String[] s){
		B b = new B();
		System.out.println(b.var);
		System.out.println(B.var);
	}
}
A

Não compila!

Não se pode instanciar uma interface!
B b = new B();
82
Q

O que o código abaixo imprime?

public interface B{
int var = 10;
}

-----------------------------------
public class A implements B{
	public static void main(String[] s){
		System.out.println(var);
		System.out.println(B.var);
	}
}
A

10
10

Todo membro de uma interface é automaticamente public static e final. Portanto pode ser acessado sem uma instância.

83
Q

O que o código abaixo imprime?

public interface B{
int var = 10;
}

-----------------------------------
public class A implements B{
	public static void main(String[] s){
                var = 20;
		System.out.println(var);
		System.out.println(B.var);
	}
}
A

Não compila!

Todo membro de uma interface é automaticamente public static e final. Valores finais não podem ser alterados.

84
Q

O código abaixo compila?

public class Super{
}
public class sub extends Super{
	public static void main(String[] args){
		Super s1 = new Super();
		sub s2 = new sub();
		s1 = s2;
	}
}
A

Sim!
Uma classe superior pode receber uma subclasse da mesma.
Neste caso o cast não é necessário.

85
Q

O código abaixo compila?

public class Super{
}
public class sub extends Super{
	public static void main(String[] args){
		Super s1 = new Super();
		sub s2 = new sub();
		s2 = s1;
	}
}
A

Não compila!

Uma subclasse não pode receber uma super classe sem cast.

86
Q

O código abaixo compila?

public class Super{
}
public class sub extends Super{
	public static void main(String[] args){
		Super s1 = new Super();
		sub s2 = new sub();
		s2 = (sub)s1;
	}
}
A

Compila normalmente!

Uma subclasse não pode receber uma super classe sem cast. Mas neste caso o cast é explicito.

87
Q

O que imprime o código abaixo?

class X{
}

class XX extends X{

}

public class testx{
	public static void main(String[] args){
		X x = new X();
		XX xx = new XX();
		x = xx;
		System.out.println(x.getClass());
		System.out.println(xx.getClass());
	}
}
A
??????????????????????????????
class XX
class XX

O método getClass() pertence à class object. E é um método de instância.

Ao chamar um método de instância, que é de uma classe herdada, será acessado o método do objeto, e não o da variável.

Esta regra não se aplica a objetos e métodos estáticos e variáveis de instância. Nestes casos ao serem acessados, o objeto a ser executado será o da variável.

88
Q

O código abaixo compila?
public interface B{
static void compute();
}

A

Não!

Um método estático deve ter uma implementação.

89
Q
O código abaixo compila?
public interface A extends B{
	static void compute(){
		System.out.println("Compute");
	}
}
public interface B{
       void compute();
}
A

Não!

O método que sobreescreve um método de instância não pode ser estático.

90
Q
O que imprime o código abaixo?
class Animal {
	static void fazBarulho() {
		System.out.println("Grrr");
	}
}
class Cachorro extends Animal {
	static void fazBarulho() {
		System.out.println("Au au");
	}
}
class TestaCachorro {
	public static void main(String[] args) {
		Cachorro c = new Cachorro();
		c.fazBarulho(); 
		Animal a = new Cachorro();
		a.fazBarulho(); 
	}
}
A

Au au

Grrr

91
Q
O código abaixo compila?
public interface A{
	static void compute(){
		System.out.println("Compute");
	}
}
public interface B extends A{
       void compute();
}
A

Compila normalmente!

Um método estático não é herdado. Portanto pode existir um método na subclasse com mesmo nome. Seja este estático ou não!

Uma prova disso é que não é possível acessar um método estático da classe pai através da classe filho.

Isso se aplica somente a interfaces. Classes normais não podem ter seus métodos estáticos sobrescritos.

92
Q

O código abaixo compila?
public interface A{
static void compute();
}

public interface B extends A{
       void compute();
}
A

Não!

Todo método estático deve ter uma implementação!

93
Q
O código abaixo compila?
public interface A{
	static void compute(){
		System.out.println("Compute");
	}
}
public interface B extends A{
       static void compute(){
		System.out.println("Compute B");
	}
}
A

Compila normalmente!

Um método estático não é herdado. Portanto pode existir um método na subclasse com mesmo nome. Seja este estático ou não!

Uma prova disso é que não é possível acessar um método estático da classe pai através da classe filho.

Neste caso cada método estático é tratado de maneira independente.

Isso se aplica somente a interfaces. Classes normais não podem ter seus métodos estáticos sobrescritos.

94
Q

O que código abaixo imprime?

public interface veiculo{
	static public void getVeiculo(){
		System.out.println("Veiculo");
	}
}
public class vw implements veiculo{
	public static void main(String[] args){
		veiculo vwi = new vw();
		vwi.getVeiculo();
	}
	public void getVeiculo(){
		System.out.println("Veiculo vw");
	}
}
A

Não compila!

Não se pode chamar um método estático através de uma instância. Em outras palavras, um método estático só pode ser chamado diretamente na própria classe ou interface.

vw vwi = new vw(); 
vwi.getVeiculo(); // ok, pois o método chamado será o da classe filha.
veiculo vwi = new vw(); 
vwi.getVeiculo(); // Não compila pois chama o método da classe pai.
95
Q

O que código abaixo imprime?

public interface veiculo{
	static public void getVeiculo(){
		System.out.println("Veiculo");
	}
}
public class vw implements veiculo{
	public static void main(String[] args){
		vw vwi = new vw();
		vwi.getVeiculo();
	}
	public void getVeiculo(){
		System.out.println("Veiculo vw");
	}
}
A

Veiculo vw

Compila normalmente!

veiculo vwi = new vw(); 
vwi.getVeiculo(); // Não compila pois chama o método da classe pai.
96
Q

O código abaixo compila?

public interface A{
	public default String getNum(){
		return "0000";
	}
}
---------------------------
public class B implements A{
	public static String getNum(){
		return "0000";
	}
}
A

Não compila!

Tentar sobrescrever um método não estático por um método estático ocasionará um erro de compilação.

Esta regra se aplica também para interfaces e sub-interfaces.

97
Q

O código abaixo compila?

public interface A{
	public default String getNum(){
		return "0000";
	}
}
---------------------------
public class B implements A{
	public String getNum(){
		return "0000";
	}
}
A

Compila!

Um método default pode ser sobrescrito sem problemas! Contanto que o novo método não seja static.

Tentar sobrescrever um método não estático por um método estático ocasionará um erro de compilação.

Esta regra se aplica também para interfaces e sub-interfaces.

98
Q

O código abaixo compila?

public interface A{
	public String getNum();
}
---------------------------
public class B implements A{
	public static String getNum(){
		return "0000";
	}
}
A

Não compila!

Tentar sobrescrever um método não estático por um método estático ocasionará um erro de compilação.

Esta regra se aplica também para interfaces e sub-interfaces.

99
Q

O código abaixo compila?

public interface A{
	public String getNum();
}
---------------------------
public class B implements A{
	public String getNum(){
		return "0000";
	}
}
A

Compila!

Compila, mas fique atento aos modificadores.

Tentar sobrescrever um método não estático por um método estático ocasionará um erro de compilação.

Esta regra se aplica também para interfaces e sub-interfaces.

100
Q

O código abaixo compila?

public interface A{
	public default String getNum(){
		return "0000";
	}
}
---------------------------
public interface B extends A{
	public static String getNum(){
		return "0000";
	}
}
A

Não compila!

Tentar sobrescrever um método não estático por um método estático ocasionará um erro de compilação.

Esta regra se aplica também para interfaces e sub-interfaces.

101
Q

O código abaixo compila?

public interface A{
	public default String getNum(){
		return "0000";
	}
}
---------------------------
public interface B extends A{
	public default String getNum(){
		return "0000";
	}
}
A

Compila!

Um método default pode ser sobrescrito por outro método default.

102
Q

O código abaixo compila?

public interface A{
	public static String getNum(){
		return "0000";
	}
}
---------------------------
public interface B extends A{
	public String getNum(){
		return "0000";
	}
}
A

Não compila, pois o novo método não é static ou default, portanto não pode ter uma implementação.

103
Q

O código abaixo compila?

public interface A{
	public static String getNum(){
		return "0000";
	}
}
---------------------------
public interface B extends A{
	public default String getNum(){
		return "0000";
	}
}
A

Compila!

Esta é a única exceção à regra. Um metodo static pode ser sobrescrito por outro default. Mas o contrário não funciona.

104
Q

O código abaixo compila?

public interface A{
	public default String getNum(){
		return "0000";
	}
}
---------------------------
public interface B extends A{
	public String getNum(){
		return "0000";
	}
}
A

Não compila, pois o novo método não é static ou default, portanto não pode ter uma implementação.

105
Q

O código abaixo compila?

public interface A{
	public String getNum();
}
---------------------------
public class B implements A{
	public default String getNum(){
		return "0000";
	}
}
A

Não Compila!

Métodos default só podem ser usados em interfaces!

106
Q

O código abaixo compila?

public interface A{
	public default String getNum(){
		return "0000";
	}
}
---------------------------
public interface B extends A{
	public String getNum();
}
A

Compila normalmente!

107
Q

O código abaixo compila?

public interface A{
	public static String getNum(){
		return "0000";
	}
}
---------------------------
public class B implements A{
	public String getNum(){
		return "0000";
	}
}
A

Compila normalmente!

108
Q

O código abaixo compila?

public interface A{
	public String getNum();
}
---------------------------
public class B implements A{
	public static String getNum(){
		return "0000";
	}
}
A

Não compila!

Tentar sobrescrever um método não estático por um método estático ocasionará um erro de compilação.

Esta regra se aplica também para interfaces e sub-interfaces.

109
Q

Porque o código abaixo não compila?

public static interface A{
final void verge();
}

A

Métodos de interface não podem ser finais.

110
Q

O código abaixo compila?

public interface A{
	int FIM = 10;
	void verge();
}
---------------------------
public class B implements A{
	public void verge(){
		FIM = 11;
} }
A

Não!

Toda variável de interface recebe automaticamente o modificador final. Portanto não pode ser modificada.

111
Q

O que imprime o código abaixo?

public class A{
		public static void main(String[] args){
		try{
			throw new exp();
		}catch(exp e){
			System.out.println(e);
		}
	}
}
class exp extends Exception{
	public exp(){
		super("Minha Excecao");
	}
}
A

exp: Minha Excecao

112
Q

O que imprime o código abaixo?

public class A{
		public static void main(String[] args){
		try{
			throw new exp();
		}catch(exp e){
			e.printStackTrace();
		}
	}
}
class exp extends Exception{
	public exp(){
		super("Minha Excecao");
	}
}
A

exp: Minha Excecao

at A.main(A.java:6)

113
Q

O que imprime o código abaixo?

public class Exp{
	public static void main(String[] str){
		try{
			throw new Fail("Falha ao Abrir");
		}catch(Fail f){
			System.out.println(f);
		}
	}
}
class Fail extends Exception{
	public Fail(String val){
		super(val);
	}
}
A

Fail: Falha ao Abrir

114
Q

O que imprime o código abaixo?

public class Exp{
	public static void main(String[] str){
		Exp exp = new Exp();
		try{
			exp.ler();
		}catch(Fail f){
			System.out.println(f);
		}
	}
	public void ler()throws Fail{
		throw new Fail("Falha ao Abrir");
	}
}
class Fail extends Exception{
	public Fail(String val){
		super(val);
	}
}
A

Fail: Falha ao Abrir

115
Q

O que imprime o código abaixo?

public class Exp{
	public static void main(String[] str){
		Exp exp = new Exp();
		try{
			exp.ler();
		}catch(Fail f){
			System.out.println(f);
		}
	}
	public void ler()throws Fail{
		try{
			throw new Fail("Falha ao Abrir");
		}finally{
			System.out.println("Finally");
		}
	}
}
class Fail extends Exception{
	public Fail(String val){
		super(val);
	}
}
A

Finally

Fail: Falha ao Abrir

116
Q

O que imprime o código abaixo?

public class Exp{
	public static void main(String[] str){
		Exp exp = new Exp();
		exp.ler();
}
	public void ler(){
		try{
			throw new Fail("Falha ao Abrir");
		}finally{
			System.out.println("Finally");
		}
	}
}
class Fail extends Exception{
	public Fail(String val){
		super(val);
	}
}
A

Não compila!

Um try finally pode ser executado, mas neste caso a exceção não é tratada, apenas capturada. Ela será devolvida para o método acima, que deve trata-la.

117
Q

O que imprime o código abaixo?

public class Exp{
	public static void main(String[] str){
		Exp exp = new Exp();
		exp.ler();
}
	public void ler(){
		try{
			throw new Fail("Falha ao Abrir");
		}catch(Fail f){
			System.out.println(f);
		} finally{
			System.out.println("Finally");
		}
	}
}
class Fail extends Exception{
	public Fail(String val){
		super(val);
	}
}
A

Fail: Falha ao Abrir

Finally

118
Q

O que imprime o código abaixo?

abstract class Calcula{
	abstract void soma();
	int i = 10;
	public static void main(String[] args){
		System.out.println("Calculadora");
		Calcula c = null;
		System.out.println(c.i);
	}
}
A

Lança uma exceção:
NullPointerException

Uma classe abstrata pode ter main e até ser chamada.
Mas não pode ser inicializada! Caso tente fazer isso, o código não compila.

Neste caso, a classe não é instanciada, portanto o código compila, mas ao tentar imprimir o valor de i, a exceção é lançada.

119
Q

O que imprime o código abaixo?

abstract class Calcula{
	abstract void soma();
	int i = 10;
	public static void main(String[] args){
		System.out.println("Calculadora");
	}
}
A

Calculadora

Uma classe abstrata pode ter main e até ser chamada.
Mas não pode ser inicializada! Caso tente fazer isso, o código não compila.

Neste caso, a classe nunca é instanciada, pois o método main é static.

120
Q

O que imprime o código abaixo?

public class Zero{
	public static void main(String[] str){
		int x = 10;
		int y = 0;
		if(x/y) System.out.println("Good");
		else System.out.println("Bed");
	}
}
A

Não compila!

O valor dentro do if, não é um boolean!

121
Q

O que imprime o código abaixo?

List lista = new ArrayList();
		lista.add("Saulo");
		lista.add("Savio");
		lista.add("Manolo");
		List lista2 = new ArrayList (lista.subList(1,1));
		for(String s:lista2){
			System.out.println(s);
		}
A

Nada!
O código compila e roda normalmente, mas não imprime nada.

O método lista.subList(1,1) não retorna nada, pois ele retorna um array que contém os valor do index 1(inclusive) e 1(exclusive).

122
Q

O que imprime o código abaixo?

public class A{
	public static void main(String[] args){
		String str = null;
		str = str.concat("Saulo");
		System.out.println(str);
	}
}
A

Compila mas não roda!
Não se pode concatenar um valor à null.
Neste caso, está tentando acessar uma variável null.
Lança NullPointerException!

123
Q

O que imprime o código abaixo?

public class B{
	public static void main(String[] str){
		String nome = "Saulo";
		System.out.println("Saulo" == nome);
	}
}
A

true

Ambos os valores estão no pool de String. Uma nova referência não é designada neste caso.

124
Q

O que imprime o código abaixo?

public class B{
	public static void main(String[] str){
		static String VAR0 = "SA";
		System.out.println("Saulo" == VAR0+"ULO");
	}
}
A

Não compila

Uma variável Static não pode ser local.

125
Q

O que imprime o código abaixo?

public class B{
        static String VAR0 = "SA";
	public static void main(String[] str){
		System.out.println("SAULO" == VAR0+"ULO");
	}
}
A

false
Só funciona ao usar intern();
Neste caso, é criado uma nova instância para a variável.

126
Q

O que imprime o código abaixo?

public class B{
	static String VAR0 = "SA";
	public static void main(String[] str){
		System.out.println("SAULO" == (VAR0+"ULO").intern());
	}
}
A

true

O método intern(); força a busca ou a alocação no pool de strings.

127
Q

O que imprime o código abaixo?

public class B{
	static String VAR0 = "SA";
	public static void main(String[] str){
		System.out.println("SAULO" == ("SA"+"ULO"));
	}
}
A

true

Neste caso a nova string é armazenada no pool.
Neste caso a falta dos parênteses também não faria diferença.
A linha abaixo também imprime true:
System.out.println(“SAULO” == “SA”+”ULO”);

128
Q

O que imprime o código abaixo?

public class C{
	public static void main(String[] args){
		C1 c1 = new C1();
		System.out.println(c1);
} }
class C1{
	String val = "Class";
	public String getVal(){
		return val;
	}
}
A

C1@

Toda classe herda de objeto, que implementa toString();
Este método, por padrão imprime o nome da classe e um hash da instância da classe.
Como C1 não sobreescreve toString() imprime o nome da classe seguido do hash da instância.

129
Q

O que imprime o código abaixo?

String var = "A";
	switch(var){
	case "A":
	System.out.println("A");
	break;
	case "B":
	System.out.println("B");
	break;
	default:
	System.out.println("DEF");
}
A

A

O default só é acionando quando nenhuma das opções forem verdadeiras.

130
Q

O que imprime o código abaixo?

String var = "C";
	switch(var){
	case "A":
	System.out.println("A");
	break;
	case "B":
	System.out.println("B");
        break;
	default:
	System.out.println("DEF");
}
A

DEF

Neste caso, nenhuma das alternativas são válidas, então o case default é acionado.

131
Q

O que imprime o código abaixo?

String var = "A";
	switch(var){
	case 'A':
	System.out.println('A');
	break;
	case 'B':
	System.out.println("B");
}
A

Não compila!

O valor do switch é uma String, e a variável nos cases são char.

132
Q

O que imprime o código abaixo?

byte b = 10;
switch(b){
	case 1:
	System.out.println("1");
	break;
	case 10:
	System.out.println("10");
	default:
	System.out.println("DEF");
}
A

10
DEF

Falta break no segundo case.

133
Q

O código abaixo imprime o que?

import java.util.ArrayList;
public class le{
	public static void main(String[] args){
		ArrayList < int > arl = new ArrayList < int >();
		arl.add(1);
		arl.add(2);
		System.out.println(arl.size());
	}
}
A

O código não compila, pois não se pode usar valores primitivos em java containers <>.

Para funcionar neste caso, use Integer.
ArrayList < Integer > arl = new ArrayList< Integer >();

134
Q

Qual a diferença entre length() e length?

A

O método length() pertence à classe String e StringBuilder.

Já o valor length é um parâmetro de Arrays.

Para ArrayList use o size();

135
Q

O que imprime o código abaixo?

	list.add("Saulo");
	list.add("Manolo");
	String[] lista = new String[list.size()];
	list.toArray(lista);
	System.out.println(java.util.Arrays.toString(lista));
A

[Saulo, Manolo]

O método toArray Converte um ArrayList em um Array.

136
Q

O que imprime o código abaixo?

public class C{
	static public void res(){
		System.out.println("C");
	}
}

public class D extends C{

	public static void main(String[] args){
		C c = new C();
		D d = new D();
		c = d;
	d. res();
	c. res();

	d.print();
	c.print();
}

static public void res(){
	System.out.println("D");
}

public void print(){
	System.out.println("OK");
} }
A

Não compila

A variável c, recebe um objeto do tipo D. Neste tipo de situação não é possível acessar objetos e métodos da classe filha. Apenas os da classe pai.

Ao receber um objeto da classe filha, todos os acessos a variáveis e métodos daquele objeto são feitos nos objetos da classe pai. Exceto para métodos de instância. Para estes métodos, são acessados os métodos da classe filho.