{"id":35421,"date":"2020-05-25T15:53:33","date_gmt":"2020-05-25T15:53:33","guid":{"rendered":"https:\/\/blog.jetbrains.com\/pt-br\/?p=34"},"modified":"2020-05-25T19:23:36","modified_gmt":"2020-05-25T19:23:36","slug":"25_coisas_que_nos_amamos_no_java","status":"publish","type":"post","link":"https:\/\/blog.jetbrains.com\/pt-br\/2020\/05\/25\/25_coisas_que_nos_amamos_no_java\/","title":{"rendered":"25 coisas que n\u00f3s amamos no Java"},"content":{"rendered":"A JetBrains adora todas as linguagens de programa\u00e7\u00e3o e desenvolvedores de todos os tipos! Este m\u00eas, maio de 2020, o Java completa 25 anos! Portanto, queremos prestar uma aten\u00e7\u00e3o especial e comemorar 25 coisas que adoramos no Java e na JVM.\r\n\r\n\r\n\r\n\r\nCompatibilidade com vers\u00f5es anteriores\r\nO Java \u00e9 quase \u00fanico em sua capacidade de executar c\u00f3digo de 25 anos atr\u00e1s em uma vers\u00e3o moderna do Java. Os desenvolvedores de linguagens levam a compatibilidade com vers\u00f5es anteriores muito a s\u00e9rio e, por causa disso, muitas organiza\u00e7\u00f5es est\u00e3o muito satisfeitas por fazer do Java sua plataforma de desenvolvimento principal, sabendo que o c\u00f3digo ainda ser\u00e1 executado na JVM nos pr\u00f3ximos anos.\r\nMaturidade\r\nH\u00e1 muitas vantagens em estar presente por um longo tempo. Nos \u00faltimos 25 anos, os desenvolvedores t\u00eam criado aplica\u00e7\u00f5es em Java para uma grande variedade de setores e tipos de neg\u00f3cios e para diferentes plataformas. Enquanto isso, h\u00e1 25 anos, os desenvolvedores aprendem Java em escolas, universidades, bootcamps e no trabalho. Isso cria um grande ecossistema que teve tempo de aprender com a experi\u00eancia e que continua a crescer. O Java e os problemas que ele \u00e9 capaz de resolver est\u00e3o bem documentados e s\u00e3o bem suportados por fornecedores e organiza\u00e7\u00f5es sem fins lucrativos e por indiv\u00edduos. Muito importante para desenvolvedores como n\u00f3s, a maturidade e a ampla ado\u00e7\u00e3o do Java significam que h\u00e1 muitos trabalhos para desenvolvedores que desejam codificar em Java!\r\nMelhorias constantes\r\nEm contraste com a Compatibilidade com vers\u00f5es anteriores e a Maturidade, est\u00e1 a evolu\u00e7\u00e3o da plataforma e da linguagem. Desde 2017 (Java 9), h\u00e1 um novo lan\u00e7amento a cada seis meses, o que permite um fluxo constante de altera\u00e7\u00f5es e melhorias na linguagem. Combinada com os Recursos de Visualiza\u00e7\u00e3o, a linguagem \u00e9 capaz de experimentar com uma nova sintaxe, obter feedback dos desenvolvedores e padronizar novos recursos que realmente funcionam bem para quem a usa.\r\nEquil\u00edbrio\r\nO Java tem um equil\u00edbrio dif\u00edcil de encontrar entre a compatibilidade com vers\u00f5es anteriores e o futuro. A abordagem atual, que consiste em valorizar a compatibilidade com vers\u00f5es anteriores e lan\u00e7amentos de uma nova vers\u00e3o a cada seis meses, mas com um lan\u00e7amento de umavers\u00e3o LTS (Suporte a longo prazo) a cada tr\u00eas anos parece atingir o equil\u00edbrio certo. A linguagem \u00e9 capaz de evoluir fornecendo avisos de recursos obsoletos que ser\u00e3o removidos e tendo substitui\u00e7\u00f5es para qualquer coisa que possa desaparecer.\r\n\r\nAqueles que desejam estabilidade extra podem ficar com os lan\u00e7amentos de Suporte a longo prazo. Para reduzir o risco quando chegar a hora de atualizar, eles podem testar regularmente as vers\u00f5es semestrais.\u00a0 Aqueles que est\u00e3o contentes em atualizar a cada seis meses podem passar para a vers\u00e3o mais recente do Java sempre que esta for lan\u00e7ada. Os desenvolvedores que quiserem experimentar a nova sintaxe antes mesmo da padroniza\u00e7\u00e3o podem habilitar recursos de pr\u00e9-visualiza\u00e7\u00e3o e, quem quiser fazer isso o mais r\u00e1pido poss\u00edvel pode at\u00e9 mesmo usar o release de Acesso antecipado (Early Access) de uma vers\u00e3o que ainda n\u00e3o foi lan\u00e7ada.\u00a0 Equipes que usam vers\u00f5es modernas do Java realmente podem ter o melhor de todos os mundos.\r\nPadr\u00f5es\r\nPadr\u00f5es podem n\u00e3o ser t\u00e3o empolgantes para um desenvolvedor quanto os recursos de linguagem, mas ter padr\u00f5es para Java, Java EE e Jakarta EE e para casos de uso comuns com os quais os desenvolvedores se deparam facilita a vida de todos eles.\u00a0 Entender como usar o JDBC para conversar com um banco de dados significa que n\u00e3o precisamos nos preocupar em como o driver de banco de dados \u00e9 implementado: a maneira como interagimos com ele \u00e9 sempre a mesma.\u00a0 O JCP \u00e9 um dos processos usados para determinar padr\u00f5es para o Java.\r\n\r\nA Especifica\u00e7\u00e3o da linguagem Java (JLS) descreve os conceitos da linguagem Java e como o compilador deve funcionar. Ela inclui o Java Memory Model, que pode nos ajudar a prever como uma aplica\u00e7\u00e3o pode se comportar, independentemente da JVM ou do hardware. A documenta\u00e7\u00e3o Java Virtual Machine Specification abrange os detalhes de baixo n\u00edvel na JVM. Essas especifica\u00e7\u00f5es permitem que os JDKs distribu\u00eddos por diferentes fornecedores, executados em plataformas diferentes, se comportem de maneiras previs\u00edveis e especificadas. O que nos leva a...\r\nWrite Once Run Anywhere\r\nA WORA foi uma das ideias originais por tr\u00e1s do Java, que parece t\u00e3o \u00f3bvia hoje em dia que talvez nem percebamos o quanto ela foi revolucion\u00e1ria. Lembro-me de trabalhar para uma organiza\u00e7\u00e3o muito grande que, em 2002, mudou da pilha de tecnologia anterior para o Java simplesmente porque tinham v\u00e1rios componentes de hardware diferentes, e a capacidade de executar novos aplica\u00e7\u00f5es Java nesses componentes, em vez de precisar comprar hardware espec\u00edficos para as aplica\u00e7\u00f5es, foi uma das principais raz\u00f5es pelas quais eles mudaram todo o seu desenvolvimento para o Java. Nos dias de hoje na nuvem, isso pode parecer menos relevante, mas na verdade, como nem sempre vemos a WORA em a\u00e7\u00e3o, n\u00e3o significa que ainda n\u00e3o estejamos nos aproveitando dela. E, \u00e9 claro, se voc\u00ea estiver usando o IntelliJ IDEA (ou o NetBeans), estar\u00e1 aproveitando a WORA na \u00e1rea de trabalho.\r\nDesempenho\r\n\u00c0s vezes, isso vem como uma surpresa para aqueles que est\u00e3o menos familiarizados com o Java, mas o Java \u00e9 uma linguagem de alto desempenho. \u00c9 uma plataforma madura que possui 25 anos de melhorias de desempenho; in\u00fameros recuperadores de mem\u00f3ria (garbage collectors) com diferentes perfis de desempenho, e a JVM otimiza nosso c\u00f3digo em tempo de execu\u00e7\u00e3o para nossos casos de uso de produ\u00e7\u00e3o reais de maneira muito melhor que a maioria dos desenvolvedores humanos. O Java \u00e9 amplamente utilizado no mundo financeiro, por exemplo, que depende de transa\u00e7\u00f5es de baixa lat\u00eancia e desempenho previs\u00edvel.\r\nGarbage Collection\r\nA limpeza autom\u00e1tica de mem\u00f3ria (Garbage Collection) \u00e9 outra coisa que, 25 anos depois, damos como certa. N\u00e3o precisamos pensar em como a mem\u00f3ria \u00e9 alocada em nossas aplica\u00e7\u00f5es ou em como liber\u00e1-la. Cada JVM possui um ou mais algoritmos de GC diferentes e, portanto, podemos escolher um que funcione bem para nossa aplica\u00e7\u00e3o sem nos preocuparmos muito com o funcionamento interno e podemos continuar escrevendo a l\u00f3gica de neg\u00f3cios das nossas aplica\u00e7\u00f5es.\r\nObservabilidade e gerenciamento\r\nSe estamos interessados no que est\u00e1 acontecendo enquanto nossa aplica\u00e7\u00e3o est\u00e1 em execu\u00e7\u00e3o, h\u00e1 um grande n\u00famero de ferramentas dispon\u00edveis para n\u00f3s. Muitos delas s\u00e3o gratuitas, principalmente porque o Java Flight Recorder e o Mission Control agora fazem parte do OpenJDK (desde o Java 11). Ferramentas como o JMX inclusive nos permitem gerenciar dinamicamente nossas aplica\u00e7\u00f5es tamb\u00e9m.\r\nA M\u00e1quina Virtual Java (JVM)\r\nMuitos dos recursos que acabamos de mencionar s\u00e3o recursos da JVM, mas queremos especificamente real\u00e7ar a JVM e o fato de ela ser separada da linguagem Java. H\u00e1 muitas raz\u00f5es para adorar a JVM, incluindo algumas das coisas sobra as quais j\u00e1 falamos: WORA, otimiza\u00e7\u00f5es de tempo de execu\u00e7\u00e3o, desempenho, escolha de fornecedores etc., muitas das quais s\u00e3o poss\u00edveis devido a padr\u00f5es e especifica\u00e7\u00f5es. \u00c9 importante que a JVM tamb\u00e9m seja separada da linguagem Java, pois significa que diferentes linguagens podem ser constru\u00eddas na plataforma, aproveitando todos os \u00f3timos recursos da JVM que acabamos de mencionar e, ao mesmo tempo, fornecendo diferentes tipos de sintaxe e recursos de linguagem.\r\nOutras linguagens da JVM\r\nUma das raz\u00f5es pelas quais o Java sobreviveu, e at\u00e9 mesmo prosperou, naqueles anos tranquilos entre o Java 6 e 8 (o Java 7 tem \u00f3timos recursos, mas n\u00e3o foi visto como um grande lan\u00e7amento pelo desenvolvedores Java) \u00e9 por causa das outras linguagens da JVM. Na JetBrains, \u00e9 claro, nossa favorita \u00e9 o Kotlin, mas a JVM \u00e9 uma plataforma para outras linguagens populares, como Groovy, Scala, Clojure and JRuby e um grande n\u00famero de outras linguagens novas e reimplementadas. Em muitos casos, a interoperabilidade entre essas linguagens e o Java cl\u00e1ssico  nos ajuda a abra\u00e7ar e alavancar essa variedade.\r\nBibliotecas e frameworks\r\nUm dos argumentos mais convincentes \u00e9 a enorme quantidade de op\u00e7\u00f5es que temos de bibliotecas e frameworks, muitas delas open source e de uso gratuito. Frameworks populares como o Spring e o Spring Boot em particular, facilitam a cria\u00e7\u00e3o de qualquer coisa, desde pequenos servi\u00e7os at\u00e9 aplica\u00e7\u00f5es corporativas grandes e complexas. Padr\u00f5es significam que geralmente n\u00e3o \u00e9 dif\u00edcil entender e usar uma biblioteca quando usamos algo semelhante em outro contexto. A maturidade do Java e a ado\u00e7\u00e3o antecipada do open source pela comunidade significa que geralmente h\u00e1 uma solu\u00e7\u00e3o existente para problemas padr\u00e3o, sem a necessidade de reinventar a roda. Isso tamb\u00e9m significa que, j\u00e1 que muitas dessas solu\u00e7\u00f5es existem e est\u00e3o em uso h\u00e1 muito tempo, elas s\u00e3o bem testadas, bem compreendidas e bem documentadas.\r\nFerramentas de build e gerenciamento de depend\u00eancias\r\nFicaram para tr\u00e1s os dias em que um pobre desenvolvedor (como eu!) tinha que procurar na Internet por um arquivo JAR desconhecido contendo alguma classe aparentemente exigida pelo c\u00f3digo que ele estava tentando executar. O Maven e o Gradle, em particular, tornaram mais f\u00e1cil n\u00e3o s\u00f3 gerar e implantar uma aplica\u00e7\u00e3o, como tamb\u00e9m configurar um projeto de maneira padr\u00e3o com todas as depend\u00eancias necess\u00e1rias. \u00c9 f\u00e1cil come\u00e7ar a codificar em um projeto novo ou existente. Reposit\u00f3rios p\u00fablicos como o Maven Central e o Bintray facilitam a localiza\u00e7\u00e3o (e publica\u00e7\u00e3o) de bibliotecas.\r\nJUnit e testes automatizados\r\nO JUnit foi criado em 1997 e, portanto, \u00e9 quase t\u00e3o antigo quanto o pr\u00f3prio Java!\u00a0 Ele \u00e9 de longe o framework de teste automatizado mais comum no mundo Java, e o JUnit e o TestNG acompanham o IntelliJ IDEA, pois considera-se que um framework de teste ser\u00e1 necess\u00e1rio com qualquer novo projeto Java. \u00c9 prov\u00e1vel que as estruturas de teste modernas para uma variedade de linguagens sejam baseadas nas ideias que agora aceitamos como certas da JUnit. A cultura da comunidade Java de testes automatizados deve muito a essa biblioteca.\r\nIDEs\r\nEste \u00e9 o blog do IntelliJ IDEA, n\u00e3o tem como esquecer! Se voc\u00ea acredita que a verbosidade do Java requer um IDE ou que, na verdade, o Java pode realmente alavancar um IDE devido \u00e0 sua tipagem est\u00e1tica, o fato \u00e9 que os desenvolvedores Java adoram seus IDEs (e n\u00f3s amamos voc\u00eas!). Aprender a usar um IDE de maneira eficaz (seja o IntelliJ IDEA, o Eclipse ou o NetBeans) pode melhorar significativamente a produtividade de um desenvolvedor, por meio do seguinte: complementa\u00e7\u00e3o e gera\u00e7\u00e3o de c\u00f3digo, execu\u00e7\u00e3o de testes, depura\u00e7\u00e3o, navega\u00e7\u00e3o e v\u00e1rios outros recursos. Os desenvolvedores Java geralmente s\u00e3o extremamente entusiasmados com os benef\u00edcios que um IDE \u00e9 capaz de trazer.\r\nComunidade\r\nA Comunidade Java \u00e9 uma grande, madura, vibrante e acolhedora. Existem Grupos de usu\u00e1rios Java em muitas cidades do mundo e um Grupo virtual de usu\u00e1rios Java se voc\u00ea n\u00e3o puder ir a um meetup presencial. Os Java Champions s\u00e3o l\u00edderes t\u00e9cnicos reconhecidos no mundo Java que se tornaram conhecidos por compartilhar coisas \u00fateis ou interessantes para desenvolvedores Java e JVM. O Java possui uma enorme comunidade open source, incluindo o pr\u00f3prio JDK, por meio do OpenJDK. A Comunidade Java valoriza o aprendizado, o ensino e o aprimoramento constante, se preocupa com os padr\u00f5es e as \"melhores pr\u00e1ticas\" e \u00e9 pragm\u00e1tica sobre como aplic\u00e1-los em um ambiente do mundo real.\r\nPessoas\r\nA Comunidade \u00e9 composta de pessoas, \u00e9 claro, mas quando perguntei o que os desenvolvedores mais valorizam sobre o Java, muitos deles especificamente mencionaram pessoas no mundo do Java que os influenciaram. Elas variam desde colegas e professores a pessoas como Brian Goetz, Angie Jones, Georges Saab, Mala Gupta e Venkat Subramaniam. Algumas pessoas at\u00e9 mencionaram meu nome. Pessoalmente, escolhi o Java porque aprendi na universidade e havia muitos empregos naquela \u00e9poca, mas continuei com ele porque amo as pessoas, a ajuda e o apoio que tive delas.\r\nJavadoc e Documenta\u00e7\u00e3o\r\nO Java faz da documenta\u00e7\u00e3o da API uma parte essencial da linguagem por meio do Javadoc. Os tr\u00eas tipos diferentes de coment\u00e1rios (Javadoc, bloco e linha) indicam claramente que tipo de coment\u00e1rio um desenvolvedor est\u00e1 deixando. O Javadoc especificamente encoraja os desenvolvedores a deixar a documenta\u00e7\u00e3o \u00fatil para outros desenvolvedores que chamam um m\u00e9todo ou usam uma classe ou um pacote. Se um desenvolvedor n\u00e3o consegue encontrar informa\u00e7\u00f5es detalhadas do tutorial em uma biblioteca ou parte de c\u00f3digo, geralmente h\u00e1 um Javadoc que pode ajudar a apont\u00e1-los na dire\u00e7\u00e3o certa.\r\n\r\nAl\u00e9m disso, o ecossistema Java geralmente parece esperar (e fornecer) documenta\u00e7\u00e3o de boa qualidade para os desenvolvedores. Os potenciais participantes de projetos open source s\u00e3o encorajados a enviar solicita\u00e7\u00f5es de extra\u00e7\u00e3o de coment\u00e1rios do Javadoc ou outra documenta\u00e7\u00e3o, e os desenvolvedores em todo o mundo fazem e respondem perguntas no StackOverflow  ou publicam em blogs sobre solu\u00e7\u00f5es para problemas espec\u00edficos.\r\nOpen source\r\nA comunidade Java n\u00e3o apenas adotou o open source desde o in\u00edcio, como tamb\u00e9m agora o JDK \u00e9 open source por meio do OpenJDK. O open source facilita a participa\u00e7\u00e3o e a colabora\u00e7\u00e3o de v\u00e1rios fornecedores, bem como de indiv\u00edduos. Tamb\u00e9m \u00e9 fascinante poder ver o c\u00f3digo do pr\u00f3prio Java. O c\u00f3digo open source oferece uma grande oportunidade para desenvolvedores como n\u00f3s aprendermos com pessoas que j\u00e1 fizeram todo o trabalho duro pensando e resolvendo problemas complicados.\r\nGr\u00e1tis\r\nA plataforma Java e muitas das ferramentas mais populares usadas no ecossistema Java n\u00e3o exigem que um desenvolvedor (ou mesmo uma organiza\u00e7\u00e3o com fins lucrativos) pague para us\u00e1-las. Mesmo depois que a Oracle alterou seu licenciamento e suporte no Java 11, ela (e muitos outros fornecedores) ainda forneceram uma maneira de usar a linguagem gratuitamente em produ\u00e7\u00e3o. Os projetos open source, as ferramentas de compila\u00e7\u00e3o e os IDEs j\u00e1 mencionados neste artigo s\u00e3o gratuitos ou t\u00eam uma op\u00e7\u00e3o gratuita. Isso torna o Java atraente para os desenvolvedores que est\u00e3o come\u00e7ando a codificar e para organiza\u00e7\u00f5es de todos os portes que precisam criar softwares e manter um olho no or\u00e7amento.\r\nOrientado a objetos (OO)\r\nA Programa\u00e7\u00e3o orientada a objetos n\u00e3o \u00e9 a \u00fanica op\u00e7\u00e3o, claro, e todo paradigma tem suas vantagens e desvantagens. O Java foi projetado como uma linguagem OO desde o in\u00edcio, e muitos exemplos de padr\u00f5es de design e outras pr\u00e1ticas recomendadas de codifica\u00e7\u00e3o para OO s\u00e3o demonstrados em Java. Se voc\u00ea deseja uma linguagem de programa\u00e7\u00e3o Orientada a objetos, o Java deve estar no topo da sua lista de op\u00e7\u00f5es para experimentar.\r\nEvolu\u00e7\u00e3o e adapta\u00e7\u00e3o\r\nO Java foi, e ainda \u00e9, uma linguagem de programa\u00e7\u00e3o orientada a objetos. Por\u00e9m, ele tamb\u00e9m adotou com sucesso alguns conceitos da programa\u00e7\u00e3o funcional (como express\u00f5es lambda e estruturas de dados imut\u00e1veis) e os fez funcionar bem dentro do paradigma de OO. A infer\u00eancia de tipo (por exemplo, var) nos permite ainda ter os benef\u00edcios de uma linguagem estaticamente tipada, mas com menos artif\u00edcios. A ci\u00eancia da computa\u00e7\u00e3o ainda \u00e9 uma disciplina relativamente jovem, mas, \u00e0 medida que aprendemos coisas novas, elas podem ser aplicadas \u00e0s nossas ferramentas existentes. O Java (a linguagem e todo o ecossistema) est\u00e1 em constante evolu\u00e7\u00e3o de acordo com as novas tend\u00eancias e novas \"melhores pr\u00e1ticas\" e tamb\u00e9m como resultado de ver como as coisas funcionam no mundo real.\r\n\r\nO Java tamb\u00e9m se beneficia da sintaxe e das ideias de outras linguagens JVM, para ver o que funciona e o que talvez n\u00e3o se encaixe no mundo cl\u00e1ssico do Java. At\u00e9 mesmo os processos e as ferramentas que o Java usa para evoluir e crescer, como o JCP e OpenJDK, tamb\u00e9m est\u00e3o se adaptando para permanecer relevantes nessa constante evolu\u00e7\u00e3o. Essa evolu\u00e7\u00e3o e adapta\u00e7\u00e3o fazem parte do equil\u00edbrio cuidadoso que o Java deve atingir.\r\nFoco na legibilidade\r\nO c\u00f3digo Java geralmente \u00e9 leg\u00edvel, mesmo para programadores n\u00e3o Java. A linguagem tende a ser mais expressiva do que concisa demais, o que facilita a compreens\u00e3o durante a leitura. Os desenvolvedores de linguagens n\u00e3o implementaram recursos como sobrecarga de operador, pois consideram importante n\u00e3o se surpreender com o comportamento personalizado inesperado. H\u00e1 uma tend\u00eancia a evitar \"m\u00e1gica\" na linguagem e nos frameworks - embora alguns frameworks usem coisas como Conven\u00e7\u00e3o sobre configura\u00e7\u00e3o para fazer coisas sem que um desenvolvedor precise ser imperativo, definitivamente houve uma tend\u00eancia de deixar de (por exemplo) fazer muito AOP com anota\u00e7\u00f5es e passar a usar anota\u00e7\u00f5es para verifica\u00e7\u00f5es de documenta\u00e7\u00e3o e an\u00e1lise est\u00e1tica. A comunidade e o ecossistema tendem a gostar de padr\u00f5es e \"melhores pr\u00e1ticas\". Portanto, o c\u00f3digo Java geralmente segue tipos semelhantes de regras, mesmo em projetos muito diferentes.\r\nRecursos da linguagem\r\nFalamos sobre 23 coisas que gostamos sobre o Java, mas n\u00e3o mencionamos um \u00fanico recurso! Para ser honesto, \u00e9 porque nos limitar a apenas 25 recursos parecia extremamente dif\u00edcil e tamb\u00e9m porque muitas das coisas que adoramos no Java nem sempre s\u00e3o sobre a sintaxe ou os recursos. Gostar\u00edamos de fazer uma homenagem a alguns recursos favoritos de acordo com os desenvolvedores:\r\n\r\n\tAPI Collections: est\u00e1 conosco h\u00e1 muito tempo e nos serviu bem!\r\n\tM\u00e9todos convenientes de f\u00e1brica para cole\u00e7\u00f5es: facilitam muito a cria\u00e7\u00e3o de cole\u00e7\u00f5es n\u00e3o modific\u00e1veis.\r\n\tAPI Streams: uma adi\u00e7\u00e3o muito boa \u00e0 API Collections e \u00e9 \u00f3timo v\u00ea-la evoluindo desde o Java 8. Fluxos paralelos adicionaram uma nova maneira de utilizar hardware moderno.\r\n\tExpress\u00f5es Lambda: particularmente \u00fateis com a API Streams, mas muito \u00fateis por m\u00e9rito pr\u00f3prio.\r\n\tOptional: uma boa maneira de expressar que um m\u00e9todo pode n\u00e3o lhe dar algo (e nos impede de nos proteger contra NullPointerExceptions!). \u00c9 muito bom ver cada melhoria em Optional desde o Java 8 tamb\u00e9m.\r\n\tjava.time: a API mais recente para trabalhar com data e hora \u00e9 uma melhoria bem-vinda\r\n\t Exce\u00e7\u00f5es verificadas: as revis\u00f5es s\u00e3o divididas entre exce\u00e7\u00f5es verificadas e exce\u00e7\u00f5es para execu\u00e7\u00e3o, mas as exce\u00e7\u00f5es marcadas existem pelo menos para as pessoas que desejam us\u00e1-las. \r\n\tAnota\u00e7\u00f5es: anota\u00e7\u00f5es s\u00e3o como (entre outras coisas) documenta\u00e7\u00e3o que o compilador pode verificar ou notas para um framework para fazer algum trabalho pesado.\r\n\tJShell: agora, podemos jogar com o Java em um REPL\r\n\tvar: a infer\u00eancia de tipo ajuda a reduzir o ru\u00eddo do c\u00f3digo, se usada de forma sensata\r\n\tModificadores de acesso e modularidade: o Java facilita (ainda mais desde o Java 9) ser expl\u00edcito sobre qual c\u00f3digo pode acessar quais campos, m\u00e9todos, classes e m\u00f3dulos.\r\n\tExpress\u00f5es Switch: agora, se usarmos Switch, \u00e9 muito menos feio!\r\n\tNullPointerExceptions \u00fateis: quem n\u00e3o adora uma boa NullPointerException? A mensagem de erro se tornou mais informativa e vemos exatamente onde ocorreu uma exce\u00e7\u00e3o na cadeia de chamadas.\r\n\tRecursos de demonstra\u00e7\u00e3o: adoramos recursos de demonstra\u00e7\u00e3o! Estamos muito empolgados com os Registros; Correspond\u00eancia de padr\u00f5es para instanceof e Blocos de texto.\r\n\r\nO Futuro\r\nEstamos recebendo novos recursos a cada seis meses, e cada uma das releases LTS geralmente oferecem melhor desempenho imediato para qualquer aplicativo em execu\u00e7\u00e3o. O Java 15 (setembro de 2020) deve ter: Classes ocultas, Blocos de texto (n\u00e3o \u00e9 mais preview); pr\u00e9-visualiza\u00e7\u00f5es atualizadas para Registros; Correspond\u00eancia de padr\u00f5es para instanceof e um preview de Classes seladas.\r\n\r\nAl\u00e9m disso, esperamos tamb\u00e9m ver no futuro: concorr\u00eancia leve e f\u00e1cil de usar com Project Loom; Inline Types do Project Valhalla; mais altera\u00e7\u00f5es de linguagem do Project Amber, como sobras lambda; o  Project Panama facilitar\u00e1 o acesso dos programadores a APIs estrangeiras, com tempos de inicializa\u00e7\u00e3o mais curtos gra\u00e7as ao Project Leydon; mais melhorias para v\u00e1rios Garbage Collectors e muito mais.\r\n\r\nO futuro \u00e9 brilhante para o Java!","protected":false},"excerpt":{"rendered":"A JetBrains adora todas as linguagens de programa\u00e7\u00e3o e desenvolvedores de todos os tipos! Este m\u00eas, maio de 2020, o Java completa 25 anos! Portanto, queremos prestar uma aten\u00e7\u00e3o especial e comemorar 2","protected":false},"author":{"name":"JetBrains","link":"https:\/\/blog.jetbrains.com\/pt-br\/author\/jetbrains"},"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[5088],"tags":[155],"cross-post-tag":[],"acf":[],"featured_image":null,"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/posts\/35421"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/1152"},{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/1152"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=35421"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/posts\/35421\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=35421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=35421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=35421"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=35421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}