Você está na página 1de 119

Java Básico

Introdução e sintaxe

Profº Silvio Antonio Carro


silvio@unoeste.br

Profº Dione Jonathan Ferrari


dferrari@unoeste.br
Tecnologia JAVA - O que é?
• Uma linguagem de programação orientada a objetos

• Uma coleção de APIs (classes, componentes, frameworks) para o


desenvolvimento de aplicações multiplataforma.

• Um ambiente de execução presente em browsers, mainframes, SOs,


celulares, palmtops, cartões inteligentes, eletrodomésticos
https://develo
per.ibm.com/b
r/tutorials/j-int
rotojava1/
Tecnologia JAVA - O que é?

• 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

• Sun Microsystems: Projeto “Green”


Desenvolvimento de uma linguagem baseada em
C++ voltada para Sistemas Embutidos
(James Gosling)
Java (cidade de origem de um tipo de café importado)

• Lentidão no desenvolvimento do mercado visado

• Explosão WWW (1994)


•Utilizar Java para adicionar conteúdo dinâmico, como interatividade e animações, às
páginas Web
Tecnologia JAVA – De onde veio?
• 1995: Nascimento oficial do Java
Anunciado formalmente no evento SunWorld
Chamou a atenção da comunidade de negócios → enorme interesse na WWW

“Java é agora utilizado para desenvolver aplicativos corporativos de


grande porte, aprimorar a funcionalidade de servidores Web, fornecer
aplicativos para dispositivos voltados para o consumo popular e para
muitos outros propósitos”
(Deitel, Java Como Programar)
Tecnologia JAVA – Quem?
• Linguagem ANTES proprietária!
Sun Microsystems
Hoje possui código aberto

• Mas sempre foi Free!


Qualquer usuário sempre pode baixar, instalar e usar Java

• A evolução da linguagem Java é controlada pelo Java Community Process (jcp.org)


formado pela Oracle e usuários Java
Tecnologia JAVA – Características
• Linguagem de programação orientada a objetos
• Familiar (sintaxe parecida com C)
• Simples e Robusta (minimiza bugs, aumenta produtividade)
• Suporte nativo a threads (+simples, maior portabilidade)
• Dinâmica (módulos, acoplamentos em tempo de execução)
• Com coleta de lixo (menos bugs, mais produtividade)
• Independente da plataforma
• Segura (vários mecanismos para controlar a segurança)
• Código intermediário de máquina virtual interpretado (bytecode)
• Facilidades de Internacionalização - Suporta nativamente caracteres Unicode;
Importância
• Java é essencial:
• Acesso remoto a bancos de dados
• Bancos de dados distribuídos
• Sistemas web seguros, p.e. comércio eletrônico e bancos
• Interatividade em ambientes de Realidade Virtual distribuídos
• Gerência de Documentos
• Integração entre dados e forma de visualização
• Ensino à distância
• Jogos
• Entretenimento
• Sistemas móveis e embaracados
Java x C++
• Sintaxe mais simples que C++

• Java possui desalocação automática

• Em Java não há passagem de parâmetro


por referência

• Em Java todos métodos são escritos in-line

• Java não possui operators


T i m e l i n e
1995
Março - nascimento oficial do Java. James Goslings, da Sun Microsystems, é dele a "glória".
Maio - A tecnologia Java é oficialmente anunciada no evento SunWorld.

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)

• Plataforma principal, base para J2EE e J2ME


• Ambiente de desenvolvimento Java mais utilizado
• Seu uso é voltado a PCs e servidores, onde há bem mais necessidade de
aplicações
• Por ser a plataforma mais abrangente do
Java, o J2SE é a mais indicada para quem
quer aprender a linguagem
Produtos e APIs
Java EE
• Composição: ferramentas e APIs
para o desenvolvimento de aplicações
distribuídas

• Plataforma Java voltada para redes, internet, intranets e afins


• Contém bibliotecas especialmente desenvolvidas para o acesso a servidores, a sistemas de e-
mail, etc
• A plataforma J2EE contém uma série de especificações, cada uma com funcionalidades distintas.
Entre elas, tem-se:
• JSP (Java Server Pages) e
• Servlets, para o desenvolvimento de aplicações Web
Produtos e APIs

Java ME e Java Embedded


• Composição: ferramentas e APIs para o desenvolvimento de
aplicações para aparelhos portáteis: celulares, PDAs, etc.
Produtos e APIs
JavaFx
• Plataforma de software multimídia baseada em java para a criação e disponibilização de interface
rica que pode ser executada em dispositivos diferentes.

• 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

Java System Development Kit (JDK)


• Coleção de ferramentas para, entre outras
tarefas, compilar, executar e depurar
aplicações Java.
• Inclui a JVM

Java Runtime Environment (JRE)


• Tudo o que é necessário para executar
aplicações Java.

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

Código Java (texto)


public class HelloWorld {
public static void main(String[ ] args) {
System.out.println("Hello, world!");
}
}

HelloWorld.java

Compilação (javac)

Uma “classe” Java

Bytecode Java (código de máquina virtual)


F4 D9 00 03 0A B2 FE FF FF 09 02 01 01 2E 2F 30 62 84 3D 29 3A C1

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

Fase 1: Edita Editor

Fase 2: Compila Compilador

Fase 3: Carrega Carregador de classe

Memória principal

Lê arquivos .class que


contém bytecodes a
partir de um disco e
coloca estes bytecodes
na memória
:
Ambiente de desenvolvimento Java típico

Fase 1: Edita Editor

Fase 2: Compila Compilador

Fase 3: Carrega Carregador de classe

Memória principal

Fase 4: Verifica Verificador Confirma que todos os


bytecodes são válidos
e não violem restrições
de segurança do Java
:
Ambiente de desenvolvimento Java típico

Fase 1: Edita Editor

Fase 2: Compila Compilador

Fase 3: Carrega Carregador de classe

Memória principal

Fase 4: Verifica Verificador Para executar o


programa, o JVM lê os
bytecodes e os traduz
para uma linguagem
que o computador
Java Virtual : possa entender
Fase 5: Executa
Machine
Carregador de classe: Class Loader

Primeira tarefa executada pela JVM: carregamento das classes necessárias


para rodar a aplicação. O Class Loader
• Carrega primeiro as classes nativas do JRE (APIs)
• Depois carrega extensões do JRE: JARs em $JAVA_HOME/jre/lib/ext e classes em
$JAVA_HOME/jre/lib/classes
• Carrega classes do sistema local
• Por último, carrega possíveis classes remotas
Bytecode Verifier
Etapa que antecede a execução do código em classes carregadas através
da rede
• Class Loader distingue classes locais (seguras) de classes remotas
(potencialmente inseguras)

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

Tradutor JIT: Just-In-Time Compiler: Gera


código nativo a partir de bytecodes (fase
de execução).
HotSpot: 10% do código é executado em
90% do tempo. Com base nesta idéia, é
aplicada uma forte otimização somente
em trechos de maior execução.
Coleta de Lixo
Memória alocada em Java não é liberada pelo programador
• Ou seja, objetos criados não são destruídos pelo programador
A criação de objetos em Java consiste de
• 1. Declarar o objeto (pilha)
• 2. Inicializar o objeto: alocar memória no heap para armazenar os dados do objeto
• 3. Atribuir o endereço de memória alocada ao objeto (referência)
Mais de uma referência pode apontar para o mesmo objeto

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;
.
.

public class programa


{ .
.
.
public static void main(String args[])
{
.
. Aqui
Aquicomeça
começatudo...
tudo...
.
}
}

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

abstract assert boolean break byte


case catch char class const
continue default do double else
enum extends final finally float
para goto if implements import
instanceof int interface long native
new package private protected public
return short static strictfp super
switch synchronized this throw throws
transient try void volatile while
Sintaxe Tipos Primitivos

Tipo Tamanho Mínimo Máximo Default ‘Wrapper’

boolean ------ false true false Boolean

char 16 bits Unicode 0 Unicode 216-1 \u0000 Character

byte 8 bits -128 127 0 Byte

short 16 bits -32768 32767 0 Short

int 32 bits -2.147.483.648 2.147.483.647 0 Integer

long 64 bits -263 263-1 0 Long

float 32 bits -3,4-38 3,4+38 Float

double 64 bits -1,7-308 1,7+308 Double

void ------- ------- ------- ------- Void


Sintaxe Tipos Primitivos

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

• Os operadores em Java são praticamente os mesmos encontrados em


outras linguagens
+, -, /, *, =, ==, <, >, >=, &&, etc.

• A maior parte dos operadores só trabalha com valores de tipos primitivos.

• 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

. referência a método ou atributo de um objeto

, separador de identificadores

; separador de declarações e comandos

[] declaração de matrizes e delimitador de índices

{} separador de blocos e escopos locais

( ) precedência de operadores, listas de parâmetros


Sintaxe Operadores

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)

&& and (x>y) && (z<4)

! not !(x>y)

?: if-then-else lógic x=((y>3)?5:6)


Sintaxe Operadores

Binários

~ negação bit a bit y=~x


>> shift right y=x>>3
>>> shift right sem sinal y=x>>>3
<< shift left y=x<<3
>>= atribuição c/ shift right y=x>>=3
<<= atribuição c/ shift left y=x<<=3
>>>= atribuição c/ shift right y=x>>>=3
sem sinal
Sintaxe Operadores e Precedência

• A precedência determina em que ordem as operações em uma expressão


serão realizadas.
• Por exemplo, operações de multiplicação são realizadas antes de operações de
soma:
int x = 2 + 2 * 3 – 9 / 3; // 2+6–3 = 5

• Parênteses podem ser usados para sobrepor a precedência


int x = (2 + 2) * (3 – 9) / 3; // 4*(– 6)/3 = – 8

• A maior parte das expressões de mesma precedência é calculada da


esquerda para a direita*
int y = 13 + 2 + 4 + 6; // (((13 + 2) + 4) + 6)

* Há exceções. Por exemplo, atribuição.


Sintaxe Operadores de Coerção

float v;
int n;
v=123.55f;
n=(int) v;

• O programador "assume o risco", declarando entre parênteses, que o conteúdo de v cabe


em n.
• O operador de coerção tem maior precedência que os outros operadores!

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:

for( inicialização ; teste ; incremento )


{
... for(i=1; i<100; i++)
}; System.out.println(“numero:”+i);

for (x = 0,y = 25; x < 10 && (y % 2 == 0); x++, y = y - 1 )


{
System.out.println (x + y);
}
Exercício 1

Desenvolva um algoritmo que baseado na


renda mensal, na quantidade de
dependentes, no valor da contribuição da
previdência social do mês (INSS) e o valor
pago a titulo de pensão alimentícia (se
houver).

Calcule e apresente o valor do imposto

Não é necessário realizar a entrada de dados, use valores fixos.


Como calcular:
Primeiro passo: calculo do salário base:
O valor do salário base é calculado com a seguinte equação:

SAL_BASE = RENDA_MENSAL – VALOR_INSS – VALOR_PENSÃO – QTDE_DEPENDENTES * 189,59

Segundo passo:
Use a tabela para selcionar o valor da alíquota (desconto) e da dedução
e faça o cálculo.

IR = SAL_BASE * ALIQ/100 – DEDUÇÃO


Exercício 2
Escreva um programa que mostre todos os divisores de um
determinado valor inteiro.
Strings
Strings

Sequência de caracteres imutável


• Representa uma cadeia de caracteres Unicode
• Otimizada para ser lida, mas não alterada
• Nenhum método de String modifica o objeto armazenado

Há duas formas de criar Strings

• String s1 = new String("Texto");


• String s2 = "Texto";
Strings
Exemplo de declarações e atribuições em Strings:

String nome, nomeCompleto; // declaração simples

String sobrenome="da Silva"; // decl. + inicialização

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

Métodos para pesquisa


• boolean endsWith(String) e startsWith(String)
• int indexOf(String), int indexOf(String, int offset): retorna posição
• char charAt(int posição): retorna caractere na posição

Outros métodos
• char[] toCharArray(): retorna o vetor de char correspondente à String
• int length(): retorna o comprimento da String.
Strings

String x = “Pedro da Silva”;


int tam = x.length(); //obtendo o tamanho
char letra = x.charAt(0); //obtendo o primeiro caractere
if (x.endsWith(“da Silva”))//comparando com o final da String
{
System.out.println(“é parente”);
}
String s=x.replace(‘a’,’#’); //troca todo ‘a’ por ‘#’
s=s.toUpperCase();
Strings

String frase=“Palmeiras não tem Mundial";


int maiusc=0;
for(int i=0;i<frase.length();i++)
{
// podemos comparar uma sequência alfabética ...
if(frase.charAt(i)>='A' && frase.charAt(i)<='Z')
maiusc++;
}
System.out.println("Quantidade maiúsculos:"+maiusc);
String.Format

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:

O valor da compra de 012 canetas = R$ 191,76


Strings “Text Blocks”
Java 17+
String html= """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

</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")

// returns true if the string contains exactly "true"


https://www.jav
s.matches(".*true.*");
atpoint.com/jav
// returns true if the string contains of three letters
a-regex
s.matches("[a-zA-Z]{3}");
E/S
dados
Saída de dados
Utilização de System.out.println( )

String nome="Zé", sobrenome="da Silva";

System.out.println("Meu nome é: " + nome);


System.out.println("Meu sobrenome é: " + sobrenome);

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

Para maiores detalhes, consulte o material “especial_joptionpane.pdf”


Entrada Usando JOptionPane

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:

String strEntrada = JOptionPane.showInputDialog(null,


“Digite um Numero inteiro:");

Para maiores detalhes, consulte o material “especial_joptionpane.pdf”


Entrada Usando JOptionPane

Converta a string para o tipo do valor desejado:

 Se o valor desejado for int, use:


int valor = Integer.parseInt(strEntrada);

 Se o valor desejado for float, use:


float valor = Float.parseFloat(strEntrada);

E assim por diante...

Para maiores detalhes, consulte o material “especial_joptionpane.pdf”


Saída Usando JOptionPane
import javax.swing.JOptionPane;

ShowMessageDialog:
Utilize o método showMessageDialog da classe JoptionPane para apresentar o resultado do programa para
o usuário

Exemplo:

JOptionPane.showMessageDialog( null,

"O resultado é " + res );


Confirmação Usando JOptionPane

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:

1. Erros de lógica de programação


• Ex: limites do vetor ultrapassados, divisão por zero
• Devem ser corrigidos pelo programador

2. Erros devido a condições do ambiente de execução


• Ex: arquivo não encontrado, rede fora do ar, etc.
• Fogem do controle do programador mas podem ser contornados em tempo de execução

3. Erros graves onde não adianta tentar recuperação


• Ex: falta de memória, erro interno do JVM
• Fogem do controle do programador e não podem ser contornados
Exceções try e catch

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.

A cada tentativa, o jogo deverá informar se o “chute” do jogador foi


maior ou menor do que o número a ser adivinhado. O jogo termina
após vinte tentativas erradas ou quando o jogador acertar o
número sorteado e, nesse caso, informe a quantidades de
tentativas que foram necessárias. Após o término do jogo será
mostrado o nome do jogador seguido da quantidade de tentativas,
o jogador deverá decidir então se deseja ou não iniciar um novo
jogo.

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

• Cada elemento do vetor é inicializado com um valor default, dependendo do


tipo de dados:
• null, para objetos
• 0, para int, long, short, byte, float, double
• Unicode 0, para char
• false, para boolean

• Elementos podem ser recuperados a partir da posição 0


Arrays
Declaração:

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};

double matriz[][]= {{1.5 , 1.6 , 1.9},


{1.5 , 3 , 6},
{5 , 8 , 9}};

String[] semana = {"Dom", "Seg", "Ter",


"Qua", "Qui", "Sex","Sab"};
Arrays
Referência aos elementos:

variável[índice]

(Elementos podem ser recuperados a partir da posição 0)

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

for (int i=0;i<vet.length;i++)


vet[i] = 1; 1ª dimensã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

for (int e : vet)


System.out.print(e);
Arrays

• Uma vez criados, vetores não podem ser redimensionados

• Use System.arraycopy() para copiar um vetor para dentro de outro (alto


desempenho)

• Use java.util.ArrayList (ou Vector) para manipular com vetores de


tamanho variável (menor desempenho)

• ArrayLists e Vectors são facilmente conversíveis em vetores quando


necessário.
Arrays
class Testarray
{
static int[] devolveArray(int q)
{ int v[]=new int[q]; Arrays x
return v; } Métodos
• Arrays são
sempre
static void preencheArray(int v[]) passados por
{ for(int i=0;i<v.length;i++) referência
v[i]=(int)(Math.random()*100); } • Um método
pode devolver
um array como
public static void main (String args[]) resultado
{ int vetor20[]; // tamanho não definido
vetor20=devolveArray(20);
preencheArray(vetor20);}
}
Exercício 3
Vetores:
Crie um vetor com o tamanho especificado pelo usuário; atribua valores
aleatórios (entre -100 e 100); calcule e mostre o maior e menor
elemento e a média dos elementos.
Arquivos
Arquivos – Acesso Randômico

• Acesso aleatório (ou acesso direto) é a capacidade de ir diretamente para algum local de
um arquivo sem ter que percorre-lo sequencialmente

• A classe RandomAccessFile é usada para esta finalidade em Java.


• Usada tanto para leitura quanto para gravação
• Implementa métodos de leitura, escrita e posicionamento para todos os tipos primitivos.
Arquivos – Acesso Randômico

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");

Objeto criado para leitura e gravação:


RandomAccessFile arquivo = new RandomAccessFile("Dados.txt","rw");
Arquivos – Acesso Randômico

Depois que o arquivo é aberto, podemos utilizar vários métodos


de leitura e gravação.
try
{
RandomAccessFile arq;
arq=new RandomAccessFile(“arq.txt”,"rw");
...
// manipulação do arquivo
...
arq.close();
}
catch(IOException e)
{
System.out.println("Problemas: "+e.toString());
}
Arquivos – Acesso Randômico

 Alguns Métodos de Leitura:


int read() Lê um byte de dados do arquivo.
int read(byte b[]) Lê b.length bytes do arquivo e atribui ao vetor de
bytes.
byte readByte() Lê um byte
String readLine() Lê uma linha do arquivo
Boolean readBoolean() Lê a quantidade de bytes referente ao tipo primitivo
double readDouble()
float readFloat()
int readInt()
short readShort()
Arquivos – Acesso Randômico

 Alguns Métodos de Gravação:


void write(byte[] b) Grava b.length bytes de um array em um arquivo
void writeByte(int v) Grava um byte no arquivo
void writeBytes(String s) Grava uma String.
void writeChar(int v) Grava o tipo primitivo no arquivo.
void writeDouble(double v)
void writeFloat(float v)
void writeInt(int v)
void writeLong(long v)
void writeShort(int v)
Arquivos – Acesso Randômico

 Apontador de arquivo:

 Indica a atual posição de leitura ou gravação no arquivo

 Quando o arquivo é aberto, ele aponta para o início do arquivo


(posição 0)

 Quando são efetuadas operações de leitura ou gravação, os métodos


que executam estas operações ajustam o apontador de arquivo para
refletir o número de bytes lidos ou gravados
Arquivos – Acesso Randômico
Arquivos – Acesso Randômico

Métodos que explicitamente manipulam o 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

Mover o apontador de arquivo para um byte específico:


f.seek(n);

Obter a posição do apontador de arquivo:


long n = f.getFilePointer();
Conhecer o número de bytes de um arquivo
long filelength = f.length();
Arquivos – Acesso Randômico

Outros Métodos da classe RandomAccessFile:

long length(): retorna o tamanho do arquivo

void setLength(long): modifica o tamanho do arquivo


Arquivos - Acesso Randômico (ex. leitura)
1. import java.io.*;
2. class randomico
3. {
4. public static void main(String args[])
5. {
6. byte info;
7. try
8. { RandomAccessFile arq;
9. arq=new RandomAccessFile(“arq.txt”,"rw");
10. System.out.println("Tam arquivo: "+arq.length()+" bytes");
11.
12. while(true) readLine();
13. { readDouble();
14. try{info=arq.readByte();}
15. catch(Exception ioe) readInt();
16. { break; } ...
17. System.out.print((char)info);
18. }
19. arq.close();
20. }
21. catch(IOException e)
22. { System.out.println("Problemas: "+e.toString()); }
23. }
24. }
Arquivos - Acesso Randômico (ex. gravação)
1. import java.io.*;

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

Usada para representar o sistema de arquivos. É apenas uma


abstração – a existência de um objeto File não significa a existência de
um arquivo ou diretório.

Contém métodos para testar a existência de arquivos, para definir


permissões (nos S.O.s onde for aplicável), para apagar arquivos, criar
diretórios, listar o conteúdo de diretórios, etc.
Arquivos – classe File
Alguns métodos

public String getParent(); retorna o diretório (objeto File) pai


public list(); retorna lista de arquivos contidos na pasta
public boolean isFile(); retorna se é um arquivo
public boolean isDirectory(); retorna se é uma pasta
public boolean delete(); tenta apagar a pasta ou arquivo
public long length(); retorna o tamanho do arquivo em bytes
public boolean mkdir(); cria um diretório com o nome do arquivo
public String getAbsolutePath(); retorna o caminho absoluto (path)
public String getPath();
public String getName();
Arquivos – classe File
Exemplo: Criação de Diretórios e de um Arquivo Vazio
File diretorio = new File("c:\\novo");
diretorio.mkdir(); // cria, se possível
File subdir1 = new File( diretorio, "subdir1");
subdir1. mkdir();
File subdir2 = new File( diretorio, "subdir2");
subdir2. mkdir();
File arquivo = new File( diretorio, "arquivoVazio.txt");
FileWriter f = new FileWriter(arquivo);
f.close();

String[] arquivos = diretorio. list();


for (int i =0;i<arquivos.length; i++) {
File filho = new File( diretorio, arquivos[i]);
System.out.println(filho.getAbsolutePath());
}
Arquivos – classe File
Outro exemplo:

File farq;
farq=new File("c:\\");
System.out.println("Capacidade (kb) do drive c: "+ farq.getTotalSpace()/1024);

System.out.println("Disponivel (kb) no drive c: + farq.getFreeSpace()/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;

2- Faça um programa que mostre na tela a última linha de


um arquivo de dados.
Exercício 4
3- Faça um programa para realizar a busca por uma palavra-
chave no conteúdo de um arquivo. Ao encontrar mostre em
que posição do arquivo a palavra foi encontrada.

4- Desenvolva um programa que toda vez que for executado,


peça para o usuário digitar uma mensagem. Esta mensagem
deve ser armazenada no final de um arquivo texto. Na
próxima vez que o programa for executado ele deve
mostrar a mensagem anterior e pedir uma nova mensagem
que também será armazenada. Note que as mensagens devem
ser armazenadas juntamente com a data/hora que ela foi
digitada.
Convenções
Class - Nomes de classes podem ser maiúsculas ou minúsculas ou
misturado, mas por convenção o nome das classes começam por
letra maiúsculas;

Variáveis – Nomes iniciados por letras em minúsculo. Caso o nome


seja composto, as demais palavras devem iniciar com maiúsculos.
Ex: contador, saldoMedio;

Interfaces - Nomes de Interfaces suportam nomes iguais aos das


classes;

Métodos – a mesma convenção utilizada em variáveis. Sets e Gets:


métodos que retornam valores contidos nas propriendades devem
começar por get (ex getNome()) e métodos que recebem
parâmetros únicos que são atribuídos diretamente às propriedades,
devem começar por set (ex. setNome(String name))

Constantes - Nomes de constantes geralmente são em maiúsculas.


ANEXOS
Data e Hora (LocalDate)
http://blog.caelum.com.br/conheca-a-nova-api-de-datas-do-java-8/

// 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/

// Diferença entre datas


LocalDateTime agora = LocalDateTime.now();
LocalDate natal = LocalDate.of(2015,12,25);
int dias_para_natal = (int) hoje.until(natal, ChronoUnit.DAYS);

// 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;

public class QueDia


{
public static void main(String args[])
{
Calendar hoje = Calendar.getInstance();
System.out.println("Data atual: "+
hoje.get(Calendar.DAY_OF_MONTH)+"/"+
hoje.get(Calendar.MONTH)+"/"+
hoje.get(Calendar.YEAR));
System.out.println("Hora atual: "+
hoje.get(Calendar.HOUR)+":"+
hoje.get(Calendar.MINUTE)+":"+
hoje.get(Calendar.SECOND));
}
}
Data e Hora: Calculando a idade
import java.util.Date;

public class Idade


{
public static void main(String args[])
{
Date dtnasc=new Date(2000-1900,8-1,12);
// o objeto Date armazena a data a partir do ano
// 1900 e o mês a partir do zero!
Date hoje=new Date();
int idade=hoje.getYear()-dtnasc.getYear();
// soma a idade na data de nascimento:
dtnasc.setYear(dtnasc.getYear()+idade);
// verifica se a dtnasc ultrapassou a data de hoje:
if(hoje.before(dtnasc))
idade--; // ainda não fez aniversário
System.out.println(idade); }
}
Data e Hora: Calculando a idade
Versão Calendar
// Create a calendar object with the date of birth
Calendar dateOfBirth = new GregorianCalendar(1972,
Calendar.JANUARY, 27);

// Create a calendar object with today's date


Calendar today = Calendar.getInstance();

// Get age based on year


int age = today.get(Calendar.YEAR) –
dateOfBirth.get(Calendar.YEAR);

// Add the tentative age to the date of birth to get


this year's birthday dateOfBirth.add(Calendar.YEAR, age);

// If this year's birthday has not happened yet,


//subtract one from age
if (today.before(dateOfBirth)) {
age--;
}
Formatando a saída
import java.util.Calendar;
Import java.util.Formatter; // Java 1.5

Formatter f= new Formatter();


f.format(“O valor de PI é: %4.2f”,Math.PI);
System.out.println(f);
//ou
System.out.printf(“\nO valor de Pi: %4.2f”, Math.PI);

Calendar hoje= Calendar.getInstance();


System.out.printf(“%1$tH:%1$tM:%1$tS”,hoje);
Apagando um arquivo
import java.io.File;
.
.
.

File arquivo;
arquivo=new File("Install.shr");
arquivo.delete();

Você também pode gostar