Documente Academic
Documente Profesional
Documente Cultură
de Pelotas
Java
Programacao
M OTIVAC AO
mais simples e facil
de
Sintaxe parecida com C++, porem
aprender
Orientada a objetos
com coleta de Lixo automatica
Gerenciamento de memoria
(Garbage Collection)
Escreva uma vez, rode em qualquer lugar (na teoria :-)
Muitas bibliotecas
E de graca! (http://java.sun.com)
E tri legal!!!!!!!! :-)
M OTIVAC A O
RODANDO P ROGRAMAS
executavel.
O computador executa o arquivo rodando cada
presentes no arquivo.
uma das instrucoes
Interpretador: cada linha do programa e traduzida para
linguagem de maquina
e executada imediatamente
R ODANDO P ROGRAMAS
JAVA
do compilador e interpretador
Java combina a ideia
A linguagem e compilada para bytecodes
Maquina
Virtual Java: (JVM - Java Virtual Machine) Programa
que executa programas em Java compilados para bytecode
O mesmo programa Java compilado para bytecode pode rodar
em maquinas
diferentes, basta existir uma JVM para a
plataforma em que o programa sera executado
J AVA
javac
Programa Java
MyProgram.java
Programa em Bytecode
MyProgram.class
COMPUTADOR A
resultado
COMPUTADOR A
java (JVM)
Bytecode
MyProgram.class
resultado
COMPUTADOR B
MyProgram
MyProgram
MyProgram
JVM
JVM
Windows
Linux
Solaris
Hardware
Hardware
Hardware
JVM
Computador A
Computador B
Computador C
H ELLO WORLD
//Meu primeiro programa inutil em Java!
class HelloWorld {
H ELLO W ORLD
E NTENDENDO O P ROGRAMA
Declarando uma nova classe: class HelloWorld
public static void main (String []args):
quando nao
compartilhados por todos os objetos criados a
static sao
partir de sua classe.
retornam valores
void: Como em C, metodos
void nao
um metodo
main.
E NTENDENDO O P ROGRAMA
Continuando...
(String []args): Vetor de Strings contendo os valores
passados como argumentos para o programa
System.out.println("Hello World!");:
System e uma classe, out e um de seus atributos que
E NTENDENDO O P ROGRAMA
10
Variaveis
do tipo int
11
12
inicializados com 0
classe Point). Os atributos x e y sao
13
metodo
main
14
C ONSTRUTORES
metodos
executados
Construtores sao
especiais que sao
automaticamente quando um objeto e criado
Um construtor sempre possui o mesmo nome de sua classe
possui
O construtor e diferente de outros metodos
pois ele nao
tipo de retorno
possui construtor, o compilador gera um
Se uma classe nao
construtor automaticamente (como na classe Point)
C ONSTRUTORES
15
16
M ODIFICADORES
modificadores de visibilidade em Java
public e private sao
Membros private de uma classe podem ser acessados
apenas dentro da classe
Membros public de uma classe podem ser acessados fora
dela
Exemplo: Point
O novo construtor e public e pode ser acessado fora da
classe
Point meuPonto = new Point(0,1024);
private e nao
podem ser acessados
x e y sao
meuPonto.x = 0 //ERRO DE COMPILACAO
M ODIFICADORES
17
18
19
meuPonto.setX(12);
meuPonto.setY(12);
System.out.println("Ponto = (" + meuPonto.getX() +
"," + meuPonto.getY()+")")
}
}
Rodando o programa:
[dubois@haskell]$ javac PointWork.java
[dubois@haskell]$ java PointWork
Ponto = (12,12)
U SANDO A CLASSE (Point)
20
O M ETDO
toString()
Esse metodo
em Java geralmente e chamdo de toString()
class Point {
private int x, y;
public Point (int x, int y) {(...) }
public int getX () { return x;}
(...)
public String toString() {
return ("(" + x + ","+ y+")" );
}
}
O M ETDO toString()
21
Note que como o metodo
toString() e definido dentro da
e necessario
usar os metodos
classe, nao
get e set para se
acessar os valores de x e y
O M ETDO toString()
22
U SANDO toString()
class PointWork {
public static void main (String[] args) {
Point meuPonto = new Point(0,0);
meuPonto.setX(12);
meuPonto.setY(12);
System.out.println("Ponto = " +
meuPonto.toString());
}
}
U SANDO toString()
23
24
C LASSE Reta
class Reta {
private Point p1, p2;
public Reta (int x, int y, int z, int w)
{
p1 = new Point (x,y);
p2 = new Point (z, w);
}
public Reta (Point p1, Point p2)
{
this.p1 = p1;
this.p2 = p2;
}
public String toString() {
return (p1 + "---" + p2 );
}}
C LASSE Reta
25
C LASSE Reta
class UsandoReta {
public static void main (String[] args) {
Point ponto1 = new Point(0,0);
Point ponto2 = new Point(12,12);
Reta reta = new Reta(ponto1,ponto2);
System.out.println("Reta = " + reta);
}
}
C LASSE Reta
26
VARI AVEIS
DE C LASSE
de classe e dividida por todos os objetos criados
Uma variavel
a partir dessa classe
irao
chamadas de variaaveis
Essas variaveis
sao
estaticas,
e sao
declaradas usando a palavra static
27
M ETODO
DE C LASSE
e necessaria
uma referencia
Nao
ao objeto para chama-lo
Chama-se o metodo
a partir do nome da classe
Ex: Math.abs()
estatico
M ETODO DE C LASSE
28
` CLASSE Point
A DICIONANDO UMA VARI AVEL
EST ATICA
A
counter serve para contar quantas objetos Point foram
criados no programa
class Point{
private static int counter = 0;
private int x,y;
public Point (int xValue, int yValue) {
x = xValue;
y = yValue;
counter++;
}
public static int getCounter()
{return counter;}
}
A DICIONANDO UMA VARI AVEL EST ATICA A` CLASSE Point
29
E XEMPLO
class PointWork {
public static void main (String[] args) {
System.out.println("Objetos criados:"
+ Point.getCounter());
Point meuPonto = new Point(12,12);
Point meuSegundoPonto = new Point(0,2);
System.out.println("Objetos criados:"
+ Point.getCounter());
}
}
Resultado:
Objetos criados: 0
Objetos criados: 2
E XEMPLO
30
E XERCI CIO : ACHAR O P ONTO M EDIO
entre dois pontos:
Ponto medio
pontoMedio (a,b) (c,d) = (a + c /2, b + d/2)
DIO
E XERC
I CIO : A CHAR O P ONTO M E
31
32
33
L ENDO U M ARQUIVO
o BufferedReader
Pode-se usar tambem
BufferedReader keyboard = new
BufferedReader(new FileReader("ex.txt"));
String linha;
System.out.println ("Arquivo: ");
linha = keyboard.readLine();
while(linha!=null)
System.out.println (linha);
linha = keyboard.readLine();
}
L ENDO U M ARQUIVO
34
L ENDO N UMEROS
Usa-se o estatico
metodo
Integer.parseInt
number = Integer.parseInt(keyboard.readLine());
rate = Double.parseDouble(keyboard.readLine());
L ENDO N UMEROS
35
E XCEC OES
dados de um arquivo, ou stdin, sockets, etc., sao
Ler
que podem dar errado. Ex: o arquivo nao
existe, a
operacoes
com o socket foi fechada, etc
conexao
geram
Para tratar esse tipo de erros, essas operacoes
excecoes
que podem gerar excecoes,
Em Java, operacoes
devem ser
colocada dentro de um bloco try ... catch, o que
significa tente (try) executar os comandos, se eles gerarem
esta deve ser capturada (catch), e o codigo
uma excecao,
em
catch sera executado
E XCEC OES
36
E XCEC OES
try{
BufferedReader keyboard = new
BufferedReader(new FileReader("ex.txt"));
name = keyboard.readLine();
while(name!=null)
System.out.println (name);
name = keyboard.readLine();
}
}catch(Exception e){
System.out.println("Excecao: " +e); }
exista, a excecao
gera a
Caso o arquivo nao
mensagem:Excecao:
java.io.FileNotFoundException: ex.txt (No
such file or directory)
E XCEC OES
37
E SCREVENDO EM UM ARQUIVO
Para se escrever em um arquivo usa-se o BufferedWriter
try{
BufferedWriter output =
new BufferedWriter( new FileWriter("ex.txt") );
output.write("Alo\n");
output.write("Mundo \n!!!!");
output.close();
}catch(Exception e){
System.out.println("Excecao: " +e);
}
o metodo
write(), escreve uma string no arquivo e o metodo
close() fecha o arquivo.
E SCREVENDO EM UM ARQUIVO
38
E SCREVENDO NA TELA
Pode-se usar o BufferedWriter para se escrever na tela, basta
39
L INGUAGEM B ASICA
Operadores Relacionais
<, <=, >, >=, ==, !=
Operadores Booleanos
Tipos Basicos
int, float, double, char, boolean
int i = 25; // inteiro 32bits com sinal
double d = 34.987;// 64 bits com sinal
char c = a;
boolean t = true;
float f = 21.1; // 32 bits com sinal
byte b = 10;// de -128 ate 127
Bloco if
if
L INGUAGEM B ASICA
(Expressao Booleana)
40
{// comandos}
else { //comandos}
O else e opcional
L INGUAGEM B ASICA
41
S WITCH
switch (dayNumber)
{
case 1: screen.println("Sunday"); break;
case 2: screen.println("Monday"); break;
case 3: screen.println("Tuesday"); break;
case 4: screen.println("Wednesday"); break;
case 5: screen.println("Thursday"); break;
case 6: screen.println("Friday"); break;
case 7: screen.println("Saturday"); break;
default: screen.println("Invalid day");
}
//end switch
S WITCH
42
WHILE
number = 1;
while (number <= 10) {
screen.println ( number );
number ++;
}
number =1;
do { screen.println ( number );
number ++;
} while (number <=10)
WHILE
43
FOR
sum = 0;
for (i = 0; i<10; i++) {
System.out.println("Numero: ");
number=Integer.parseInt(keyboard.readLine().trim());
sum += number;
}
screen.println("Soma = "+ sum);
FOR
44
S TRINGS
Strings e uma classe:
String str = new String ("Alo Mundo!");
criar strings sem usar o new:
Em Java pode-se tambem
String str = "Alo Mundo!"; //O efeito \e o mesmo
estatico
String.valueOf():
double d = 3.45;
String str = String.valueOf(d);
45
S TRINGS
46
A RRAYS
Para se criar um array (vetor) em java, usa-se:
double [] ad = new double[20];
int
[] ai = new int [50];
char
[] ac = new char [10];
No exemplo, ad e um vetor de double que pode conter 20
elementos, ai e um vetor de inteiros que pode conter 50
elementos e ac e um vetor de caracteres que pode conter 10
elementos
Um array pode ser inicializado quando declarado:
int[] marks={74,42,97,24,16,50,62};
Quando um vetor e declarado e inicializado, o compilador
o espaco
conta o n umero de elementos e aloca em memoria
necessario
A RRAYS
47
indexados partindo do
Os vetores, como na linguagem C, sao
0 (zero), e seu tamanho, pode ser descoberto pelo atributo
A RRAYS
48
DE OBJETOS : Vector
C OLEC AO
de objetos que cresce
Um Vector e uma colecao
e necessario
declarar-se um
automaticamente,
ou seja, nao
tamanho para um Vector
Para usar um Vector e preciso importar import
java.util.*;
Metodos
principais: size() que retorna o tamanho atual do
Vector add(Object o) adiciona um objeto ao Vector,
Object get(int index) que devolve um objeto na
index, boolean remove (Object o) que remove
posicao
a primeira ocorrencia
do objeto o dentro do vetor e Object
49
50
C ASTING
Supondo que exista uma classe Conta que represente uma
51
H ERANC A
Uma classe nova, pode ter muito em comum com uma classe
antiga
Heranca permite que se construa uma nova classe usando
como base uma classe antiga. A classe nova herda os
atributos e metodos
de uma classe antiga
da classe pai
A classe nova e vista como uma extensao
H ERANC A
52
H ERANC A EM C OMPUTAC AO
Java e toda baseada na ideia de heranca
Todos os objetos em Java heradam de uma super classe
chamada Object
H ERANC A EM C OMPUTAC A O
53
E XEMPLO, E MPREGADOS
Todos os empregados em uma empresa possuem coisas em
commum: um endereco um nome e um n umero de cpf
de maneira diferente:
Os empregados podem receber o salario
mensal, semanal ou por hora
Os empregados podem ser modelados como uma classe
Empregado, que e extendida para lidar com os tipos
diferentes de salario
E XEMPLO, E MPREGADOS
54
E XEMPLO, E MPREGADOS
class Empregado {
private int cpf;
private String nome;
public Empregado () { }
public Empregado ( String nome, int cpf) {
this.cpf = cpf;
this.nome = nome;
}
public String getNome()
{ return nome; }
public String toString() {
return (cpf + "\t" + nome +"\t");
}}
E XEMPLO, E MPREGADOS
55
56
AssalariadoMensal
class AssalariadoMensal extends Empregado {
private double salarioMensal;
public AssalariadoMensal
(String nome,int cpf,double salario) {
super (nome, cpf);
salarioMensal = salario;
}
public String toString()
{
return (super.toString() + salarioMensal);
}
}
AssalariadoMensal
57
H ERANC A
O metodo
getNome e herdado da classe Empregado e pode
de um objeto da classe
ser usado atraves
AssalariadoMensal
H ERANC A
58
(OVERRIDING )
S OBREPOSIC AO
Vimos anteriormente que uma classe pode ter mais de um
metodo
com o mesmo nome, mas tipos diferentes, o que
chamamos de sobrecarga (Overloading)
executam
adicionais que os metodos
da superclasse nao
de metodos
A reimplementacao
pela classe herdeira
(Overriding)
chamamos de Sobreposicao
Um exemplo e o metodo
toString da classe
AssalariadoMensalque foi reimplemento para adicionar o
(salarioMensal), na string retornada
valor do salario
S OBREPOSIC A O (OVERRIDING )
59
E XEMPLO, Horista
class Horista extends Empregado {
private static double valorPorHora = 15.20;
private int horas;
public Horista (String nome, int cpf, int horas) {
super (nome,cpf);
this.horas = horas;
}
public double getSalario() {
return (horas * valorPorHora);
}
public String toString() {
return (super.toString() + getSalario());
}
}
E XEMPLO, Horista
60
Quando um metodo
e chamado, o tipo atual do objeto e usado
61
E XEMPLO : E MPRESA
um Vector de Empregados
Uma empresa contem
class Empresa {
private Vector vector;
public Empresa ()
{
vector = new Vector();
}
62
E XEMPLO : E MPRESA
63
E XEMPLO : Empresa C ONTINUAC AO
Imprimindo todos os Empregados:
class Empresa {
(...)
public void listEmpregados()
{
for (int n = 0; n < vector.size(); n++)
System.out.println(vector.get(n));
}
Empregados podem ser tanto Horistas quanto
AssalariadoMensal. Quando imprimindo, o toString()
64
E XEMPLO : Empresa C ONTINUAC AO
se saber a qual sub classe um objeto
As vezes e necessario
pertence. Para isso, usa-se o instanceof
public void listaHoristas()
{
for (int n = 0; n < vector.size(); n++)
if (vector.get(n) instanceof Horista)
System.out.println(vector.get(n));
}
Esse metodo
imprime somente os empregados que sao
Horistas
65
C LASSES A BSTRATAS
podem ser instanciadas
Metodos
abstratos sao
possuem apenas a assinatura
metodos
abstratos, sobrescrevendo os metodos
vazios
Uma subclasse de uma classe abstrata so e instancialvel se
todos os metodos
vazios forem sobrescritos
C LASSES A BSTRATAS
66
C LASSES A BSTRATAS
Classes abstratas geralmente existem no topo das hierarquias
usadas como modelos para as classes que
de classes e sao
seu comportamento
herdarao
Se a classe abstrata e bem pensada, ela ajuda a organizar e a
o comportamento
garantir que suas subclasses terao
adequado
As subclasses de uma classe abstrata devem implementar os
metodos
abstratos da classe pai
C LASSES A BSTRATAS
67
68
possui implementacao
O metodo
salario() e abstrato e nao
A presenca de salario() na classe abstrata Empregado
forca que todas as subclasses de Empregado possuam uma
desse metodo
implementacao
69
C ONTAS EM BANCOS
C ONTAS EM B ANCOS
70
como saque(), e
O tipo de conta influencia
em operacoes
dinheiroDisponivel()
Podemos definir uma classe abstrata que possui todos os
atributos necessarios
em uma conta, e force que cada tipo de
71
72
M AIS M ETODOS
COMUNS PARA A CLASSE Conta
public void deposito (double dinheiro) {
saldo += dinheiro;
}
public boolean transferencia (Conta somebody,
double money) {
if (money > 0) {
if (saque(money)) {
somebody.deposito(money);
return true;
}
}
return false;
}
M AIS M ETODOS COMUNS PARA A CLASSE Conta
73
M ETODOS
ABSTRATOS DA CLASSE Conta
abstract public boolean saque (double money);
abstract public double dinheiroDisponivel();
}
usado na definicao
transferencia()
74
ContaNormal
class ContaNormal extends Conta {
public ContaNormal (String nome, double saldo) {
super (nome, saldo);
}
public boolean saque (double money) {
if (saldo - money >= 0) {
saldo -= money;
return true;
}
else return false;
}
public double dinheiroDisponivel() {
return saldo;
}
}
ContaNormal
75
ContaEspecial
class ContaEspecial extends Conta {
private double limite = -200;
public ContaEspecial (String name, double balance) {
super (name, balance);
}
public boolean saque (double money) {
if (saldo - money >= limite) {
saldo -= money;
return true;
}
else return false;
}
public double dinheiroDisponivel() {
return (saldo - limite);
}}
ContaEspecial
76
seja, varias
classes podem estender uma classe pai
Na figura, as classes filhas B, C e D estendem a classe pai
(superclasse) A
A
77
I NTERFACES
de metodos
e constantes (metodos
abstratos sao
possuem implementacao)
Em outras palavras, uma interface possui apenas assinaturas
de metodos
e nenhum codigo
para eles (diferente de uma
classe abstrata)
Uma classe pode implementar mais de uma interface e ao
mesmo tempo estender uma classe pai
Essa e a maneira de se ter heranca m ultipla em Java
I NTERFACES
78
I NTERFACES
A
I NTERFACES
79
U M EXEMPLO S IMPLES
U M EXEMPLO S IMPLES
80
Item
abstract class Item {
private int id;
private String name;
public Item (int id, String name)
{
this.id = id;
this.name = name;
}
abstract double precoTotal();
}
Item
81
I TENS
estender a classe Item e
Os diferentes itens de uma loja vao
implementar o metodo
precoTotal()
Vamos supor que alguns itens, quando vendidos em
quantidade maior do que 12, possuem descontos, com uma
taxa fixa
Desconto pode ser implementado como uma interface que e
o desconto!
implementada por todos os itens que dao
I TENS
82
Item
interface Desconto {
final double DESCONTO = 0.1;
abstract double totalDesconto();
}
A interface e declarada usando-se a palavra interface
Item
83
D IAGRAMA DE C LASSES
D IAGRAMA DE C LASSES
84
85
86
metodo
abstratocompareTo, com a seguinte assinatura de
tipo:
public int compareTo (Object obj)
iguais, e
Este metodo
deve retornar 0 se os dois objetos sao
se this e menor que obj o compareTo retorna um n umero
negativo, caso contrario um n umero positivo
87
PACKAGES
Conjunto de classes com algo em comum
classe/metodo/construtor,
este so pode ser acessado dentro
da package.
PACKAGES
88
PACKAGES
89
diretorio
No inicio de cada arquivo de definico de classe deve-se
colocar a o nome da package, no caso Livros
package Livros;
90
E XEMPLO DE PACKAGE
package Livros;
public class Livro
private String
private String
private String
{
titulo;
autor;
editora;
91
{ return titulo;}
public String getAutor()
{ return autor;}
public String getEditora()
{ return editora;}
public String toString()
{ return ("Livro: " + titulo + " Autor: "
+ autor + " Editora: " + editora);}
}
E XEMPLO DE PACKAGE
92
E XEMPLO DE PACKAGE
package Livros;
interface Digital{
public String qualURL();
}
E XEMPLO DE PACKAGE
93
E XEMPLO DE PACKAGE
package Livros;
public class LivroDigital extends Livro implements Digital{
private String url;
94
E XEMPLO DE PACKAGE
95
E XEMPLO DE PACKAGE
package Livros;
import java.util.*;
public class Livraria{
private Vector livros;
public Livraria()
{ livros = new Vector();}
public void adicionaLivro(Livro l)
{
livros.add(l);
}
E XEMPLO DE PACKAGE
96
97
E XEMPLO DE PACKAGE
98
U SANDO U MA PACKAGE
import Livros.*;
class UsaLivros{
public static void main (String []args)
{
Livraria l = new Livraria();
l.adicionaLivro(new Livro ("Haskell","Andre","Campus"));
System.out.println(l.procuraLivro("Haskell"));
}
}
U SANDO U MA PACKAGE
99