<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5031012489094758669</id><updated>2012-02-07T18:48:52.689-08:00</updated><category term='ruby'/><category term='i/o'/><category term='EL'/><category term='enum'/><category term='JPA'/><category term='Certificação'/><category term='JSP'/><category term='XP'/><category term='tomcat 7'/><category term='Explorer'/><category term='dica'/><category term='venda'/><category term='SCJP'/><category term='Session'/><category term='Java'/><category term='programação'/><category term='Abas'/><category term='Bíblia'/><category term='Custom Tags'/><category term='JDBC'/><category term='Listener'/><category term='Netbeans'/><category term='segurança'/><category term='css'/><category term='welcome'/><category term='SystemTray'/><category term='cce'/><category term='Function'/><category term='Loja Virtual'/><category term='rails'/><category term='Dell'/><category term='var-args'/><category term='livros'/><category term='Casa da Bíblia'/><category term='Firebird'/><category term='Spring'/><category term='SCWD'/><category term='banco de dados'/><category term='Servlet'/><category term='notebook'/><category term='zip'/><category term='Evangélico'/><category term='boas vindas'/><title type='text'>Java, java e um monte de outras coisas</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.javeiro.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-6801443721745622610</id><published>2011-11-26T06:03:00.000-08:00</published><updated>2011-12-28T13:50:28.145-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='venda'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='banco de dados'/><category scheme='http://www.blogger.com/atom/ns#' term='livros'/><category scheme='http://www.blogger.com/atom/ns#' term='segurança'/><category scheme='http://www.blogger.com/atom/ns#' term='programação'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Queima de Livros de Computação</title><content type='html'>Fala galera! Irei me mudar ano que vem, e recebi um ultimato da minha esposa para me 'livrar' de algumas coisas que eu tenho, ela disse que na casa nova só quer coisa nova :( &lt;br /&gt;Assim, estou vendendo os Livros abaixo (depois irei anunciar outras coisas), se alguém se interessar favor entrar em contato comigo pelo meu email ou deixa um comentário aí no post! Valeu!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rails 3 Programming (R$ 45,00) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ruby Programming (R$ 50,00)&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://imagery.pragprog.com/products/99/ruby3.jpg?1298589754" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://imagery.pragprog.com/products/99/ruby3.jpg?1298589754" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://imagery.pragprog.com/products/111/rails3.jpg?1298589779" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="320" src="http://imagery.pragprog.com/products/111/rails3.jpg?1298589779" width="266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Core J2ME (R$ 20,00) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;strike&gt;Hibernate em Ação (20,00)&lt;/strike&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://i.s8.com.br/images/books/cover/img7/233177_4.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://i.s8.com.br/images/books/cover/img7/233177_4.jpg" width="240" /&gt;&lt;/a&gt;&lt;a href="http://i.s8.com.br/images/books/cover/img6/295976_4.jpg" imageanchor="1" style="clear: right; display: inline !important; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://i.s8.com.br/images/books/cover/img6/295976_4.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;strike&gt;Projetos Práticos com Jboss Seam (R$ 30,00) &lt;/strike&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Hackers Expostos 4ed (R$ 50,00)&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://i.s8.com.br/images/books/cover/img9/199879_4.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://i.s8.com.br/images/books/cover/img9/199879_4.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://i.s8.com.br/images/books/cover/img1/21386871_4.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://i.s8.com.br/images/books/cover/img1/21386871_4.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Sistema de Banco de Dados (R$ 60,00) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Criando Páginas com css (R$ 35,00)&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://i.s8.com.br/images/books/cover/img6/1825636.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://i.s8.com.br/images/books/cover/img6/1825636.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://virtualtheft.files.wordpress.com/2010/03/sistema-de-banco-de-dados-3c2aa-edicao-henry-korth.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://virtualtheft.files.wordpress.com/2010/03/sistema-de-banco-de-dados-3c2aa-edicao-henry-korth.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://ebookhorn.com/wp-content/uploads/2011/01/Effective-Java-book-cover.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://ebookhorn.com/wp-content/uploads/2011/01/Effective-Java-book-cover.jpg" style="cursor: move;" width="254" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: center;"&gt;&lt;b&gt;Effective Java - autografado pelo autor do livro (R$ 80,00)&lt;/b&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;Se alguém se interessar pelo bolo todo, fala aí que eu posso ver um desconto. Quanto à entrega, eu moro em Fortaleza, então é bom que você more por aqui também, pois não tenho ideia de quanto seria o frete pra outro lugar :) Abraço a todos!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-6801443721745622610?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/6801443721745622610/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=6801443721745622610' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/6801443721745622610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/6801443721745622610'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2011/11/queima-de-livros-de-programacao.html' title='Queima de Livros de Computação'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-5295036470360655213</id><published>2011-08-03T07:43:00.000-07:00</published><updated>2011-08-03T07:43:08.432-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JDBC'/><title type='text'>Novidades da JDBC 4</title><content type='html'>&lt;div style="text-align: justify;"&gt;Quem nunca precisou fazer uma conexão JDBC em Java que atire a primeira pedra! Apesar de hoje em dia não ser comum utilizar JDBC puro em grandes projetos, embora haja quem o faça, a API continua evoluindo junto com a especificação do JSE.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A nova API, JDBC 4, foi incorporada ao JDK 6 e traz algumas mudanças como: melhor gerenciamento de objetos e suporte a novos tipos de dados, além das já existentes flexibilidade e facilidade de uso.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Uma mudança que a nova versão trouxe é na hora de obtermos uma conexão com o banco. Antes era necessário carregar a classe do driver JDBC antes de chamar o getConnection de DriverManager, por exemplo:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Class.forName("com.mysql.jdbc.Driver");&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;//Chamada ao DriverManager aqui&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Esta chamada não é mais necessária, pois o próprio DriverManager se encarregará de localizar e carregar &amp;nbsp;a classe do Driver JDBC, para isto, basta que nós adicionemos o .jar no classpath da aplicação.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Outra novidade é o suporte a tipos de dados em XML, que estão definidos na SQL2003. O objeto é o java.sql.SQLXML, podemos fazer por exemplo:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQLXML xml = Connection.createSQLXML( );&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;ou ainda:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQLXML xml = resultSet.getSQLXML( );&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;InputStream is = xml.getBinaryStream( );&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Seu uso é similar aos dos tipos CLOB e BLOB, que são suportados desde à versão 2.0, a&amp;nbsp;nova versão traz &amp;nbsp;também a classe RowId, que permite fazer o acesso a um registro de forma mais rápida.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Agora é possível executar funções escalares como:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;CHAR_LENTH, CHARACTER_LENGTH&lt;/li&gt;&lt;li&gt;CURRENT_TIME, CURRENT_DATE&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Com o advento dos frameworks de ORM, como Hibernate, JPA, ficou cada vez mais raro usar JDBC, talvez você leitor nem mesmo soubesse que a API estava na versão 4.0, to mentindo? :) Mas eu acredito que é bom estudar as bases, pois se soubermos utilizar bem JDBC será mais fácil aprender a usar ORM, assim como o estudo de Servlets/JSP é importante para o aprendizado de frameworks web como JSF, Struts, Vraptor etc. Especialmente quando precisamos desenvolver alguns projetos de pequeno porte, onde não é necessário utilizarmos esses frameworks de grande porte. Espero que tenham gostado do post! Até o próximo post então!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-5295036470360655213?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/5295036470360655213/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=5295036470360655213' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5295036470360655213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5295036470360655213'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2011/08/novidades-da-jdbc-4.html' title='Novidades da JDBC 4'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-5617012701869145665</id><published>2011-08-02T16:22:00.000-07:00</published><updated>2011-08-02T16:22:31.233-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servlet'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Listener'/><category scheme='http://www.blogger.com/atom/ns#' term='Session'/><title type='text'>Servlet Listeners - Listeners de Sessão - Parte 1</title><content type='html'>&lt;div style="text-align: justify;"&gt;Olá Javeiros! Continuando a nossa sequência de posts sobre listeners (&lt;a href="http://www.javeiro.com/2010/05/servlet-listeners-servletcontextlistene.html"&gt;aqui tá o primeiro&lt;/a&gt; e &lt;a href="http://www.javeiro.com/2010/05/servlet-listeners-servletcontextattribu.html"&gt;aqui o segundo&lt;/a&gt;) hoje vamos começar a falar sobres os listeners de eventos de sessão. Vamos dividir o assunto em duas partes pois nós temos 4 interfaces para os listeners de sessão.&lt;br /&gt;&lt;br /&gt;Antes de mais nada é importante que você saiba o que é uma sessão. Como o foco do post não é esse, não espere nenhum compêndio sobre o assunto aqui, quero apenas lembrar o conceito para aqueles que já viram algo sobre isso. Você nunca estudou o que é uma sessão http? Então é melhor você clicar &lt;a href="http://en.wikipedia.org/wiki/Session_(computer_science)"&gt;aqui &lt;/a&gt;e dar uma estudada primeiro.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O protocolo HTTP é considerado um protocolo &lt;a href="http://en.wikipedia.org/wiki/Stateless_server"&gt;stateless&lt;/a&gt;, isso significa que cada requisição que é feita ao servidor é sempre uma novidade. Lembra do filme "Como se fosse a primeira vez"? Pois é, depois que o servidor recebe a requisição e envia a resposta ele jamais lembrará o que tinha nessa requisição. Bom, mas isso é porcaria não? É, realmente seria se não fosse o conceito de sessão http. Uma sessão http nada mais é do que a identificação das requisições de um usuário, como o protocolo http não armazena o estado das requisições, os &amp;nbsp;clientes enviam algo nela para que servidor saiba que aquela requisição foi feita pelo usuário A e não pelo B. Essa informação é o session ID.&lt;br /&gt;&lt;br /&gt;Existem basicamente duas maneiras de implementar o controle de Sessão em uma aplicação Web Java: &amp;nbsp;através de Cookies ou da reescrita de URLs. A API de Servlets suporta as duas formas e o melhor é que o processo de controle é totalmente automático para o desenvolvedor. Cookies podem ser desabilitados pelo cliente, sendo assim, quando não for possível utilizar esta técnica, os Servlets poderão reescrever as URLs adicionando a elas o nosso Session ID.&lt;br /&gt;&lt;br /&gt;A criação de uma Sessão pode ser feita a partir da chamada ao método&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;b&gt;&lt;a href="http://download.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html#getSession()"&gt;getSession&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;. Este método retornará a sessão que está associada à requisição atual, caso não exista, uma Sessão nova é criada. Você pode passar um booleano como parâmetro caso deseje decidir criar ou não uma nova sessão.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HttpSession session = request.getSession( );&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Depois que um sessão é criada, toda requisição feita entre cliente e servidor carregará o session ID. A partir daí precisamos definir o tempo de duração de uma sessão e quando destruí-la, já que não há como saber se o cliente não está mais 'ativo'.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Encerrando uma Sessão&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;Existem duas formas de encerrar uma sessão, através da definição de um tempo máximo de inatividade &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;b&gt;&lt;a href="http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html#setMaxInactiveInterval(int)"&gt;setMaxInactiveInterval&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp;ou através da chamada ao método&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;b&gt;&lt;a href="http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html#invalidate()"&gt;invalidate&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;, os dois métodos estão presentes na interface &lt;a href="http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html"&gt;HttpSession&lt;/a&gt;. É possível também configurar o tempo máximo através de um parâmetro no arquivo web.xml da aplicação, conforme pode ser visto abaixo:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;lt;session-config&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;session-timeout&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;30&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/session-timeout&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/session-config&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vale apenas ressaltar que o tempo definido através do método&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;b&gt;&lt;a href="http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html#setMaxInactiveInterval(int)"&gt;setMaxInactiveInterval&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp;é em segundos, enquanto no web.xml é em minutos.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;HttpSessionListener&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;A API de Servlets permite que interceptemos o momento em que uma sessão é criada ou destruída. Para isso precisamos criar um Listener de Sessão através da implementação da interface &lt;a href="http://download.oracle.com/javaee/5/api/javax/servlet/http/HttpSessionListener.html"&gt;javax.servlet.http.HttpSessionListener&lt;/a&gt;. Essa interface possui 2 métodos que serão chamados sempre que uma sessão for criada, sessionCreated, ou destruída, sessionDestroyed. Por último a classe precisa ser configurada no web.xml para que o container possa chamá-la. A API 3.0 de Servlets permite a utilização de annotations na classe Listener, eliminando a necessidade do mapeamento no web.xml.&lt;br /&gt;A seguir temos um exemplo de uma classe que implementa HttpSessionListener utilizando anotações.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-GubAbx67hbI/TjgsmxrAw6I/AAAAAAAAALE/E5rFnLEThkk/s1600/sessionListener.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-GubAbx67hbI/TjgsmxrAw6I/AAAAAAAAALE/E5rFnLEThkk/s640/sessionListener.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-GubAbx67hbI/TjgsmxrAw6I/AAAAAAAAALE/E5rFnLEThkk/s1600/sessionListener.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Caso você não esteja usando a nova versão de Servlets, você deve mapear o listener no arquivo web.xml da aplicação:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;lt;listener&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;listener-class&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;30&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/listener-class&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/listener&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;No próximo artigo iremos falar sobre sobre os outros Listeners de Sessão (Activation, Binding e Attribute).&lt;br /&gt;Até o próximo post!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-5617012701869145665?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/5617012701869145665/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=5617012701869145665' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5617012701869145665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5617012701869145665'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2011/08/servlet-listeners-listeners-de-sessao.html' title='Servlet Listeners - Listeners de Sessão - Parte 1'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-GubAbx67hbI/TjgsmxrAw6I/AAAAAAAAALE/E5rFnLEThkk/s72-c/sessionListener.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-2238512130560056327</id><published>2010-12-23T10:36:00.000-08:00</published><updated>2010-12-23T10:36:13.135-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cce'/><category scheme='http://www.blogger.com/atom/ns#' term='notebook'/><title type='text'>Notebook CCE: Primeiras Impressões</title><content type='html'>&lt;div style="text-align: justify;"&gt;Fala galera, recentemente adquiri uma nova máquina pois o meu bom e velho core 2 duo já não estava mais dando conta do recado. Gostaria de falar da minha primeira impressão sobre os novos Notebooks da CCE. Ah, só pra registrar, o meu note anterior também era um CCE.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Bom, comprar um Notebook hoje em dia é um grande desafio, isso porque você tem um zilhão de opções pra escolher e normalmente os preços não variam muito. Os mais conservadores não irão pensar muito, vão correr pras marcas consagradas do mercado como: Dell, Hp, Sony, etc. Eles estão errados? De modo nenhum! Isso se chama: NÃO ARRISCAR! Bem, mas diz o velho ditado: Quem não arrisca não petisca. E por causa disso eu prefiro arriscar sim! Vou contar-lhes o motivo porque comprei novamente um notebook CCE (só lembrando: eu não estou ganhando porcaria nenhuma pra falar da CCE, apenas estou relatando a minha experiência como cliente desta empresa tupiniquim).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Quando eu resolvi comprar meu primeiro note em meados de 2008 e disse que ia comprar um CCE, quase fui massacrado pelos meus coleguinhas....Foram várias piadinhas do tipo: Ha, CCE é? Começou comprando errado... e outras coisas que o valham... mas como valente e destemido que sou, não dei ouvidos à concorrência..rs. O meu core 2 duo era o que precisava em termos de configuração na época e posso garantir que economizei uma grana boa!&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Críticas à primeira versão CCE&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O primeiro notebook CCE que comprei tinha suas vantagens (core 2 duo, 2GB de RAM, 120 GB HD). Minhas única crítica era com relação à placa de vídeo, uma vagabunda SiS que não rodava nem campo minado! Bom, mas eu não me importava com isso naquela época, então posso dizer que ele me serviu bastante. O acabamento era bom, com exceção do Pad do mouse, e especifamente comigo tinha um rangido quando fechava a tela, que com o tempo parou. Foram dois anos de uso intenso e ZERO de problemas, nada dele parou de funcionar! Ponto pra CCE!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Novas versões com processadores core i&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Agora resolvi comprar outro notebook. Escolhi o &lt;a href="http://www.cceinfo.com.br/index.php?IdPagina=2&amp;amp;Tipo=SPagina&amp;amp;ProdutoId=335&amp;amp;URL=produto-detalhe"&gt;T546P+&lt;/a&gt; da &lt;a href="http://www.cceinfo.com.br/"&gt;CCE&lt;/a&gt;. Muita coisa melhorou nessa versão. O problema da versão anterior, a placa de vídeo, foi resolvido. A CCE colocou uma Intel HD, que é a mesma placa que vem nos notebooks da Dell, não é uma monstruosidade, mas com relação à versão anterior parece até piada comentar. O acabamento foi melhorado, agora vem todo em black piano e com um teclado teclado mais moderno e muito melhor de digitar, com teclas mais espaçadas e mais sensíveis ao toque. Ponto pra CCE. A tela também foi melhorada, agora é de LED, pra aproveitar ainda mais a qualidade HD da placa de vídeo, com câmera e vem com saída HDMI. Ponto também! Não foram miseráveis com memória (4 GB) e nem com HD (640 GB o.O), outro diferencial foi a versão do Windows que veio junto: Windows 7 Home Premium (a maioria traz no máximo a Basic) e o Norton Security por 1 ano. A bateria está de parabéns! Fiz um teste e ela durou 2:30 horas de uso intenso! Ah, ainda vem com uma mochila Targus! CCE Wins!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;O que eu não gostei?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O Pad do mouse continua uma porcaria, o acabamento black piano é show, mas não precisava colocar ele no Pad do mouse né? Fail aqui. As conexões estão todas na lateral, se você conectar coisas na USB fica um trabolho só, mas não é tão crítico. O cooler é barulhento e roda o tempo todo, vamos dar uma colher de chá aqui, afinal de contas é um core i5 e deve esquentar pra caramba.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Conclusão&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Se você estiver pensando em comprar um Notebook com uma boa configuração, mas que o propósito não seja jogar eu recomendo fortemente comprar um CCE, você vai economizar bastante e vai ter uma boa máquina com uma boa durabilidade e de uma empresa nacional!&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="http://4.bp.blogspot.com/_OuEDANXoDOY/TROV2Cq_NsI/AAAAAAAAAG4/7DqUvGT70Po/s1600/101_0117.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://4.bp.blogspot.com/_OuEDANXoDOY/TROV2Cq_NsI/AAAAAAAAAG4/7DqUvGT70Po/s640/101_0117.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Notebook CCE, ótimo preço, ótima configuração.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-2238512130560056327?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/2238512130560056327/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=2238512130560056327' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2238512130560056327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2238512130560056327'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2010/12/notebook-cce-primeiras-impressoes.html' title='Notebook CCE: Primeiras Impressões'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_OuEDANXoDOY/TROV2Cq_NsI/AAAAAAAAAG4/7DqUvGT70Po/s72-c/101_0117.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-6849318600060085529</id><published>2010-12-14T06:41:00.001-08:00</published><updated>2010-12-26T05:18:29.185-08:00</updated><title type='text'>Rest with Jersey: Creating a Restful zip download funcionality.</title><content type='html'>&lt;div style="text-align: justify;"&gt;It's very simple create RESTFul Web Services with &lt;a href="http://jersey.java.net/"&gt;Jersey&lt;/a&gt;. I'll demonstrate how to create a simple one that provide a dowload of a compressed file.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;First, let's see how to compress a file in Java. If you wanna learn more about, then click &lt;a href="http://java.sun.com/developer/technicalArticles/Programming/compression/"&gt;here&lt;/a&gt;. I use &lt;a href="http://download.oracle.com/javase/7/docs/api/java/util/zip/ZipOutputStream.html"&gt;ZipOutputStream&lt;/a&gt; because I wanna send the zip file through &lt;a href="http://download.oracle.com/javase/7/docs/api/java/io/OutputStream.html"&gt;OutputStream&lt;/a&gt; provided by Servlet Response object, but you can send an existent zip file if you prefer. So let's go to the code:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_OuEDANXoDOY/TQe4ulOA24I/AAAAAAAAAGw/7YBq0S3Xvac/s1600/zip_method.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OuEDANXoDOY/TQe4ulOA24I/AAAAAAAAAGw/7YBq0S3Xvac/s1600/zip_method.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;This method is quite simple, It just writes the File parameter inside the&amp;nbsp;&lt;a href="http://download.oracle.com/javase/7/docs/api/java/util/zip/ZipOutputStream.html"&gt;ZipOutputStream&lt;/a&gt;, that encapsulates our &lt;a href="http://download.oracle.com/javase/7/docs/api/java/io/OutputStream.html"&gt;OutputStream&lt;/a&gt;, I didn't close the Stream because&amp;nbsp;I wanna compress several files.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Right now let's see how to create our Rest class:&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_OuEDANXoDOY/TQetRcbkNqI/AAAAAAAAAGs/2w4IntTqM8M/s1600/rest_method.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OuEDANXoDOY/TQetRcbkNqI/AAAAAAAAAGs/2w4IntTqM8M/s1600/rest_method.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The main points are the annotation @Produces and the header &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html"&gt;Content-Disposition&lt;/a&gt;. The first one&amp;nbsp;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;is used to specify the MIME media types of representations a resource can produce and send back to the client, in our example we will send a zip file back to the client. The header&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html"&gt;Content-Disposition&lt;/a&gt;&amp;nbsp;allow us to set the file name for the client, if you don't wanna use it the file name will be the same of the rest method name.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;After add all desired files we need flush and close the stream and return an 'ok' response, if something goes wrong we send an INTERNAL_SERVER_ERROR status response. When the user requests the resource (like this:&amp;nbsp;&lt;a href="http://localhost:8084/jersey-sample/resources/hello/message"&gt;http://localhost:8084/jersey-sample/resources/downloader/downloadall/&lt;/a&gt;&amp;nbsp;he will receive a zip file to download and the suggested name will be the same configured in the header&amp;nbsp;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html"&gt;Content-Disposition&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It's just for now. Until the next post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-6849318600060085529?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/6849318600060085529/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=6849318600060085529' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/6849318600060085529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/6849318600060085529'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2010/12/rest-with-jersey-creating-restful-zip.html' title='Rest with Jersey: Creating a Restful zip download funcionality.'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_OuEDANXoDOY/TQe4ulOA24I/AAAAAAAAAGw/7YBq0S3Xvac/s72-c/zip_method.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-5222751477659756827</id><published>2010-06-30T16:10:00.000-07:00</published><updated>2010-06-30T16:10:20.889-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tomcat 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Servlet'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Tomcat 7 foi lançado! Vejas as novidades.</title><content type='html'>&lt;div style="text-align: justify;"&gt;&amp;nbsp;A&amp;nbsp;&lt;a href="http://tomcat.apache.org/tomcat-7.0-doc/changelog.html"&gt;apache&lt;/a&gt;&amp;nbsp;lançou oficialmente a versão 7 do&amp;nbsp;&lt;a href="http://tomcat.apache.org/"&gt;tomcat&lt;/a&gt;, que recentemente completou 10 anos de criação, o que faz dele um projeto bastante maduro, apesar de apenas 7 versões. No mundo open source é comum não termos milhares de versões, afinal de contas esse negócio de mil versões tem um apelo meramente comercial.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Vale a pena conferir a nova versão, que já oferece suporte à especificação de servlets 3.0 e jsp 2.2. Veja&amp;nbsp;&lt;a href="http://tomcat.apache.org/tomcat-7.0-doc/changelog.html"&gt;aqui&lt;/a&gt;&amp;nbsp;tudo que mudou nessa versão e se quiser degustar a versão é só fazer o&amp;nbsp;&lt;a href="http://tomcat.apache.org/download-70.cgi"&gt;download aqui&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-5222751477659756827?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/5222751477659756827/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=5222751477659756827' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5222751477659756827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5222751477659756827'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2010/06/tomcat-7-foi-lancado-vejas-as-novidades.html' title='Tomcat 7 foi lançado! Vejas as novidades.'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-2222316489639598214</id><published>2010-05-22T11:02:00.000-07:00</published><updated>2010-06-19T08:09:31.240-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSP'/><category scheme='http://www.blogger.com/atom/ns#' term='SCWD'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Tags'/><title type='text'>Custom Tags: Exemplo Rápido</title><content type='html'>&lt;div style="text-align: justify;"&gt;Fala javeiros! Neste post iremos ver um dos assuntos mais &lt;s&gt;chatos&lt;/s&gt; complexos da prova de SCWCD: Custom Tags. E não tô falando de usar JSTL não... a gente vai aprender como construir nossa própria JSTL (guardadas as devidas proporções claro).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Neste primeiro post não vamos falar muito. Queremos que você, leitor, veja todo o processo de construção de uma custom tag. Não fiquei preocupado por não entender quase nada das tags, atente apenas a sequência da construção. Espero que gostem do post! Hands on!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A construção de custom tags envolve basicamente 3 passos:&lt;/div&gt;&lt;br /&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;Criar uma classe que implemente a interface Tag ou estender uma de suas implementações da API.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Criar um arquivo .tld que definirá a sua tag.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Mapear a tag no descritor da aplicação (web.xml).&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;Para o nosso exemplo iremos construir uma tag que mostra a data atual no formato dd/mm/yyyy hh:mm:ss. É um exemplo bem simples, porém perfeitamente extensível e didático.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Para o primeiro passo nós iremos utilizar a classe&amp;nbsp;javax.servlet.jsp.tagext.BodyTagSupport. Esta classe é fornecida pela própria API e facilita bastante o trabalho de construção de tags, bom mas isso não nos interessa no momento, o importante é saber que temos que estedê-la.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Na figura abaixo podemos ver a implementação da nossa classe principal.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_OuEDANXoDOY/S_gYxZipPkI/AAAAAAAAAEo/BK7aeS8Qgxc/s1600/tagClass1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="416" src="http://1.bp.blogspot.com/_OuEDANXoDOY/S_gYxZipPkI/AAAAAAAAAEo/BK7aeS8Qgxc/s640/tagClass1.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para o segundo passo iremos definir a nossa tag no arquivo mytags.tld.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Veja como fazer isso na figura abaixo:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_OuEDANXoDOY/S_gZh7chYiI/AAAAAAAAAEw/iLlI0VSE354/s1600/mytags1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://3.bp.blogspot.com/_OuEDANXoDOY/S_gZh7chYiI/AAAAAAAAAEw/iLlI0VSE354/s640/mytags1.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Por último, temos que mapear a nossa tag no arquivo web.xml de nossa aplicação.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_OuEDANXoDOY/S_gaL3kQhsI/AAAAAAAAAE4/Ixp5hFa-I0g/s1600/webXml5.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="241" src="http://2.bp.blogspot.com/_OuEDANXoDOY/S_gaL3kQhsI/AAAAAAAAAE4/Ixp5hFa-I0g/s640/webXml5.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pronto! Nossa primeira tag foi construída. Simples, não? Apesar de ser chamada de Simple Tags, construir tags não tem nada de simples, são muitas classes e interfaces possíveis de estender, o retorno dos métodos é feito através de constantes (chato de memorizar) e sem contar que temos que criar um arquivo xml e alterar o descritor e cada um com várias possíveis tags para memorizar. Mas temos que estudar né, fazer o que.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Em posts seguintes veremos mais detalhes sobre a construção de tags, agora pra terminar de vez este post, vejamos como fica a nossa tag em uma página JSP e qual o seu resultado após a execução da página.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_OuEDANXoDOY/S_gbgBB4gWI/AAAAAAAAAFA/gQnhjWS7CbM/s1600/jsp1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="46" src="http://3.bp.blogspot.com/_OuEDANXoDOY/S_gbgBB4gWI/AAAAAAAAAFA/gQnhjWS7CbM/s400/jsp1.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ao executar esta JSP devemos obter um resultado parecido com o abaixo:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;Hoje são 22/05/2010 14:58:30&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;Até o próximo post!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-2222316489639598214?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/2222316489639598214/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=2222316489639598214' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2222316489639598214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2222316489639598214'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2010/05/custom-tags-exemplo-rapido.html' title='Custom Tags: Exemplo Rápido'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OuEDANXoDOY/S_gYxZipPkI/AAAAAAAAAEo/BK7aeS8Qgxc/s72-c/tagClass1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-4521788787289669794</id><published>2010-05-15T13:11:00.000-07:00</published><updated>2010-05-15T13:12:38.282-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servlet'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='SCWD'/><title type='text'>Servlet API: Utilizando parâmetros de incialização</title><content type='html'>&lt;div style="text-align: justify;"&gt;Olá Javeiros! Dando continuidade ao nosso estudo para a certificação SCWCD veremos neste post rápido como fazer para utilizar parâmetros de inicialização em nossa aplicação e também em um Servlet específico.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;É possível adicionar parâmetros que são acessíveis por toda a aplicação. Muitos frameworks web fazem uso desse recurso. Digamos que a aplicação necessite enviar um email para o administrador reportando erros, se colocarmos o email do administrador no código da aplicação e este email sofra alguma mudança, será necessário gerar um novo arquivo de deploy da aplicação. Este problema pode ser resolvido adicionando um parâmetro de inicialização no arquivo descritor (web.xml), e dessa forma ele estará disponível para toda a aplicação.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Digite o trecho a seguir entre as tags web-app do seu arquivo descritor.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="http://3.bp.blogspot.com/_OuEDANXoDOY/S-71-Fg-sII/AAAAAAAAAEI/Thm_eNmEu1c/s1600/webXml3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="132" src="http://3.bp.blogspot.com/_OuEDANXoDOY/S-71-Fg-sII/AAAAAAAAAEI/Thm_eNmEu1c/s400/webXml3.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A API de Servlet disponibiliza, através da interface ServletContext, métodos para acessar os parâmetros de inicialização. Existem dois métodos para tal:&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;Enumeration getInitParameterNames: Este método retorna uma enumeration contendo todos os nomes de parâmetros disponíveis no web.xml. Ele é muito útil quando não se sabe o nome do parâmetro.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;String getInitParameter(String name): Este método retorna o valor (param-value) do parâmetro de inicialização. Vale lembrar que sempre é retornado uma String e nunca outro tipo como Integer, Long, etc.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;No trecho de código abaixo podemos ver o uso desses métodos a partir de um servlet.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="http://2.bp.blogspot.com/_OuEDANXoDOY/S-76-afcA8I/AAAAAAAAAEQ/hqCWWIDwyhU/s1600/servlet1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="185" src="http://2.bp.blogspot.com/_OuEDANXoDOY/S-76-afcA8I/AAAAAAAAAEQ/hqCWWIDwyhU/s400/servlet1.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Quando o servlet for acessado ele irá exibir todos os parâmetros de inicialização disponíveis.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;É possível também criar parâmetros de inicialização para Servlets, a diferença é que estes serão visíveis somente para os servlets onde foram declarados. O conceito é basicamente igual ao anterior, porém devemos atentar para as tags que criam cada um deles. No exemplo anterior nós colocamos a tag context-param na raiz do nosso descritor, já para os parâmetros de servlets iremos utilizar a tag init-param e esta deve ser declarada sobre a tag servlet (tag de declaração de um servlet).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O trecho abaixo mostra a criação de um parâmetro para um Servlet.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_OuEDANXoDOY/S-79OtcbbVI/AAAAAAAAAEY/xX9-jAAgb-g/s1600/webXml4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="131" src="http://2.bp.blogspot.com/_OuEDANXoDOY/S-79OtcbbVI/AAAAAAAAAEY/xX9-jAAgb-g/s400/webXml4.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Veja que a única diferença para o exemplo anterior é a tag init-param. Outra mudança também é na forma como o parâmetro é acessado. Na verdade a mudança é no objeto em que ela é acessado, não mais o ServletContext e sim o próprio Servlet.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Vejamos abaixo o código que acessa os parâmetros do servlet:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_OuEDANXoDOY/S-7_WfB213I/AAAAAAAAAEg/g5yxNYaYgQw/s1600/servlet2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="185" src="http://4.bp.blogspot.com/_OuEDANXoDOY/S-7_WfB213I/AAAAAAAAAEg/g5yxNYaYgQw/s400/servlet2.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Observe que o método getInitiParameterNames é chamado diretamente de Servlet e não mais do contexto como no exemplo anterior.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Então é isso pessoal. Espero que tenham gostado do post! Até o próximo então.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-4521788787289669794?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/4521788787289669794/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=4521788787289669794' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/4521788787289669794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/4521788787289669794'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2010/05/utilizando-parametros-de-incializacao.html' title='Servlet API: Utilizando parâmetros de incialização'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OuEDANXoDOY/S-71-Fg-sII/AAAAAAAAAEI/Thm_eNmEu1c/s72-c/webXml3.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-1703783988769723025</id><published>2010-05-09T06:48:00.000-07:00</published><updated>2010-05-15T12:17:46.166-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servlet'/><category scheme='http://www.blogger.com/atom/ns#' term='Listener'/><category scheme='http://www.blogger.com/atom/ns#' term='SCWD'/><title type='text'>Servlet Listeners - ServletContextAttributeListener</title><content type='html'>&lt;div style="text-align: justify;"&gt;Olá Javeiros! No &lt;a href="http://www.javeiro.com/2010/05/servlet-listeners-servletcontextlistene.html"&gt;post anterior&lt;/a&gt;&amp;nbsp;começamos a falar sobre servlet listeners. Vamos continuar a série e agora falaremos sobre o listener de atributos de contexto ou ServletContextAttributeListener. Este listener é notificado quando algum atributo é adicionado, removido ou alterado no contexto da aplicação.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A criação deste listener é semelhante ao criamos anteriormente. Teremos que implementar a interface java.servlet.ServletContextAttributeListener e seus três métodos:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;void attributeAdded(ServletContextAttributeEvent): este método é chamado automaticamente sempre que um atributo for adicionado no ServletContext e através do objeto&amp;nbsp;ServletContextAttributeEvent podemos obter informações como: o nome do atributo adicionado, o seu valor, o objeto em que o evento inicialmente ocorreu e ainda o próprio ServletContext.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;void attributeRemoved(ServletContextAttributeEvent): este método é chamado sempre que um atributo for removido do contexto.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;attributeReplaced(ServletContextAttributeEvent): é chamado sempre que um atributo tiver o seu valor alterado.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Vejamos um exemplo prático onde exibimos o nome de atributo e o seu valor para cada evento.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_OuEDANXoDOY/S-W-OaUK5xI/AAAAAAAAAD4/YoJfjNlDoO0/s1600/listenerAttributeContext.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"&gt;&lt;img border="0" height="250" src="http://3.bp.blogspot.com/_OuEDANXoDOY/S-W-OaUK5xI/AAAAAAAAAD4/YoJfjNlDoO0/s400/listenerAttributeContext.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A configuração do listener é feita da mesma forma que anterior. Vale lembrar que não é possível declarar várias classes listener dentro da tag &lt;listener&gt;, é preciso criar um conjunto pra cada listener, como vemos abaixo:&lt;/listener&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_OuEDANXoDOY/S-W--Q8oAJI/AAAAAAAAAEA/h3G8JpkSplM/s1600/webXml2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"&gt;&lt;img border="0" height="148" src="http://1.bp.blogspot.com/_OuEDANXoDOY/S-W--Q8oAJI/AAAAAAAAAEA/h3G8JpkSplM/s400/webXml2.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Aprendemos mais um listener hoje! Boa sorte nos estudos e até o próximo post!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-1703783988769723025?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/1703783988769723025/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=1703783988769723025' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/1703783988769723025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/1703783988769723025'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2010/05/servlet-listeners-servletcontextattribu.html' title='Servlet Listeners - ServletContextAttributeListener'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OuEDANXoDOY/S-W-OaUK5xI/AAAAAAAAAD4/YoJfjNlDoO0/s72-c/listenerAttributeContext.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-5023603343788960455</id><published>2010-05-08T08:18:00.000-07:00</published><updated>2010-05-08T12:36:22.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servlet'/><category scheme='http://www.blogger.com/atom/ns#' term='Listener'/><category scheme='http://www.blogger.com/atom/ns#' term='SCWD'/><title type='text'>Servlet Listeners - ServletContextListener</title><content type='html'>&lt;div style="text-align: justify;"&gt;Olá Javeiros de plantão! Continuando nossa sequência de posts sobre o exame para SCWCD vamos falar hoje sobre Servlet Listeners. O exame requer que o candidato saiba criar e configurar listeners para os escopos do ciclo de vida de uma aplicação, listeners de atributos e também serem capazes de escolher um filtro apropriado para um determinado cenário. Iremos ver como funcionam os listeners cobrados no exame.&amp;nbsp;Neste artigo falaremos especificamente do listener de contexto (criação ou destruição).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Suponhamos que uma aplicação web necessite de alguns recursos para que esta possa funcionar corretamente. É importante que estes recursos esteja disponíveis assim que a aplicação esteja no "ar", mas como saber se aplicação já foi carregada pelo container? E como garantir que os recursos serão liberados após a aplicação ser desativada? Para resolver o problema descrito neste cenário a API de Servlet disponibiliza um listener de contexto. Através dele e possível sabermos o momento em que a aplicação está sendo carregada ou destruída.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;O processo de criação de um listener resume-se basicamente em implementar a interface do listener desejado e fazer a configuração do mesmo no descritor da aplicação (web.xml). Para esse primeiro post iremos utilizar a interface &lt;i&gt;&lt;b&gt;javax.servlet.ServletContextListener&lt;/b&gt;&lt;/i&gt;. Esta interface deve ser utilizada para a criação de listeners de contexto e ela possui dois métodos que devem ser sobrescritos pela classe implementadora. Os dois métodos são:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;i&gt;void contextInitialized (ServletContextEvent)&lt;/i&gt;: Este método é executado no momento em que a aplicação é carregada pelo container, através do parâmetro ServletContextEvent, que é injetado automaticamente pelo container, é possível obter o objeto ServletContext, onde poderemos adicionar, remover ou capturar atributos ou fazer a leitura de parâmetros de inicialização. ATENÇÃO: este método só é chamado UMA ÚNICA vez durante o toda a vida da aplicação.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;i&gt;void&amp;nbsp;contextDestroyed (ServletContextEvent):&lt;/i&gt; Este método é executado no momento em que aplicação está sendo destruída (parada) pelo container. Assim como o método de inicialização este método também só é executado uma vez.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Abaixo temos um exemplo simples de como criar um listener de contexto. No nosso exemplo apenas adicionamos um atributo contendo o momento em que aplicação subiu e podemos usar este atributo para saber quanto tempo a aplicação ficou ativa. O exemplo não é dos melhores, mas você aprenderá com ele que é capaz adicionar atributos que serão visíveis por toda a aplicação no momento seguinte à subida da mesma. Quando a aplicação for destruída o sistema irá exibir uma mensagem contendo o tempo total em segundos que a aplicação ficou no ar.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Primeiramente vamos criar a classe que irá implementar a interface&amp;nbsp;&lt;i&gt;ServletContextListener&lt;/i&gt; e vamos também implementar seus dois métodos:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_OuEDANXoDOY/S-W9I_dh8KI/AAAAAAAAADw/C3Ft9njsGAQ/s1600/listenerContext.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="http://4.bp.blogspot.com/_OuEDANXoDOY/S-W9I_dh8KI/AAAAAAAAADw/C3Ft9njsGAQ/s400/listenerContext.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Agora precisamos configurar o nosso listener no arquivo descritor da aplicação, que é o arquivo web.xml da aplicação. Vejamos abaixo como configurar o nosso listener.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_OuEDANXoDOY/S-WAOw2FTFI/AAAAAAAAADo/u96A1eWzZVU/s1600/listenerContextWebXml.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="122" src="http://4.bp.blogspot.com/_OuEDANXoDOY/S-WAOw2FTFI/AAAAAAAAADo/u96A1eWzZVU/s400/listenerContextWebXml.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A configuração de um listener é bastante simples e resume-se em declarar a classe que implementa a interface de listener. A aplicação irá carregar os listeners na ordem em que eles aparecerem no arquivo web.xml.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Espero que este post seja útil de alguma forma pra você! Até o próximo post!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-5023603343788960455?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/5023603343788960455/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=5023603343788960455' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5023603343788960455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5023603343788960455'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2010/05/servlet-listeners-servletcontextlistene.html' title='Servlet Listeners - ServletContextListener'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_OuEDANXoDOY/S-W9I_dh8KI/AAAAAAAAADw/C3Ft9njsGAQ/s72-c/listenerContext.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-6647439496745814310</id><published>2010-05-02T11:03:00.000-07:00</published><updated>2010-05-02T11:06:29.587-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Function'/><category scheme='http://www.blogger.com/atom/ns#' term='SCWD'/><category scheme='http://www.blogger.com/atom/ns#' term='EL'/><title type='text'>Criando funções JSP com EL</title><content type='html'>&lt;div style="text-align: justify;"&gt;Galera, pra quem vai tirar (ou não) a certificação SCWCD 5.0, um dos objetivos do exame é saber se o candidato sabe criar funções com EL (Expression Language) para serem usadas em suas páginas JSP. A criação de funções EL serve para que você pense duas vezes antes de usar os malditos scriptlets em suas páginas JSP (sério, não faça isso por favor).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O processo envolve basicamente quatro passos:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Criação de uma classe Java que conterá os métodos que você irá utilizar nas suas páginas JSPs.&lt;/li&gt;&lt;li&gt;Criação do arquivo tld (Tag library descriptor) que conterá o mapeamento entre o método Java e sua versão XML.&lt;/li&gt;&lt;li&gt;Mapeamento da sua tld no web.xml (isso é opcional... mas é legal utilizar)&lt;/li&gt;&lt;li&gt;Declaração da taglib na sua página JSP.&lt;/li&gt;&lt;/ol&gt;Vamos criar um exemplo simples para explorar os passos acima. Criaremos uma função que calcula a raiz quadrada de um número. Mãos à obra.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Passo 1&lt;/b&gt;: Vamos criar uma classe chamada &lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;functions.MyMath&lt;/span&gt;&lt;/i&gt;&lt;/b&gt; e nela vamos criar um método &lt;i&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;square &lt;/span&gt;&lt;/i&gt;que será responsável pelo cálculo da raiz quadrada. Precisamos de alguns cuidados neste momento. A especificação diz que esta classe deve ser pública e os métodos que serão acessados pelas páginas JSPs devem ser públicos e estáticos. Dito isto, vejamos como ficou a nossa classe:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_OuEDANXoDOY/S922qEqGBFI/AAAAAAAAAC4/MWL5rga3o5k/s1600/classe.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="112" src="http://2.bp.blogspot.com/_OuEDANXoDOY/S922qEqGBFI/AAAAAAAAAC4/MWL5rga3o5k/s320/classe.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Passo 2&lt;/b&gt;: Vamo criar o arquivo tld. Este arquivo permitirá o mapeamento entre o nosso método java uma função XML que a EL possa executar (EL não permite a invocação de métodos Java). Uma observação importante é que caso o arquivo tld esteja sobre o diretório WEB-INF da sua aplicação ele é automaticamente reconhecido por ela, caso esteja em outro lugar você terá que fazer o passo seguinte.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_OuEDANXoDOY/S929FVi3d4I/AAAAAAAAADQ/xvjYL0SgU1Y/s1600/arquivoTLD.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="142" src="http://4.bp.blogspot.com/_OuEDANXoDOY/S929FVi3d4I/AAAAAAAAADQ/xvjYL0SgU1Y/s400/arquivoTLD.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Eu odeio quando as coisas não seguem um padrão nesses malditos arquivos xml... deixando a ira de lado, notem que o atributo que mapeia o nome da função &lt;b&gt;não &lt;/b&gt;é &lt;i&gt;function-name&lt;/i&gt; (o que faria muito mais sentido) e sim &lt;i&gt;name&lt;/i&gt;, ele será usado para chamar de fato o nosso método java, você não precisa colocar o mesmo nome do método, mas fica melhor dessa forma. Outras dicas importantes são que em &lt;i&gt;function-clas&lt;/i&gt;s deve ser colocado o nome completo da classe (com o pacote, conhecido como&amp;nbsp;&lt;i&gt;full qualified name&lt;/i&gt;) e em &lt;i&gt;function-signature&lt;/i&gt; os tipos do retorno e da entrada devem ser também completos. Você pode usar todos os tipos básicos de Java e incluindo os wrappers sem necessidade de importação nas páginas JSP, caso não seja um desses tipos você terá que fazer a importação.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Passo 3&lt;/b&gt;: Este passo é opcional caso o seu arquivo tld esteja sobre o diretório /WEB-INF da aplicação, mas eu recomendo fortemente que você o faça. Por quê? Bem, digamos que um belo dia você resolve mover ou mudar o nome do arquivo... imagine só ter que sair alterando todas as páginas JSPs que fazem uso do arquivo... chato né? Então largue a preguiça de lado e coloque o conteúdo abaixo no arquivo &lt;i&gt;web.xml:&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_OuEDANXoDOY/S927U_QovTI/AAAAAAAAADI/_VUGsW-txIA/s1600/webXml.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="60" src="http://3.bp.blogspot.com/_OuEDANXoDOY/S927U_QovTI/AAAAAAAAADI/_VUGsW-txIA/s400/webXml.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Passo 4&lt;/b&gt;: Por fim precisamos declarar nossa função na página na qual desejamos chamá-la. O processo é bastante simples, principalmente se você já tiver utilizado JSTL. Vejamos como fica a nossa página JSP:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_OuEDANXoDOY/S929XgO3ZlI/AAAAAAAAADY/hYT6QvvUdAM/s1600/paginaJSP.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="48" src="http://1.bp.blogspot.com/_OuEDANXoDOY/S929XgO3ZlI/AAAAAAAAADY/hYT6QvvUdAM/s400/paginaJSP.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Se você fez tudo direitinho, ao executar a página acima será exibida a mensagem "A raiz quadrada de 25 é 5.0". Uma última coisa a dizer é sobre o argumento &lt;i&gt;uri&lt;/i&gt;, apesar de ele está no formato absoluto (com protocolo etc) isto não significa que a JSP irá tentar acessar este endereço, apenas ela irá procurar no descritor (web.xml) se alguma taglib declarada ali combina com esta uri informada).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Bom galera, isso é tudo! Espero que tenham gostado da dica e até o próximo post!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-6647439496745814310?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/6647439496745814310/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=6647439496745814310' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/6647439496745814310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/6647439496745814310'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2010/05/criando-funcoes-jsp-com-el.html' title='Criando funções JSP com EL'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OuEDANXoDOY/S922qEqGBFI/AAAAAAAAAC4/MWL5rga3o5k/s72-c/classe.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-2860143007013806980</id><published>2009-11-28T04:56:00.000-08:00</published><updated>2009-11-28T05:29:44.538-08:00</updated><title type='text'>Dica 4: Empacotando uma aplicação em um Jar</title><content type='html'>&lt;div style="text-align: justify;"&gt;Uma das dificuldades que os programadores de linguagem &lt;a href="http://pt.wikipedia.org/wiki/RAD"&gt;RAD&lt;/a&gt; tem quando vem para o Java é com relação ao tal do 'executável'. Quando você cria um programa em Java não é gerado um arquivo .exe como na maioria das linguagens. Em java dizemos que uma classe é executável se ela tiver um método main ou ainda se ela for um applet o método init. O processo de criação de executável se chama: empacotamento da aplicação. Que é exatamente colocar a aplicação dentro de um arquivo de extensão .jar. Nesta dicas vamos ver como fazer para empacotar uma aplicação Java.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Vamos supor que nossas classes estão em uma pasta chamada HelloWorld e nela temos uma classe chamada HelloWorld.java e seu bytecode compilado HelloWorld.class. Esta classe simplesmente exibe uma mensagem de boas vindas pro usuário. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;Outra coisa importante para um arquivo .jar é o arquivo de manifesto. Esse arquivo vai fornecer informações importantes para a execução do programa como classpath e também a main class do seu programa. A partir do Java 6 temos um comando novo onde podemos informar diretamente no prompt qual é a main class da aplicação, basta então digitarmos isso:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#000099;"&gt;jar cvfe HelloWorld.jar HelloWorld .*class&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Se você viu algo como:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;i&gt;added manifest&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;i&gt;adding: HelloWorld.class(in = 395) (out= 292)(deflated 26%)&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Significa que deu tudo certo. Para executar o arquivo bastar dar um clique duplo nele (caso o Java esteja configurando corretamente no seu classpath do SO)  ou pode ainda usar o comando abaixo que tem o mesmo resultado:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#000099;"&gt;java -jar HelloWorld.jar&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Você pode ver mais informações sobre arquivos .jar &lt;a href="http://java.sun.com/docs/books/tutorial/deployment/jar/index.html"&gt;neste link&lt;/a&gt;. Um abraço e até a próxima dica.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-2860143007013806980?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/2860143007013806980/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=2860143007013806980' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2860143007013806980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2860143007013806980'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2009/11/dica-4-empacotando-uma-aplicacao-em-um.html' title='Dica 4: Empacotando uma aplicação em um Jar'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-4358425126014030339</id><published>2009-11-08T05:19:00.000-08:00</published><updated>2009-11-08T06:12:08.010-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='dica'/><category scheme='http://www.blogger.com/atom/ns#' term='zip'/><title type='text'>Dica 3: Descompactando Arquivos Zip</title><content type='html'>&lt;div&gt;&lt;div style="text-align: justify; "&gt;Essa dica é baseada nos exemplos do &lt;a href="http://java.sun.com/developer/technicalArticles/Programming/compression/"&gt;deste artigo&lt;/a&gt; da sun. Lá você pode conferir outros exemplos em inglês. Não é algo comum, mas certamente muitas pessoas já precisaram descompactar um arquivo zipado em uma aplicação. Essa tarefa tornou-se mais fácil depois que o Java disponibilizou as classes do pacote java.util.zip.*. A leitura do arquivo zip é simples. Utilizamos a API de I/O do Java. Precisamos de um Buffer para leitura e um para escrita e também das classes ZipFile, que encapsula o arquivo Zip e a classe ZipEntry que encapsula um arquivo dentro do zip. A classe ZipFile fornece um método que retorna os arquivos que estão contidos dentro do zip, basta percorremos o enum e ler cada um dos arquivos. É possível ainda saber se o 'arquivo' que estamos lendo é um diretório através do método isDirectory, caso contrário deve ser utilizada uma outra abordagem (não mostramos aqui), com o Stream podemos então escrever os arquivos fora do zip.&lt;/div&gt;&lt;div style="text-align: justify; "&gt;Na imagem abaixo temos o código fonte de exemplo.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OuEDANXoDOY/SvbRcfDUIHI/AAAAAAAAACU/i1ddDKiyelg/s1600-h/imagem.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 333px; height: 400px;" src="http://2.bp.blogspot.com/_OuEDANXoDOY/SvbRcfDUIHI/AAAAAAAAACU/i1ddDKiyelg/s400/imagem.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5401735090379432050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Até a próxima dica!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-4358425126014030339?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/4358425126014030339/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=4358425126014030339' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/4358425126014030339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/4358425126014030339'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2009/11/dica-3-descompactando-arquivos-zip.html' title='Dica 3: Descompactando Arquivos Zip'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OuEDANXoDOY/SvbRcfDUIHI/AAAAAAAAACU/i1ddDKiyelg/s72-c/imagem.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-4330151466337450489</id><published>2009-11-02T13:36:00.000-08:00</published><updated>2009-11-02T13:50:58.659-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='dica'/><category scheme='http://www.blogger.com/atom/ns#' term='i/o'/><title type='text'>Dica 2: Escrevendo em um arquivo com Java</title><content type='html'>&lt;div style="text-align: justify;"&gt;Na &lt;a href="http://javeiro.blogspot.com/2009/11/dica-1-lendo-arquivo-com-java.html"&gt;dica 1&lt;/a&gt; vimos como fazer pra ler um arquivo utilizando Java. Nesta dica veremos como escrever conteúdo em um arquivo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O processo de escrita em arquivos é muito semelhante ao de leitura, basicamente as classes/interfaces que antes terminavam com Reader agora terminam com Writer. O uso buffer é opcional para o caso de escrita, pois a classe FileWriter fornece método para escrita de strings diretamente no arquivo (a classe FileReader só permite leitura em bytes). &lt;/div&gt;&lt;div style="text-align: justify;"&gt;O código abaixo mostra como escrever em um arquivo em Java.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OuEDANXoDOY/Su9Tw-fyr4I/AAAAAAAAACI/_ZAom2XkFMM/s1600-h/eclipse.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 224px;" src="http://3.bp.blogspot.com/_OuEDANXoDOY/Su9Tw-fyr4I/AAAAAAAAACI/_ZAom2XkFMM/s400/eclipse.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5399626579115683714" /&gt;&lt;/a&gt;&lt;br /&gt;É isso aí pessoal! Até a próxima dica.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-4330151466337450489?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/4330151466337450489/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=4330151466337450489' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/4330151466337450489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/4330151466337450489'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2009/11/dica-2escrevendo-em-um-arquivo-com-java.html' title='Dica 2: Escrevendo em um arquivo com Java'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OuEDANXoDOY/Su9Tw-fyr4I/AAAAAAAAACI/_ZAom2XkFMM/s72-c/eclipse.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-453192729856899005</id><published>2009-11-01T13:12:00.001-08:00</published><updated>2009-11-02T13:47:32.339-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='dica'/><category scheme='http://www.blogger.com/atom/ns#' term='i/o'/><title type='text'>Dica 1: Lendo Arquivo com Java</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;div style="text-align: justify;"&gt;Salve javeiros de plantão! Depois de um tempão fora do ar por causa dos estudos, vamos voltando aos poucos a postar no javeiro.&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Irei começar uma série de dicas rápidas em Java, ideal para aqueles que não querem perder tempo lendo um monte de coisa :D.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A primeira dica é como ler um arquivo em Java. A API de I/O do Java é bastante rica e também um pouco chatinha de trabalhar, são muitas classes que se combinam para executar tarefas. A cada versão nova do Java temos vista diversas melhorias nessas APIs. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;O código abaixo mostra como fazer a leitura de um arquivo em Java.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://2.bp.blogspot.com/_OuEDANXoDOY/Su9QdTy3KRI/AAAAAAAAACA/kAfefeNLZb0/s400/eclipse.PNG" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 234px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5399622942700546322" /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Essa é uma das formas de ler um arquivo em Java. Espero ter ajudado. Até a próxima dica!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-453192729856899005?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/453192729856899005/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=453192729856899005' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/453192729856899005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/453192729856899005'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2009/11/dica-1-lendo-arquivo-com-java.html' title='Dica 1: Lendo Arquivo com Java'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OuEDANXoDOY/Su9QdTy3KRI/AAAAAAAAACA/kAfefeNLZb0/s72-c/eclipse.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-2125719771008113298</id><published>2009-02-10T14:51:00.000-08:00</published><updated>2009-02-10T15:02:53.740-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Netbeans'/><title type='text'>Usando os atalhos do Eclipse no Netbeans</title><content type='html'>&lt;div style="text-align: justify;"&gt;Essa dica é muito boa para aqueles que desejam começar a usar o Netbeans mas estão acostumados com as teclas de atalho do eclipse, e que venhamos e convenhamos são uma verdadeira maravilha do eclipse ide. Você poderá usar a maioria dos atalhos do eclipse no Netbeans. É infelizmente não estão todos mapeados, mas para usuários iniciantes será como se eles estivem usando o eclipse, só que na verdade estarão usando uma ide melhor com os atalhos da anterior (vão me estrangular por esse comentário :D ).&lt;br /&gt;Então vamos lá. Para isso acesse o menu Tools --&gt; Options. Aí você verá a tela abaixo:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OuEDANXoDOY/SZIG-qWXAaI/AAAAAAAAABY/jIhlrSuzu1s/s1600-h/options.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 249px;" src="http://2.bp.blogspot.com/_OuEDANXoDOY/SZIG-qWXAaI/AAAAAAAAABY/jIhlrSuzu1s/s320/options.PNG" alt="" id="BLOGGER_PHOTO_ID_5301307384958222754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Em profile escolha: Eclipse. (tem várias outras opções se você quiser se divertir).&lt;br /&gt;Prontinho. Agora é só usufruir dos benefícios da única IDE que você precisa com os atalhos da sua IDE anterior.&lt;br /&gt;Até o próximo post!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-2125719771008113298?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/2125719771008113298/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=2125719771008113298' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2125719771008113298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2125719771008113298'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2009/02/usando-os-atalhos-do-eclipse-no.html' title='Usando os atalhos do Eclipse no Netbeans'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OuEDANXoDOY/SZIG-qWXAaI/AAAAAAAAABY/jIhlrSuzu1s/s72-c/options.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-2225177692840707549</id><published>2009-01-30T14:01:00.000-08:00</published><updated>2011-02-19T05:43:26.140-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Netbeans'/><title type='text'>Netbeans 7 disponível para download</title><content type='html'>&lt;div style="text-align: justify;"&gt;Já está disponível o download da versão 7.0 do Netbeans. Ainda é um beta, mas pode ter certeza que vale a pena testar. As últimas versões da IDE que carregar o slogan: A única IDE que você precisa, vêm cada vez mais fazendo jus ao seu slogan. O Netbeans tem ganhado espaço entre os desenvolvedores Java, especialmente por sua grande gama de funcionalidades disponíveis, estabilidade e integração com diversos frameworks como: Jsf, Hibernate, Spring e etc. Em breve traremos mais novidades sobre a nova versão da IDE.&lt;br /&gt;Enquanto isso você pode clicar &lt;a href="http://dlc.sun.com.edgesuite.net/netbeans/7.0/beta2/"&gt;aqui&lt;/a&gt; e começar a testar a nova versão, que está quentinha ainda!!!&lt;br /&gt;Até o nosso próximo post!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-2225177692840707549?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/2225177692840707549/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=2225177692840707549' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2225177692840707549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2225177692840707549'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2009/01/netbeans-7-disponivel-para-download.html' title='Netbeans 7 disponível para download'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-8902081757738299403</id><published>2009-01-29T07:55:00.000-08:00</published><updated>2009-01-29T08:06:06.267-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firebird'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='JPA'/><title type='text'>Firebird + JPA e o Problema com o Generator</title><content type='html'>&lt;div style="text-align: justify;"&gt;Resolvi fazer este post depois de muito sofrer para integrar o JPA com o Firebird. O grande problema que eu encontrei foi com o esquema de geração de ids do firebird. Firebird usa um esquema chamado de Generator, é muito parecido com esquema de sequences de bancos como oracle. Então vamos à solução do problema. Abaixo temos a nossa entidade Aluno, com as anotações do JPA. (omitimos os imports e os get/set, pois o foco é no generator.&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 51);"&gt;@Entity&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 51);"&gt;@Table(name="TB_BAIRRO")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 51);"&gt;@SequenceGenerator(name="GEN_TB_BAIRRO",sequenceName="GEN_TB_BAIRRO_ID")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 51);"&gt;public class Bairro extends BaseEntity {&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 51);"&gt;       @Id&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 51);"&gt;       @Column(name="BAIRRO_SEQ")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 51);"&gt;       @GeneratedValue(strategy=GenerationType.AUTO,generator="GEN_TB_BAIRRO")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 51);"&gt;       private Integer id;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 51);"&gt;    &lt;br /&gt;   @Column(name="BAIRRO_DSC")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 51);"&gt;   private String descricao;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;Definimos na classe qual é a sequence (no firebird Generator) que vai ser usada pra gerar a primary da key da tabela. O atributo name é importante pois ele vai ser usado, como pode ser visto acima, na anotação GeneratedValue, cuja strategy deve ser do tipo AUTO, e no parâmetro generator, informamos o nome que demos à nossa SequenceGenerator da tabela.&lt;br /&gt;Até o nosso próximo post!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-8902081757738299403?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/8902081757738299403/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=8902081757738299403' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8902081757738299403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8902081757738299403'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2009/01/firebird-jpa-e-o-problema-com-o.html' title='Firebird + JPA e o Problema com o Generator'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-8554713036353586451</id><published>2008-11-29T11:56:00.000-08:00</published><updated>2008-11-29T12:39:13.720-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Operadores e Atribuições - Tabela de Precedência</title><content type='html'>&lt;div style="text-align: justify;"&gt;Olá javeiros! Após um período longe do blog (estou estudando pra dois concursos e pra prova SCWCD) vamos tentar aos poucos voltar a escrever algum post no nosso blog. Assim que essa fase passar prometo que vou postar mais coisas aqui. Então vamos voltar ao Java!&lt;br /&gt;Neste post vamos começar a estudar os operadores e atribuições em Java. Operadores são essenciais em uma linguagem de programação, e normalmente eles são semelhantes em todas as linguagens. Antes de vermos cada um deles, precisamos saber a precedência dos operadores. A precedência é importante quando temos uma expressão para ser executada. O resultado da expressão vai depender da precedência dos operadores. Veja na tabela abaixo a precedência dos operadores na linguagem Java:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;table border="1" cellpadding="5"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Operadores&lt;/th&gt;&lt;th style="text-align: left;"&gt;Precedência&lt;/th&gt;&lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;postfix&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;em&gt;expr&lt;/em&gt;++ &lt;em&gt;expr&lt;/em&gt;--&lt;/code&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td&gt;unário&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;++&lt;em&gt;expr&lt;/em&gt; --&lt;em&gt;expr&lt;/em&gt; +&lt;em&gt;expr&lt;/em&gt; -&lt;em&gt;expr&lt;/em&gt; ~ !&lt;/code&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;multiplicativo&lt;/td&gt;&lt;td&gt;&lt;code&gt;* / %&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;aditivo&lt;/td&gt;&lt;td&gt;&lt;code&gt;+ -&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;deslocamento&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;&lt; &gt;&gt; &gt;&gt;&gt;&lt;/code&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;relacional&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt; &gt; &lt;= &gt;= instanceof&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;igualdade&lt;/td&gt;&lt;td&gt;&lt;code&gt;== !=&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt;   &lt;td&gt;bitwise AND&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;bitwise exclusive OR&lt;/td&gt;&lt;td&gt;&lt;code&gt;^&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;bitwise inclusive OR&lt;/td&gt;&lt;td&gt;&lt;code&gt;|&lt;/code&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;  &lt;td&gt;lógico AND&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;lógico OR&lt;/td&gt;&lt;td&gt;&lt;code&gt;||&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;ternário&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;? :&lt;/code&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;tr&gt;  &lt;td&gt;atribuição&lt;/td&gt;&lt;td&gt;&lt;code&gt;= += -= *= /= %= &amp;amp;= ^= |= &lt;&lt;= &gt;&gt;= &gt;&gt;&gt;=&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Essa tabela embora pareça muito grande, na verdade é muito intuitiva. A maioria de nós já aprendeu pelo menos a precedência dos operadores matemáticos, que são maioria na tabela. No próximo post vamos estudar a maioria desses operadores. Não vamos estudar todos por que alguns foram retirados do exame 5.0 (ainda bem). Até o próximo post então!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-8554713036353586451?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/8554713036353586451/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=8554713036353586451' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8554713036353586451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8554713036353586451'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/11/operadores-e-atribuies-tabela-de.html' title='Operadores e Atribuições - Tabela de Precedência'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-2430399509666960855</id><published>2008-09-27T05:51:00.000-07:00</published><updated>2008-09-27T05:55:51.621-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Agora eu sou SCJP!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Quero pedir desculpas pela minha ociosidade repentina mas é que eu estava na minha semana decisiva. Fiz a prova da certificação ontem e obtive 83% \o/. Acertei 60 das 72 questões, um resultado além do meu esperado. A prova estava bem tranquila mas é lógico que eu estudei pra caramba pra fazer. Então em breve estaremos postando novos artigos sobre a SCJP, agora que estou mais experiente vai ficar ainda melhor. um abraço e até o próximo post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-2430399509666960855?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/2430399509666960855/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=2430399509666960855' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2430399509666960855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2430399509666960855'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/09/agora-eu-sou-scjp.html' title='Agora eu sou SCJP!!'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-5436631645944047089</id><published>2008-09-03T16:17:00.000-07:00</published><updated>2008-09-11T15:56:37.149-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='enum'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Novidades do Java 5.0: Enums</title><content type='html'>Hoje iremos aprender mais um assunto novo para a prova de certificação java 5.0: os enums. Podemos entender enums como tipos de constantes. Por exemplo: SEGUNDA, TERCA, QUARTA...etc, podem ser iplementados como constantes ou membros de um enum chamado DiasDaSemana. Enums ajudam bastante os programadores a tornar seus códigos mais claros e com menos possibilidades de bugs. &lt;div&gt;Para definir um enum usamos a palavra chave &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;enum, &lt;/span&gt;por exemplo, o nosso enum descrito acima ficaria assim:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;public enum DiasDaSemana {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;DOMINGO, SEGUNDA, TERCA, QUARTA, QUINTA, &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        SEXTA, SABADO&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Um enum pode ser declarado em uma classe própria ou ainda dentro de uma classe. Vejamos como é isso:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;enum DiasDaSemana {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;DOMINGO, SEGUNDA, TERCA, QUARTA, QUINTA, &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        SEXTA, SABADO&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;class Calendario {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;enum Meses {&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;JANEIRO, FEVEREIRO, MARCO&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;//OUTROS MESES AQUI&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;DiasDaSemana dia;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Meses mes;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;public class UsandoCalendario {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;public static void main(String... args){&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;Calendario c = new Calendario();&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;c.dia = DiasDaSemana.SEGUNDA;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;c.mes = Calendario.Meses.JANEIRO;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Apesar de enum ser um classe (é isso mesmo) um enum não é instanciado diretamente como as outras classes em java (usando new por exemplo), basta chamar uma de suas 'constantes'. A ordem dos elementos de um enum é importante e uma coisa importante também é que nada pode ser declarado antes delas. Bom, você pode declarar variáveis em um enum, mas elas precisam vir após a declaração dos elementos. Por exemplo:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;enum DiasDaSemana {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;private boolean diaUtil; // erro!&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;DOMINGO, SEGUNDA, TERCA, QUARTA, QUINTA, &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        SEXTA, SABADO&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;O correto seria:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;enum DiasDaSemana {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;DOMINGO, SEGUNDA, TERCA, QUARTA, QUINTA, &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        SEXTA, SABADO; // o ; é obrigatório caso declare algo depois&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;private boolean diaUtil;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Enums também pode ter construtores. Porém eles não são acessíveis fora da definição do enum. Podemos usar os construtores para inicializar algum tipo de variável ou valor default para um enum. Por exemplo:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;enum DiasDaSemana {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;DOMINGO(false), SEGUNDA(true), TERCA(true), QUARTA(true), &lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;QUINTA(true), SEXTA(true), SABADO(false); &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;// o ; é obrigatório caso declare algo depois&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;private boolean diaUtil;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;DiasDaSemana(boolean util){&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;this.diaUtil = util;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;public boolean isDiaUtil(){&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;return this.diaUtil;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Enums também pode ser utilizados com a estrutura de switch. Como no exemplo abaixo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public enum Luas {&lt;br /&gt;          CHEIA, CRESCENTE, MINGUANTE, NOVA&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.... definição da classe&lt;br /&gt;Luas l = Luas.NOVA;&lt;br /&gt;switch(l) {&lt;br /&gt;             case CHEIA: //codigo aqui&lt;br /&gt;             case CRESCENTE: //codigo aqui&lt;br /&gt;             case MINGUANTE: //codigo aqui&lt;br /&gt;             case NOVA: //codigo aqui&lt;br /&gt;             default: //codigo aqui&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Até o próximo post.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-5436631645944047089?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/5436631645944047089/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=5436631645944047089' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5436631645944047089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5436631645944047089'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/09/novidades-do-java-50-enums.html' title='Novidades do Java 5.0: Enums'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-8259121684867305172</id><published>2008-09-02T18:26:00.000-07:00</published><updated>2008-09-02T19:10:57.543-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='var-args'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Novidades do Java 5.0: Varargs</title><content type='html'>&lt;div style="text-align: justify;"&gt;Suponhamos que você deseja criar um método que faz a soma dos inteiros passados como parâmetros nele. Como você faria isso antes do java 5? Bem, teríamos que fazer algo do tipo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public int somar(int a) {&lt;br /&gt; return a;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public int somar(int a, int b) {&lt;br /&gt; return a + b;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public int somar(int a, int b, int c){&lt;br /&gt; return somar(a,b) + c;&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;O problema é que para conseguir suportar mais argumentos você teria que criar mais métodos sobrecarregados, tornando a sua classe gigante e difícil de manter. A partir do java 5 ficou muito mais fácil criar essa funcionalidade. Através da sintaxe de argumentos variáveis ou varargs. Então os métodos que nós escrevemos antes ficariam todos resumidos em um método assim:&lt;br /&gt;&lt;br /&gt;public int somar(int... args) {&lt;br /&gt;             int total = 0;&lt;br /&gt;             for (int i = 0; i &lt; args.lenght; i++)         &lt;br /&gt;                           total += args[i];     &lt;br /&gt;                  return total;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;chamadas válidas ao método&lt;br /&gt;System.out.println(somar());               imprime 0&lt;br /&gt;System.out.println(somar(1));             imprime 1&lt;br /&gt;System.out.println(somar(1,2));        imprime 3&lt;br /&gt;System.out.println(somar(1,2,3));   imprime 6&lt;br /&gt;&lt;br /&gt;Acho que você notou que o argumento variável nada mais é que um array de objetos ou de primitivos do tipo informado no parâmetro né? Só que o recurso é mais interessante porque me dá a flexibilidade de passar quantos parâmetros eu quiser sem precisar declará-los em um array. Agora vejamos as regras do varargs:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Todo vararg tem um tipo definido. Como no nosso exemplo o tipo foi int.&lt;/li&gt;&lt;li&gt;Para definir que o parâmetro é vararg use ... (três pontinhos) depois do tipo. Cuidado para não confundir com a sintaxe de arrays, ainda não vimos arrays mas vamos adiantar a sintaxe aqui: um array pode ser definido: int[] a ou int a[]. Um vararg só pode ser int... a e NUNCA int a...&lt;/li&gt;&lt;li&gt;Eu posso ter vários parâmetros junto com o vararg, porém só posso ter um ÚNICO vararg como parâmetro e este precisa ser OBRIGATORIAMENTE o último deles. Assim é válido ter: public void somar(String msg, int... a); mas é inválido: public void somar(int... a , String msg);&lt;/li&gt;&lt;/ol&gt;Por último devemos saber que acessamos vararg como se tivéssemos acessando um array do tipo informado. Assim você pode usar qualquer estrutura de laço ou índice, como for por exemplo.&lt;br /&gt;Até o próximo post.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-8259121684867305172?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/8259121684867305172/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=8259121684867305172' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8259121684867305172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8259121684867305172'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/09/novidades-do-java-50-varargs.html' title='Novidades do Java 5.0: Varargs'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-6339863786164183177</id><published>2008-09-02T14:29:00.000-07:00</published><updated>2008-09-02T14:51:19.867-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Declarando Variáveis de Classe</title><content type='html'>&lt;p style="text-align: justify;"&gt;No post anterior vimos como declarar variáveis locais. Vimos que normalmente o escopo de uma variável local é o método ou a estrutura onde ela foi declarada (por ex. um for) e vimos ainda que elas só aceitam o modificador final.&lt;br /&gt;Agora iremos aprender o que são e como usar variáveis de classe. Uma variável de classe nada mais é do que uma variável que tem o seu escopo na classe na qual ela foi criada. Isso quer dizer que ela vive enquanto a classe estiver viva (ou na memória né...). Você define uma variável como sendo de classe utilizando o modificador &lt;span style="font-weight: bold;"&gt;static&lt;/span&gt;. Uma variável estática pode ser acessada diretamente através da classe, ou seja, eu não preciso ter um objeto (ou uma instância de um) para acessar a variável, só preciso utilizar ClassName.variableName. Vamos dar um exemplo:&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;pre&gt;&lt;br /&gt;public class Carro {&lt;br /&gt;   public static String cor = "Azul";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class TesteCarro {&lt;br /&gt;   public static void main(String args[]){&lt;br /&gt;         Carro c = new Carro();&lt;br /&gt;         System.out.println(Carro.cor); //classe&lt;br /&gt;         System.out.println(c.cor);     //objeto&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Note que não criamos um objeto Carro, simplesmente chamamos a variável cor através da classe Carro (claro que isso foi possível também porque cor é uma variável pública). Você pode também acessar uma variável de classe através de uma instância da classe, pois todas as instâncias compartilharão a mesma variável, já que ela pertence à classe. Então eu sugiro que você sempre acesse via classe mesmo e não via objeto, até para deixar seu código mais claro.&lt;br /&gt;Até o próximo post.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-6339863786164183177?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/6339863786164183177/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=6339863786164183177' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/6339863786164183177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/6339863786164183177'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/09/declarando-variveis-de-classe.html' title='Declarando Variáveis de Classe'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-4559587046133205638</id><published>2008-09-01T18:46:00.000-07:00</published><updated>2008-09-02T14:52:02.823-07:00</updated><title type='text'>Declarando Variáveis Locais</title><content type='html'>&lt;div style="text-align: justify;"&gt;Um dos tópicos da seção 1 diz que o programador deve desenvolver código que declare, inicialize e use variáveis locais. Neste post iremos falar um pouco sobre elas. Já vimos vários modificadores de acesso. Vimos que eles são aplicados em membros de uma classe (que podem ser métodos ou variáveis). Toda variável possui um escopo. Escopo a gente aprendeu na 1ª série que nada mais é do que o limite até onde essa variável pode ser acessada (cuidado pra não confundir com encapsulamento). No java variáveis podem ser de 3 tipos:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Locais ou de métodos&lt;/li&gt;&lt;li&gt;De classe&lt;/li&gt;&lt;li&gt;De instância&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Uma variável local ou de método tem o seu escopo limitado ao método ou bloco (por exemplo um for) em que ela foi definida. A sua vida se resume ao local delimitado pelas chaves em que ela foi criada. Por exemplo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void mostrarNome(String nome) {&lt;br /&gt;      int a = 10;&lt;br /&gt;      System.out.println(nome);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As variáveis 'a' e 'nome' são variáveis locais. O escopo delas está limitado as chaves que abrem e fecham o método mostrarNome. Isso significa que após a última chave, elas simplesmente não existirão. Podemos ter também algo do tipo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void contarAte(int contador) {&lt;br /&gt;    for (int i =0; i &lt;= contador)          System.out.println(i);            }            System.out.println(i); }           &lt;/pre&gt;Quantas variáveis locais temos aí? Quem disse 2 acertou na mosca. São elas: 'contador' e 'i'. A variável 'i' é uma variável local também, só que o seu escopo está limitado ao laço for no qual ela foi criada. Então isso significa que esse código não compilaria pois estamos tentando acessar a variável 'i' fora o seu escopo, pois o compilador não enxerga mais a varíavel após a última chave do for. Já a variável contador seria perfeitamente acessível daí, já que o seu escopo é o método todo.&lt;br /&gt;Mas eu falei de modificadores de acesso no começo deste post, o que tem a ver com as variáveis locais? Tem tudo a ver. Ou por que não dizer "não tem nada a ver". Isso porque as variáveis locais só aceitam um único modificador de acesso: final. O modificador final quando aplicado a uma varíavel local diz que o valor da variável não pode ser modificado após a sua inicialização. Então se fizéssemos algo do tipo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void contarAte(final int contador) {&lt;br /&gt;    contador = 100; //erro&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Esse código não compila, pois a varíavel contador não pode ter o seu valor alterado pois ela é uma variável final. O modificador final pode ser usado em java para definir constantes, apesar de uma das palavras chaves da linguagem ser a palavra const, ela não é utilizada. Assim você diz que uma variável é uma constante aplicando a ela o modificador final.&lt;br /&gt;Para finalizar você precisa saber que uma variável local precisa ser OBRIGATORIAMENTE inicializada antes de ser utilizada. E você precisa garantir que ela o será, caso contrário o seu código não irá compilar.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void exibeResultado(boolean exibe) {&lt;br /&gt;      String resultado;&lt;br /&gt;      if (exibe)&lt;br /&gt;               resultado = "Fui iniciada?";&lt;br /&gt;      System.out.println(resultado);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Você pode achar que o compilador vai ser legal com você e aceitar que se o parâmetro exibe for true a variável resultado será inicializada e poderá ser utilizada. Mas ele não vai aceitar isso. Ele vai reclamar para você que a variável resultado pode não ser inicializada. Lembra que eu falei que você tinha que garantir que ela o seja? Para corrigir o trecho acima basta fazermos:&lt;br /&gt;&lt;pre&gt;public void exibeResultado(boolean exibe) {&lt;br /&gt;      String resultado;&lt;br /&gt;      if (exibe)&lt;br /&gt;               resultado = "Fui iniciada?";&lt;br /&gt;      else&lt;br /&gt;               resultado = "Com certeza";&lt;br /&gt;      System.out.println(resultado);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Agora sim, o compilador se dará por satisfeito e compilará o seu código. Resumindo o que vimos:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Variáveis locais só podem ser marcadas como final.&lt;/li&gt;&lt;li&gt;Variáveis locais TEM que ser inicializadas antes do seu uso.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Até o próximo post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-4559587046133205638?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/4559587046133205638/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=4559587046133205638' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/4559587046133205638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/4559587046133205638'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/09/declarando-variveis-locais.html' title='Declarando Variáveis Locais'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-5277348204759356657</id><published>2008-09-01T16:44:00.000-07:00</published><updated>2008-09-02T14:52:25.426-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='Abas'/><category scheme='http://www.blogger.com/atom/ns#' term='XP'/><title type='text'>Windows Explorer com abas e muito mais</title><content type='html'>&lt;p style="text-align: justify;"&gt;Se você assim como acha que o Windows Explorer do XP é uma porcaria, então esse programa foi feito pra você também! O ExplorerXP permite você navegar nos arquivos e pastas do seu windows e oferece uma série de recursos extras. Você pode clicar &lt;a href="http://www.explorerxp.com/index.html"&gt;aqui&lt;/a&gt; e ver as vantagens de usar o software e também pode fazer o download. O programa é bem pequeno (apenas 410KB) e consome pouca memória ao ser ativado. O melhor de tudo é que ele não afeta o seu Windows Explorer. Você pode usar os dois independentemente.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Abaixo você pode ver um screeshot do programa.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OuEDANXoDOY/SLyO7NyEApI/AAAAAAAAAAw/sseN20_uuyA/s1600-h/Mainscreen_small.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_OuEDANXoDOY/SLyO7NyEApI/AAAAAAAAAAw/sseN20_uuyA/s320/Mainscreen_small.png" alt="" id="BLOGGER_PHOTO_ID_5241221214315479698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-5277348204759356657?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/5277348204759356657/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=5277348204759356657' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5277348204759356657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/5277348204759356657'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/09/windows-explorer-com-abas-e-muito-mais.html' title='Windows Explorer com abas e muito mais'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OuEDANXoDOY/SLyO7NyEApI/AAAAAAAAAAw/sseN20_uuyA/s72-c/Mainscreen_small.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-8361102981145611669</id><published>2008-08-30T09:37:00.000-07:00</published><updated>2008-08-30T09:56:25.456-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>O que aprendemos até aqui</title><content type='html'>&lt;div style="text-align: justify;"&gt;Vamos dar uma paradinha rápida no estudos para vermos o que aprendemos até aqui. Como já havia falado antes, estamos seguindo o conteúdo completo (não sei se vamos conseguir mostrar tudo, mas tentaremos) do programa de certificação para programador. Até aqui só vimos o objetivos da seção 1 (&lt;a href="http://www.sun.com/training/catalog/courses/CX-310-055.xml"&gt;quero ver essas seções&lt;/a&gt;):&lt;br /&gt;Section 1: Declarations, Initialization and Scoping&lt;br /&gt;1.1 - Aprendemos a declarar classes concretas e abstratas. Ainda falta vermos enum.&lt;br /&gt;1.2 - Aprendemos a declarar interfaces e implemtá-las, vimos que seus métodos são todos públicos e abstratos, e que todos as variáveis são constantes (public static final).&lt;br /&gt;1.3 - Só vimos os identificadores válidos lembra (começa com $,_, ou letra, depois qualquer outro caractere unicode)&lt;br /&gt;1.4 - nada visto ainda.&lt;br /&gt;1.5 - nada visto ainda.&lt;br /&gt;1.6 - nada visto ainda.&lt;br /&gt;&lt;br /&gt;Já deu pra ver que falta muita coisa ainda né? Bom, alguns assuntos a gente vai ter que pular, mas só aquilo que a gente vir que dá pra você pegar de letra. Mas fique calmo, não vamos querer desistir por causa disso né? Uma dica para aqueles que não conseguem estudar (como eu :) ): marque a prova que você vai ser obrigado a estudar...rs é meio masoquismo, mas comigo funcionou.&lt;br /&gt;Aguardem que vem mais post em breve. Até lá.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-8361102981145611669?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/8361102981145611669/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=8361102981145611669' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8361102981145611669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8361102981145611669'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/o-que-aprendemos-at-aqui.html' title='O que aprendemos até aqui'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-514959131110638724</id><published>2008-08-28T17:07:00.000-07:00</published><updated>2008-08-28T17:51:24.168-07:00</updated><title type='text'>Declarando membros de classes - Parte 3</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;Vamos continuar o nosso estudo sobre os níveis de acesso aplicados aos membros de uma classe. Já falamos sobre três níveis: public, protected e default. Neste post vamos falar sobre o último nível de acesso: private. O nível de acesso privado é o mais restritivo dos níveis. Ele faz com que o membro que seja marcado como tal fiquei fechado dentro da classe que o criou, ou seja, SOMENTE é possível acessar um membro privado dentro da classe que o declarou. Sendo assim, os membros private NUNCA são herdados. Bom, já que não teremos muita coisa pra falar por aqui, então vamos para os exemplos:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Dog.java&lt;br /&gt;public class Dog {&lt;br /&gt;   private String raça = "viralata";&lt;br /&gt;  &lt;br /&gt;   private void latir(){&lt;br /&gt;         System.out.println("au au");&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Dobberman.java&lt;br /&gt;public class Dobbermar extends Dog {&lt;br /&gt;   &lt;br /&gt;    private void destruir(){&lt;br /&gt;         System.out.println("rrrrr asdfhasdasd");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Canil.java&lt;br /&gt;public class Canil {&lt;br /&gt;    private void exibirMe(){&lt;br /&gt;         System.out.println("Eu posso ser acessado aqui");&lt;br /&gt;    }&lt;br /&gt;    public static void main(String args[]){&lt;br /&gt;          Dog dog = new Dog();&lt;br /&gt;          dog.latir(); // xiii&lt;br /&gt;          Dobberman d = new Dobberman();&lt;br /&gt;          d.raça = "Dobberman"; // piorou né?&lt;br /&gt;          d.destruir(); // agora é que destruiu tudo&lt;br /&gt;          exibirMe(); // blz. aqui tudo bem.&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Vamos fazer apenas mais uns poucos comentários para encerrar essa seção. Dog definiu dois membros privados, um método e uma variável de instância. Esses membros só podem ser acessados por algum código que esteja dentro do escopo (entre as chaves) da classe Dog, e por ninguém mais. Então eu nem preciso falar que a classe Dobberman não herdará os membros né? Vamos pular então pra classe Canil, ela instância um objeto Dog e um Dobberman, e em seguida tenta acessar seus membros privados, o que obviamente ocasionará em um erro de compilação, pois estes não são acessíveis a partir de outra classe. Se porém, contudo, todavia a classe Canil pudesse ser compilada, o método exibirMe poderia ser chamado sem problemas, pois apesar de ele ser privado, o acesso está sendo feito dentro da classe na qual ele foi declarado.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Então é isso. Sobre membros privados não há mais o que dizer, pelo menos não por enquanto (calma, depois falaremos sobre inner classe e você verá que é possível acessar membros privados a partir de outra classe... mas esqueça isso por enquanto).&lt;br /&gt;Então se liga aí que é hora da revisão:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;public&lt;/span&gt; -&gt; acessível a partir de qualquer classe em qualquer pacote.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;protected&lt;/span&gt; -&gt; acessível a partir de qualquer classe no mesmo pacote e por outras classes em outros pacotes através de herança.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;default&lt;/span&gt; -&gt; acessível a partir de qualquer classe no mesmo pacote.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;private&lt;/span&gt; -&gt; acessível somente a partir da classe que o declarou.&lt;br /&gt;&lt;br /&gt;Até o próximo post.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-514959131110638724?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/514959131110638724/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=514959131110638724' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/514959131110638724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/514959131110638724'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/declarando-membros-de-classes-parte-3.html' title='Declarando membros de classes - Parte 3'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-2866149164267442382</id><published>2008-08-27T17:24:00.000-07:00</published><updated>2008-08-27T18:50:23.906-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Declarando membros de classes - Parte 2</title><content type='html'>&lt;p style="text-align: justify;"&gt;No post anterior nós estudamos sobre membros públicos. Vimos que eles são acessíveis a partir de qualquer classe. Neste post iremos estudar sobre os níveis protected e default. Isso porque eles são muito parecidos. E você vai notar rapidamente a diferença entre eles.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;O nível default pode ser entendido como um nível de acesso de pacotes. Isso quer dizer que se você declarar um membro como default (na verdade você não vai colocar o modificador, lembra?) somente as classes que estiverem dentro do mesmo pacote que a sua terão acesso ao membro. Vamos pegar o exemplo anterior e retirar o modificador das variáveis de instância:&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;pre&gt;&lt;br /&gt;Animal.java&lt;br /&gt;//Classe public diz que todos vão enxergá-la&lt;br /&gt;public class Animal {&lt;br /&gt; //Membro (variável) default&lt;br /&gt; //somente classes do mesmo pacote&lt;br /&gt; //poderão acessar o membro.&lt;br /&gt; String nome;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Gato.java&lt;br /&gt;&lt;br /&gt;public class Gato extends Animal {&lt;br /&gt;String raça;&lt;br /&gt;&lt;br /&gt;public void mostrarNome(){&lt;br /&gt;     System.out.println(nome); //pode?&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;package javeiro;&lt;br /&gt;Exercicio1.java&lt;br /&gt;public class Exercicio1 {&lt;br /&gt;&lt;br /&gt;public static void main(String arg[]){&lt;br /&gt;    Gato g = new Gato();&lt;br /&gt;    g.nome = "Garfield"; //e aqui?&lt;br /&gt;    g.raça = "preguiçoso"; //aqui também né?&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;O método mostrarNome numa primeira olhada parece fazer uma operação ilegal tentando exibir a variável nome, que é de Animal e está marcada como default. Porém não há problemas, pois as classes Animal e Gato estão no mesmo pacotes, isso significa que além de herdar os membros públicos, gato também herda os membros default, nós veremos mais adiante que é possível fazer uma classe herdar os membros default de uma classe que está em outro pacote. Já a classe Exercicio1 não será compilada com sucesso. O compilador irá dizer que não conhece a propriedade nome e muito menos raça do objeto gato. Por que isso acontence? Exatamente isso que você pensou, Exercicio1 está em um pacote diferente da classe Gato, e isso faz com ela possa acessar somente os membros públicos dela.&lt;br /&gt;&lt;/div&gt;&lt;p style="text-align: justify; font-weight: bold; color: rgb(51, 51, 51);"&gt;Membros protegidos (protected)&lt;/p&gt;&lt;p style="text-align: justify;"&gt;O nível protected é muito parecido com o nível default. A diferença básica é que os membros protegidos podem ser acessados por classes de pacotes diferentes, desde que estas sejam subclasses da sua classe. As outras regras são iguais, ou seja, os membros protegidos só podem ser acessados por classes que estão dentro do mesmo pacote (com a exceção que falamos antes). O exemplo que faremos irá elucidar as dúvidas que possam ter resistidos:&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;pre&gt;&lt;br /&gt;Animal.java&lt;br /&gt;package javeiro.pacote1;&lt;br /&gt;//Classe public diz que todos vão enxergá-la&lt;br /&gt;public class Animal {&lt;br /&gt; //Membro (variável) protected&lt;br /&gt; //somente classes do mesmo pacote&lt;br /&gt; //e subclasses poderão acessar o membro.&lt;br /&gt; protected String nome;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Gato.java&lt;br /&gt;package javeiro.pacote2;&lt;br /&gt;import javeiro.pacote1.Animal;&lt;br /&gt;&lt;br /&gt;public class Gato extends Animal {&lt;br /&gt;protected String raça;&lt;br /&gt;&lt;br /&gt;public void mostrarNome(){&lt;br /&gt;     System.out.println(nome); //herdou nome&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;package javeiro;&lt;br /&gt;Exercicio1.java&lt;br /&gt;public class Exercicio1 {&lt;br /&gt;&lt;br /&gt;public static void main(String arg[]){&lt;br /&gt;    Gato g = new Gato();&lt;br /&gt;    g.nome = "Garfield"; //não pode&lt;br /&gt;    g.raça = "preguiçoso"; //não pode&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Temos aqui algo muito parecido com a versão anterior onde tínhamos os membros default. A diferença pode ser nota na classe Gato, que faz um acesso ao membro nome mesmo este sendo protected (deveria ser acessado por classes do mesmo pacote), porém membros protected são acessíveis por classes de outros pacotes através de herança. Já a classe Exercicio1 não compilará, pois está tentando fazer acesso a duas variáveis protegidas de classes de outros pacotes (Animal e Gato).&lt;br /&gt;Então não esqueça:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;DEFAULT -&gt; Permite acesso aos seus membros SOMENTE às classes do mesmo pacote.&lt;/li&gt;&lt;li&gt;PROTECTED -&gt; Permite acesso aos seus membros às classes do mesmo pacote e às classes de outros pacotes através de HERANÇA.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Até o nosso próxim post!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-2866149164267442382?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/2866149164267442382/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=2866149164267442382' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2866149164267442382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/2866149164267442382'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/declarando-membros-de-classes-parte-2.html' title='Declarando membros de classes - Parte 2'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-3566355416227492256</id><published>2008-08-26T17:47:00.000-07:00</published><updated>2008-09-02T14:52:48.081-07:00</updated><title type='text'>Declarando membros de classes - Parte 1</title><content type='html'>&lt;p style="text-align: justify;"&gt;Olá javeiros de plantão! Vamos continuar o nosso estudo sobre a certificação SCJP da sun. Continuaremos estudando o objetivo 1 (Declaração, inicialização e escopo), ah por falar nisso, você pode clicar &lt;a href="http://www.sun.com/training/catalog/courses/CX-310-055.xml"&gt;aqui &lt;/a&gt;para ver os objetivos da prova de SCJP 5.0. Agora iremos estudar os objetivos 1.3 e 1.4 que está relacionado com a criação de membros de classes. Vamos fazer uma rápida revisão de POO. Sabemos que uma classe é composta por um nome, atributos (propriedades) e métodos. As propriedades e métodos forma o que nós chamamos de membros de uma classe, é sobre como declarar esses membros que nós vamos aprender neste e em mais alguns posts daqui pra frente. Pronto, a revisão acabou por aqui! Eu falei pra você que era rápida né!?&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Você lembra quando nós falamos sobre os modificadores de acesso a classes e sobre os níveis de acesso? (&lt;a href="http://javeiro.blogspot.com/2008/08/declarar-classes-parte-2.html"&gt;Eu não lembro&lt;/a&gt;) Membros também possuem níveis de acesso assim as classes. Porém, eles possuem os quatro níveis, diferente das classes que só usam dois. Os níveis são mostrados abaixo na ordem do mais restritivo para o menos restritivo:&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;private -&gt; default -&gt; protected -&gt; public&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Antes de explicarmos cada um deles, você precisa saber que a visibilidade desses membros vai depender inicialmente da visibilidade das classes (do nível de acesso das classes). Ou seja, se uma classe não consegue enxergar a outra, não importa que nível de acesso tenha seus membros, a classe não consiguirá acessar nenhum deles (ainda que sejam públicos). Isso pode dar um boa pegadinha na prova, então fique bem atento. Vamos estudar os membros o contrário do que está apresentado acima, ou seja, do public para o private. Vamos nessa então.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Membros Públicos (public)&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Quando você define uma classe como public, qualquer outra classe do mundo vai enxergá-la. Quando você define um membro como public, qualquer classe que consiga acessar a sua classe vai enxergar o seu membro (pegou mal essa frase :) . Só tenho que te dizer mais uma coisa com relação aos membros públicos, é que eles sempre são herdados pelas classes que estenderem a sua. Já podemos então partir para um exemplo:&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;pre&gt;&lt;br /&gt;Animal.java&lt;br /&gt;//Classe public diz que todos vão enxergá-la&lt;br /&gt;public class Animal {&lt;br /&gt; //Membro (variável) public,&lt;br /&gt; //quem tiver uma instância de Animal&lt;br /&gt; //ou estendê-la, poderá acessá-lo&lt;br /&gt; public String nome;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Gato.java&lt;br /&gt;// Esta classe ganhou por herança todos&lt;br /&gt;// os membros public de Animal&lt;br /&gt;public class Gato extends Animal {&lt;br /&gt;   public String raça;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;package javeiro;&lt;br /&gt;Exercicio1.java&lt;br /&gt;public class Exercicio1 {&lt;br /&gt;&lt;br /&gt;   public static void main(String arg[]){&lt;br /&gt;         Gato g = new Gato();&lt;br /&gt;         //posso acessar o membro public herdado&lt;br /&gt;         g.nome = "Garfield";&lt;br /&gt;         //posso acessar o membro public de Gato&lt;br /&gt;         g.raça = "preguiçoso";&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Muito fácil não é mesmo? A classe Exercicio1 está em um pacote de diferente de Animal e Gato, porém por estas serem públicas permite o acesso de qualquer lugar. Vimos também que temos livre acesso à variável nome, que foi herdada de Animal, e também à raça, que é um membro público de Gato. A gente vai ver depois que isso não é muito legal de fazer na vida real, mas para aprendizado serviu como uma luva.&lt;br /&gt;Por enquanto é isso, no próximo post falaremos sobre membros protegidos (protected).&lt;br /&gt;Até o próximo post então.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-3566355416227492256?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/3566355416227492256/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=3566355416227492256' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/3566355416227492256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/3566355416227492256'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/declarando-membros-de-classes-parte-1.html' title='Declarando membros de classes - Parte 1'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-7079204467240580462</id><published>2008-08-25T17:01:00.001-07:00</published><updated>2008-08-25T18:12:59.948-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Declarando Interfaces</title><content type='html'>&lt;p&gt;Saudações java a todos! Vamos continuar o nosso estudo para a certificação de programador java, agora com um assunto mais interessante: interfaces. Você já deve ter ouvido falar muito em interfaces né verdade? Provavelmente o termo: interface com o usuário. Bom, mas a interface que falaremos aqui é um pouco diferente, esta outra está relacionada normalmente com uma tela gráfica ou página web, a nossa tem a ver com herança e polimorfirsmo (vamos manter a sanidade).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Uma interface nada mais é que um contrato. Isso mesmo, não dá pra complicar, é simples mesmo. Um contrato possui clásulas que devem ser cumpridas por aqueles o assinaram. A diferença é que diferente dos contratos da vida real, os contratos das interfaces jamais poderão ser quebrados. Usando &lt;a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objeto"&gt;POO&lt;/a&gt;, uma interface define um comportamento que você deseja que determinadas classes tenham, por exemplo: Você possui um sistema de biblioteca, e você possui Objetos dos tipos Livro, Revistas, Cds, Dvds etc, mas estes objetos devem compartilhar uma característica como: poderem ser alugados. Como fazer isso usando o que há de melhor na &lt;a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objeto"&gt;POO&lt;/a&gt;? A resposta é: criando uma interface comum a todos esses objetos. Poderíamos ter uma interface nomeada como Alugavel, que deveria ser implementada por qualquer objeto da biblioteca que puder ser alugado. Aguente as pontas que em breve traremos um exemplo mais claro nesta seção.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;As interfaces são simples porém poderosas. Quando bem utilizadas tornam o seu sistema muito mais claro e fácil de ser expandido. As interfaces, juntamente com as classes abstratas, permitem o uso do &lt;a href="http://pt.wikipedia.org/wiki/Polimorfismo"&gt;Polimorfismo&lt;/a&gt;, deixando o seu código claro e flexível.&lt;br /&gt;Vimos que uma classe abstrata não pode ser instanciada e que todos os seus métodos abstratos deveriam ser implementados pela primeira classe concreta que a estendesse. Pois bem, uma interface é muito parecida com uma classe abstrata, com a diferença que a interface é totalmente abstrata, isso significa que você não poderá definir métodos concretos lá como numa classe abstrata. E não é só isso! Os contratos das interfaces são bem rígidos, vejamos algumas cláusulas deste contrato:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;TODOS os métodos de uma interface SÃO públicos e abstratos. Eles já nascem assim. E não há nada que você possa fazer para mudar isso. Mesmo que você não coloque os modificadores public e abstract, para o compilador java é como se eles estivessem lá. Então os dois métodos abaixo são perfeitamente válidos em uma interface e fazem o mesmo efeito:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;public abstract void executar();&lt;/li&gt;&lt;li&gt;void executar();&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;TODAS as variáveis de uma interface DEVEM ser públicas, estáticas e finais. Isso significa que uma interface só pode declarar constantes (e elas são bastante utilizadas para este fim).&lt;/li&gt;&lt;li&gt;Você NÃO pode declarar método final em uma interface, pois eles são abstratos por padrão (ponto 1). Um método de interface também NÃO pode ser: static, native, strictfp e nem syncchronized.&lt;/li&gt;&lt;li&gt;Interfaces PODEM fazer herança múltipla. Yes, man they can. Uma interface pode herdar de quantas outras interfaces ela quiser.&lt;/li&gt;&lt;li&gt;Uma interface NÃO pode implementar outra interface e nem pode estender de nada que não seja interface.&lt;/li&gt;&lt;li&gt;Você pode ou não utilizar o modificador abstract na declaração da interface. Já a palavra interface é obrigatória.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;Esses cinco pontos são o que você precisa saber sobre interfaces. A seguir traremos alguns exemplos de uso das mesmas para fixarmos o conteúdo.&lt;pre&gt;// abstract é opcional aqui&lt;br /&gt;public abstract interface Alugavel {&lt;br /&gt;//aqui é implicitamente public static final&lt;br /&gt;int TEMPO_MAXIMO_ALUGUEL = 7; //É comum definirmos como constantes&lt;br /&gt;&lt;br /&gt; //aqui é implicitamente public abstract&lt;br /&gt; void alugar(); // não tem '{'&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//utiliza a palavra implements para implementar a interface&lt;br /&gt;public class Livro implements Alugavel {&lt;br /&gt; //precisa ser implementado e publico&lt;br /&gt; public void alugar() {&lt;br /&gt;      //regras de negócio aqui&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Em uma outra oportunidade falaremos um pouco sobre o Polimorfismo. Por enquanto isso é tudo o que você precisa saber sobre interface para se dar bem na prova.&lt;br /&gt;&lt;p&gt;Até o próximo post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-7079204467240580462?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/7079204467240580462/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=7079204467240580462' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/7079204467240580462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/7079204467240580462'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/declarando-interfaces.html' title='Declarando Interfaces'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-1227925695707529913</id><published>2008-08-25T15:01:00.000-07:00</published><updated>2008-08-25T17:19:53.567-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Identificadores e Palavras Reservadas</title><content type='html'>&lt;div style="text-align: justify;"&gt;Este tópico é bastante simples porém é fruto de muitas pegadinhas na hora da prova. E pode apostar que a prova vai estar cheia delas. Então para evitarmos perder questões bobas vamos aprender neste post como declarar identificadores, que nada mais são que os nomes de nossas variáveis, métodos e classes.&lt;br /&gt;As regras de nomenclatura dos identificadores em java são muito parecidas com as de outras linguagens como delphi, c, c++ etc. Antes de listarmos as regras é preciso saber que o java utiliza a codificação &lt;a href="http://pt.wikipedia.org/wiki/Unicode"&gt;Unicode&lt;/a&gt; para os arquivos de código fonte. As regras são as seguintes:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Os identificadores DEVEM começar com uma letra, um cifrão ($) ou com um underscore (_).&lt;/li&gt;&lt;li&gt;Após o primeiro caractere pode ser usado qualquer outro caractere do conjunto &lt;a href="http://pt.wikipedia.org/wiki/Unicode"&gt;Unicode&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;NÃO se pode usar uma palavra reservada (vamos já saber o que é isso) como identificador.&lt;/li&gt;&lt;li&gt;Em java, os identificadores são case sensitive. Então você pode definir gato e Gato como duas coisas diferentes;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Para fixar os conceitos, abaixo está uma lista contendo identificadores válidos:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;int _var;&lt;/li&gt;&lt;li&gt;double ist0_é_válido; //não recomendo, mas é válido&lt;br /&gt;&lt;/li&gt;&lt;li&gt;float R$100; //legal né? :)&lt;/li&gt;&lt;li&gt;int ________________Legal;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Palavras reservadas da linguagem Java:&lt;br /&gt;&lt;/div&gt;&lt;table style="text-align: left; margin-left: 0px; margin-right: 0px;" summary="layout" border="0" cellpadding="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left" width="20%"&gt;&lt;code&gt;abstract&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;continue&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;for&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;new&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;switch&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td width="20%"&gt;&lt;code&gt;assert&lt;/code&gt;&lt;sup&gt;***&lt;/sup&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;default&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;goto&lt;/code&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;package&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;synchronized&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;do&lt;/code&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;if&lt;/code&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;private&lt;/code&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;this&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;break&lt;/code&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;double&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;implements&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;protected&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;throw&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;byte&lt;/code&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;else&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;import&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;public&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;throws&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;case&lt;/code&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;enum&lt;/code&gt;&lt;sup&gt;****&lt;/sup&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;instanceof&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;return&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;transient &lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;catch&lt;/code&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;extends&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;short&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;try&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;char&lt;/code&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;final&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;interface&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;static&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;class&lt;/code&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;finally&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;long&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;strictfp&lt;/code&gt;&lt;sup&gt;**&lt;/sup&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;const&lt;/code&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;/td&gt;   &lt;td align="left" width="20%"&gt;&lt;code&gt;float&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;native&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;super&lt;/code&gt;&lt;/td&gt;  &lt;td align="left" width="20%"&gt;&lt;code&gt;while&lt;/code&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;       &lt;/div&gt;&lt;table style="text-align: left; margin-left: 0px; margin-right: 0px;" border="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;     &lt;td align="right"&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;/td&gt;     &lt;td&gt;&lt;br /&gt;&lt;/td&gt;     &lt;td&gt;Não utilizada&lt;br /&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td align="right"&gt;&lt;sup&gt;**&lt;/sup&gt;&lt;/td&gt;     &lt;td&gt;&lt;br /&gt;&lt;/td&gt;     &lt;td&gt;Adicionada em 1.2&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td align="right"&gt;&lt;sup&gt;***&lt;/sup&gt;&lt;/td&gt;     &lt;td&gt;&lt;br /&gt;&lt;/td&gt;     &lt;td&gt;Adicionada  1.4 &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td align="right"&gt;&lt;sup&gt;****&lt;/sup&gt;&lt;/td&gt;     &lt;td&gt;&lt;br /&gt;&lt;/td&gt;     &lt;td&gt;Adicionada 5.0 &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;Ao todo são 50 palavras reservadas. A má notícia é que você terá que saber todas elas, então utilize a sua técnica de memorização preferida e boa sorte... Mas você verá que não é tão difícil assim quanto parece. Especialmente se você já trabalha com java ou está sendo obrigado a fazer isso (faculdade por exemplo). Para ajudar você a memorizar vamos fazer uma pequena divisão:&lt;br /&gt;De quebra já devemos saber os tipos primitivos, são 8:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;boolean, byte, char, double, float, int, long, short.&lt;/li&gt;&lt;/ul&gt;Utilizadas em definição de classes e métodos, são 15:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;abstract, class, enum, final, interface, native, private, protected, public, static, strictfp, synchronized, transient, void, volatile.&lt;/li&gt;&lt;/ul&gt;Utilizadas em laços e retornos de métodos, são 9:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;break, case, continue, default, do, for, return, switch, while.&lt;/li&gt;&lt;/ul&gt;Utilizadas em tratamentos de exceção, são 5:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;catch, finally, throw, throws, try.&lt;/li&gt;&lt;/ul&gt;Estruturas condicionais e verificações, são 3:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;if, else, instanceof.&lt;/li&gt;&lt;/ul&gt;Usadas em herança, são 2:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;extends, super.&lt;/li&gt;&lt;/ul&gt;Importação e definição de pacote, são 2:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;import, package.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;NÃO SÃO UTILIZADAS, são 2:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;goto, const.&lt;/li&gt;&lt;/ul&gt;Adicionadas recentemente, são 2:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;assert, enum;&lt;/li&gt;&lt;/ul&gt;Criação de objetos e acesso à classe executando, são 2:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;new, this.&lt;/li&gt;&lt;/ul&gt;Não fiquei muito preocupado pois você verá essas palavras tantas vezes que talvez nunca mais consiga esquecê-las.&lt;br /&gt;Até o nosso próximo post.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-1227925695707529913?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/1227925695707529913/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=1227925695707529913' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/1227925695707529913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/1227925695707529913'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/identificadores-e-palavras-reservadas.html' title='Identificadores e Palavras Reservadas'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-623561458104590491</id><published>2008-08-25T14:29:00.000-07:00</published><updated>2008-08-25T14:43:56.924-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Declarar Classes - Parte 3</title><content type='html'>&lt;p&gt;No post anterior vimos que uma classe pode ter dois níveis de acesso: publico e padrão. Para dar à classe acesso publico, utilizamos o modificador public, para o padrão basta não colocar nada. Além dos modificadores de acesso à classe, o java possui outros modificadores que também podem ser aplicados a classes, mas que não estão relacionados ao acesso a estas. Os modificadores são:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;strictfp&lt;/li&gt;&lt;li&gt;final&lt;/li&gt;&lt;li&gt;abstract&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;O modificador strictfp pode ser utilizado tanto em classes quanto em métodos. Você não precisa saber muita coisa sobre ele, mas se quiser saber um pouquinho mais é só clicar &lt;a href="http://en.wikipedia.org/wiki/Strictfp"&gt;aqui&lt;/a&gt;. Na realidade o que você precisa saber mesmo é que ele pode ser usado na declaração de um método ou de uma classe, seja ela final ou abstract. &lt;br /&gt;&lt;p&gt;Bem, já que tocamos no assunto, o modificador final pode ser utilizado para declara um método, propriedade (variável) ou uma classe. O modificador final quando usado em uma classe faz com esta não possa mais ser extendida, ou seja, a sua hierarquia chegou ao final (essa foi podre). Mas será que alguém pode querer que uma classe não possa ser extendida? Claro que sim. Inclusive a Sun pensa assim. A classe String é uma classe final, ou seja, você não pode herdar jamais de String. Isso pode ser escolhido também por uma questão de segurança ou qualquer coisa que o valha. &lt;br /&gt;&lt;p&gt;Para finalizar temos o modificador abstract. Ele pode ser utilizado em classes e em métodos. Vale lembrar que se uma classe tiver pelo menos um misero método abstrato esta classe deverá ser abstrata, porém uma classe pode ser abstrata e não ter nenhum método abstrato... Agora embolou tudo né?. Bem, primeiro precisamos saber o que é uma classe abstrata. Uma classe abstrata (abstract) é uma classe que não pode ser instanciada, ou seja, se você quiser usar uma algum dia desses, a única forma de fazê-lo será estendendo-a. &lt;br /&gt;&lt;p&gt;Quando você herdar de uma classe abstrata você terá a obrigação de implementar todos os métodos abstratos da mesma, a menos, é claro, que a sua classe também seja abstrata. O fato é que um dia alguém vai fazer uma classe concreta e ela vai ter que definir todos, eu disse, todos os métodos abstratos não implementados de toda a árvore de herança... eu não faria isso se fosse você! E se os meus métodos forem todos concretos? Aí você ganhará um monte de método por herança, legal né?&lt;br /&gt;&lt;p&gt;Você pode combinar os modificadores a vontado... quer dizer, quase né. Os modificadores final e abstract nunca poderão ser combinados, pois isso causará uma crise de existência no compilador java. Uma classe final não pode ser nunca extendida e uma classe abstract deve ser obrigatoriamente extendida... entendeu por que não dá pra combinar né? Ah, o strictfp pode ser usado tanto em classes finais como em abstratas.&lt;br /&gt;Agora para fixar os conceitos vamos trazer alguns exemplos do que vimos até aqui.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Animal.java&lt;br /&gt;//posso combinar strictfp e abstract&lt;br /&gt;//Essa classe deverá ser herdada por alguém&lt;br /&gt;public strictfp abstract class Animal {&lt;br /&gt; &lt;br /&gt; //Esse método precisa ser implementado &lt;br /&gt; //em alguma subclasse concreta&lt;br /&gt; public abstract void emitirSom();&lt;br /&gt; &lt;br /&gt; //Esse método será herdado por todas as subclasses&lt;br /&gt; public strictfp void contarAteDez() {&lt;br /&gt;  for (int i = 0; i &lt; 10; i++) {&lt;br /&gt;   System.out.println(i);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Dog.java&lt;br /&gt;// Esta classe não poderá ser herdada por ninguém mais&lt;br /&gt;public final strictfp class Dog extends Animal {&lt;br /&gt;&lt;br /&gt; //Implementou o método abstrato, ou sobrescreveu.&lt;br /&gt; @Override&lt;br /&gt; public void emitirSom() {&lt;br /&gt;  System.out.println("Auf auf"); &lt;br /&gt;  contarAteDez(); //posso chamar o método herdado aqui também&lt;br /&gt; } &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;ViraLata.java&lt;br /&gt;//ViraLata não pode herdar de Dog&lt;br /&gt;//pois Dog é uma classe final&lt;br /&gt;public class ViraLata extends Dog {&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;A classe Animal é uma classe abstrata e faz uso também do modificador strictfp. Essa classe possui um método abstrato que deverá obrigatoriamente ser implementado por uma subclasse concreta e possui um método concreto que será herdado por todas as subclasses. A classe Dog estende a classe Animal e implementa o seu método abstrato emitirSom, podemos ver que ela chama o método contarAteDez que foi herdado de Animal, ou seja, o nosso cachorro herdou a capacidade de contar até dez do animal. E por fim a classe ViraLata tenta sem sucesso estender a classe Dog que é uma classe final e não pode ser estendida nem sob a mira de uma arma.&lt;br /&gt;&lt;p&gt;No próximo post vamos aprender a nomear nossas classes e vamos trazer também a lista de palavras reservadas da linguagem java. Até lá.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-623561458104590491?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/623561458104590491/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=623561458104590491' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/623561458104590491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/623561458104590491'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/declarar-classes-parte-3.html' title='Declarar Classes - Parte 3'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-978074571568300520</id><published>2008-08-24T10:52:00.000-07:00</published><updated>2008-08-24T11:58:49.861-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Declarar Classes - Parte 2</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;p&gt;Continuando nosso estudo, iremos agora trazer a segunda parte do objetivo 1.1 que são os modificadores de acesso a classe do java.&lt;br /&gt;&lt;p&gt;O java possui quatro níveis de acesso, porém somente três modificadores de acesso.Parece esquisito mas é isso mesmo. Os modificadores são:&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;public&lt;/li&gt;&lt;li&gt;protected&lt;/li&gt;&lt;li&gt;private&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;p&gt;A vida de um programador java é escrever classes. Mas acontece que essas classe precisam interagir com outras classes (de outros programadores, inclusive os da sun :)). E para que haja essa interação é necessário que a classe que você escreveu tenha 'acesso' às classes dos outros seres. E são os modificadores de acesso que vão definir quem pode acessar sua classe. Acredito que não exista nada mais óbvio do que isso, mas vamos continuar. O java possui dois níveis de acesso à classes: default e public. Peraí, mas você não disse que o java tinha quatro níveis de acesso? É verdade, mas falando em acesso a classe, só podemos utilizar dois deles.  Nas próximas seções falaremos sobre os outros modificadores. Então a coisa fica assim:&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Se você escreveu uma classe public, qualquer classe do mundo terá acesso a ela. E quando eu falo de acesso, é no sentido de poder criar uma instância ou um objeto da mesma.&lt;/li&gt;&lt;li&gt;Se você escreveu uma classe e NÃO colocou o modificador public nela, então, somente as classes que estivem dentro do mesmo pacote que ela poderão acessá-la. Ou seja, qualquer classe fora do seu pacote nem mesmo saberá que a sua classe existe.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;p&gt;Vamos colocar um pequeno exemplos para firmar o objetivo melhor:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;Animal.java&lt;br /&gt;package javeiro;&lt;br /&gt;&lt;br /&gt;class Animal {&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Cat.java&lt;br /&gt;package zoo;&lt;br /&gt;&lt;br /&gt;import javeiro.Animal;&lt;br /&gt;&lt;br /&gt;class Cat extends Animal{&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Temos um problema aí. A classe Animal está definida como default e está dentro do pacote javeiro. Isso torna a classe invisívei para qualquer classe fora do pacote javeiro. Assim, a classe Cat terá uma bela surpresa quando tentar herdar da classe animal, o compilador java vai dizer pra ela: Ei Cat, eu não sei que Animal é esse... bem na verdade isso foi uma transliteração do erro: zoo\Cat.java:4: cannot find symbol, mas dá no mesmo. O ponto aqui é que Cat não enxerga Animal, pois o acesso default garante que só as classes dentro de javeiro poderão enxergar Animal.&lt;br /&gt;&lt;p&gt;Não vou colocar o exemplo da classe public porque é óbvio demais. Se você escreveu uma classe e definiu o acesso dela como public, então não adianta chorar, todo mundo vai enxergar sua classe, não importa onde ela ou eles estejam.&lt;br /&gt;&lt;br /&gt;Até o próximo post.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-978074571568300520?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/978074571568300520/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=978074571568300520' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/978074571568300520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/978074571568300520'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/declarar-classes-parte-2.html' title='Declarar Classes - Parte 2'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-1866481533673272809</id><published>2008-08-24T08:42:00.000-07:00</published><updated>2008-08-24T10:48:59.613-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Declarar Classes - Parte 1</title><content type='html'>&lt;p style="text-align: justify;"&gt;Vamos dar início ao estudos dos objetivos da prova de programador a partir deste post. O nosso foco será a prova de programador SCJP 5.0, o código é 310-055, mas sempre que for possível falaremos um pouco da prova 6.0, cujo o código é 310-065. Quem quiser outra fonte de estudos, aconselho o livro mundialmente recomendado da &lt;a href="http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&amp;amp;ProdTypeId=1&amp;amp;ProdId=1808932&amp;amp;ST=SR"&gt;Kathy Sierra&lt;/a&gt; e há também uma série de guias da Revista &lt;a href="http://www.mundojava.com.br/NovoSite/edicoesanteriores.shtml"&gt;Mundo Java&lt;/a&gt; que ajudam bastante, especialmente para momentos antes da prova.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Bom mas vamos deixar de lenga lenga e começar a estudar de verdade.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Um bom programador java precisa saber escrever corretamente uma classe. Existem algumas regrinhas básicas que precisamos saber antes de começarmos a programar feito loucos, e elas são:&lt;br /&gt;&lt;/p&gt;&lt;ul style="text-align: justify;"&gt;&lt;br /&gt;&lt;li&gt;Em um arquivo .java só pode haver uma classe pública (public class).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Comentários podem ser colocados em qualquer linha&lt;/li&gt;&lt;br /&gt;&lt;li&gt;o nome do arquivo deve ser o mesmo da classe pública dele, se não tiver nenhuma, então pode ser qualquer nome :)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Se a classe estiver em um pacote (package), a declaração do mesmo deve ser a primeria do arquivo (comentário não conta viu)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;os imports, se existirem claro, devem vir logo após a declaração de pacote, e se não houver uma, deve vir em primeiro lugar no arquivo.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p style="text-align: justify;"&gt;Abaixo temos um exemplo do que falamos acima, o arquivo foi nomeado como MyClass.java:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;//aqui pode ter comentário sem problema&lt;br /&gt;package javeiro; //declaração de pacote em primeiro lugar&lt;br /&gt;import java.util.Date; // declaração de import&lt;br /&gt;&lt;br /&gt;public class MyClass {&lt;br /&gt;&lt;br /&gt;  public static void main(String args[]) {&lt;br /&gt;       Date d = new Date();&lt;br /&gt;       System.out.println(d);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// posso ter zilhões de classe não públicas em um arquivo&lt;br /&gt;class MyOtherClass {&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class MyAnotherClass {&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-1866481533673272809?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/1866481533673272809/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=1866481533673272809' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/1866481533673272809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/1866481533673272809'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/declarar-classes-parte-1.html' title='Declarar Classes - Parte 1'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-4356780793242966147</id><published>2008-08-24T07:51:00.000-07:00</published><updated>2008-08-24T10:51:35.691-07:00</updated><title type='text'>Algumas informações sobre a prova</title><content type='html'>&lt;p style="text-align: justify;"&gt;Antes de começarmos a estudar os objetivos da prova de certificação, vou trazer algumas informações sobre a prova, para que não sejamos surpreendidos no dia do teste. Pra começar, a sun disponibiliza atualmente a opção de 3 provas de SCJP, e claro, seus respectivos updgrades para aqueles que já fizeram a prova e desejam apenas se atualizar. As opções são:&lt;br /&gt;&lt;/p&gt;&lt;ul style="text-align: justify;"&gt;&lt;br /&gt;&lt;li&gt;SCJP 1.4 e Upgrade&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SCJP 5.0 e Upgrade&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SCJP 6.0 e Upgrade&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;A primeira, 1.4, é composta de 61 questões e você disporá de 120 minutos para respondê-las e terá que acertar no mínimo 32 questões (52% da prova), se nos fizermos um cálculo do tempo/questão você tem em média 1m:58s para responder cada questão, parece pouco né, mas reza a lenda que dá tempo de sobra.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;A segunda é composta de 72 questões e o tempo agora é de 175 minutos e você precisa acertar 43 questões (59% da prova). Agora você tem 2m:25s para cada questão. A sun engrossou o caldo no número de acertos mas em compensação o tempo para cada questão agora é maior.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;A última, na verdade a mais atual, é a bola da vez, é o que há de mais moderno e logicamente nosso conselho é que você faça ela, a menos claro, que você já tenha comprado o voucher e marcado a prova :( eu \o/. E se você achou que sun foi cruel ao aumentar o percentual de acertos da prova 5.0, então sente-se pois a coisa ficou ainda pior. A prova do Mustang (esse o nome do java 6.0, vc não sabia?) é composta também de 72 questões só que agora você terá que acertar 47 questões, isso equivale a 65% da prova. Peraí, mas a sun não tão é cruel como você está pensando, olha só que mamada ela deu: você tem agora 210 minutos para terminar sua provinha, o que dá mais ou menos 2m:55s por questão. Bom, não quero ser estraga prazeres mas dizem as más línguas que a prova ficou mais difícil agora... mas com a ajuda do javeiro você poderá chegar lá.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Já ia me esquecendo do detalhe polêmico: A língua da prova. Polêmico porque a prova é disponibilizada para nós ocidentais em inglês, alemão, espanhol e português. Mas acontece que todo mundo manda você fazer a prova em inglês, por questões que não nos cabe discutir neste momento. Mas fique a vontande para 'arriscar' escolher outra língua.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Se o que nós falamos neste post não foi suficiente para você, visite &lt;a href="http://www.sun.com/training/certification/java/scjp.xml"&gt;esse site&lt;/a&gt; para obter mais informações sobre as provas.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;No mais eu só posso desejar bons estudos e boa sorte para todos nós.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Até o nosso próximo post.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-4356780793242966147?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/4356780793242966147/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=4356780793242966147' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/4356780793242966147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/4356780793242966147'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/algumas-informaes-sobre-prova.html' title='Algumas informações sobre a prova'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-6251580177438382165</id><published>2008-08-23T14:30:00.000-07:00</published><updated>2008-08-23T14:35:36.511-07:00</updated><title type='text'>Estamos de volta</title><content type='html'>Após um período de inatividade, em virtude do nascimente do meu filho Mateus, retornamos agora com a bola toda. Irei trazer a partir de agora posts sobre Java, mais especificamente sobre o conteúdo da prova de certificação de programador (SCJP). Então segura aí que logo logo estarei postando os primeiros artigos. Então até o próximo post!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-6251580177438382165?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/6251580177438382165/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=6251580177438382165' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/6251580177438382165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/6251580177438382165'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/08/estamos-de-volta.html' title='Estamos de volta'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-8066523933589818937</id><published>2008-06-28T06:45:00.000-07:00</published><updated>2008-06-28T06:50:25.085-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bíblia'/><category scheme='http://www.blogger.com/atom/ns#' term='Loja Virtual'/><category scheme='http://www.blogger.com/atom/ns#' term='Evangélico'/><category scheme='http://www.blogger.com/atom/ns#' term='Casa da Bíblia'/><title type='text'>Casa da Bíbla Online</title><content type='html'>O que já era bom ficou ainda melhor. Para todos que já conheciam a casa da bíblia, renomada loja de artigos evangélicos, agora ficou mais fácil comprar. Desde o mês de junho a casa da bíblia passou a funcionar também na internet. Então pra você que como eu morria de preguiça de ir até ao centro da cidade para comprar livros, revistas e outros artigos, basta agora acessar o site da &lt;a href="http://www.casadabibliaonline.com.br"&gt;Casa da Bíblia&lt;/a&gt; e fazer todas as suas compras sem tirar o pé de casa. Boas compras e até o próximo post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-8066523933589818937?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/8066523933589818937/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=8066523933589818937' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8066523933589818937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8066523933589818937'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/06/casa-da-bbla-online.html' title='Casa da Bíbla Online'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-1725998498453417412</id><published>2008-06-27T17:48:00.000-07:00</published><updated>2008-06-28T05:55:41.233-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='notebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Dell'/><title type='text'>2 pelo preço de um (ou não)</title><content type='html'>Hoje tivemos uma dia muito agitado lá no trabalho. Afinal de contas não é todo dia que a Dell resolve doar (acho que essa seria uma boa palavra pra isso..rs) seus notebooks. O ocorrido iniciou-se após um dito cujo saber por meio de outro dito cujo que a Dell estava com uma promoção: 02 Notebooks pelo preço de 1. Bom, aí já deu pra imaginar no que deu né. Isso mesmo, todo mundo comprando carradas de notebooks. Parecia pegadinha, brincadeira de mau gosto, coisa de hacker, mas ninguém tava nem aí pra isso, o negócio tava baratinho e todo mundo queria garantir o seu. Bom, eu sou bem conservador (burro) para essas coisas e resolvi esperar pra ver no que ia dar. Quando finalmente decidi comprar o note, aí vem a notícia bombástica: Página foi tirada do ar. Para a minha frustação e preocupação dos compradores. 22 note no total..rs, alguns ligaram pra Dell e esta informou que o site estava errado (parece ter sido coisa de estagiário, mas isso é só especulação..hiuaha). Chegou ao final do expediente e os compradores continuavam muito satisfeitos com a recente aquisição. Todos aguardando ansiosamente a manifestação da Dell (ou não né :)) para saber se vão receber o produto ou não. Bom, eu acho que o PROCOM vai ter um trabalho nesse mês de Julho. Só posso lamentar por não ter comprado também :) e desejar boa sorte aos que compraram. Que presentão de Natal! Até o próximo post!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-1725998498453417412?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/1725998498453417412/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=1725998498453417412' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/1725998498453417412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/1725998498453417412'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/06/2-pelo-preo-de-um-ou-no.html' title='2 pelo preço de um (ou não)'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-3505725429652490367</id><published>2008-06-25T04:09:00.000-07:00</published><updated>2008-12-09T06:51:22.631-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='SystemTray'/><title type='text'>Colocando sua aplicação na SystemTray</title><content type='html'>O java 6 trouxe uma série de recursos novos e interessantes para aplicações desktop. Um deles, e que há muito era solicitado, é o de colocar uma aplicação java para rodar na SystemTray. SystemTray para quem não sabe é aquela espacinho que fica perto do relógio onde normalmente você tem um monte de ícones, que são também um monte de programa rodando. Bom, mas não fique triste se você ainda não tem o java 6 na sua máquina (não sei porquê, mas tudo bem), pois existe uma solução para fazer isso no java 5, que é a biblioteca &lt;a href="http://jdic.dev.java.net/"&gt;JDIC&lt;/a&gt;. &lt;br /&gt;Iremos fazer uma aplicação besta, que não faz absolutamente nada a não ser colocar o programa na tray. Mas explicaremos aqui os principais conceitos para você fazer programas de gente grande com esse novo recurso. Então vamos ao código. \o/&lt;br /&gt;Iremos supor que você já sabe java :) e assim iremos pular alguns conceitos básicos.&lt;br /&gt;Se você não quiser ter trabalho lendo tudo isso aqui, você pode também baixar o &lt;a href="http://www.4shared.com/file/52679298/4b690aaa/exemplo.html?dirPwdVerified=1230ec7f"&gt;projeto&lt;/a&gt; protinho. Coloquei alguns comentários no código fonte pra dar uma ajudinha.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import java.awt.AWTException;&lt;br /&gt;import java.awt.FlowLayout;&lt;br /&gt;import java.awt.MenuItem;&lt;br /&gt;import java.awt.PopupMenu;&lt;br /&gt;import java.awt.SystemTray;&lt;br /&gt;import java.awt.TrayIcon;&lt;br /&gt;import java.awt.event.ActionEvent;&lt;br /&gt;import java.awt.event.ActionListener;&lt;br /&gt;import java.awt.event.MouseAdapter;&lt;br /&gt;import java.awt.event.MouseEvent;&lt;br /&gt;import java.awt.event.WindowAdapter;&lt;br /&gt;import java.awt.event.WindowEvent;&lt;br /&gt;import javax.swing.ImageIcon;&lt;br /&gt;import javax.swing.JButton;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author Robson de Araújo - http://javeiro.blogspot.com&lt;br /&gt; */&lt;br /&gt;public class Janela extends JFrame{&lt;br /&gt;    private JButton botao;&lt;br /&gt;    private TrayIcon trayIcon;&lt;br /&gt;    &lt;br /&gt;    public Janela() {&lt;br /&gt;        setTitle("Minha Janela");&lt;br /&gt;        setLayout(new FlowLayout());&lt;br /&gt;        add(botao = new JButton("Enviar para a tray"));        &lt;br /&gt;        criarTrayIcon();&lt;br /&gt;        setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;        setSize(200,100);&lt;br /&gt;        setLocationRelativeTo(null);&lt;br /&gt;        adicionarListeners();&lt;br /&gt;        setVisible(true);                &lt;br /&gt;    }   &lt;br /&gt;    &lt;br /&gt;    // habilita os listeners&lt;br /&gt;    private void adicionarListeners(){&lt;br /&gt;        addWindowListener(new WindowAdapter() {&lt;br /&gt;            @Override&lt;br /&gt;            public void windowIconified(WindowEvent e) {&lt;br /&gt;                adicionarATray();&lt;br /&gt;            }            &lt;br /&gt;        });&lt;br /&gt;        &lt;br /&gt;        botao.addActionListener(new ActionListener() {&lt;br /&gt;            public void actionPerformed(ActionEvent e) {&lt;br /&gt;                adicionarATray();&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private void criarTrayIcon() {&lt;br /&gt;        SystemTray tray = SystemTray.getSystemTray();&lt;br /&gt;        // Verifica se o sistema suporta Ã­cones na system tray&lt;br /&gt;        if (!tray.isSupported()) {&lt;br /&gt;            System.out.println("Não é possível executar a app");&lt;br /&gt;            System.exit(0);&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        //icone q será exibido na bandeja&lt;br /&gt;        ImageIcon icon = new ImageIcon("images/icone.gif");&lt;br /&gt;        setIconImage(icon.getImage());&lt;br /&gt;&lt;br /&gt;       // cria um menu popup para interagir com a aplicação na system tray&lt;br /&gt;       PopupMenu menu = new PopupMenu();&lt;br /&gt;       MenuItem itemRestaurar = new MenuItem("Restaurar");&lt;br /&gt;       itemRestaurar.addActionListener(new ActionListener() {&lt;br /&gt;            public void actionPerformed(ActionEvent e) {&lt;br /&gt;                // remove a aplicação da tray&lt;br /&gt;                SystemTray.getSystemTray().remove(trayIcon);&lt;br /&gt;                setVisible(true);&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;        &lt;br /&gt;        MenuItem itemSair = new MenuItem("Sair");&lt;br /&gt;        itemSair.addActionListener(new ActionListener() {&lt;br /&gt;            public void actionPerformed(ActionEvent e) {&lt;br /&gt;                System.exit(0);&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;        menu.add(itemRestaurar);&lt;br /&gt;        menu.add(itemSair);&lt;br /&gt;        &lt;br /&gt;        // cria o ícone e adiciona o menu a ele&lt;br /&gt;        trayIcon = new TrayIcon(icon.getImage(), "Server",menu);&lt;br /&gt;        trayIcon.addMouseListener(new MouseAdapter() {&lt;br /&gt;            @Override&lt;br /&gt;            public void mouseClicked(MouseEvent e) {&lt;br /&gt;                if (e.getClickCount() == 2) {&lt;br /&gt;                    SystemTray.getSystemTray().remove(trayIcon);&lt;br /&gt;                    setVisible(true);&lt;br /&gt;                } &lt;br /&gt;            }            &lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void adicionarATray() {&lt;br /&gt;        try {&lt;br /&gt;            // esconde a janela&lt;br /&gt;            dispose();&lt;br /&gt;            //adiciona seu programa a systema tray&lt;br /&gt;            SystemTray.getSystemTray().add(trayIcon);&lt;br /&gt;            // aquele balãozinho que aparece qdo o programa tá lá :)&lt;br /&gt;            trayIcon.displayMessage("Minha Janela", "Minha Janela está executando.", TrayIcon.MessageType.INFO);&lt;br /&gt;        } catch (AWTException ex) {&lt;br /&gt;            System.out.println(ex.getMessage());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        new Janela();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul style="float: left; list-style-type: none;"&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;          Aplicação executando :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OuEDANXoDOY/SGI4bRCstwI/AAAAAAAAAAY/cJGLq72B778/s1600-h/janela.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OuEDANXoDOY/SGI4bRCstwI/AAAAAAAAAAY/cJGLq72B778/s320/janela.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215793359530800898" /&gt;&lt;/a&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;Aplicação executando na SystemTray&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OuEDANXoDOY/SGI47iW3WbI/AAAAAAAAAAg/feC_JYxDweg/s1600-h/tray.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OuEDANXoDOY/SGI47iW3WbI/AAAAAAAAAAg/feC_JYxDweg/s320/tray.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215793913934600626" /&gt;&lt;/a&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;li&gt;&lt;br /&gt;&lt;br /&gt;Menu da aplicação na SystemTray&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OuEDANXoDOY/SGI5D2aZKrI/AAAAAAAAAAo/3MCuRalOhLQ/s1600-h/menuTray.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_OuEDANXoDOY/SGI5D2aZKrI/AAAAAAAAAAo/3MCuRalOhLQ/s320/menuTray.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215794056757062322" /&gt;&lt;/a&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="float: left; list-style-type: none;"&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Se você desejar aprender mais sobre SystemTray é só visitar o site do &lt;a href="http://java.sun.com/javase/6/docs/api/java/awt/SystemTray.html"&gt;Java&lt;/a&gt; que foi de onde eu tirei parte deste tutorial. Por enquanto é isso. Até o próximo post!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-3505725429652490367?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/3505725429652490367/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=3505725429652490367' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/3505725429652490367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/3505725429652490367'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/06/colocando-sua-aplicao-na-systemtray.html' title='Colocando sua aplicação na SystemTray'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OuEDANXoDOY/SGI4bRCstwI/AAAAAAAAAAY/cJGLq72B778/s72-c/janela.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-909298803125665597</id><published>2008-06-22T11:09:00.000-07:00</published><updated>2008-06-22T11:10:38.426-07:00</updated><title type='text'>Reporter Inexperiente</title><content type='html'>Muito engraçado esse quadro do CQC da band...&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/uQp77nG5y_Q&amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/uQp77nG5y_Q&amp;hl=en" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-909298803125665597?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/909298803125665597/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=909298803125665597' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/909298803125665597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/909298803125665597'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/06/reporter-inexperiente.html' title='Reporter Inexperiente'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-8423342578698307658</id><published>2008-06-20T16:57:00.000-07:00</published><updated>2008-06-20T17:37:01.370-07:00</updated><title type='text'>Em tempos de olimpíada, nada como relembrar</title><content type='html'>Essa aqui é com direito a mixagem com som do Dota e tudo mais...hihuaiuah&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kNOYBiLmg98&amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/kNOYBiLmg98&amp;hl=en" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Essa da porta é fantástica também... A galera era sem noção mermo.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/awazTwNmLvA&amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/awazTwNmLvA&amp;hl=en" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-8423342578698307658?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/8423342578698307658/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=8423342578698307658' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8423342578698307658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/8423342578698307658'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/06/em-tempos-de-olimpada-nada-como.html' title='Em tempos de olimpíada, nada como relembrar'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5031012489094758669.post-3810714020688967539</id><published>2008-06-20T15:34:00.000-07:00</published><updated>2008-06-25T14:56:51.039-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='boas vindas'/><category scheme='http://www.blogger.com/atom/ns#' term='welcome'/><title type='text'>Pra começar...</title><content type='html'>Olá,&lt;br /&gt;meu nome é Robson, e criei esse blog pra discutir sobre a tecnologia java e outras cositas mais. A intenção também é "desarnar" (sei nem se essa palavra existe, mas a minha vó usa é muito) nessa coisa de escrever, afinal de contas já já vou ter que fazer monografia (argh) e é bom já ir treinando. Espero colocar alguma coisinha útil aqui de vez em quando. Portanto seja bem vindo ao meu blog e aproveite pra divulgá-lo também. Quero aproveitar e divulgar o blog do meu chapa "cabeludo" (&lt;a href="http://caixadebreguecos.blogspot.com/"&gt;http://caixadebreguecos.blogspot.com/&lt;/a&gt;), o cara que me fez ingressar no insano mundo das ações (Eu devia matar ele, mas não seria um ato muito cristão). Até o próximo post!&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-4815047-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5031012489094758669-3810714020688967539?l=www.javeiro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javeiro.com/feeds/3810714020688967539/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5031012489094758669&amp;postID=3810714020688967539' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/3810714020688967539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5031012489094758669/posts/default/3810714020688967539'/><link rel='alternate' type='text/html' href='http://www.javeiro.com/2008/06/pra-comear.html' title='Pra começar...'/><author><name>Robson de Araujo</name><uri>http://www.blogger.com/profile/14547592437120048129</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-JC6kbTBNbcE/ThXiePwuRtI/AAAAAAAAAKM/LuWSe3t6UH4/s220/2011-03-14%2B19.34.31.jpg'/></author><thr:total>0</thr:total></entry></feed>
