Questao de certificacao [duvida]

20 respostas
blackthorne

ola pessoal,
tenho a seguinte questao:

  1. static class A {

  2. void process() throws Exception{ throw new Exception();}

  3. }

  4. static class B extends A {

  5. void process(){System.out.println(“B”);}

  6. public static void main(String[] args){

  7. new B().process();

  8. }

  9. }

qual o resultado?

A ) B
B ) the code run withs no output
C ) Compilation fails because of an error in line 12
D ) Compilation fails because of an error in line 15
E ) Compilation fails because of an error in line 18

a minha duvida eh: quando vou compilar (com java 1.5) a palavra chave static é apontada como invalida para classes (modified static not allowed here). e nao tem essa opcao na questao.
deve ser erro da questao mesmo?

caso nao tivesse o static, a opção seria item A
valew…

20 Respostas

LPJava

outra nao se dar new em classe static o erro está ai… :smiley:
As classes static nao podem ser instanciada com new, é o mesmo que acontece com as seguintes classes:
DateFormat, NumberFormat… elas sao classes static, e nao sao instanciads com new, e sim com metodos de fabrica…

:smiley:

esse codigo nao compila!

geovanebg

LPjava o que vc chama de métodos de fábrica?

blackthorne

entao a questao esta errada, pois nao tem opcao de erro de compilação na linha do new (linha 17)…

valew

blackthorne

pelo q sei, classes estaticas ja sao carregadas com a VM.
os metodos de ‘fabrica’ sao esses metodos q carregam a classe estatica (eu acho)…

geovanebg

opa valeu ae blacktrone

LPJava

é isso ai… por exemplo:

DateFormat df = Dateformat.getInstance();

getInstance() é um metodo de fabrica que carrega a classe.

J

Olá a todos!! Acho que está questão está errada pq não existe classe estática ( static class), ao menos que seja interna, tendo em vista que o modificador static é aplicável somente a membros de uma classe. A classes DateFormat e a NumberFormat possue respectivamente a seguinte assinatura: public abstract class DateFormat e public abstract class NumberFormat, portanto elas não são estáticas e sim abstratas, por isso não podem ser instanciadas através da keyword new. Se houver alguma dúvida sugiro consultar a API JAVA http://java.sun.com/j2se/1.5.0/docs/api/ .

Fui…

F

Classes pelo que me engano só permite: abstact, public ou nada.
O static é dos métodos.
Um método sobreescrito não precisa disparar as mesmas exceções do método de origem, com isso mudado o static para os métodos a resposta será A, imprime B.

P

Confirmando o que foi dito acima por alguns colegas,

não é permitido declarar uma classe como sendo static…o mesmo acontece para o construtor (não é permitido declarar o construtor como static, já q ele é chamado através palavra new)…

LPJava

bom entendam o seguinte a questao nao dar o codigo completo e dar apenas os numeros e nao começa do 1, entao quer dizer que os numeros ausentes estao com a implementacao correta… e isso é fato no exame… as vezes ela so vai dar trecho de codigo para analisar e é afirmativo que os trechos ausentes estao ok. Qdo acontece isso é pq ela quer saber algo mais especifico ao contrario das questoes que tem a classe 100% que sao as mais dificeis em relacao a esta. Observe que a kathy fala isso antes de iniciar o primeiro capitulo, onde ela fala sobre o exame, sobre o livro etc.

Sabemos que nao existe classe static mais nesse caso ai temos uma classe aninhada, analisando as respostas e o contexto da sintaxe… isso deve ser analisado na hora do exame… e nao achar que tudo vai ser direto… ou seja, V ou F tem q ver o contexto da coisa… o exame nao é tao “robotizado”. E isso vc percebe quando faz bastante simulado… no whizlabs tem questoes desse tipo a vontade…

felipedamiani

letra a

neohacker

fabiophx:
Classes pelo que me engano só permite: abstact, public ou nada.
O static é dos métodos.
Um método sobreescrito não precisa disparar as mesmas exceções do método de origem, com isso mudado o static para os métodos a resposta será A, imprime B.

Classes aceitam final e strictfp … static para atributos e métodos

blackthorne

valew pela dica LPJava!!
deve ser isso mesmo.
vou procurar sobre isso no livro da Katty.

falow

LPJava

blackthorne:
valew pela dica LPJava!!
deve ser isso mesmo.
vou procurar sobre isso no livro da Katty.

falow

no livro certificacao java 5 tb tem isso, e se nao to enganado ja teve um topico sobre isso aqui no guj…

flw!! e isso é fato e logico… so olhar para questao… ela nao pergunta nada a respeito do que falaram acima… hehe tb so aprendi isso nos simulados pq perdi varias questoes… por causa disso… vc so deve formular sua resposta qdo entender o que a questao pede e nao sair marcando sem entender o que a questao pede… e o exame tem varias pegadinhas assim, é semelhante aquelas questoes que o a sintaxe é em threads… e la no meio vc ver que uma das regras de OO/fundamentos nao está certo e o codigo nem compila, porem a sintaxe e a maioria das opções tenta desviar isso de vc…

victorwss

As classes estáticas estão no mesmo escopo do método main, portanto são classes aninhadas. Neste caso é letra A.

Jonatas

Errado

LPJava:
outra nao se dar new em classe static o erro está ai… :smiley:
As classes static nao podem ser instanciada com new, é o mesmo que acontece com as seguintes classes:
DateFormat, NumberFormat… elas sao classes static, e nao sao instanciads com new, e sim com metodos de fabrica…

:smiley:

esse codigo nao compila!

Correto

Java Man:

A classes DateFormat e a NumberFormat possue respectivamente a seguinte assinatura: public abstract class DateFormat e public abstract class NumberFormat, portanto elas não são estáticas e sim abstratas, por isso não podem ser instanciadas através da keyword new. Se houver alguma dúvida sugiro consultar a API JAVA

Quanto a sobrescrita, o 1º método pode lançar exceção e o 2º pode lançar uma exceção mais restritiva, ou lançar exceções de tempo de execução ou nem lançar (como é o caso) 

Mas como vc colocou, dentro de inner class:

1 - void process() throws Exception{ throw new Exception();}

2 - void process(){System.out.println(B);}

Quando vc fizer esta chamada: new B().process();   dará um erro de compilação 

Como lhe falei, isso se dar em sobrescrita 

Mas se vc fizer esse programa, rodará e imprimirá 'B

Quer dizer isso foi feito para confundir sobrescrita com Inner Class

Esse erro que deu ao vc implementar deve ser que vc colocou static na classe principal (o que não pode).
LPJava

hii rpz… é verdade sao abstratas… e acabei de conferir aqui no livro foi mal… me confudi hehe mais lembrei que classes aninhadas estaticas nao usam new… e me embolei com a regra do abstracts foi mal… hehe mais o que falei a respeito do new em class static é valido… :smiley:

obrigado pela correção ai pessoal valeu!

geovanebg

muito interessante as observações…
fiquei tentando achar uma classe static hj em tudo quanto é canto da documentação java…

mais por favor me tirem uma dúvida que persiste até agora…

qual é a diferença do método NumberFormat.getInstance(); para o new???

o que é exatamente o método de fábrica… olhei no livro do Deitel e num achei nenhuma explicação mais profunda… olhei no google e só tem o exemplo NumberFormat.getInstance(); …

o que o getInstance() faz de diferente?

pq não sei se foi burrice minha, como estavam falando de classes static pensei que todos os objetos criados com o getInstance() fossem os mesmos então fiz um pequeno teste…

tipo:

NumberFormat a = NumberFormat.getInstance();
NumberFormat b = NumberFormat.getInstance();

e em um comparação (a==b) veio um false…

mais parece q num tem nada haver o que eu pensei né…

se saber o que é um método de fábrica for uma coisa muito importante algúem por favor poderia me explicar o q é isso?

R

Desculpa a dúvida, sou novo aqui mas já acompanho o forum ha bastante tempo, mas to começando agora com a SCJP. Não entendi essa parte aqui:

Não entendi pq a classe é aninhada… o main dela está dentro da static class B, ou seja, para ser aninhada o metodo main dela não deveria estar no escopo da class publica? desculpa se eu tiver viajando, eu realmente ainda não entendi essa questão e gostaria de entender. Pra mim a resposta seria não compila.

Obrigado.

geovanebg

As classes estáticas estão declaradas dentro de outra classe.
Ou seja estas classes estão no escopo do método main da classe mais externa (deu pra entender???)

exmplo:

public class Hello{
  public static void main(String[] args){
   System.out.println("Hello");
  }
  
  static class QualquerCoisa{}

}

a classe aninhada Qualquer coisa está no mesmo escopo do metodo main da classe Hello.

Criado 26 de dezembro de 2007
Ultima resposta 28 de dez. de 2007
Respostas 20
Participantes 11