Dúvidas sobre questão de Concursos!

24 respostas
chicobambui

Estou com uma dúvida em relação a linguagem de programação Java que foi cobrada em um concurso do Cefet BH em 2007.

Com relação à linguagem de programação Java, avalie o programa abaixo.

class Hello {
    String[ ] meses= {"janeiro", "fevereiro", "março", };
    public Hello() {
         System.out.println(meses.length);
    }
    public static void main (String args [])  {
          new Hello();
    }
}

É correto afirmar que

a) o programa não compila.
b) ao executar o programa, a saída será 3.
c) ao executar o programa, a saída será 21.
d) ao executar o programa, a saída será 22.

Se alguém souber a resposta e puder me ajudar ficarei grato!

24 Respostas

lcegatti

Alternativa b;

Pois o array meses ja é criado com 3 valores toda vez que a classe é instanciada.

[]'s

tnaires

Essa vírgula sobrando na declaração do array não causaria um erro de compilação? Ou foi erro de digitação mesmo?

lcegatti

Testei aqui e não causou não, rodou normal, e eu nem tinha atentado a ela :oops: rs

chicobambui

Obrigado pela atenção galera! A resposta no gabarito é essa mesmo.
Com relação a vírgula, ela apareceu assim mesmo na questão!

Não entendi direito a justificativa para essa resposta!

Obs:Tenham um pouco de paciência, pois repito sou iniciante!

mrcastro

Vamos lá então…

começando pelo método main, ao digitar o código new Hello();

vc cria um novo objeto Hello, portanto, o construtor dessa classe será executado.
Na classe Hello, cria-se um vetor e passa-se 3 valores pra ele.

o método meses.lenght() retorna quantos valores estão armazenados em dado array, no seu caso, temos 3 valores. e é essa a saída.

chicobambui

mrcastro

Beleza, agora ficou bem entedido!
Valeu pela atenção!

Abraço!

chicobambui

Aproveitando da boa vontade do pessoal, mais uma questão!

Suponha que um programa em Java possua o seguinte comando:

String mensagem = "Programa em Java";

É correto afirmar que

a) a linha de comando acima gera erro de compilação.
b) o conteúdo “Programa” será armazenado na variável mensagem.
c) o conteúdo “Programa em Java” será armazenado na variável mensagem.
d) uma referência para a String “Programa em Java” será armazenada na variável mensagem.

Andre_Brito

Eu marcaria a letra D.

mrcastro

Bom, se eu não tivesse lido a resposta do André antes, teria marcado C sem pensar duas vezes. Mas fiquei na dúvida…

D

mensagem é um objeto, logo seria a D. Ou não?]

EDIT: acabo de descobrir que não é um objeto… Sendo assim, acho que é a C.

Fernando_Generoso_da

A resposta pra mim é a letra D. O que acontece nesse tipo de declaração é que o compilador verifica em um pool de Strings se já existe uma string igual…se existir, aponta a referência para essa String já existente no pool…se não, cria um objeto normal e coloca a String no pool. Acho que é isso

Fernando

D
Fernando Generoso da Rosa:
A resposta pra mim é a letra D. O que acontece nesse tipo de declaração é que o compilador verifica em um pool de Strings se já existe uma string igual...se existir, aponta a referência para essa String já existente no pool..se não, cria um objeto normal e coloca a String no pool. Acho que é isso

Fernando

Olhe o código abaixo:

String mensagem = "Programa em Java";
String mensagem2 = mensagem;	    	   
mensagem2 = "Outra mensagem";   	 
  
System.out.println(mensagem);

Se a letra D estivesse correta ele deveria imprimir "Outra Mensagem", mas o que aparece no console é "Programa em Java".

Michel_Sancovich
String mensagem = "Programa em Java";  
String mensagem2 = mensagem;                 
mensagem2 = "Outra mensagem";          
    
System.out.println(mensagem);
Kra, pra aparecer "Outra mensagem" vc deveria "falar" para o programa imprimir na tela a mensagem 2, neh!
String mensagem = "Programa em Java";  
String mensagem2 = mensagem;                 
mensagem2 = "Outra mensagem";          
    
System.out.println(mensagem2);
D

Exatamente. Como eu disse no post anterior:

Eu não queria imprimir “Outra Mensagem”, só alertei ao fato de que não é uma variável de referência como a alternativa D afirma.

Michel_Sancovich

Ah, blza!

chicobambui

O gabarito desta questão indica a letra:

d) uma referência para a String “Programa em Java” será armazenada na variável mensagem.

D

chicobambui:
O gabarito desta questão indica a letra:

d) uma referência para a String “Programa em Java” será armazenada na variável mensagem.

Mas então aprendi errado sobre referências =S

chicobambui

Pois é, se ficou confuso para vocês que conhecem a linguagem, imagina para mim que sou quase leigo em Java!

D

chicobambui:
Pois é, se ficou confuso para vocês que conhecem a linguagem, imagina para mim que sou quase leigo em Java!

Mas eu sou iniciante também :lol:

chicobambui

Só mais essa questão:Analise as definições de classes a seguir.

abstract class X{
     public int numX;
     public X(){
          numX=10;
     }
     protected int getnumX(){
          return numX;
     }
}

public class A extends X{
     private B objB;
     private int numA;
     public A(){
          objB= new B(getnumX() , this);
     }
     public int sum() {
          return objB.getnumB() + numA;
     }
}

public class B extends X{
     private int numB;
     private A objA;
     public B(int aux1, A aux2) {
          numB = aux1;
          objA=aux2;     
          }
     public int getnumB() {
          return numB;
     }
}

É correto afirmar que o

a) código acima não gera erro de compilação.
b) objeto da classe “B” pode acessar o atributo público “numX” de um objeto da classe “X”.
c) construtor da classe “A” está chamando o método herdado “getnumX()” do objeto da classe “B”.
d) valor do atributo numX do objeto objA, quando modificado, altera automaticamente o valor do atributo numX do objeto objB.

Fernando_Generoso_da

Ainda sobre Strings, para não ficar dúvidas:

http://www.guj.com.br/java.artigo.103.1.guj

D

Como String não é um tipo primitivo, então sempre será uma referência.

Me passa o site de onde vc pega essas questões pra eu estudar, meu professor adora questões teóricas nas provas.

Zeed01

Boa noite Colegas !

Daniels
Não entendi essa dúvida

String mensagem = "Programa em Java";
String mensagem2 = mensagem;	    	   
mensagem2 = "Outra mensagem";   	 
  
System.out.println(mensagem);

Se a letra D estivesse correta ele deveria imprimir "Outra Mensagem", mas o que aparece no console é "Programa em Java".

Entendo que:
//Cria a String “Programa em Java” no pool e mensagem aponta para ela
String mensagem = “Programa em Java”;

//mensagem2 aponta para mensagem
String mensagem2 = mensagem;

//Cria “Outra mensagem” no pool e mensagem2 aponta para ela
mensagem2 = “Outra mensagem”;

//Imprime mensagem, que continua apontando para “Primeira mensagem”, já que em nenhum momento
//mensagem foi alterada.
System.out.println(mensagem);

Ou entendi alguma coisa errada ?

chicobambui

O link da site do CEFET-MG é este aí:
http://www.cefetmg.br/index.php?codigo=2174

Lá aparece as provas que foram aplicadas ano passado. As provas da area de informatica são os cargos de Analista de Tecnologia da Informação e Tecnico em Tecnologia da Informação.
Que são os 2º e ultimo que aparecem na lista.
Qualquer coisa se não conseguir baixar, me avisa que dou um jeito de envia-las por e-mail.

Criado 15 de outubro de 2008
Ultima resposta 3 de nov. de 2008
Respostas 24
Participantes 10