Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução e sintaxe
• Orientada a Objeto
• Robusta e Segura
• Distribuída e Portátil
• Arquitetura Neutra
• Interpretada mas de Alta Performance
• Sintaxe Simples
Tecnologia JAVA – De onde veio?
“Microprocessadores têm impacto profundo em dispositivos inteligentes eletrônicos
voltados para o consumidor”, 1991
1996
Janeiro - Release do JDK 1.0.
Dezembro - release do JDK 1.1 Beta.
1997
Fevereiro - release do JDK 1.1.
Março - release do Java Servlet Developers Kit e anunciada a JNDI API.
Abril - anunciada a tecnologia Enterprise JavaBeans (EJB), além de incluir a Java Foundation Classes (JFC) na plataforma Java.
1998
Março - inicio do projeto JFC/Swing.
1999
Fevereiro - release do Java 2 Platform.
Junho - anuncio da "divisão" da tecnologia Java em três edições (J2SE, J2EE, J2ME).
Outubro – Celulares (GSM) baseados em tecnologia Java chegam à Europa
2000
Maio - release da J2SE v. 1.3.
2001
Abril - release do J2EE 1.3 beta, contendo as especificações EJB 2.0, JSP 1.2 e Servlet 2.3.
2002
Dezembro - release do J2EE 1.4 Beta.
T i m e l i n e
2003
Setembro - release da Java Portlet API a padronização dos portais com uso de tecnologia Java.
2004
Outubro - release do Java 5.0, chamado de Java Tiger.
2006
Dezembro - release do Java 6.0, chamado de Java Mustang ( desenvolvido em OPEN SOURCE).
2009
Janeiro – versão final do JavaFX
Abril – Oracle compra a Sun por US$ 7,4 bi
2011
Julho – lançamento do Java 7.0
2012
Julho – lançamento do JavaFX 2
2014
Julho – lançamento do Java 8.0 + JavaFX 8 (mesmo SDK) (Expressões lambdas)
2017
Setembro – lançamento do Java 9.0 (modularização/Jigsaw)
2018
Março – lançamento do Java 10.0 (variável local não tipada)
T i m e l i n e
2018
Após o lançamento do Java 10, a Oracle muda licença do JDK e fornece 2 Builds:
•Oracle JDK (comercial), que pode ser usado gratuitamente em ambientes de desenvolvimento e teste, mas você tem
que pagar para usá-lo na produção. O OracleJDK é uma versão LTS (Suporte Estendido).
•Oracle Open JDK (open source), que pode ser usado em qualquer ambiente gratuitamente. Que é uma versão
Feature Release (Duração de 6 meses)
Saiba mais:
https://www.webmundi.com/dese
nvolvimento-de-sistemas/java/jdk-
java-development-kit-distribuicoes
-e-versoes/
Produtos e APIs
Java SE
• Composição: ferramentas e APIs essenciais para qualquer aplicação Java
(inclusive GUI)
• A versão atual (JavaFX 11) permite a criação para desktop, browser e telefone celulares. TVs,
videogames, Blurays players e outras plataformas estão sendo planejadas para serem adicionadas no
futuro.
“Java everywhere”
• “Java everywhere" é o nome do conceito aplicado ao fato de Java ser uma solução
ponta-a-ponta, com arquitetura única.
• O conceito “Java everywhere” representa para desenvolvedores um máximo de
produtividade e permite entrar em mercados e tecnologias emergentes sem a
necessidade de novos (e caros) treinamentos.
“What is Java Used For?”
https://www.javatpoint.co
m/what-is-java-used-for#
Ambiente de execução e desenvolvimento
https://www.webmundi.com/wp-content/uploads/
diferenca-entre-JDK-JRE-JVM.png
Compilação para bytecode
• Bytecode é o código de máquina que roda em
qualquer máquina através da Máquina Virtual Java
(JVM)
• Texto contendo código escrito em linguagem Java é
traduzido em bytecode através do processo de
compilação e armazenado em um arquivo *.class
chamado de Classe Java
Arquivo .java
compilação
Arquivo .class
Compilação para bytecode Exemplo
HelloWorld.java
Compilação (javac)
HelloWorld.class
Ambiente de desenvolvimento Java típico
O programa é criado em
um editor e armazenado
Fase 1: Edita Editor no disco em um arquivo
.java
Ambiente de desenvolvimento Java típico
O programa é criado em
um editor e armazenado
Fase 1: Edita Editor no disco em um arquivo
.java
O compilador cria
bytecodes e os
Fase 2: Compila Compilador armazena no disco em
um arquivo .class
Ambiente de desenvolvimento Java típico
Memória principal
Memória principal
Memória principal
Verificação garante
• Aderência ao formato de arquivo especificado [JVMS]
• Não-violação da integridade do sistema
• Ausência de estouros de pilha
• Tipos de parâmetros corretamente especificados, e
• ausência de conversões ilegais de tipos
Máquina Virtual Java (JVM)
“Máquina imaginária implementada como uma aplicação de software em uma
máquina real”
A forma de execução de uma aplicação depende ...
• ... da origem do código a ser executado (remoto ou local)
• ... da forma como foi implementada a JVM pelo fabricante (usando tecnologia JIT, HotSpot, etc.)
bytecode
HelloWorld.class
pilha heap
Mensagem m, n, p; y “A”
y = new Mensagem("A");
x = y; x
z = new Mensagem("B");
“B” GC
processo interno
z (thread)
do garbage
collector
Coleta de Lixo
• Quando um objeto não tem mais referências apontando para ele, seus
dados não mais podem ser usados, e a memória deve ser liberada.
• O coletor de lixo irá liberar a memória na primeira oportunidade
pilha heap
y “A”
x = null;
z = new Mensagem(“C"); x
“B” GC
z
“C”
Sintaxe
Anatomia
Palavras chaves
Tipos primitivos
Operadores
Estruturas de controle
Arrays
Strings
Arquivos
Anatomia
package pacote
import
. pacote;
.
.
programa.java
Exemplo de fonte em Java
public class Primeiro
{
public static void main (String arg [])
{
int ano = 1995;
System.out.println(“Alo Mundo!");
System.out.println(“Java nasceu em “+ano);
}
}
SET CLASSPATH=.
O nome do arquivo deve ser Primeiro.java
Não coloque a
Para compilar e executar:
extensão .class
C:\.....\javac Primeiro.java
C:\.....\java Primeiro
Exemplo II
public class Vetor
{
public static void main(String arg[ ])
{
int va[] = new int[3];
va[0] = 50;
va[1] = 100;
va[2] = 150;
System.out.println("Tamanho do vetor="+va.length);
int i;
for(i = 0; i< va.length ; i++)
{
System.out.println("indice= "+i+" valor ="+va[i]);
}
}
}
Sintaxe Palavras reservadas
Literais de caracter:
char c = 'a';
char z = '\u0041'; // em Unicode
Literais inteiros
int i = 10; short s = 15; byte b = 1;
long hexa = 0x9af0L; int octal = 0633;
Literais de ponto-flutuante
float f = 123f;
double d = 12.3;
double g = .1e-23;
Literais booleanos
boolean v = true;
boolean f = false;
Sintaxe Operadores
• Um operador produz um novo valor a partir de um ou mais argumentos
• Exceções:
• + e += são usados na concatenação de strings
• !=, = e == são usados também com objetos (embora não funcionem da mesma forma
quanto aos valores armazenados nos objetos)
Sintaxe Operadores
Básicos
, separador de identificadores
Aritméticos
+ adição x=x + 3
- subtração x=x - 3
/ divisão x=y / 4
% resto da divisão x=y % 5
++ incremento de 1 x++ ++x
-- decremento de 1 x-- --x
+= atribuição aditiva x+=3
-= atribuição subtrativa x-=3
*= atribuição multiplicativa x*=3
/= atribuição divisiva x/=3
%= atribuição de resto x%=3
Sintaxe Operadores
Relacionais
== igual x==y
!= diferente x!=y
> maior x>y
< menor x<y
>= maior ou igual x>=y
<= menor ou igual x<=y
Sintaxe Operadores
Lógicos
|| or (x>y) || (z>=6)
! not !(x>y)
Binários
float v;
int n;
v=123.55f;
n=(int) v;
double res=(double)1234/33;
Sintaxe Estruturas de controle
if (x==0)
Seleção: y = 5;
else
if (condição) {
comando1; y+=6;
else x++;
}
comando2;
if ( ano < 0 )
{ System.out.println("Não é um ano!");
}
else if ((ano%4==0 && ano%100!=0)||(ano%400==0))
{ System.out.println("É bissexto!");
}
else
{ System.out.println("Não é bissexto!");
}
Sintaxe Estruturas de controle
switch(letra)
Seleção: {
case ‘i’:
switch(Expr) System.out.println(“inserir”);
{ break;
case const1:
case ‘e’:
comandos1;
System.out.println(“excluir”);
break;
... break;
case constN: case ‘a’:
comandosN; System.out.println(“alterar”);
break; break;
default: default:
comandosDefault
System.out.println
}
(“Ação ignorada: ”+letra);
}
Sintaxe Estruturas de controle
Java 17+
Exemplo :
String nome="Jose";
switch (nome)
{
case "Jose","José","Ze","Zé":
System.out.println("É o Zé!!!");
break;
default:
System.out.println("Não é o Zé!!!");
}
Exemplo abreviado com arrow operator
String nome="Jose";
switch (nome)
{
case "Jose","José","Ze","Zé" -> System.out.println("É o Zé!!!");
default -> System.out.println("Não é o Zé!!!");
}
Sintaxe Estruturas de controle
switch(letra)
Seleção: {
case ‘i’:
switch(Expr) System.out.println(“inserir”);
{ break;
case const1:
case ‘e’:
comandos1;
System.out.println(“excluir”);
break;
... break;
case constN: case ‘a’:
comandosN; System.out.println(“alterar”);
break; break;
default: default:
comandosDefault
System.out.println
}
(“Ação ignorada: ”+letra);
}
Sintaxe Estruturas de controle
Repetição: while(i<100)
x +=i++;
while (condição)
{ do
...
}
{
x+=i;
i++;
do } Looping infinito
{ while(i<100);
... while ( true )
} while (condição); {
if (obj.z == 0)
break;
}
Sintaxe Estruturas de controle
Repetição:
Segundo passo:
Use a tabela para selcionar o valor da alíquota (desconto) e da dedução
e faça o cálculo.
nome="Paulo";
nomeCompleto=nome+" "+sobrenome;
if (sobrenome.equals("da Silva"))
System.out.println("É parente!");
As strings podem ser concatenadas através do operador + e devem ser comparadas pelo método equals
Strings
Métodos que criam novas Strings
• String concat(String s): retorna a concatenação da String atual com outro passado como parâmetro
• String replace(char old, char new): troca todas as ocorrências de um caractere por outro
• String substring(int start, int end): retorna parte do String incluindo a posição inicial e excluíndo a final
• String toUpperCase() e String toLowerCase(): retorna a String em caixa alta e caixa baixa
respectivamente
Outros métodos
• char[] toCharArray(): retorna o vetor de char correspondente à String
• int length(): retorna o comprimento da String.
Strings
int qtde=12;
double preco=15.98;
String str=String.format("O valor da compra de
%03d canetas = R$ %10.2f",qtde,qtde*preco);
Saida:
</body>
</html> """
Método matches(“pattern”)
String s = “true”;
http://www.vogella.com/tut
orials/JavaRegularExpression
// returns true if the string matches exactly "true" or "True" s/article.html#regex-example
s
s.matches("[tT]rue")
// returns true if the string matches exactly "true" or "True" // or "yes" or "Yes"
s.matches("[tT]rue|[yY]es")
Console
Meu nome é: Zé
Meu sobrenome é: da Silva
Leitura de dados
Utilização da classe Scanner
import java.util.Scanner;
import java.util.Scanner;
...
Scanner leitura = new Scanner(System.in);
String nome;
nome = leitura.next();
Um método para cada
int numeroInteiro; tipo
numeroInteiro = leitura.nextIntLine();
float numeroFloat;
numeroFloat = leitura.nextFloat();
Leitura de dados
Scanner.next();
Cuidados:
Scanner.nextLine(); Os métodos aceitam somente
valores correspondentes ao
Scanner.nextByte(); tipo e retornam esse tipo!
Scanner.nextFloat(); Ex:
Scanner.nextDouble(); nextDouble( ) → digitar “Java”
Scanner.nextInt();
Scanner.nextLong();
Scanner.nextShort(); Solução??
…
ENTRADA E SAÍDA DE DADOS
via GUI
Apresenta a informação necessária para o usuário e use uma String para receber o
retorno do método: showInputDialog da classe JOptionPane.
Exemplo:
ShowMessageDialog:
Utilize o método showMessageDialog da classe JoptionPane para apresentar o resultado do programa para
o usuário
Exemplo:
JOptionPane.showMessageDialog( null,
import javax.swing.JOptionPane;
ShowConfirmDialog:
Exemplo:
if(JOptionPane.showConfirmDialog(null, "Play another game?", "Confirmation",
JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION)
{
}
Exceções
try
{ // algumas ações críticas
}
catch( Exception e )
{ System.out.println(“Problemas”+e.getMessage());
}
• Exceções são
• Erros de tempo de execução
• Objetos criados a partir de classes especiais que são "lançados" quando ocorrem condições
excepcionais
• Mecanismo try-catch é usado para tentar capturar exceções enquanto elas passam por métodos
Exceções
Tipos de Erros:
O bloco try "tenta" executar um bloco de código que pode causar exceção
Deve ser seguido por
• Um ou mais blocos catch (TipoDeExcecao ref)
• E/ou um bloco finally
Blocos catch recebem tipo de exceção como argumento
Se ocorrer uma exceção no try, ela irá descer pelos catch até encontrar um que declare capturar
exceções de uma classe ou superclasse da exceção
Apenas um dos blocos catch é executado
try {
... instruções ...
} catch (TipoExcecao1 ex) {
... faz alguma coisa ...
} catch (TipoExcecao2 ex) {
... faz alguma coisa ...
} catch (Exception ex) {
... faz alguma coisa ...
} finally {
... executa sempre
}
... continuação ...
Leitura de dados com exceções
O processos de leituras e conversões de valores são considerados críticos e suscetíveis a erros, portanto devem
ser tratados por (try...catch).
import java.util.Scanner;
class leitura
{
static public void main(String args[])
{
Scanner leitura = new Scanner(System.in);
double preco;
System.out.println(“Digite o preço:”);
try
{
preco=leitura.nextDouble();
}
catch(Exception e) // ocorreu um problema
{
System.out.println(“Problemas na leitura:”+e.toString());
preco=0;//alternativa para continuar a execução do programa
}
System.out.println(“Voce digitou “+preco);
}
}
Exercício 2
Desenvolva um programa em Java que simule um jogo de adivinhação.
Primeiramente, o programa deverá pedir o nome do jogador, depois
sortear um número entre 0 e 100. Após o sorteio, inicia-se o jogo e
o jogador deverá tentar adivinhar o número sorteado.
Para calcular um número randômico, utilize o método Math.random(). Pesquise como utilizá-lo.
Arrays
Arrays
• Vetores são coleções de objetos ou tipos primitivos
tipo variável[];
ou
tipo[] variável;
tipo variável[][];
ou
tipo[][] variável;
Instanciação:
tipo variável[] = new tipo[dimensão];
tipo variável[][] = new tipo[dim1][dim2];
Arrays Exemplos
Declaração:
int[] vetor; // ou int vetor[];
double[][] matriz;
Instanciação:
vetor=new int[100];
matriz=new double[100][100];
Declaração + instanciação:
int[] vetor=new int[100];
double[][] matriz=new double[100][100];
Arrays
Inicialização na declaração:
int v[]={3,4,5};
variável[índice]
for(i=0;i<100;i++)
v[i]=i*40;
v[0]=v[0]-100;
for(i=1;i<50;i++)
m[i][i]=v[i]-v[0];
Arrays
• Todo vetor em Java possui a propriedade length que informa o número de
elementos que o vetor possui
• length é uma propriedade read-only
• extremamente útil em blocos de repetição
2ª dimensão
for(x=0;x<tabela.length;x++)
for(y=0;y<tabela[0].length;y++)
vetor[x][y] = 1;
Arrays
• For...each
• Acesso aleatório (ou acesso direto) é a capacidade de ir diretamente para algum local de
um arquivo sem ter que percorre-lo sequencialmente
Classe RandomAccessFile:
Quando se cria um objeto desta classe deve-se indicar se o arquivo será acessado
apenas para leitura (segundo argumento: “r”) ou o acesso também incluirá escrita (segundo
argumento: “rw”)
Exemplos:
Objeto criado apenas para leitura:
RandomAccessFile arquivo = new RandomAccessFile("Dados.txt", "r");
Apontador de arquivo:
int skipBytes(int): salta para frente o apontador de arquivo conforme o número de bytes
especificado no argumento.
void seek(long): posiciona o apontador de arquivo logo antes do byte especificado.
long getFilePointer(): retorna a localização atual do apontador de arquivo
2. class randomicow
3. {
4. public static void main(String args[])
5. {
6. byte info;
7. try
8. {
9. RandomAccessFile arq;
10. arq=new RandomAccessFile(“arquivo.dad”,"rw");
11. arq.writeBytes("Teste"); // grava a string “Teste
12. arq.writeDouble(100.33); // grava o real 100.33
13. arq.writeLong(4560000); // grava o inteiro 4560000
14. arq.writeChars("fim"); // grava a strinf “fim”
15. arq.close();
16. }
17. catch(IOException e)
18. {
19. System.out.println("Problemas: "+e.toString());
20. }
21. }
22. }
Arquivos - Acesso Sequencial (ex. leitura)
try
{
FileReader freader=new FileReader("d:\\arq.txt");
BufferedReader breader=new BufferedReader(freader);
String linha=breader.readLine();
while(linha!=null)
{
System.out.println(linha);
linha=breader.readLine();
}
}
catch(Exception e)
{
System.out.println("Problemas: "+e.toString());
}
Arquivos - Acesso Sequencial (ex. gravação)
try
{
FileWriter fwriter=new FileWriter("d:\\dados.txt");
BufferedWriter bwriter=new BufferedWriter(fwriter);
String linha="Algo a ser gravado no arquivo";
bwriter.append(linha);
bwriter.newLine();
bwriter.append(linha);
bwriter.close();
}
catch(Exception e)
{
System.out.println("Problemas: "+e.toString());
}
Arquivos – classe File
File farq;
farq=new File("c:\\");
System.out.println("Capacidade (kb) do drive c: "+ farq.getTotalSpace()/1024);
farq=new File("c:\\arquivo.txt");
farq.delete(); // apaga o arquivo
Arquivos – classe File
//recupera a pasta que se encontra a aplicação.
1.String dir;
2.dir = System.getProperty("user.dir");
Exercício 4
1- Desenvolva um programa para enumerar um arquivo fonte
em Java. O programa deverá ler o nome um arquivo-fonte
Java válido e copiá-lo com numeração de linhas para
outro arquivo com o mesmo nome, concatenado com a
extensão <.enum>.
import java.io.*;
livro.java 1 import java.io.*;
livro.java.enum
1 import java.io.*;
class livro 2 class livro
2 class livro
{ 3 {
3 {
public String autor; 4 public String autor;
4 public String autor;
public String titulo; 5 public String titulo;
5 public String titulo;
// Data local
LocalDate hoje = LocalDate.now();
System.out.println(hoje); //2015-08-24 -> (formato ISO-8601)
System.out.println(hoje.getDayOfMonth()); // 24
System.out.println(hoje.getMonthValue()); // 8
System.out.println(hoje.getYear()); // 2015
// Especificando a Data
LocalDate emissaoRG = LocalDate.of(2000, 5, 15);
LocalDate emissaoRG = LocalDate.of(2000, Month.MAY, 15);
// Formatando a data
LocalDate hoje = LocalDate.now();
DateTimeFormatter formatador =
DateTimeFormatter.ofPattern("dd/MM/yyyy");
System.out.println(hoje.format(formatador)); //24/08/2015
Data e Hora (LocalDate)
http://blog.caelum.com.br/conheca-a-nova-api-de-datas-do-java-8/
// Classe Period
LocalDate homemNoEspaco = LocalDate.of(1961, Month.APRIL, 12);
LocalDate homemNaLua = LocalDate.of(1969, Month.MAY, 25);
Period periodo = Period.between(homemNoEspaco, homemNaLua);
System.out.printf("%s anos, %s mês e %s dias",
periodo.getYears() , periodo.getMonths(), periodo.getDays());
//8 anos, 1 mês e 13 dias
// Data e Hora
LocalDateTime agora = LocalDateTime.now();
LocalDateTime aberturaDaCopa =
LocalDateTime.of(2014, Month.JUNE, 12, 17, 0);
System.out.println(aberturaDaCopa); //2014-06-12T17:00 -> ISO-8601
Data e Hora (Calendar)
import java.util.Calendar;
File arquivo;
arquivo=new File("Install.shr");
arquivo.delete();