Apostila de Java
Apostila de Java
Estrutura básica
Tipos Primitivos
Tipos Primitivos: Cast
Implícito
– Tipo maior recebe tipo menor:
– int = byte
Explicito
– Conversão:
– int = (int) long
• Byte b = idade.byteValue();
Variáveis e Constantes
Uma variável é uma posição na memória do computador na qual um valor pode
ser armazenado para utilização posterior em um programa. Todas as variáveis
Java devem ser declaradas com um nome e um tipo antes que elas possam ser
utilizadas. O nome de uma variável permite que o programa acesse o valor dela
na memória. O nome de uma variável pode ser qualquer identificador válido —
mais uma vez, uma série de caracteres consistindo em letras, dígitos,
sublinhados (_) e sinais de cifrão ($) que não comecem com um dígito e não
contenham espaços. O tipo de uma variável especifica o tipo de informação
armazenada nessa posição na memória. Como ocorre com outras instruções, as
instruções de declaração terminam com um ponto e vírgula (;).
• Evitar abreviações!
String nomeProfessor = "Patricia";
int idade = 23;
• Garbage Collector:
– Quando variáveis de referência não são mais
utilizadas, são removidas.
• Constantes:
– Modificador final.
– Dados estáticos.
– Utilizar todas maiúsculas!
final int DURACAO_AULA = 50;
• Entradas:
– (java.util.Scanner) → Modo texto
Scanner s = new Scanner(System.in);
String nome = s.nextLine();
– (javax.swing.JOptionPane) → Modo gráfico
String nome = JOptionPane.showInputDialog
("Digite seu nome");
Operadores
Podem ser (em relação a quantidade de operandos):
– Unários,
– Binários
– Ternários.
Operadores matemáticos;
Operadores de comparação;
Operadores lógicos;
Operadores de atribuição;
Operadores especiais.
Métodos e classes
Instanciação
Assim como alguém tem de fabricar um carro a partir dos desenhos de
engenharia antes que possa realmente dirigi-lo, você deve construir um objeto
de uma classe antes que um programa possa executar as tarefas que os
métodos da classe definem. O processo para fazer isso é chamado instanciação.
Um objeto é então referido como uma instância da sua classe.
Reutilização
Assim como os desenhos de engenharia de um carro podem ser reutilizados
várias vezes para fabricar muitos carros, você pode reutilizar uma classe muitas
vezes para construir vários objetos. A reutilização de classes existentes ao
construir novas classes e programas economiza tempo e esforço. Também ajuda
a construir sistemas mais confiáveis e eficientes, porque classes e componentes
existentes costumam passar por extensos testes, depuração e ajuste de
desempenho. Assim como a noção das partes intercambiáveis foi crucial para a
Revolução Industrial, classes reutilizáveis são fundamentais para a revolução de
software que foi estimulada pela tecnologia de objetos.
Herança
Uma nova classe de objetos pode ser criada convenientemente por meio de
herança — ela (chamada subclasse) começa com as características de uma
classe existente (chamada superclasse), possivelmente personalizando-as e
adicionando aspectos próprios. Na nossa analogia do carro, um objeto da classe
“conversível” decerto é um objeto da classe mais geral “automóvel”, mas,
especificamente, o teto pode ser levantado ou baixado.
Interfaces
O Java também suporta interfaces — coleções de métodos relacionados que
normalmente permitem informar aos objetos o que fazer, mas não como fazer
(veremos uma exceção a isso no Java SE 8). Na analogia do carro, uma interface
das capacidades “básicas de dirigir” consistindo em um volante, um pedal de
acelerador e um pedal de freio permitiria que um motorista informasse ao carro
o que fazer. Depois que você sabe como usar essa interface para virar, acelerar
e frear, você pode dirigir muitos tipos de carro, embora os fabricantes possam
implementar esses sistemas de forma diferente. Uma classe implementa zero ou
mais interfaces — cada uma das quais pode ter um ou mais métodos —, assim
como um carro implementa interfaces separadas para as funções básicas de
dirigir, controlar o rádio, controlar os sistemas de aquecimento, ar-condicionado
e afins. Da mesma forma que os fabricantes de automóveis implementam os
recursos de forma distinta, classes podem implementar métodos de uma
interface de maneira diferente. Por exemplo, um sistema de software pode incluir
uma interface de “backup” que ofereça os métodos save e restore. As classes
podem implementar esses métodos de modo diferente, dependendo dos tipos
de formato em que é feito o backup, como programas, textos, áudios, vídeos etc.,
além dos tipos de dispositivo em que esses itens serão armazenados.
Comentando programas
Declarando um método
// método main inicia a execução do aplicativo Java
é um comentário de fim de linha que indica o propósito das linhas 7 a 10 do
programa. A linha 7
public static void main(String[] args)
é o ponto de partida de cada aplicativo Java. Os parênteses depois do
identificador main indicam que ele é um bloco de construção
do programa chamado método. Declarações de classe Java normalmente
contêm um ou mais métodos. Para um aplicativo Java, um
dos métodos deve ser chamado main e ser definido como mostrado na linha 7;
caso contrário, a JVM não executará o aplicativo. Os
métodos realizam tarefas e podem retornar informações quando as completam.
Explicaremos o propósito da palavra-chave static
na Seção 3.2.5. A palavra-chave void indica que esse método não retornará
nenhuma informação. Mais tarde, veremos como um
método pode fazer isso. Por enquanto, basta simular a primeira linha de main
nos aplicativos Java. Na linha 7, a String[] args
entre parênteses é uma parte necessária da declaração main do método, que
discutiremos no Capítulo 7.
A chave esquerda na linha 8 inicia o corpo da declaração do método. Uma chave
direita correspondente deve terminá-la (linha
10). A linha 9 no corpo do método é recuada entre as chaves.
Exemplo
1 // Aula.java
2 // Programa de impressão de texto.
3
4 public class BemVindo
5 {
6 // método main inicia a execução do aplicativo Java
7 public static void main(String[] args)
8 {
9 System.out.println("Bem vindo ao curso de java!");
10 } // fim do método main
11 } // fim da classe BemVindo
Declarações import
Essas classes são agrupadas em pacotes — chamados de grupos de classes
relacionadas e, coletivamente, são chamadas de biblioteca de classes Java.
É uma declaração import que ajuda o compilador a localizar uma classe utilizada
nesse programa. Isso indica que o programa usa a classe Scanner predefinida
(discutida mais adiante) do pacote chamado java.util. O compilador então
garante que você usa a classe corretamente.
Mostrar uma mensagem na tela
public class Mensagem { // Uma classe Java é como se fosse um "molde" pelo
qual são instanciados(criados) os objetos.
//Um objeto gerado a partir dessa classe seria a mensagem mostrada na tela .
//O VOID é tipo de retorno do método. Este tipo de retorno significa vazio/nada,
o método não dá retorno nenhum. Os métodos podem retornar qualquer tipo do
seu projeto, até mesmo os criados por você. O método main é chamado
quando vc manda rodar uma classe java (java - classe)
// (String[] args) Este parâmetro serve para caso seu programa precise receber
algum valor como argumento, isso é muito comum quando o programa é
iniciado por outro programa
Adicionando inteiros
Nosso próximo aplicativo lê (ou insere) dois inteiros (números inteiros como –22,
7, 0 e 1024) digitados por um usuário no teclado, calcula sua soma e a exibe.
Esse programa deve manter um registro dos números fornecidos pelo usuário
para o cálculo mais tarde no programa. Os programas lembram-se dos números
e de outros dados na memória do computador e os acessam por meio de
elementos de programa chamados variáveis.
public class Soma {// Uma classe Java é como se fosse um "molde" pelo qual
são instanciados(criados) os objetos. Por exemplo, temos a classe Soma com
atributos numeros e o operador. Um objeto gerado a partir dessa classe seria a
instância soma do valor 1 com o valor 2 mostrando o resultado.
//O VOID é tipo de retorno do método. Este tipo de retorno significa vazio/nada,
o método não dá retorno nenhum. Os métodos podem retornar qualquer tipo do
seu projeto, até mesmo os criados por você.
O método main é chamado quando vc manda rodar uma classe java (java -
classe)
(String[] args) Este parâmetro serve para caso seu programa precise receber
algum valor como argumento, isso é muito comum quando o programa é
iniciado por outro programa
num1 = Integer.parseInt(JOptionPane.showInputDialog(null,"Digite um
numero:"));
// Integer.parseInt: analisa, e retorna um inteiro
• set e get é um padrão para nomear métodos, onde o set significa que você
mudará o estado do objeto e o get te retornará algum valor de um
determinado estado. Em outras palavras o GET é quando você quer pegar
um valor. SET é quando você deseja enviar algo, algum valor.
A classe Scanner tem como objetivo separar a entrada dos textos em blocos,
gerando os conhecidos tokens, que são sequências de caracteres separados por
delimitadores que por padrão correspondem aos espaços em branco, tabulações
e mudança de linha.
Com essa classe podem ser convertidos textos para tipos primitivos, sendo que
esses textos podem ser considerados como objetos do tipo String, InputStream
e arquivos.
public class ValidaSenha { // Uma classe Java é como se fosse um "molde" pelo
qual são instanciados(criados) os objetos. Por exemplo, temos a classe
ValidaSenha com atributos senha, Make. Um objeto gerado a partir dessa classe
seria a instância Acesso Negado e Acesso Permitido .
private static String MAKE; // Static serve para referenciar todos aqueles
atributos/métodos de classe, ou seja, que podem ser acessados diretamente da
definição da classe, sem precisar instanciar nenhum objeto
public static void main(String[] args){ //O VOID é tipo de retorno do método.
Este tipo de retorno significa vazio/nada, o método não dá retorno nenhum. Os
métodos podem retornar qualquer tipo do seu projeto, até mesmo os criados por
você.
O método main é chamado quando vc manda rodar uma classe java (java -
classe)
(String[] args) Este parâmetro serve para caso seu programa precise receber
algum valor como argumento, isso é muito comum quando o programa é iniciado
por outro programa
String senha =MAKE; // são objetos que contém uma cadeia de caracteres. São
imutáveis, portanto uma vez criadas não podem ser alteradas.
while (senha != MAKE){ //While: Esta instrução é usada quando não sabemos
quantas vezes um determinado bloco de instruções precisa ser repetido. Com
ele, a execução das instruções vai continuar até que uma condição seja
verdadeira.
O do/while tem quase o mesmo funcionamento que o while, a diferença é que
com o uso dele teremos os comandos executados ao menos uma única vez.
}
}
While
O termo while pode ser traduzido para o português como “enquanto”. Este termo é
utilizado para construir uma estrutura de repetição que executa, repetidamente, uma
única instrução ou um bloco delas “enquanto” uma expressão booleana for verdadeira.
do-while
A estrutura de repetição do-while é uma variação da estrutura while. Existe uma
diferença sutil, porém importante, entre elas. Em um laço while, a condição é testada
antes da primeira execução das instruções que compõem seu corpo. Desse modo, se
a condição for falsa na primeira vez em que for avaliada, as instruções desse laço não
serão executadas nenhuma vez. Em um laço do-while, por outro lado, a condição
somente é avaliada depois que suas instruções são executadas pela primeira vez,
assim, mesmo que a condição desse laço seja falsa antes de ele iniciar, suas
instruções serão executadas pelo menos uma vez.
Static main
Quando declarado o método main como static permite que invoque o main sem
criar uma instância da classe, ou seja, a classe é conhecida como classe
principal ou classe testadora, que efetuará os testes e chamadas das classes
para a execuções dos programas
if/else
Usando IF
Para usar o IF basta digitar entre parênteses o que deve ser comparado.
IMPORTANTE: IF é uma palavra reservada que não aceita ponto-e-vírgula (;) no
final.
Se for verdadeiro, o programa executará a primeira linha logo abaixo do if. Mas,
e se quisermos executar várias linhas se if for verdadeiro? Se o if tiver que
executar várias linhas, todas as linhas que devem ser enquadradas dentro do
bloco de dados - as chaves ({}).
Usando ELSE
O ELSE só existe se tiver um IF. O else só será executado se o IF for falso. Else
executará só a primeira linha abaixo dele. Se o else tiver que executar várias
linhas, vale a mesma regra de if. Todas as linhas a ser executadas deverão estar
contidas dentro do bloco de dados ({}). Para que IF chegue a uma decisão de
falso e verdadeiro são necessários operadores lógicos. Dos quais destacam-se
import java.util.Random;
import java.util.Scanner;
inicializaTabuleiro(tabuleiro);
iniciaNavios(navios);
System.out.println();
do{
mostraTabuleiro(tabuleiro);
darTiro(tiro);
tentativas++;
if(acertou(tiro,navios)){
dica(tiro,navios,tentativas);
acertos++;
}
else
dica(tiro,navios,tentativas);
alteraTabuleiro(tiro,navios,tabuleiro);
}while(acertos!=3);
navios[navio][0]=sorteio.nextInt(5);
navios[navio][1]=sorteio.nextInt(5);
}while( (navios[navio][0] ==
navios[anterior][0])&&(navios[navio][1] ==
navios[anterior][1]) );
}
}
}
System.out.print("Linha: ");
tiro[0] = entrada.nextInt();
tiro[0]--;
System.out.print("Coluna: ");
tiro[1] = entrada.nextInt();
tiro[1]--;
String e array
Strings são utilizadas frequentemente em várias linguagens de programação,
não apenas Java. Embora Strings sejam uma sequência de caracteres em Java,
e não um array de caracteres.
Array é um conjunto de variáveis de mesmo tipo, guardado dentro de apenas
um identificador.
Em Java, o importante é entender que string não é um tipo de dado, mas sim
uma classe. E suas variáveis são, na verdade, objetos dessa classe.
Em síntese, tanto um array de caracteres como uma string se apresentam da
mesma forma.
Então, qual a vantagem de se usar uma classe e não um array de tipo primitivo?
A resposta se baseia exatamente no uso da orientação a objetos e no fato de
que existem muitos métodos que podemos utilizar em um objeto instanciado da
classe String, mesmo sendo os objetos desta classe imutáveis, ou seja, uma vez
instanciados não podemos mudar o que está guardado dentro do objeto String .