SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
Java HiddenFeatures,[object Object],Traquitanas  escondidas ou simplesmente pouco usadas no Java,[object Object]
São “features” pouco usadas do Java,[object Object],Nenhuma featureé escondida, apenas obscura, desconhecida,[object Object],Algumas delas são bem esquisitas,[object Object],Muitas consideradas até mesmo impossíveis,[object Object],Use com cautela,[object Object],Em alguns casos, são facilidades,[object Object],Porém, em outros, deixam as coisas mais complicadas.,[object Object],Podem piorar, por exemplo, a legibilidade,[object Object],O que são HiddenFeatures,[object Object]
Uma das formas mais estranhas de se criar um Map inicializado é através da Double BraceInitialization.,[object Object],Ex: ,[object Object],Double BraceInitialization,[object Object],Mapmap = newHashMap() {{  ,[object Object],put("a key", "a value");  ,[object Object],put("anotherkey", "anothervalue");  ,[object Object],}}; ,[object Object],Veja mais: 	http://www.c2.com/cgi/wiki?DoubleBraceInitialization,[object Object]
WTF?,[object Object],Classes internas anônimas que herda de HashMap,[object Object],Portanto, herda métodos como put(),[object Object],Bloco de inicialização,[object Object],Chamado logo após a chamada a super(),[object Object],Em um construtor sem o “super”, passa a impressão de eu é chamado antes do construtor,[object Object],Pode ser usado para agrupar lógica usada por vários construtores,[object Object],É legal, mas evite!,[object Object],Double BraceInitialization,[object Object]
Uma adição do Java 1.5 ainda pouco conhecida (ou percebida),[object Object],Um método sobrescrito pode retornar uma subclasse da classe retornada pelo método da superclasse (ou interface),[object Object],Necessário para o funcionamento de generics,[object Object],CovariantReturn,[object Object],class Super {,[object Object],Collection<String> values() {,[object Object],        ...,[object Object],    },[object Object],},[object Object],classSubClassextends Super {,[object Object],    @Override,[object Object],List<String> values() {,[object Object],        ...,[object Object],    },[object Object],},[object Object]
Quer lançar uma NullPointerException?,[object Object],Lançando NullPointerExcenption,[object Object],publicvoidmandaNullNaCara() {,[object Object],thrownull;,[object Object],},[object Object],Como assim? O compilador pirou? Tá cobrando propina pra deixar isso passar?,[object Object]
A instrução throw, ao ser processada, avalia a expressão à direita. ,[object Object],Se a expressão gera um Throwable, este é lançado,[object Object],Ex: throwgetException(),[object Object],Se a expressão completa normalmente, produzindo um valor não nulo, retorna esse valor,[object Object],Ex: thrownewSograEmCasaException(),[object Object],Se a expressão resulta em null, o null é convertido para NullpointerException!,[object Object],Lançando NullPointerExcenption,[object Object],Veja mais:,[object Object],	http://www.adarshr.com/papers/npe,[object Object],	http://java.sun.com/docs/books/jls/,[object Object]
Quer tirar uma exceção lançada de campo?,[object Object],Faz o return no finally!,[object Object],O código abaixo não lança a exceção,[object Object],Brincando com finally,[object Object],public static void fazAlgumaCoisa() {,[object Object],    try {,[object Object],      //Fazalgumacoisa…,[object Object],      throw new RuntimeException();,[object Object],    } finally {,[object Object],      return;,[object Object],    },[object Object],  },[object Object]
Quem for pego fazendo isso vai sofrer vudu reverso!,[object Object],Um erro é para ser tratado ou lançado, nunca escondido!,[object Object],Atenção,[object Object],Veja Mais: ,[object Object],	http://jamesjava.blogspot.com/2006/03/dont-return-in-finally-clause.html,[object Object]
Como lançar uma exceção CHECADA de um método que não declara exceção!,[object Object],Agora mais bizarro ainda!,[object Object],importjava.rmi.RemoteException;,[object Object],classThrower {,[object Object],publicstaticvoidspit(final Throwable exception) {,[object Object],classEvilThrower<T extendsThrowable> {,[object Object],      @SuppressWarnings("unchecked"),[object Object],privatevoidsneakyThrow(Throwable exception) ,[object Object],throws T {,[object Object],throw (T) exception;,[object Object],      },[object Object],    },[object Object],newEvilThrower<RuntimeException>().sneakyThrow(exception);,[object Object],  },[object Object],},[object Object]
Agora mais bizarro ainda!,[object Object],publicclassThrowerSample {,[object Object],publicstaticvoidmain( String[] args ) {,[object Object],Thrower.spit(newRemoteException("gounchecked!"));,[object Object],    },[object Object],},[object Object],Mim não gostar de lançar exceção assim!,[object Object]
Java não tem goto, mas...,[object Object],LabeledBlocks,[object Object],Quero ver isso funcionar!,[object Object],// codigo,[object Object],saifora:{,[object Object],    for (int i = 0; i < N; ++i) {,[object Object],        for (int j = i; j < N; ++j) {,[object Object],            for (int k = j; k < N; ++k) {,[object Object],//mais código pog,[object Object],breaksaifora;,[object Object],            },[object Object],        },[object Object],    },[object Object],},[object Object]
LabeledBlocks,[object Object],publicstatic String getErrorMsg(String _data){    String _errMsg = “”; ,[object Object],    VALIDATION:    {        if (_data.length() > 10)        {            _errMsg = “ERR: Data lengthexceed 10 chars”;            break VALIDATION;        } ,[object Object],       // Resto docódigo de validação    } ,[object Object],    // Tratamento da mensagem de erro    if (_errMsg.length() != 0)    {        _errMsg += “Pleasefixtheerror.”;     } ,[object Object],    return _errMsg;} ,[object Object],Problem?,[object Object]
Muita gente não sabe, mas enums podem:,[object Object],Ter Métodos,[object Object],Ter Atributos,[object Object],Ter Construtores,[object Object],Implementar interfaces,[object Object],Enum,[object Object],Veja mais:,[object Object],http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html,[object Object]
Enum,[object Object],enumCaes{,[object Object],MINOTAURO(2), TITAN(3), SADAM(7);,[object Object],privateintidade;,[object Object],Caes(int idade) {,[object Object],this.idade = idade;,[object Object],  },[object Object],publicintgetIdade() {,[object Object],returnidade;,[object Object],},[object Object],},[object Object]
Enum,[object Object],publicenumSalas implements Sala{,[object Object],PRIMEIRA{,[object Object],publicSala norte() {,[object Object],returnSEGUNDA;,[object Object],      },[object Object],   },,[object Object],SEGUNDA{,[object Object],publicSala sul() {,[object Object],returnPRIMEIRA;,[object Object],      },[object Object],   },[object Object],publicSala norte() { returnnull; },[object Object],public Sala sul() { returnnull; },[object Object],public Sala lest() { returnnull; },[object Object],public Sala oeste() { returnnull; },[object Object],},[object Object],public interface Sala{,[object Object],public Sala norte();,[object Object],public Sala sul();,[object Object],public Sala leste();,[object Object],public Sala oeste();,[object Object],},[object Object]
Desde a versão 1.5, o Java aceita parâmetros variáveis,[object Object],Var args,[object Object],publicvoidfoo(String... bars) {,[object Object],   for (String bar: bars),[object Object],      System.out.println(bar);,[object Object],},[object Object],publicvoidtest() {,[object Object],foo("first","second","third"),[object Object],},[object Object]
Printf e String.format,[object Object],Printf do entrou na versão 1.5,[object Object],String.format funciona analogamente, mas retorna ao invés de imprimir,[object Object],double x = 27.5;,[object Object],doubley = 33.75;,[object Object],System.out.printf("x = %f y = %g", x, y);,[object Object],double x = 27.5;,[object Object],doubley = 33.75;,[object Object],String s = String.format("x = %f y = %g", x, y);,[object Object],System.out.println(“String.format = “ + s);,[object Object]
Divisão por 0,[object Object],publicclass teste {publicstaticvoidmain(String[] args) {  try{    int x = 15;,[object Object],int z = 0;      double y = x / z;      System.out.println(“A divisão é “ + y);    }catch(ArithmeticException a){      System.out.println(“Erro!! Divisão por zero!!!”);    }  }},[object Object],Ok. Isto lança uma ArithmeticException,[object Object]
Divisão por 0,[object Object],publicclass teste {,[object Object],publicstaticvoidmain(String[] args) {,[object Object],try{,[object Object],doublex = 15;,[object Object],double z = 0;,[object Object],doubley = x / z;,[object Object],      System.out.println(“A divisão é “ + x);,[object Object],    }catch(ArithmeticException a){,[object Object],  System.out.println(“Erro!! Divisão por zero!!!”);,[object Object],},[object Object],},[object Object],},[object Object],WTF???????,[object Object]
Quer ver um dump da hierarquia de componentes numa aplicação Swing?,[object Object],Ctrl + Shift + F1,[object Object],Resultado no console,[object Object],Boa ferramenta para depuração! ,[object Object],Swing,[object Object]
Qual o resultado disso?,[object Object],E isso?,[object Object],Brincando com URLs,[object Object],new URL("http://www.guj.com.br").equals(new URL("http://208.109.100.149") ),[object Object],public intumMetodo(){,[object Object],System.out.println(“Acessando o Google:”);,[object Object],    http://www.google.com,[object Object],    return 1;,[object Object],},[object Object]
Como acessar os métodos e campos privados de fora dessa classe?,[object Object],Arrebentando o encapsulamento,[object Object],publicclassFoo {,[object Object],privateint bar;,[object Object],publicFoo() {,[object Object],setBar(17);,[object Object],},[object Object],privatevoidsetBar(int bar) {,[object Object],this.bar=bar;,[object Object],},[object Object],publicintgetBar() {,[object Object],return bar;,[object Object],},[object Object],public String toString() {,[object Object],return "Foo[bar="+bar+"]";,[object Object],},[object Object],},[object Object]
Arrebentando o encapsulamento,[object Object],importjava.lang.reflect.*;,[object Object],publicclassArrebenta {,[object Object],publicstaticvoidmain(String[] args),[object Object],throwsNoSuchMethodException,IllegalAccessException, ,[object Object],InvocationTargetException, NoSuchFieldException {,[object Object],Foofoo=newFoo();,[object Object],System.out.println(foo);,[object Object],Methodmethod=Foo.class.getDeclaredMethod,[object Object],       ("setBar", int.class);,[object Object],method.setAccessible(true);,[object Object],method.invoke(foo, 42);,[object Object]
Arrebentando o encapsulamento,[object Object],      System.out.println(foo);,[object Object],      Field field=Foo.class.getDeclaredField("bar");,[object Object],field.setAccessible(true);,[object Object],field.set(foo, 23);,[object Object],      System.out.println(foo);,[object Object],  },[object Object],},[object Object],Isso vai dar merda!,[object Object]
Acesso esquisito,[object Object],publicclassFoo {,[object Object],staticintfubar = 42;,[object Object],FoogetFoo() {,[object Object],returnnull;    ,[object Object],    },[object Object],publicstaticvoidmain(String args[]) {,[object Object],Foofoo = newFoo();,[object Object],        System.out.println(foo.getFoo().fubar);,[object Object],    },[object Object],},[object Object],// saida:  42,[object Object],Agora você tá de sacanagem!,[object Object]
É possível criar um programa sem Main!,[object Object],Classe sem main!,[object Object],publicclassWithoutMain {,[object Object],static {,[object Object],        System.out.println("Lookman, no main!!");,[object Object],        System.exit(0);,[object Object],    },[object Object],},[object Object],$ javaWithoutMain,[object Object],Lookman, no main!!,[object Object]
Distribuída com o JDK  a partir da versão1.6_07,[object Object],Profiler leve,[object Object],Integra uma série de ferramentas de linha de comando,[object Object],VisualVM,[object Object],Veja mais:,[object Object],http://visualvm.java.net/,[object Object]
Todo arquivo .class começa com o valor hexadecimal 0xCAFEBABE, paraidentificá-lo como um arquivo de Bytecodeválido.,[object Object],Querexibiruma Splash screen?,[object Object],Bastarodar o programa com o parâmetro de máriona virtual splash:caminho,[object Object],Curiosidades,[object Object],java -splash:imagem.jpeg -jar Reverso.jar,[object Object]
Classes anônimas,[object Object],Você pode definir uma classe anônima e imediatamente chamar um método, mesmo que ela não implemente nenhuma interface,[object Object],newObject() {,[object Object],voidfoo(String s) {,[object Object],    System.out.println(s);,[object Object],  },[object Object],}.foo("Hello");,[object Object]
Permite a criação de uma thread eu será chamada somente quando a JVM for encerrada,[object Object],Global JVM Finalizer,[object Object],Liberar recursos,[object Object],Matar programas,[object Object],Funciona com System.exit(), ou com CTRL-C / kill -15,[object Object],Obviamente, nãofunciona com kill -9, em *nix,[object Object],Shutdown Hooks,[object Object]
Shutdown Hooks,[object Object],Runtime.getRuntime().addShutdownHook(,[object Object],newThread() {,[object Object],publicvoidrun() {,[object Object],endApp();,[object Object], },[object Object],});;,[object Object]
Perguntas,[object Object]

Más contenido relacionado

La actualidad más candente

[Curso Java Basico - Exceptions] Aula 49: finally
[Curso Java Basico - Exceptions] Aula 49: finally[Curso Java Basico - Exceptions] Aula 49: finally
[Curso Java Basico - Exceptions] Aula 49: finallyLoiane Groner
 
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throwsLoiane Groner
 
[Curso Java Basico] Aula 60: Escopo de Variaveis
[Curso Java Basico] Aula 60: Escopo de Variaveis[Curso Java Basico] Aula 60: Escopo de Variaveis
[Curso Java Basico] Aula 60: Escopo de VariaveisLoiane Groner
 
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exceptionLoiane Groner
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)Armando Daniel
 
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Helder da Rocha
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13Carlos Santos
 
[Curso Java Basico - Exceptions] Aula 48: multiplos catch
[Curso Java Basico - Exceptions] Aula 48: multiplos catch[Curso Java Basico - Exceptions] Aula 48: multiplos catch
[Curso Java Basico - Exceptions] Aula 48: multiplos catchLoiane Groner
 
Nada sobre JavaScript
Nada sobre JavaScriptNada sobre JavaScript
Nada sobre JavaScriptLuis Vendrame
 
Teste unitário
Teste unitárioTeste unitário
Teste unitáriodist_bp
 
[MTC 2021] Conversa sobre shift left - Douglas Cardoso
[MTC 2021] Conversa sobre shift left - Douglas Cardoso[MTC 2021] Conversa sobre shift left - Douglas Cardoso
[MTC 2021] Conversa sobre shift left - Douglas Cardosominastestingconference
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - FlisolLeonn Leite
 

La actualidad más candente (20)

[Curso Java Basico - Exceptions] Aula 49: finally
[Curso Java Basico - Exceptions] Aula 49: finally[Curso Java Basico - Exceptions] Aula 49: finally
[Curso Java Basico - Exceptions] Aula 49: finally
 
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws
[Curso Java Basico - Exceptions] Aula 50: stacktrace e throws
 
[Curso Java Basico] Aula 60: Escopo de Variaveis
[Curso Java Basico] Aula 60: Escopo de Variaveis[Curso Java Basico] Aula 60: Escopo de Variaveis
[Curso Java Basico] Aula 60: Escopo de Variaveis
 
Threads e Estruturas de dados
Threads e Estruturas de dadosThreads e Estruturas de dados
Threads e Estruturas de dados
 
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
 
JavaScript das Ruas
JavaScript das RuasJavaScript das Ruas
JavaScript das Ruas
 
Tutorial java swing
Tutorial java swingTutorial java swing
Tutorial java swing
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13
 
[Curso Java Basico - Exceptions] Aula 48: multiplos catch
[Curso Java Basico - Exceptions] Aula 48: multiplos catch[Curso Java Basico - Exceptions] Aula 48: multiplos catch
[Curso Java Basico - Exceptions] Aula 48: multiplos catch
 
Nada sobre JavaScript
Nada sobre JavaScriptNada sobre JavaScript
Nada sobre JavaScript
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
[MTC 2021] Conversa sobre shift left - Douglas Cardoso
[MTC 2021] Conversa sobre shift left - Douglas Cardoso[MTC 2021] Conversa sobre shift left - Douglas Cardoso
[MTC 2021] Conversa sobre shift left - Douglas Cardoso
 
Java primeiros-passos
Java primeiros-passosJava primeiros-passos
Java primeiros-passos
 
Evento CODERS
Evento CODERSEvento CODERS
Evento CODERS
 
Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 

Destacado (8)

Soluções eficientes e de baixo custo em e-commerce
Soluções eficientes e de baixo custo em e-commerceSoluções eficientes e de baixo custo em e-commerce
Soluções eficientes e de baixo custo em e-commerce
 
Inovação em software
Inovação em softwareInovação em software
Inovação em software
 
Joomla! do desktop ao datacenter
Joomla! do desktop ao datacenterJoomla! do desktop ao datacenter
Joomla! do desktop ao datacenter
 
Drupal - muito além de um CMS
Drupal - muito além de um CMSDrupal - muito além de um CMS
Drupal - muito além de um CMS
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
Dojo com Arduino e Program-ME
Dojo com Arduino e Program-MEDojo com Arduino e Program-ME
Dojo com Arduino e Program-ME
 
Coding Dojo em 10 Minutos!
Coding Dojo em 10 Minutos!Coding Dojo em 10 Minutos!
Coding Dojo em 10 Minutos!
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 

Similar a Java hidden features

Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3guestd6da1cd
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Estrutura de linguagem C++
Estrutura de linguagem C++Estrutura de linguagem C++
Estrutura de linguagem C++Verônica Veiga
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaElaine Cecília Gatto
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Arthur Xavier
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionaliMasters
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Desenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVADesenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVAWillian Magalhães
 
Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Diego Pacheco
 

Similar a Java hidden features (20)

Java 13 Excecoes
Java 13 ExcecoesJava 13 Excecoes
Java 13 Excecoes
 
Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3
 
Java3
Java3Java3
Java3
 
Aula3
Aula3Aula3
Aula3
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Estrutura de linguagem C++
Estrutura de linguagem C++Estrutura de linguagem C++
Estrutura de linguagem C++
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Aula5
Aula5Aula5
Aula5
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?
 
Javascript
JavascriptJavascript
Javascript
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript Funcional
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09
 
Desenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVADesenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVA
 
Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04
 
Artigoajax
ArtigoajaxArtigoajax
Artigoajax
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 

Java hidden features

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.