Hiromiti Nakagawa – Treinamento Java Básico
Julho, 2013
Java Básico
© 2009 IBM Corporation
Treinamento Java Básico
Agenda
Apresentações
Ambiente de Desenvolvimento
Fundamentos
Exercícios
Controle de fluxo
Exercícios
2 © 2009 IBM Corporation
Apresentações
Hiromiti Nakagawa
– Formado em Engenharia da Computação – UFSCar/2005
– Mestre em Ciências da Computação – UFSCar/2012
– Ago/2005: Estágio na IBM
– Dez/2005: contratado como desenvolvedor Java
– Projetos Java EE da conta IGA
– Certificações
– Parcerias acadêmicas
Alunos
3 © 2009 IBM Corporation
Apresentações
Curso Java Básico: 20 horas
Cronograma:
– 13/07 08:00 ~ 13:00
– 20/07 08:00 ~ 13:00
– 27/07 08:00 ~ 13:00
– 03/08 08:00 ~ 13:00
Esquema de trabalho
– O que esperar e o que não esperar do treinamento
– Porta para a carreira de desenvolvedor
– Outro fatores relevantes
Oportunidades IBM
Brasil – Falta de profissionais na área
– Conhecimento técnico + fluência em inglês
4 © 2009 IBM Corporation
Treinamento Java Básico
Agenda
Apresentações
Ambiente de Desenvolvimento
Fundamentos
Exercícios
Controle de fluxo
Exercícios
5 © 2009 IBM Corporation
Ambiente de Desenvolvimento
Plataforma Java:
– JDK 7 ([Link])
– Eclipse 4.3 ([Link])
– JDK – Java Development Kit
• É um super pacote que tem uma JRE e contém tudo o que é necessário para se
desenvolver um aplicativo Java, incluindo as APIs Java e ferramentas, como
compiladores e debuggers
– JRE – Java Runtime Environment (VM and API)
• Provê blibliotecas e componentes para se desenvolver e executar um programa
escrito em Java
6 © 2009 IBM Corporation
Treinamento Java Básico
Agenda
Apresentações
Ambiente de Desenvolvimento
Fundamentos
Exercícios
Controle de fluxo
Exercícios
7 © 2009 IBM Corporation
Fundamentos
Java é uma plataforma de desenvolvimento composta por:
– Linguagem de programação Orientada a Objetos
– Runtime Environment (JVM – Java Virtual Machine)
– JSE – Java Standard Edition
• Aplicações desktop (Swing, SWT, RCP)
• Pacotes (bibliotecas)
– JEE –Java Enterprise Edition
• Aplicações corporativas (web, JSP, Servlet, EJB, JPA)
• Servidor de aplicação
– Java Embedded
• Dispositivos embarcados (smartcards)
– Java Mobile (JME)
• Android
8 © 2009 IBM Corporation
Fundamentos
Conceitos JVM
– java: comando para executar código java
– javac: comando para compilar código java
9 © 2009 IBM Corporation
Fundamentos
Conceitos JVM
1 © 2009 IBM Corporation
0
Fundamentos
O primeiro componente da arquitetura da JVM é o class loader, utilizado para ler
arquivos .class. O Class Loader Object carrega os arquivos .class definidos pelo usuário
juntamente com seus pacotes definidos e o 'boot strap class loader' carrega arquivos .class
da API do JAVA em tempo de execução.
Os arquivos .class carregados são direcionados ao Execution Engine. Que traduzirá os byte
codes dos .class em código nativo da plataforma onde está se rodando este código.
O Execution engine não irá compilar todo o bytecode de uma vez só. O mesmo passará
pelo JIT(Just in Time Compiler) se ele estiver habilitado ou pelo interpretador da JVM. O JIT
transformará os bytecodes em linguagem de máquina aos blocos, sendo mais rápido que o
JVM Interpreter que interpreta os bytecodes em tempo de execução.
Quando o código utiliza outras linguagens(ou biblioteca das mesmas), também conhecidas
como código nativo(.dll, .cab) para Java, o mesmo é processado pelo tradutor de código
nativo da JVM.
JVM aloca memória para os tipos de dados da linguagem java em tempo de execução e
não compilação. A JVM inicialmente necessita alocar entre 2MB a 64MB para iniciar a rodar
uma aplicação.
1 © 2009 IBM Corporation
1
Fundamentos
Estrutura de uma classe Java
Definição do pacote
Imports de pacotes
Declaração da classe {
Declaração de variáveis
de instância
Declaração de métodos
}
1 © 2009 IBM Corporation
2
Fundamentos
Palavras Reservadas em Java:
– Interpretadas pelo compilador como comandos próprios da linguagem
1 © 2009 IBM Corporation
3
Fundamentos
Tipos Primitivos
– byte
– short
– int
– long
– float
– double
– char
– boolean
1 © 2009 IBM Corporation
4
Fundamentos
Variaveis em Java
– Nome pode:
• Ser formado por números, letras, $, e _
• Ter qualquer tamanho
• Ter o estilo CamelCase
– Nome da viariável NÃO pode:
• Ser uma palavra reservada
• Começar com um número
• Ter espaços
– Nome da variável DEVE:
• Começar com uma letra ou $ ou _
• Levar em consideração o CASE (Classes/Métodos e Variáveis)
• Ser auto-explicativo
Declaração de variáveis:
<type> <name1>;
<type> <name1> = initial_value;
<type> <name1>, <name2>, <name3>;
<type> <name1> = initial_value, <name2> = initial_value;
1 © 2009 IBM Corporation
5
Fundamentos
Exemplo: Declaração de variáveis de tipo primitivo
1 © 2009 IBM Corporation
6
Fundamentos
Constantes
– Servem para variáveis que que possuem um valor constante, ou que não mudam nunca
– O valor não vai mudar depois que a variável for inicializada
– A palavra chave final é usada:
final <tipo> <VARIABLE_NAME> = value;
final String SONHO_DE_CONSUMO ”;
– Recomenda-se que o nome da variável esteja em letras maiúsculas e seja usado _ para
separar as palavras
1 © 2009 IBM Corporation
7
Fundamentos
Operadores
– Modificam os valores armazenados nas variáveis
– Atribuição: =; +=, -=, *=, /=; ++, --
1 © 2009 IBM Corporation
8
Fundamentos
Operadores
– Aritméticos: +, -, *, /, % (mod – resto da divisão inteira)
• Div – quociente da divisão inteira?
• Divisão fracionária?
1 © 2009 IBM Corporation
9
Fundamentos
Operadores
– Relacionais ou de comparação: <, <=, >, >=, ==, !=
2 © 2009 IBM Corporation
0
Fundamentos
Operadores
– Lógicos: &, |, ^, !, &&, ||
– Condicional ou ternário: ? :
2 © 2009 IBM Corporation
1
Fundamentos
Operadores
– Operadores Unários:
• + indica valor positivo
• - indica valor negativo
• ! inverte o valor de uma variável booleana
– instanceof operator
2 © 2009 IBM Corporation
2
Fundamentos
Diretivas, Blocos e Escopo
– Statements: diretivas ou instruções
• Exemplos:
int result = 0;
int[] anArray = new int[3];
anArray[0] = result;
[Link]("Element 1 at index 0: " + anArray[0]);
result = 1 + 2; // result is now 3
• São separadas com ;
• Podem ocupar a mesma linha ou linhas distintas
– Blocos
• É um conjunto de zero, uma ou mais instruções ou diretivas
• Pode ser utilizado em qualquer lugar
• { Inicia um bloco
• } Termina um bloco
• Não são finalizados com ';'
• São tratados como uma única diretiva composta com N diretivas
2 © 2009 IBM Corporation
3
Fundamentos
Diretivas, Blocos e Escopo
– Escopo
• Regiões que delimitam acesso a variáveis e métodos que foram declarados
• Blocos ajudam a definir escopos dentro do código
• Um escopo pode ter N outros escopos
• O escopo mais “interno” tem acesso as variáveis e métodos dos escopos mais
externos
2 © 2009 IBM Corporation
4
Fundamentos
Exemplo
2 © 2009 IBM Corporation
5
Fundamentos
Arrays
– Tamanho fixo
– Mesmo tipo de dado
– Para acessar: indexador começa sempre no 0
– Declarando um array de primitivos
int[] key; // colchetes antes do nome (recomendado)
int key []; // colchetes depois do nome (OK, dificulta entender)
– Criando, Inicializando, a Acessando um Array
int[] anArray = new int[10]; // create an array of 10 integers
anArray[0] = 100; // initialize first element
anArray[1] = 200; // initialize second element
anArray[2] = 300; // etc.
[Link]("Element 1 at index 0: " + anArray[0]);
int[] anArray = {100, 200, 300, 400, 500, 600, 700,800, 900, 1000};
2 © 2009 IBM Corporation
6
Fundamentos
Array de Array (Matriz)
– Array em que cada elemento é um outro Array
int[][] matriz = new int[3][2];
matriz[0][0] = 1;
matriz[0][1] = 1;
matriz[1][0] = 2; matriz[2][0] = 3;
matriz[1][1] = 2; matriz[2][1] = 3;
[Link]("Element at index [0][0]: " + matriz[0][0]);
int[][] matriz = { {1, 1}, {2, 2} {3,3} };
int[][] matriz = new int[3][2];
for(int i = 0; i < [Link]; i++){
for(int j = 0; j < matriz[i].length; j++){
matriz[i][j] = i+1;
[Link](matriz[i][j]);
}
}
2 © 2009 IBM Corporation
7
Fundamentos
Exemplo
2 © 2009 IBM Corporation
8
Fundamentos
Strings
String sample = "Sample Text!";
– Compare Strings utilizando o método equals();
[Link](otherString); //right!
myString == otherString; //wrong!
; //right!
myString != otherString; //wrong!
– Cuidado com Performance
• Array de char
– A cada alteração/concatenação de uma string, um novo objeto String é criado
String s = new String(“Teste”)
s = “Novo valor”
StringBuffer
– Reusa o mesmo objeto (concatenação e alterações são feitas no próprio objeto)
2 © 2009 IBM Corporation
9
Fundamentos
Exemplo
3 © 2009 IBM Corporation
0
Fundamentos
Best Practices
– Identar o código adequadamente
– Adotar padrões para formatação do código
– Sempre usar {..} em ifs, switches, for, etc
– Utilizar camelCase para nomear variáveis, métodos, classes
– Escolher nomes representativos
– Comentar o código
– Manter o código simples e enxuto
– Criar métodos para trechos de código que são usados para executar uma função
específica ou que podem ser reusados
3 © 2009 IBM Corporation
1
Treinamento Java Básico
Agenda
Apresentações
Ambiente de Desenvolvimento
Fundamentos
Exercícios
Controle de fluxo
Exercícios
3 © 2009 IBM Corporation
2
Exercícios
Instalar JDK
Abrir o Eclipse, selecionar a perspectiva Java
Criar um projeto Java
Criar uma classe
Criar o main()
Compilar
Executar
Escrever um Hello World Java
Escrever um código que calcula o menor número de notas necessárias para formar um
valor que refere-se à quantia a ser sacada de um caixa eletrônico. As notas que este caixa
possui são de R$50,00, R$20,00, R$10, R$5,00 e R$1,00
3 © 2009 IBM Corporation
3
Exercícios
Solução
3 © 2009 IBM Corporation
4
Treinamento Java Básico
Agenda
Apresentações
Ambiente de Desenvolvimento
Fundamentos
Exercícios
Controle de fluxo
Exercícios
3 © 2009 IBM Corporation
5
Controle de fluxo
Estruturas para controlar e/ou alterar o fluxo de execução segundo:
– Condições: if. if-else, switch
– Repetições: while, for, do-while
if-else
– else é opcional
– Pode ser aninhado
if (condition) { if (condition1) {
… …
} } else if (codition2) {
…
if (condition) { } else {
… …
} else { }
… }
}
3 © 2009 IBM Corporation
6
Controle de fluxo
Exemplo
3 © 2009 IBM Corporation
7
Controle de fluxo
switch
– Testa uma variável em relação a uma lista de opções
– Compara pela igualdade (não funciona com <, <=, >, >=, !=)
– “break” é essencial ser usado
– Apenas tipos primitivos inteiros (byte, short, int, long), char e enumpodem ser usados
– Strings não eram permitidas até a versão 7
– Objetos como Dog, Customers não são permitidos
– Linhas de código depois do case são executados até encontrar o comando break
– Sintaxe:
switch (variable){
case value1:
…
break;
case value2:
…
break;
default:
…
}
3 © 2009 IBM Corporation
8
Controle de fluxo
Exemplo
3 © 2009 IBM Corporation
9
Controle de fluxo
while
– Loop
– Enquanto a condição for satisfeita, executa o bloco de código
– Executa 0 ou mais vezes
– Sintaxe:
while( condition ){
…
}
4 © 2009 IBM Corporation
0
Controle de fluxo
do-while
– Loop
– Executa o bloco de código enquanto a condição for satisfeita
– Executa 1 ou mais vezes
– Sintaxe:
do
…
} while ( condition );
4 © 2009 IBM Corporation
1
Controle de fluxo
for (tradicional)
– Syntax:
for ((1)int i = 0; (2)i < 10; (4)i++){
(3)…
}
(1) Faz a declaração/inicialização da variável de controle da iteração
(2) Condição para continuação do loop
(3) Código a ser executada a cada iteração
(4) Incremento da variáveld e controle valor e repete 2-3-4.
Quando (2) avalia como falso, a iteração para
– Todos os elementos são opcionais. Se (2) não estiver presente, a condição sempre é
“true”
4 © 2009 IBM Corporation
2
Controle de fluxo
Exemplo – for (tradicional)
4 © 2009 IBM Corporation
3
Controle de fluxo
Enhanced for
– Iteração do tipo “for each”
– Pode ser usado com qualquer array ou Collection
– Sintaxe:
for (declaration : array) {
…
}
– Exemplo:
int[] numberArray = {10, 20, 30, 40, 50};
for (int number : numberArray) {
[Link](number);
}
– O indíce atual não é mantido em nenhum lugar
4 © 2009 IBM Corporation
4
Controle de fluxo
Exemplo – enhanced for
4 © 2009 IBM Corporation
5
4 © 2009 IBM Corporation
6
Controle de fluxo
Branching statements
– break
• Interrompe o fluxo de execução
• Pode ser usado fora de um switch para:
Terminar um loop (for, while, do-while), “quebrando o laço”;
Modificar o fluxo de controle dentro de uma estrutura condicional (if, if-else, switch);
• Duas formas: labeled e unlabeled
Unlabeled
for (… ;… ;…) {
…;
if (condition)
break;
…;
}
Labeled
label:
for (…;…;…) { // 1st for
for(…;…;…) {// 2nd for
…
if (condition)
break label; // breaks to 1st for
…
}
…
}
4 © 2009 IBM Corporation
7
Controle de fluxo
continue
– Passa a iteração seguinte de
um for, while ou do while,
“continuando o laço”
– Pode ser labeled ou não
4 © 2009 IBM Corporation
8
Controle de fluxo
return
– Indica saída de um método ou controle de fluxo
– Permite retornar um valor como resultado do método invocado
– Espera um valor se o tipo do retorno do método não for void.
– Finaliza a execução de um método, e por isso geralmente é a última instrução a ser
chamado em um laço ou método
4 © 2009 IBM Corporation
9
Treinamento Java Básico
Agenda
Apresentações
Ambiente de Desenvolvimento
Fundamentos
Exercícios
Controle de fluxo
Exercícios
5 © 2009 IBM Corporation
0
Exercícios
Criar um código para ordernar um array em ordem crescente
– 13, 31, 17, 3, 1, 5, 17, 11, 7, 23, 19, 29, 1
Ordernar e remover os repetidos
Crie um código que faça a transposição de uma matriz, ou seja, elementos de uma linha
devem ser colocados na coluna da nova matriz transposta.
5 © 2009 IBM Corporation
1
Exercícios
Solução
5 © 2009 IBM Corporation
2
Exercícios
5 © 2009 IBM Corporation
3
Exercícios
5 © 2009 IBM Corporation
4
Exercícios
5 © 2009 IBM Corporation
5
Backup slides
Executando Código no Eclipse
– Botão direito na classe que se deseja executar.
– Run As > Java Application.
– Notas: Se Java Application não estiver disponível a você, as chances de você ter criado
um método main () dentro de sua classe com algum tipo de Typo ou erro é muito
grande. O método deve seguir o padrão passado:
– O mesmo pode ser declarado com um VARG nos argumentos do método no lugar de
um Array de Strings. Exemplo: String ...args .
5 © 2009 IBM Corporation
6