Elementos Básicos da Linguagem Java
Prof. Ricardo Linden
Programação Orientada a Objeto Java Básico
1
Conceitos básicos do Java
• Java é uma boa linguagem de programação, mas não é a panacéia
para todos os males computacionais do mundo.
• Núcleo da linguagem bastante estável  melhoramentos ocorrem
em sua maioria nas bibliotecas
Compatibilidade Retroativa!
Programação Orientada a Objeto - Java Básico
2
Vantagens da Linguagem Java
• Independência de plataforma
Sintaxe similar à linguagem C++
• Linguagem totalmente orientada a objetos
• Linguagem menos sujeita a erros de programação
Fim da alocação de liberação manuais de memória
Fim da aritmética de ponteiros
Fim da confusão da atribuição com o teste de igualdade
Fim da herança múltipla
Programação Orientada a Objeto - Java Básico
3
Palavras chaves do Java
•
Simples
– Nós quisemos elaborar um sistema que pudesse ser programado
facilmente sem muito treinamento esotérico e que facilitasse a
prática padrão atual. Assim, embora achássemos que a linguagem
C++ não fosse adequada, nós projetamos a linguagem Java o mais
parecida possível com o C++ a fim de tornar o sistema mais
compreensível. Java omite recursos raramente usados e pouco
compreendidos do C++ que, em nossa experiência, trazem mais
dificuldades que benefícios.
Programação Orientada a Objeto - Java Básico
4
Palavras chaves do Java
•
Orientada a objeto
– Definido de forma simples, um projeto orientado a objetos é um
atécnica de programação que concentra-se nos dados e nas
interfaces de projetos. (...) Os recursos de programação orientada
a objetos da linguagem Java são, essencialmente, os da linguagem
C++.
Programação Orientada a Objeto - Java Básico
5
Palavras chaves do Java
•
Distribuída
– A linguagem Java tem uma biblioteca extensa de rotinas para
lidar com protocolos TCP/IP, como o HTTP e o FTP. Os
aplicativos Java podem abrir e acessar objetos na Internet através
de URLs com a mesma facilidade com que se acessa um arquivo
no sistema local.
Programação Orientada a Objeto - Java Básico
6
Palavras chaves do Java
• Robusta
– Java tem a intenção de escrever programas que precisam ser
confiáveis de várias formas. O Java coloca muita ênfase na
verificação antecipada de possíveis problemas, na verificação
dinâmica em tempo de execução e na eliminação de situações
sujeitas a erros. A única e grande diferença entre o Java e o C++
está em que o Java usa um modelo de ponterios que elimina a
possibilidade de sobrescrita de memória e conseqüente destruição
de dados.
Programação Orientada a Objeto - Java Básico
7
Palavras chaves do Java
•
Segura
– A linguagem Java tem a intenção de ser usada em ambientes de
rede/distribuídos. Nesta direção, grande ênfase tem sido colocada
na segurança. O Java permite a construção de sistemas livres de
vírus e adulterações.
Programação Orientada a Objeto - Java Básico
8
Palavras chaves do Java
• Arquitetura Neutra
– O compilador gera um formato de arquivo objeto neutro em
relação à arquiteura - o código compilado é executável em muitos
processadores, dada a presença do sistema Java em tempo de
execução. O compilador Java daz isso gerando instruções em
bytecodes que nada têm a ver com uma arquitetura particular de
um computador específio. Em vez disto, elas são projetadas para
serem fáceis de interpretar em qualquer máquina e convertidas
facilmente para o código nativo da máquina em tempo real.
Programação Orientada a Objeto - Java Básico
9
Palavras chaves do Java
•
Portável
– Diferente das linguagens C e C++, não há aspectos “dependentes
da implementação” na especificação da linguagem Java. Os
tamanhos dos tipos de dados primitivos são especificados, assim
como o comportamento da aritmética que os utiliza.
Programação Orientada a Objeto - Java Básico
10
Palavras chaves do Java
•
Interpretada
– O interpretador Java pode executar bytecodes Java diretamente
em qualquer máquina para a qual tenha sido escrito. Como a
ligação é um processo mais incremental e leve, o processo de
desenvolvimento pode ser muito mais rápido e exploratório.
Programação Orientada a Objeto - Java Básico
11
Palavras chaves do Java
• Alto desempenho
– Embora o desempenho dos bytecodes interpretados seja
geralmente mais do que adequado, há situações em que é
necessário um desempenho superior. Os bytecodes podem ser
convertidos em tempo real para o código de máquina da CPU
particular onde o aplicativo está executando.
Programação Orientada a Objeto - Java Básico
12
Palavras chaves do Java
•
Múltipla execução
– Os benefícios das múltiplas linhas d execução (threads) são
melhor capacidade de resposta interativa e melhor
comportamento em tempo real de execução.
Programação Orientada a Objeto - Java Básico
13
Índice de temas
•Palavras chaves
•Literais
•Statements
•Constantes
•Expressões
•Operadores
•Separadores
•Comentários
•Strings
•Objetos
•Arrays
•Identificadores
Programação Orientada a Objeto - Java Básico
14
Estrutura básica de um programa Java
• Um programa Java básico tem uma estrutura similar à seguinte:
Existe uma associação de pacote c/ diretório
package <nome_pacote>;
import <classes_importadas>; Equivalentes às bibliotecas do C
Todo programa Java é uma coleção de classes, ao menos
uma das quais é pública e tem um função main
class <nome_classe> {
public static void main (String[] args)
A função main é onde começa:
o processamento em Java
Mais a frente nós veremos
:
tudo isto com mais detalhes
}
}
Programação Orientada a Objeto - Java Básico
15
Palavras Chave
• As palavras chaves do Java são palavras reservadas.
– Isto quer dizer que não podem ser usadas em
nenhum outro contexto que não aquele para o qual
foram definidas.
– Isto quer dizer que não podem ser usadas como
nomes de variáveis, classes ou métodos.
• Combinadas com a sintaxe dos operadores e separadores
formam a definição da linguagem Java.
Programação Orientada a Objeto - Java Básico
16
Palavras Chave do Java
abstract
boolean break byte byvalue
case cast catch char class const continue
default do double
else extends
false final finally float for future
generic goto
if implements import inner instanceof int interface
long
native new null
operator outer
package private protected public
rest return
short static super switch synchronized
this throw throws transient true try
var void volatile
while
Programação Orientada a Objeto - Java Básico
17
Palavras Chaves do Java
Como no C, o núcleo da linguagem é
relativamente pequeno, sendo extendido usandose bibliotecas (neste caso, de classes)
Entretanto, não se espera que se decore todas as
palavras chaves imediatamente. Com o tempo e o
uso, elas vão aos poucos entrando em nossa
cabeça.
Programação Orientada a Objeto - Java Básico
18
Statements
• Todo programa Java é composto de statements.
• Todas as statements são sensíveis a caso
• Todas as statements teminam com um ponto-e-vírgula
(;).
• As statements são similares àquelas do C.
• Statements mais importantes :
– atribuições
– declarações de variáveis
– estruturas de repetição
– condicionais
Programação Orientada a Objeto - Java Básico
19
Identificadores
• Identificadores são usados para nomear variáveis, classes, métodos e quaisquer
outros elementos do Java.
• Um identificador pode ser montado de acordo com as seguinte regras:
– O primeiro caracter deve ser uma letra.
– A partir da segunda posição, pode-se usar livremente letras ou numerais.
– O sublinhado (_) e o cifrão ($) são considerados letras e podem ser usadas
em qualquer posição, incluindo a primeira.
• É de bom alvitre utilizar nomes descritivos.
– Salario é mais compreensível do que s
– ClasseAutomovomeis é mais compreensível do que CA1
Programação Orientada a Objeto - Java Básico
20
Exemplos de Identificadores
• Válidos:
– xpto
– x123
– $123
$ e _ são considerados como letras
– _x
• Inválidos
– 1xpto
Identificadores têm que começar com letras
– x-y
– x^
Uso de caracteres inválidos
– y@
Programação Orientada a Objeto - Java Básico
21
Convenções usadas normalmente para nomes
• Classes: Primeira letra maiúscula, resto minúsculo
• Métodos e variáveis de objetos públicos : primeira letra minúscula e
maiúscula para próxima palavra descritiva
parseInt, nextItem, currentValue, taxRate
• Variáveis locais e privadas: letras minúsculas e sublinhado
next_value, temp_value
• Constantes (final) : tudo maiúsculo
TAXRATE_CA, CURRENCY_US
Programação Orientada a Objeto - Java Básico
22
Tipos Primitivos de Dados
• Existem exatamente oito tipos primitivos de dados em Java
• Quatro representam inteiros:
– byte, short, int, long
• Dois representam números em ponto flutuante:
– float, double
• Um para representar caracteres:
– char
• Um para representar valores lógicos (booleanos) :
– boolean
Programação Orientada a Objeto - Java Básico
23
Tipos Primitivos Numéricos
• A diferença entre os vários tipos numéricos primitivos é o seu
tamanho e conseqüentemente os valores que eles podem
armazenar:
Tipo
Tamanho
Valor Mínimo
Valor Máximo
byte
short
int
long
8 bits
16 bits
32 bits
64 bits
-128
-32,768
-2,147,483,648
< -9 x 1018
127
32,767
2,147,483,647
> 9 x 1018
float
double
32 bits
64 bits
+/- 3.4 x 1038 com 7 dígitos significativos
+/- 1.7 x 10308 com 15 dígitos significativos
Programação Orientada a Objeto - Java Básico
24
Caracteres
• Uma variável do tipo char armazena um único caracter do
conjunto de caracteres Unicode
• Um conjunto de caracteres é uma lista ordenada de caracteres e
cada caracter corresponde a um único número
• O conjunto de caracteres Unicode usa 16 bits por caracter,
permitindo armazenar 65,536 caracteres diferentes
• É um conjunto de caracteres internacional, contendo símbolos e
caracteres de várias línguas mundiais (mas não todas )
Programação Orientada a Objeto - Java Básico
25
Caracteres
• O conjunto de caracteres ASCII é mais velho e menor que o
Unicode, mas ainda é bastante popular.
• Os caracteres ASCII são um subconjunto dos caracteres Unicode,
incluindo:
Letras maiúsculas
Letras minúsculas
Pontuação
Dígitos
Símbolos especiais
Caracteres de Controle
A, B, C, …
a, b, c, …
ponto, ponto-e-vírgula, …
0, 1, 2, …
&, |, \, …
carriage return, tab, ...
Programação Orientada a Objeto - Java Básico
26
Importante
• Atenção, programadores de C:
 Em Java não existem tipos unsigned
 O tipo char não é um tipo numérico - para converter de char
para inteiro precisamos de um cast explícito.
Programação Orientada a Objeto - Java Básico
27
Boolean
• Um valor boolean representa uma condição verdadeira ou falsa
• Um boolean pode ser usado também para representar dois
estados, tais como ter uma lâmpada estar ligada ou desligada.
• As palavras reservadas true e false são os únicos valores
válidos para o tipo boolean
boolean done = false;
Programação Orientada a Objeto - Java Básico
28
Expressões
• Uma expressão é a forma mais simples de statement em
Java.
• É uma combinação de operadores e operandos.
• São usadas, por exemplo, no lado direito de atribuições e
como parte de testes em statements condicionais.
• Atribuições : <lado_esquerdo> = <expressão>
– onde <lado_esquerdo> é uma variável ou atributo.
Programação Orientada a Objeto - Java Básico
29
Expressões
• Exemplos :
– yearEndBalance = 1788.555
–x=2+3*4
– objeto1.atributo1=2*x/y;
•E se y for igual a zero?
•Geraremos uma exceção
•Aprenderemos a tratá-las
mais tarde!
Programação Orientada a Objeto - Java Básico
30
Operadores
• Como dissemos antes, uma expressão é uma combinação de
operandos e operadores para executar uma operação
• Operandos : variáveis, valores literais ou expressões (definição
recursiva!).
• Operadores : símbolos especiais para realizar operações
aritméticas e lógicas.
Programação Orientada a Objeto - Java Básico
31
Operadores Aritméticos
• Java tem quatro operadores matemáticos básicos (+, -, *, /) e
um operador de módulo (%) para realizar a aritmética básica:
Operador
+
*
/
%
Significado
Adição
Subtração
Multiplicação
Divisão
Módulo
Programação Orientada a Objeto - Java Básico
Exemplo
3+4
5-7
5*5
14 / 7
20 % 7
32
Operadores Aritméticos de Atribuição
• Cada uma das operações aritméticas tem uma forma associada
que tem uma atribuição associada que simplifica um tipo
expecífico de operação
• Forma geral:
variável operador = expressão
• Equivale a:
variável = variável operador expressão
Operador
+=
-=
*=
/=
%=
Significado
Atribuição c/ adição
Atribuição c/ subtração
Atribuição c/ multiplicação
Atribuição c/ divisão
Atribuição c/ módulo
Programação Orientada a Objeto - Java Básico
Exemplo
a += 5 (a = a + 5)
b -= 3 (b = b - 3)
c *= 2 (c = c * 2)
d /= 7 (d = d /7)
e %= 10 (e = e % 10)
33
Operadores incremento e decremento
• Assim como em C e C++, os oepradores ++ e -- podem ser usados para
incrementar ou decrementar o valor de uma variável em 1.
• Por exemplo, a++ incrementa em 1 o valor de a, como se fizéssemos a = a + 1.
• Os operadores incremento e decremento podem ser prefixados ou pós-fixados;
isto é, o ++ ou o -- podem aparecer antes ou depois dos valores a serem
incrementados ou decrementados.
• O comportamento de ambas é distinto: no caso pré-fixado, primeiro incrementa
(ou decrementa) e depois usa o valor enquanto que no pós-fixado, o incremento
(ou decremento) é feito a posteriori.
Programação Orientada a Objeto - Java Básico
34
Operadores incremento e decremento
package exemplos;
import java.lang.*;
public class Class3 {
public static void main (String[] args) {
int a,b;
a=5;
b=1+ ++a;
System.out.println("b="+b);
System.out.println("a="+a);
a=5;
b=1+a++;
System.out.println("b="+b);
System.out.println("a="+a);
}
}
Programação Orientada a Objeto - Java Básico
35
Operadores de Comparação
• Java tem vários operadores para testar igualdade e magnitude.
Todas estas expressões retornam uma valor lógico(verdadeiro ou
falso)
Operador
<
>
<=
>=
==
!=
Significado
Menor que
Maior que
Menor ou igual que
Maior ou igual que
Igual
Diferente
Exemplo
x<3
x>3
x <= 3
x >= 3
x == 3
x != 3
Não valem para objetos (que são ponteiros)
nem para strings (que são classes)
Programação Orientada a Objeto - Java Básico
36
Operadores Lógicos
• Expressões que resultam em valores lógicos podem ser
combinados usando os operadores lógicos
– Operadores de comparação
– Variáveis lógicas
– Funções que retornem valores lógicos
– etc.
Resultado
• Estão disponíveis: Operador
&
|
^
&&
||
!
AND lógico
OR lógico
XOR lógico (ou exclusivo)
AND “curto circuitado”
OR “curto circuitado”
NOT unário lógico
Programação Orientada a Objeto - Java Básico
37
Operações lógicas curto-circuitadas
• Usando &&, se o lado esquerdo da expressão for falso, toda a
expressão é assumida falsa. O mesmo vale para o || quando o lado
esquerdo é assumido como verdadeiro.
• Um caso interessante evitado é quando o lado direito da expressão
gera um erro - usando operadores curto-circuitados, este erro é
evitado.
• Exemplo:
if (demo != 0 && num / demon > 10)

if (demo != 0 & num / demon > 10)
error message: java.lang.ArithmeticException: / by zero
Programação Orientada a Objeto - Java Básico
38
Avaliação de expressões
• Há três fatores de avaliação, em ordem:
– Precedência do operador : algumas operações têm precedência
sobre outras.
– Associatividade do operador: se houver empate na regra acima,
vê-se qual é a associatividade de operadores de precedência
igual.
– Regras de ordem de avaliação: dizem não quando os operadores
são avaliados, mas sim quando os operandos são avaliados.
Programação Orientada a Objeto - Java Básico
39
Precedência de operadores
Operador
[] ()
*/%
+<< >> >>>
< > <= >=
== !=
&
^
|
&&
||
?:
= op=
Descrição
Chamada de funções, arrays e parênteses em expressões
Multiplicação, divisão e módulo
Adição e subtração
Shift de bits (multiplicação por potências de 2)
Testes de comparação lógicos
Testes de igualdade
AND
XOR
OR
AND lógico
OR lógico
versão mais curta do if...then...else
operadores de atribuição
Programação Orientada a Objeto - Java Básico
40
Associatividade de operadores
• Os operadores aritméticos Java (e suas versões do mundo real) são
associativos da esquerda para a direita.
• Isto significa que se o mesmo operador aparece mais de uma vez na
expressão, a ocorrência mais à esquerda é avaliada primeiro, seguida por
aquela da direita, e assim por diante.
• Exemplos:
– x=a+b+c
– y=a*b*c
Não se aplica o conceito (não é o mesmo operador)
– z=a+b*c
Vocês se lembram de algum operador da
vida real que não segue esta regra?
Programação Orientada a Objeto - Java Básico
41
Ordem de avaliação
• Para todos os operadores binários, o operando à esquerda é avaliado
antes do operando à direita do operador.
• Todos os operandos são avaliados integralmente antes do operador
ser avaliado.
• Se vários argumentos são mandados para um método/procedimento,
eles são avaliados da esquerda para a direita.
• Exemplos
– a = x + y == 4 | a * b == 5
– Celsius = Fahrenheit – 32 * 5 / 9
– Celsius = ( Fahrenheit – 32 ) * 5 / 9
Programação Orientada a Objeto - Java Básico
42
Literais
• Um literal é um valor que é colocado diretamente no código, que
respeita a regra de que “o que você digita é o que você obtém.”
• Um literal consiste em uma constante que tem um tipo de dados
associado a ele.
• Estes tipos podem ser:
– Inteiros: usados para representar números inteiros (subconjunto de Z).
– Ponto flutuante: representa números decimais com componentes
fracionários (subconjunto de Q).
– Booleanos: também chamados de lógicos, representam os valores true
(verdadeiro) ou false (falso).
– Caracter: são expressados por um único caracter cercado por aspas simples
(plics).
– String: são combinações de caracteres. Em Java strings são uma classe que
será discutida com todo o cuidado mais à frente.
Programação Orientada a Objeto - Java Básico
43
Literais Numéricos
• Literais inteiros são representados simplesmente por uma seqüência
de dígitos. Exemplos:
– 123 ; -345 ; 2846556 ; 0 ; etc.
• Já literais de ponto flutuante normalmente têm duas partes : a parte
inteira e a parte fracionária.
• Pode-se forçar um número inteiro a ser do tipo ponto flutuante
colocando-se a letra f (ou F) ao fim daquele número.
• Também podemos usar notação científica, definindo um expoente
antecedido pela letra e ou E
• Exemplos:
– Notação padrão: 1003.45 ; 2f ; -13.873
– Notação científica: 1.00345e3 ; 0.345E+11 ; 00345e-2 ;
.00100345e6 ; etc.
Programação Orientada a Objeto - Java Básico
44
Literais booleanos
• Usados para representar valores lógicos
• As palavras chave, true e false, podem ser usadas em qualquer
lugar que for necessário usar um valor lógico.
• Estes são os dois únicos valores que podem ser assumidos por
uma variável booleana.
É importante entender que não há
correspondência entre valores lógicos e
numéricos, como havia no C.
Programação Orientada a Objeto - Java Básico
45
Literais Caracter
• Um literal caracter é representado por um caracter dentro de um
par de aspas simples (‘ ‘).
• Exemplos: ‘a’ ; ‘z’ ; ‘9’ (diferente do número 9)
• Alguns caracteres não visíveis, tais como o enter e o backspace,
são representados, como em C, pelos caracteres de escape :
–
–
–
–
–
–
–
–
\n
\t
\b
\r
\f
\\
\’
\”
CRLF
Tab
Backspace
CR
Form feed
Barra invertida
Aspas simples
Aspas duplas
Programação Orientada a Objeto - Java Básico
46
Literais strings
• Um literal do tipo string é criado colocando-se qualquer texto entre aspas duplas.
• Exemplos:
– “abc”
– “a”
– “”
– etc.
• O interpretador Java automaticamente cria um objeto da classe String usando o
valor do literal string como o valor armazenado neste objeto.
A classe string será
vista com detalhes!
Programação Orientada a Objeto - Java Básico
47
Constantes
• Como em todas as linguagens de programação, Java permite que
definamos constantes que recebem um nome para evitar
utilização de valores literais.
• Afinal, é mais fácil entender porque o programador quis dizer
quando ele usou C_SALARIO_MAXIMO do que quando ele
usou 25000, não é mesmo?
• Para definir que um identificador é uma constante, basta colocar
a palavra chave final em frente a ele.
Programação Orientada a Objeto - Java Básico
48
Constantes
• Logo, a sintaxe fica
final datatype CONSTANTNAME = VALUE;
• Exemplos:
final double PI = 3.14159;
final int SIZE = 3;
Programação Orientada a Objeto - Java Básico
49
Separadores
Símbolo
()
{}
[]
;
,
.
Nome
parênteses
chaves
colchetes
ponto-e-vírgula
vírgula
Ponto
Propósito
precedência
definição de métodos,
blocos de código.
vetores
fim de statement
identificadores consecutivos
separador de pacote, classes,
métodos e variáveis.
Programação Orientada a Objeto - Java Básico
50
Comentários
• Os símbolos /* e */ cercam comentários de múltiplas linhas e todo o texto entre
eles é devidamente ignorado:
/* This is the beginning of my Java program. ...
Please read it carefully ...
*/
• Estes comentários não podem ser aninhados, isto é, não pode haver um
comentário dentro de um comentário
• Barras duplas (//) podem ser usados para uma única linha de comentário. Todo o
texto daquele ponto até o fim da linha será ignorado pelo interpretador.
taxrate = 0.075 // The tax rate for L.A. County
Comentários com // têm a vantagem
de servir quando usarmos Javadoc
Programação Orientada a Objeto - Java Básico
51
Objetos
• Vamos começar agora a ver os conceitos
de objetos.
• Não vamos ver profundamente, mas sim
entender como as variáveis se relacionam
com os objetos
Veremos depois os conceitos de classes e orientação a objetos
Programação Orientada a Objeto - Java Básico
52
Criando Objetos
• Uma variável armazena um tipo primitivo ou uma referência para
um objeto
• Um nome de classe pode ser usado como um tipo para declarar uma
variável de referência a um objeto
String title;
• Nenhum objeto foi criado com esta declaração
• Assim como um ponteiro, uma variável de referência a um objeto
armazena o endereço do objeto.
• O objeto deve ser criado separadamente usando as declarações
apropriadas.
Programação Orientada a Objeto - Java Básico
53
Criando Objetos
• Nós usamos o operador new para criar um objeto
title = new String ("Java Software Solutions");
Este operador chama o construtor da classe String, que
que é um método especial para inicializar o objeto
• O ato de criar um objeto é chamado de instanciação
• Um objeto é chamado de instância de uma classe particular
Programação Orientada a Objeto - Java Básico
54
Criando Objetos da classe String
• Dado que as strings são muito comuns, não precisamos usar o
operador new para criar um objeto da classe String
title = "Java Software Solutions";
• Esta é uma sintaxe especial que funciona apenas para as strings.
• Uma vez que um objeto foi instanciado, podemos usar o operador
ponto (dot operator) para chamar seus métodos
title.length()
Programação Orientada a Objeto - Java Básico
55
Métodos da classe string
• A classe String tem vários métodos úteis para manipular strings,
como por exemplo:
– char charAt(int index)  retorna o caracter na posição dada
pelo índice
– int compareTo(String str)  compara a string com o parâmetro.
O retorno é igual ao strcmp do C
– String concat(String str)  concatena a string com o parâmetro
– boolean equals(String str)  verifica se duas strings são iguais.
Não podemos usar o sinal de igual para compará-las.
– int length()  retorna o comprimento da string.
– String substring(int inicio, tam)  retorna a string que começa
na posição dada por início e tem comprimento tam. A primeira
posição de uma string é zero (como em C)
Programação Orientada a Objeto - Java Básico
56
Usando os métodos da classe String
import javax.swing.JOptionPane;
public class Max1 {
public static void main (String[] args)
{
String senha=“Senha1”;
String suaTentativa;
int i=1;
while ((i<=3)&&(!suaTentativa.equals(senha))) {
suaTentativa=Integer.parseInt(JOptionPane.showInputDialog(“Senha:"));
System.out.println(“Sua palavra tem ”+suaTentativa.length()+“letras”);
i++;
}
if (i>3) {System.out.println(“Você não descobriu a senha.”);
System.exit(0);
}
}
Programação Orientada a Objeto - Java Básico
57
Usando os métodos da classe String
• Lembre-se que quando usamos objetos, os métodos pertencem a
eles
• Algumas vezes os métodos pertencem às classes, mas isto
veremos depois.
• Logo, para chamar um método precisamos lembrar da sintaxe
<objeto>.<método>({<parâmetros>});
Programação Orientada a Objeto - Java Básico
58
Usando os métodos da classe String
• É isto que fizemos no exemplo: sempre que precisamos usar um
método, precisávamos saber a quem este método se aplicaria.
• Assim ,pudemos fazer as chamadas corretamente, sempre
usando o formato:
<objeto>.<método>({<parâmetros>});
• Exemplo : queremos saber o tamanho da string digitada. O
método para isto é length(), mas a quem ele se aplica.
• Resposta : ao objeto suaTentativa. Logo, a chamada correta é
suaTentativa.length()
Programação Orientada a Objeto - Java Básico
59
Bibliotecas de Classes
• Uma biblioteca de classes é uma coleção de classes que podemos
usar quando desenvolvemos programas.
• Existe uma Biblioteca de Classes Padrão Java (standard class
library) que é parte do ambiente de desenvolvimento Java.
• As classes não são parte da própria linguagem Java, mas nós
usamo-as fortemente.
• Parecido com o que acontecia com o C!
• O printf também não era parte da linguagem C padrão, mas
sim de uma biblioteca.
• Isto não impedia que nós o usássemos na maioria de nossos
programas
Programação Orientada a Objeto - Java Básico
60
Biblioteca de Classes
• As classes System e String são parte da Biblitoeca Padrão
Java.
• Existem várias outras classes nesta biblitoeca. Vamos vendo-as aos
poucos.
• Outras bibliotecas podem ser criadas por vocês ou obtidas das mais
diversas fontes, como no caso do livro texto ou de fornecedores
que as vendem.
Instalar uma classe é rapidinho : basta
copiá-la para o HD e colocar seu diretório
dentro da variável classpath
Programação Orientada a Objeto - Java Básico
61
Pacotes
• As classes na biblioteca padrão de classes estão organizadas em
pacotes.
• Pacotes são basicamente organizados em diretórios.
• O ponto na declaração de import corresponde a um sub-diretório 
não podemos ter pontos nos nomes de classes.
• Alguns dos pacotes na biblioteca padrão de classes são:
Pacote
Propósito
java.lang
java.applet
java.awt
javax.swing
java.net
java.util
Suporte genérico
Criação de applets para a web
Interfaces gráficas e gráficos
Componentes e capacidades gráficas adicionais
Comunicação via rede
Utilitários variados
Programação Orientada a Objeto - Java Básico
62
Pacotes
Vamos ver todos os pacotes no
seu devido tempo!
Programação Orientada a Objeto - Java Básico
63
A declaração import
• Quando quisermos usar uma classe de um pacote, temos
que usar seu nome completamente qualificado
java.util.Random
• Outra opção (a melhor delas!) é importar a classe usando
uma declaração import no começo do programa e depois
usar apenas o nome da classe
import java.util.Random;
• Para importar todas as classes em um determinado pacote,
podemos usar o caracter de wildcard * (asterisco)
import java.util.*;
Programação Orientada a Objeto - Java Básico
64
A declaração import
• Todas as classes no pacote java.lang são automaticamente
importadas para nossos programas
• Por isto não precisamos importar explicitamente este pacote ou
qualificar completamente o nome das classes System ou
String nos programas que usamos até agora.
Programação Orientada a Objeto - Java Básico
65
Exemplo de Criação e Uso de Objetos
import java.lang.*;
class Ponto {
int x,y; //Coordenadas de um ponto
Ponto (int a, int b) {x=a; y=b;}
Ponto () {x=0;y=0;}
public double distancia (Ponto p); {
int dx=this.x - p.x;
int dy=this.y - p.y;
return Math.sqrt(dx*dx+dy*dy);}
}
Construtor da classe
(Método polimórfico)
Como é uma classe pública, deve estar
public class TestePonto {
em um arquivo chamado TestePonto.java
public static void main (String[] args) {
Criação de um objeto (chamada
Ponto p1=new Ponto(2,3);
ao construtor da classe)
Ponto p2=new Ponto();
System.out.println(p1.distancia(p2));
}
}
Programação Orientada a Objeto - Java Básico
66
Objetos em Java
•
Em Java, um objeto na verdade é um ponteiro para o seu
conteúdo.
• Ele funciona igual aos ponteiros em C, mas não têm a mesma
“aparência” (eles agem como variáveis normais).
• Seja a definição que vimos anteriormente
Ponto p1=new Ponto(2,3);
• A verdadeira representação do que acontece na memória é:
p1
x 2
Objeto do tipo Ponto
y 3
Programação Orientada a Objeto - Java Básico
67
Objetos em Java
• Assim, imagine a seguinte seqüência de instruções
Ponto p=new Ponto(2,3);
Ponto b;
b=a;
b.y=b.x
• Quanto vale a.y?
Depois da criação de a
x 2
a
Logo, a.y=2
y 23
Depois da atribuição de b
Depois da atribuição de b.y
b
Programação Orientada a Objeto - Java Básico
68
Mais objetos em Java
• Assim, imagine a seguinte seqüência de instruções
Ponto p=new Ponto(2,3);
Ponto b;
b=a;
b=null;
• Quanto vale a?
Depois da criação de a
x 2
a
Logo, a permanece inalterado!
y 3
Depois da 1a. atribuição de b
b
Depois da 2a. atribuição de b
Programação Orientada a Objeto - Java Básico
69
Vetores (Arrays)
• Um array é uma área contígua de memória que armazena zero ou
mais elementos do mesmo tipo, endereçáveis através de um
índice.
meuArray
Elemento1
Elemento2
Elemento3
Elemento4
• Assim como no C, os índices do array começam em zero e
crescem. O primeiro elemento de um array é acessado como
myArray[0]
 Ao contrário do C, arrays não são ponteiros disfarçados, pois não
há ponteiros (explícitos) em Java
Programação Orientada a Objeto - Java Básico
70
Arrays
• Ao contrário do C, em Java os arrays são na realidade instâncias de
objetos. O significado verdadeiro disto ficará claro mais à frente.
• Existem duas maneiras de declarar um array:
int[] integerArray;
int
integerArray2[];
 Qual das duas é melhor?
 Use o segundo formato (int integerArray[]).
 É mais próximo ao C, logo mais compreensível para todos.
 Entretanto, muitas pessoas preferem o primeiro formato, logo
vocês podem ver isto em códigos alheios.
Programação Orientada a Objeto - Java Básico
71
Alocando um Array
As declarações acima só criam a variável que se refere ao array, mas
não aloca espaço para este.
• Já que o array é um objeto, isto é esperado.
 Lembre-se que variáveis de objetos nada mais são que ponteiros
disfarçados.
• Nós temos que alocar espaço usando uma das seguintes maneiras:
– Inicialização explícita
– Usando o operador new
Programação Orientada a Objeto - Java Básico
72
Alocando um Array
• Se você inicializar explícitamente um array, o espaço necessário para
ele é automaticamente alocado.
int ponto[] = {4, 17, 13};
int ponto2[] = ponto;
double velocidade[] = {12.1, 55.2, 70.4, 6};
ponto
ponto2
4
17
13
Programação Orientada a Objeto - Java Básico
73
Alocando um Array
• Se você não alocar espaço usando inicialização explícita, você
pode fazê-lo usando o operador new.
• Este operador aloca um pedaço contíguo de memória para
armazenar os dados do array.
int
meuArray[] = new int[5];
double velocidade[] = new double[3];
• Usando o operador new, não é necessário inicializar os elementos do
array.
 O JDK inicializa todos os elementos de arrays numéricos com zeros,
mas
não se deve confiar nisto.
Programação Orientada a Objeto - Java Básico
74
Alocando um Array
• Note-se que o seguinte C-ismo não é permitido em Java:
int myArray[10];
Você receberá um erro de compilação se tentar fazer
isto. As únicas maneiras de alocar espaço para um
array são através de inicialização explícita e através
do operador new.
Programação Orientada a Objeto - Java Básico
75
Tamanho de um array
• Podemos determinar o tamanho de um array em tempo de
execução usando-se o atributo length (que é uma constante) do
objeto Array em questão:
myArray.length;
• Isto aumenta a manutenibilidade do código.
• Exemplo: qual dos dois códigos abaixo é mais fácil de manter se o
tamanho do array for modificado?
int myArray[] = {1, 2, 3, 4, 5};
for(int idx=0; idx < 5; idx++)
System.out.println(myArray[idx]);
for(int idx=0; idx < myArray.length; idx++)
System.out.println(myArray[idx]);
Programação Orientada a Objeto - Java Básico
76
Tamanho de um array
• Lembre-se sempre que os índices de um array começam em zero.
• Um erro comum é começar a contar em 1 e tentar acessar algo além
do fim do array.
• Em C/C++ isto pode causar problemas catastróficos (escrever por
cima de dados valiosos, entre outros) e o programa pode passar a
comportar-se misteriosamente.
• Em Java todos os acessos a rrays são checados contra o tamanho
limite antes de serem efetuados.
Programação Orientada a Objeto - Java Básico
77
Verificação de Limites
int myArray[] = {1, 2, 3, 4, 5};
for(int idx = 0; idx < 6; idx++)
{
System.out.println(myArray[idx]);
}
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException
at Arrays.main(Arrays.java:34)
Programação Orientada a Objeto - Java Básico
78
Verificação de limites
• Podemos usar as capacidades de tratamento de erro do Java (que
veremos com cuidado mais a frente), de forma que o programa não
seja interrompido:
try
{
for(int idx=0; idx < 6; idx++)
{
System.out.println(myArray[idx]);
}
}
catch (ArrayIndexOutOfBoundsException indexException)
{
System.out.println(“Index out of bounds”);
}
Programação Orientada a Objeto - Java Básico
79
Arrays de mais de uma dimensão
• Podemos criar arrays de mais de uma dimensão, como por exemplo
um array bi-dimensional:
int twoDimensions[][]= {{1, 2}, {3, 4}};
double map[][] = new double[4][8];
System.out.println(map.length);
System.out.println(map[0].length);
 Podemos adicionar quantas dimensões forem necessárias para
nosso programa.
Programação Orientada a Objeto - Java Básico
80
Passando Arrays para Métodos
• É importante entender algo: se passarmos um array como um
parâmetro para um método, toda modificação de seu conteúdo
será vista fora do método também.
• Isto é, todos os arrays são passados por referência e podem ser
modificados dentro do método para o qual são passados.
• Isto, é claro, vale para todos os objetos. Já que eles na verdade
são ponteiros, ao passá-los por valor, estamos fazendo uma
passagem por referência do que eles apontam
Programação Orientada a Objeto - Java Básico
81
Passando Arrays para Métodos
Quando discutirmos classes e seus
métodos, vamos voltar a este tópico que
será então discutido exaustivamente.
Entretanto, é sempre importante
lembrar: objetos são, na realidade,
ponteiros.
Saber isto vai evitar que sejamos
enganados e cometamos erros bobos.
Programação Orientada a Objeto - Java Básico
82
Arrays Dinâmicos?
• Não é permitido modificar o tamanho de um array uma vez
que ele já foi alocado.
• O atributo length é do tipo final (constante).
• Não dá para fazer um array ser mais curto ou mais longo.
• Para fazer isto, temos que alocar um novo array e copiar os
dados do original para o novo.
Programação Orientada a Objeto - Java Básico
83
Download

Elementos básicos da linguagem Java