quarta-feira, 23 de fevereiro de 2011

Como encontrar uma palavra em uma String

Para encontrar uma palavra em uma String existem várias formas. Abaixo está uma forma simples de encontrar. O código abaixo encontra palavras inteiras, a palavra "String" não será encontrada, já a palavra "String?" será. Sendo assim, não é possível utilizar o método String.contains().

String string = "Como encontrar uma palavra em uma String?";
String palavraChave = "String?";
  
List<String> palavras = Arrays.asList(string.split(" "));

if(palavras.contains(palavraChave)){
     System.out.println("Palavra chave encontrada!");
}

Comparando String, StringBuilder e StringBuffer

As três classes String, StringBuilder e StringBuffer são usadas para armazenar uma sequência de caracteres, mas por tráz existem algumas diferenças. As classes StringBuilder e StringBuffer vieram para solucionar e/ou dar uma alternativa para alguns aspectos da classe String (como imutabilidade).

String

Em Java strings são objetos.
Exitem varias formas de criar um objeto String e atribuir uma string ao objeto como:

String s = "abc";

String s = new String("abc");

String s = new String();
s = "abc";

Aparentemente objetos do tipo String são como qualquer outro objeto, mas eles são imultaveis! O que significa isso? Apartir do momento em que você atribui um valor ao objeto, este valor nunca mais poderá ser modificado, isso mesmo, nunca mais!! Isto é valido para o valor do objeto e não para a referência da variável, assim a variável de referência poderá referenciar a outro objeto String a qualquer momento.

  • Exemplo 1:
String x = "Codigo";
x.concat("Unico");
System.out.println("x = " + x); //resultado: x = Codigo

O resultado esperado seria: x igual a CodigoUnico, mas como Strings são imutaveis o objeto referênciado por x não modificou o seu valor!

  • Exemplo 2:
String x = "Codigo";
x = x.concat("Unico");
System.out.println("x = " + x); //resultado: x = CodigoUnico

Como assim!? o objeto String modificou o seu valor!? NÃO! ele é imutavel! O que aconteceu foi que ao dizer x = x.concat("Unico"); um novo objeto String com o valor “CodigoUnico” foi criado na memória(heap) concatenando o valor "Codigo" com “Unico”. Depois desse novo objeto ser criado ele foi atribuido a variavel de referencia x, então quando pedimos para vizualizar x estamos vizualizando o valor do novo objeto String que foi criado.

O que aconteceu com o outro objeto String com o valor “Codigo”? Ele foi para um local especial da memória chamado “String constant pool”. Sempre que vamos criar uma string o compilador checa no “String constant pool” para ver se já existe um objeto String idêntico. Se existir, a variavel de referência vai referenciar diretamente para este objeto String já existente e não será criado um novo objeto na memória contendo a string. (A String existente passará simplismente a ter mais referencias a ela, isso é normal.)

StringBuilder e StringBuffer

Como vimos acima objetos String são imutaveis. Se você pretende fazer muitas modificações a um objeto String você acabará com vários objetos String abandonados no “String constant pool”. O StringBuilder e StringBuffer veio para solucionar esse problema! Eles podem ser modificados quantas vezes quizer e não será criado um novo objeto, e sim o valor do objeto será realmente modificado.

  • Exemplo 3:
StringBuffer x = "Codigo";
x.append("Unico");
System.out.println("x = " + x); //resultado: x = CodigoUnico

Neste exemplo o valor do objeto foi realmente modificado sem a necessidade de atribuir o resultado a variavel de referencia x. A unica diferença entre StringBuilder e StringBuffer é que os métodos do StringBuilder não são sincronizados ou seja não são confiáveis se estiverem usando thread. A Sun recomenda usar o StringBuilder sempre que possével ao inves do StringBuffer. Alem disso as duas classes são identicas.

sexta-feira, 18 de fevereiro de 2011

Variáveis de Referência e de Valor

O Java suporta dois tipos de variáveis, elas podem ser: de referência ou de valor.

Variáveis de Valor

As variáveis de valor (primitivas; int, long, etc...), são aquelas que armazenam os dados no exato espaço de memória onde a variável está.

Variáveis de Referência

As variáveis de referência são aquelas que armazenam o endereço de memória onde o dado está armazenado. Ao declarar uma variável do tipo de uma certa classe, na verdade se declara uma variável que referência um objeto daquela classe.

Exemplo

Vamos supor que declaramos as duas variáveis do tipo int e String.

int num = 10;
String nome = "Hello";

Suponha que a Figura 1 represente a memória do computador, com seus endereços de memória, o nome das variáveis e os tipos de dados que ele pode suportar.

Figura 1. Representação da memória.


No espaço de memória (0x1001) da variável num (do tipo int) possui o seu valor atual, no qual é 10. No espaço de memória (0x2002) da variável nome (do tipo String) possui somente o endereço de memória que contém o valor da variável, no qual é 0x3003. Agora se olharmos no endereço de memória 0x3003 podemos encontrar o valor "Hello".

quarta-feira, 16 de fevereiro de 2011

Escrever, Compilar e Executar Programas em Java

Crie uma pasta com o nome prog dentro do drive C:

A ideia aqui é mostrar o esqueleto ou estrutura básica de um programa Java, como utilizar o compilador e como executar esse programa.

Codificação

Para escrever o programa abaixo utilize um simples editor de texto. Recomendo a utilização do Notepad++ ou do Bloco de Notas.

1. Digite o código abaixo no editor de texto.
2. Salve com o nome PrimeiroPrograma.java dentro do diretório C:\prog.

Cada arquivo deve conter apenas uma classe pública. O nome do arquivo deve ser o mesmo nome da classe publica, acréscido da extensão .java. É permitido que um arquivo tenha várias outras classes não publicas.

public class PrimeiroPrograma {
    public static void main(String[] args) {
        System.out.println("Meu primeiro programa em Java!");
    }
}

O que significa cada linha do programa?

public class PrimeiroPrograma {

Esse trecho define que a classe é publica e que o nome da classe é PrimeiroPrograma. Uma classe pública ela é acessível por qualquer outra classe. Em outra oportunidade será explicado com mais detalhes a diferença de pública, privado e outros modificadores de acesso.

public static void main(String[] args) {

Aqui é aonde o programa inicia, por agora isso é o mais importante que você deve entender. O public é para indicar que é um metodo público, o static é porque não precisamos criar uma instância ou objeto da classe antes de usar o método main, e void é para informar que esse método não retorna um valor. O String[] args é usando para passar parâmentros para o programa através da linha de comando.

System.out.println("Meu primeiro programa em Java!");

O System.out.println() é um comando usado para exibir um valor na saída padrão do computador, no qual geralmente é o monitor.

Compilação

Compilar um programa em Java é muito fácil.

1. Abre a linha de comando e digite os comandos abaixo.
2. cd C:\prog, pressione Enter.
3. javac PrimeiroPrograma.java, pressione Enter.

Se tiver compilado corretamente não vai aparecer nenhuma mensagem. Quando um programa é compilado, um arquivo .class é criado. Em nosso exemplo um arquivo PrimeiroPrograma.class deve ter sido criado.

Execução

Para executar basta executar o comando abaixo.

java PrimeiroPrograma

Para executar você não precisa colocar a extensão .java nem a .class.

terça-feira, 15 de fevereiro de 2011

Instalação do JDK e JRE

A instalação do Java Development Kit (JDK) é uma tarefa fácil, mas pode ser uma dificuldade para os iniciantes. Por este motivo é detalhado abaixo a instalação para facilitar a vida dos iniciantes.

O JDK é uma ferramenta fornecida gratuitamente pela Oracle, ele fornece um conjunto de ferramentas tais como compiladores e depuradores para auxiliar no desenvolvimento de aplicações. O Java Runtime Environment (JRE) também faz parte do JDK. O JRE fornece bibliotecas, a Java Virtual Machine (JVM) e outros componentes para executar os programas desenvolvidos em Java. 

Instalação do JDK 

1. Entra no endereço http://www.oracle.com/technetwork/java/javase/downloads/index.html
2. Clique em Download conforme indicado na Figura 1.

Figura 1. Página de download do JDK.

3. Em Platform selecione Windows.
4. Marque a opção I agree to the Java SE Development Kit 6 License Agreement.
5. Clique Continue.
6. Clique em jdk-6<versão>-windows-i586-p.exe para iniciar o download.
7. Salve o arquivo de instalação na sua área de trabalho.
8. Abra o arquivo de instalação.
9. Siga as instruções de instalação.
10. Se pedir para reiniciar aceite a opção.

Configuração das Variáveis de Ambiente

1. Clique em Iniciar > Painel de Controle > Sistema
2. Clique em Avançado.
3. Clique em Variáveis de Ambiente na parte inferior da janela.
4. Em Variáveis de sistema selecione PATH ou Path, depois clique em Editar.
5. Em Valor da variável vai até o final da linha e insira um ;(ponto e virgula).
6. Digite o caminho que voce instalou o JDK, gerealmente é: C:\Arquivos de Programas\Java\jdk1.6.0_<versão>\bin
7. Click OK.

Teste do JDK 

O seu sistema agora já deve estar ponto para usar o JDK. Existem alguns comandos simples para verificar se a instalação foi realizada corretamente.

1. Clique em Iniciar > Executar e digite cmd para abrir a linha de comando.
2. Digite java -version e pressione Enter.

- Se a instação foi realizada corretamente você deve ver uma tela semelhante ao da Figura 2.
- Se aparecer uma mensagem `java não é reconhecido como um comando interno ou externo` isso quer dizer que a instalação não foi realizada corretamente.

Figura 2. Verificação da instalação do JDK.

Acabou!!

Bom, acabou por agora, pois na proxima postagem vou ensinar como desenvolver um programa simples em Java e como usar os comandos javac e java para compilar e executar o programa.

segunda-feira, 14 de fevereiro de 2011

O que é a Tecnologia Java

O que é a Tecnologia Java? Uma linguagem de programação é a primeira resposta que vem na mente. Esta resposta está parcialmente correta, pois a Tecnologia Java é muito mais do que apenas a linguagem. Ela é formada por uma grande quantidade de produtos. Você provavelmente já ouviu falar em alguns destes produtos como por exemplo: Java 6, JRE, JVM, JSE, JME, Java Card, EJB, JSP, Servlet e etc.

Os programas Java não dependem de uma plataforma especifica para executar, isto graças a Maquina Virtual Java (JVM). A JVM pode ser vista como um tradutor do código Java para instruções específicas de cada sistema operacional. Sendo assim o Java consegue ser executado aonde tiver uma JVM, isto pode ser em um notebook, relógio, celular, geladeira, torradeira e etc.