| Autor |
Mensagem |
|
|
rod.attack wrote:
Agora você consegue descobrir sozinho pq seu código não compila.
Seguindo esse seu raciocínio, por que então o seguinte código compila normalmente?
O compilador neste caso não avisa nada sobre perda de precisão e tal...
|
 |
|
|
vmsb11 wrote:ah sim....
agora eu entendi a sua dúvida....
o código não funciona....
troque:
Mas então, eu sei que se fizer essa troca o código vai funcionar... Mas a minha dúvida é por que não funciona com o cast para (byte) ... É essa minha dúvida!
|
 |
|
|
|
Acho que eu formulei mal a pergunta... A questão é que o código acima NÃO compila! Pra mim era pra compilar pois um byte cabe em um char... É essa minha dúvida.
|
 |
|
|
Por que não ocorre um cast automático do tipo "byte" para o tipo "char" ? Um byte não cabe sempre em um char?
|
 |
|
|
rmendes08 wrote:Bem, isso seria um desastre, pois você somente poderia colocar uma chamada a wait no mesmo escopo de um bloco synchronyzed. Além do mais, essa não é a única possibilidade de uso do método wait. O fato, é que isso não é responsabilidade do compilador. O compilador trabalha somente até o nível sintático da linguagem, e não no nível semântico. Para o compilador, t.wait() é uma chamada a um método como qualquer outra.
rmendes08, mas quando o compilador, por exemplo, verifica se um método A está ou não capturando uma checked exception (ou jogando-a para frente com o throws) não é nível semântico? Pq a sintaxe está perfeita... mas ainda sim o compilador detecta que está faltando capturar ou lançar a exceção.
Essas coisas que geram dúvidas em mim sobre o que o compilador pode ou não detectar.
Mas, no caso da pergunta desse tópico, já entendi a resposta pela explicação do rod.attack.
|
 |
|
|
Mais uma da série "por que o compilador não detecta isso?"
O código compila normal, mas o problema é que o lock da variável t não foi adquirido então vai gerar a exceção IllegalMonitorStateException. Mas como o compilador não consegue ver isso? Pra mim seria fácil, bastava o compilador ver se a instrução "t.wait()" está dentro de um bloco "synchronized(t)".
|
 |
|
|
deyvid, acho que a sua dúvida é com um código do tipo abaixo, correto?
Neste caso, vai imprimir true true true. No seu primeiro código, quando vc usa a palavra chave new, o Java SEMPRE vai criar um novo objeto. Caso a palavra chave new não for usada, ou seja, caso você passe um literal (true ou false) direto na variável ou passasse uma referência de outra variável, então a comparação com == seria true.
Fique atento também naqueles casos com Integer, Short, Long...
Ex:
Isso vai imprimir iguais! Mas, se fosse:
Ai já não iria imprimir, pois isso passa de -128, +127 ...
Acho que era com relação a isso a sua dúvida...
|
 |
|
|
Estava fazendo alguns testes aqui e, pelo que pude ver, todos os métodos aceitam o uso da palavra chave syncronized em suas declarações. Por exemplo, o método main() aceita, equals(), hashCode(), qualquer método que você tenha definido...
A minha pergunta é: existe alguma ocasião onde a palavra chave synchronized não pode ser usada junto com a declaração de um método?
|
 |
|
|
humm, perfeito! Agora eu entendi!
Muito obrigado!!!
|
 |
|
|
vmsb11 wrote:a instrução NomeDaClasse.this quer dizer que vc poderá acessar um membro ou método da instancia atual da sua classe....
Ainda não entendi direito vmsb11... Tipo, o Car referencia a classe. E Car.this ? O que isso significa exatamente?
|
 |
|
|
Alguém pode me explicar como a chamada "NomeDaClasse.this..." funciona? Por exemplo, no código abaixo:
Eu não entendo o que ocorre exatamente na chamada "Car.this.drive()"...
|
 |
|
|
Quer dizer que "Method-local inner class" significa uma classe interna definida dentro de um método? Eu achei que fosse o contrário... Como ficaria então, em inglês, um método dentro de uma classe interna?
Outra dúvida, no seguinte código:
Existe alguma forma de chamar o método public "metodo2()" definido dentro da classe anônima acima? Claro, sem considerar algo deste tipo:
|
 |
|
|
Which are true about a method-local inner class? (Choose all that apply.)
A. It must be marked final
B. It can be marked abstract
C. It can be marked public
D. It can be marked static
E. It can access private members of the enclosing class
As alternativas B e E estão corretas. Porém, por que as alternativas C e D também não estão? Eu compilei o seguinte programa, e funcionou normalmente:
Veja que o método "metodo()" é public e static. Isso não tornaria as alternativas C e D corretas também?
|
 |
|
|
evertonsilvagomesjava wrote:deixa eu aproveitar o topico e tirar uma duvida tb:
tenho o seguinte subset:
eu sei que nesse subSet poderar ser adicionado algo entre "b" e "d", e quanto ao "true" que ta ali o que é?
O true significa que vc inclui 'b' e 'd', ou seja, (abusando da notação matemática) [b,d]. Se fosse os dois false, seria: ]b,d[ (não inclue b e d).
|
 |
|
|
What is the result?
A. 1 2
B. 2 2
C. 2 3
D. 3 2
E. 3 3
F. Compilation fails
G. An exception is thrown at runtime
A resposta correta é a G. Porém, eu gostaria de saber porque o compilador não consegue detectar que Dog não possui a interface Comparable implementado. Uma vez que eu declarei o TreeSet explicitamente como um treeSet que só aceita Dogs, pra mim o compilador teria condição de dar um erro em tempo de compilação. Caso fosse:
ou mesmo
Eu concordo que não tem como o comipilador avisar nada. Mas, no caso, temos:
o que para mim é informação suficiente para o compilador detectar que Dog não implementa a interface Comparable (o que vai dar problema para um treeset...)
Alguém possui alguma explicação do porquê o compilador não detecta isso?
Obrigado!
|
 |
|
|