Sie sind auf Seite 1von 83

Elementos Bsicos da Linguagem Java

Prof. Ricardo Linden

Programao Orientada a Objeto Java Bsico

Conceitos bsicos do Java


Java uma boa linguagem de programao, mas no a panacia
para todos os males computacionais do mundo.
Ncleo da linguagem bastante estvel melhoramentos ocorrem
em sua maioria nas bibliotecas

Compatibilidade Retroativa!

Vantagens da Linguagem Java


Independncia de plataforma
Sintaxe similar linguagem C++
Linguagem totalmente orientada a objetos
Linguagem menos sujeita a erros de programao
Fim da alocao de liberao manuais de memria
Fim da aritmtica de ponteiros
Fim da confuso da atribuio com o teste de igualdade
Fim da herana mltipla

Palavras chaves do Java

Simples
Ns quisemos elaborar um sistema que pudesse ser programado
facilmente sem muito treinamento esotrico e que facilitasse a
prtica padro atual. Assim, embora achssemos que a linguagem
C++ no fosse adequada, ns projetamos a linguagem Java o
mais parecida possvel com o C++ a fim de tornar o sistema mais
compreensvel. Java omite recursos raramente usados e pouco
compreendidos do C++ que, em nossa experincia, trazem mais
dificuldades que benefcios.

Palavras chaves do Java

Orientada a objeto
Definido de forma simples, um projeto orientado a objetos um
atcnica de programao que concentra-se nos dados e nas
interfaces de projetos. (...) Os recursos de programao orientada
a objetos da linguagem Java so, essencialmente, os da
linguagem C++.

Palavras chaves do Java

Distribuda
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 atravs
de URLs com a mesma facilidade com que se acessa um arquivo
no sistema local.

Palavras chaves do Java


Robusta
Java tem a inteno de escrever programas que precisam ser
confiveis de vrias formas. O Java coloca muita nfase na
verificao antecipada de possveis problemas, na verificao
dinmica em tempo de execuo e na eliminao de situaes
sujeitas a erros. A nica e grande diferena entre o Java e o C++
est em que o Java usa um modelo de ponterios que elimina a
possibilidade de sobrescrita de memria e conseqente destruio
de dados.

Palavras chaves do Java

Segura
A linguagem Java tem a inteno de ser usada em ambientes de
rede/distribudos. Nesta direo, grande nfase tem sido colocada
na segurana. O Java permite a construo de sistemas livres de
vrus e adulteraes.

Palavras chaves do Java

Arquitetura Neutra
O compilador gera um formato de arquivo objeto neutro em
relao arquiteura - o cdigo compilado executvel em muitos
processadores, dada a presena do sistema Java em tempo de
execuo. O compilador Java daz isso gerando instrues em
bytecodes que nada tm a ver com uma arquitetura particular de
um computador especfio. Em vez disto, elas so projetadas para
serem fceis de interpretar em qualquer mquina e convertidas
facilmente para o cdigo nativo da mquina em tempo real.

Palavras chaves do Java

Portvel
Diferente das linguagens C e C++, no h aspectos dependentes
da implementao na especificao da linguagem Java. Os
tamanhos dos tipos de dados primitivos so especificados, assim
como o comportamento da aritmtica que os utiliza.

Palavras chaves do Java

Interpretada
O interpretador Java pode executar bytecodes Java diretamente
em qualquer mquina para a qual tenha sido escrito. Como a
ligao um processo mais incremental e leve, o processo de
desenvolvimento pode ser muito mais rpido e exploratrio.

Palavras chaves do Java

Alto desempenho
Embora o desempenho dos bytecodes interpretados seja
geralmente mais do que adequado, h situaes em que
necessrio um desempenho superior. Os bytecodes podem ser
convertidos em tempo real para o cdigo de mquina da CPU
particular onde o aplicativo est executando.

Palavras chaves do Java

Mltipla execuo
Os benefcios das mltiplas linhas d execuo (threads) so
melhor capacidade de resposta interativa e melhor
comportamento em tempo real de execuo.

ndice de temas
Palavras chaves

Literais

Statements

Constantes

Expresses
Operadores
Separadores
Identificadores

Comentrios
Strings
Objetos
Arrays

Estrutura bsica de um programa Java


Um programa Java bsico tem uma estrutura similar seguinte:
package <nome_pacote>;
Existe uma associao de pacote c/ diretrio
import <classes_importadas>;
Equivalentes s bibliotecas do C

Todo programa Java uma coleo de classes, ao meno


class <nome_classe> {
uma das quais pblica e tem um funo main
public static void main (String[] args)
: onde comea
A funo main
Mais a frente ns veremos
o processamento
:
em Java
tudo isto com mais detalhes
}
}

Palavras Chave
As palavras chaves do Java so palavras reservadas.
Isto quer dizer que no podem ser usadas em
nenhum outro contexto que no aquele para o
qual foram definidas.
Isto quer dizer que no podem ser usadas como
nomes de variveis, classes ou mtodos.
Combinadas com a sintaxe dos operadores e
separadores formam a definio da linguagem Java.

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

Palavras Chaves do Java


Como no C, o ncleo da linguagem
relativamente pequeno, sendo extendido usandose bibliotecas (neste caso, de classes)

Entretanto, no se espera que se decore todas as


palavras chaves imediatamente. Com o tempo e o
uso, elas vo aos poucos entrando em nossa
cabea.

Statements
Todo programa Java composto de statements.
Todas as statements so sensveis a caso
Todas as statements teminam com um ponto-e-vrgula (;).
As statements so similares quelas do C.
Statements mais importantes :
atribuies
condicionais

declaraes de variveis
estruturas de repetio

Identificadores

Identificadores so usados para nomear variveis, classes, mtodos 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 posio, pode-se usar livremente letras ou numerais.
O sublinhado (_) e o cifro ($) so considerados letras e podem ser usadas
em qualquer posio, incluindo a primeira.
de bom alvitre utilizar nomes descritivos.
Salario mais compreensvel do que s
ClasseAutomovomeis mais compreensvel do que CA1

Exemplos de Identificadores
Vlidos:
xpto
x123
$123
_x
Invlidos
1xpto
x-y
x^
y@

$ e _ so considerados como letras

Identificadores tm que comear com letras


Uso de caracteres invlidos

Convenes usadas normalmente para


nomes
Classes: Primeira letra maiscula, resto minsculo
Mtodos e variveis de objetos pblicos : primeira letra minscula e
maiscula para prxima palavra descritiva
parseInt, nextItem, currentValue, taxRate
Variveis locais e privadas: letras minsculas e sublinhado
next_value, temp_value
Constantes (final) : tudo maisculo
TAXRATE_CA, CURRENCY_US

Tipos Primitivos de Dados


Existem exatamente oito tipos primitivos de dados em Java
Quatro representam inteiros:
byte, short, int, long
Dois representam nmeros em ponto flutuante:
float, double
Um para representar caracteres:
char
Um para representar valores lgicos (booleanos) :
boolean

Tipos Primitivos Numricos


A diferena entre os vrios tipos numricos primitivos o seu
tamanho e conseqentemente os valores que eles podem
armazenar:
Tipo

Tamanho

Valor Mnimo

Valor Mximo

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 dgitos significativos


+/- 1.7 x 10308 com 15 dgitos significativos

Caracteres
Uma varivel 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 nmero
O conjunto de caracteres Unicode usa 16 bits por caracter,
permitindo armazenar 65,536 caracteres diferentes
um conjunto de caracteres internacional, contendo smbolos e
caracteres de vrias lnguas mundiais (mas no todas )

Caracteres
O conjunto de caracteres ASCII mais velho e menor que o
Unicode, mas ainda bastante popular.
Os caracteres ASCII so um subconjunto dos caracteres Unicode,
incluindo:
Letras maisculas
Letras minsculas
Pontuao
Dgitos
Smbolos especiais
Caracteres de Controle

A, B, C,
a, b, c,
ponto, ponto-e-vrgula,
0, 1, 2,
&, |, \,
carriage return, tab, ...

Importante
Ateno, programadores de C:
Em Java no existem tipos unsigned
O tipo char no um tipo numrico - para converter de char
para inteiro precisamos de um cast explcito.

Boolean
Um valor boolean representa uma condio verdadeira ou falsa
Um boolean pode ser usado tambm para representar dois
estados, tais como ter uma lmpada estar ligada ou desligada.
As palavras reservadas true e false so os nicos valores
vlidos para o tipo boolean
boolean done = false;

Expresses
Uma expresso a forma mais simples de statement em
Java.
uma combinao de operadores e operandos.
So usadas, por exemplo, no lado direito de atribuies e
como parte de testes em statements condicionais.
Atribuies : <lado_esquerdo> = <expresso>
onde <lado_esquerdo> uma varivel ou atributo.

Expresses
Exemplos :
yearEndBalance = 1788.555
x=2+3*4
objeto1.atributo1=2*x/y;
E se y for igual a zero?
Geraremos uma exceo
Aprenderemos a trat-las
mais tarde!

Operadores
Como dissemos antes, uma expresso uma combinao de
operandos e operadores para executar uma operao
Operandos : variveis, valores literais ou expresses (definio
recursiva!).
Operadores : smbolos especiais para realizar operaes
aritmticas e lgicas.

Operadores Aritmticos
Java tem quatro operadores matemticos bsicos (+, -, *, /) e
um operador de mdulo (%) para realizar a aritmtica bsica:
Operador
Significado
+
Adio
Subtrao
*
Multiplicao
/
Diviso
% Mdulo

Exemplo
3+4
5-7
5*5
14 / 7
20 % 7

Operadores Aritmticos de
Atribuio

Cada uma das operaes aritmticas tem uma forma associada


que tem uma atribuio associada que simplifica um tipo
expecfico de operao
Forma geral:
varivel operador = expresso
Equivale a:
varivel = varivel operador expresso
Operador
+=
-=
*=
/=
%=

Significado
Atribuio c/ adio
Atribuio c/ subtrao
Atribuio c/ multiplicao
Atribuio c/ diviso
Atribuio c/ mdulo

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)

Operadores incremento e
decremento

Assim como em C e C++, os oepradores ++ e -- podem ser usados para


incrementar ou decrementar o valor de uma varivel em 1.

Por exemplo, a++ incrementa em 1 o valor de a, como se fizssemos a = a + 1.

Os operadores incremento e decremento podem ser prefixados ou ps-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 ps-fixado, o incremento
(ou decremento) feito a posteriori.

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

Operadores de
Comparao
Java tem vrios operadores para testar igualdade e magnitude.
Todas estas expresses retornam uma valor lgico(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

No valem para objetos (que so ponteiros)


nem para strings (que so classes)

Operadores Lgicos
Expresses que resultam em valores lgicos podem ser
combinados usando os operadores lgicos
Operadores de comparao
Variveis lgicas
Funes que retornem valores lgicos
etc.
Resultado
Esto disponveis: Operador
&
|
^
&&
||
!

AND lgico
OR lgico
XOR lgico (ou exclusivo)
AND curto circuitado
OR curto circuitado
NOT unrio lgico

Operaes lgicas curtocircuitadas

Usando &&, se o lado esquerdo da expresso for falso, toda a


expresso assumida falsa. O mesmo vale para o || quando o lado
esquerdo assumido como verdadeiro.
Um caso interessante evitado quando o lado direito da expresso 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

Avaliao de
expresses
H trs fatores de avaliao, em ordem:
Precedncia do operador : algumas operaes tm precedncia sobre outras.
Associatividade do operador: se houver empate na regra acima, v-se qual a
associatividade de operadores de precedncia igual.
Regras de ordem de avaliao: dizem no quando os operadores so
avaliados, mas sim quando os operandos so avaliados.

Precedncia de operadores
Operador
Descrio
[] ()
Chamada de funes, arrays e parnteses em expresses
* / % Multiplicao, diviso e mdulo
+Adio e subtrao
<< >> >>>
Shift de bits (multiplicao por potncias de 2)
< > <= >=
Testes de comparao lgicos
== != Testes de igualdade
& AND
^ XOR
| OR
&&
AND lgico
|| OR lgico
? : verso mais curta do if...then...else
= op= operadores de atribuio

Associatividade de
operadores

Os operadores aritmticos Java (e suas verses do mundo real) so


associativos da esquerda para a direita.
Isto significa que se o mesmo operador aparece mais de uma vez na
expresso, a ocorrncia mais esquerda avaliada primeiro, seguida por
aquela da direita, e assim por diante.
Exemplos:
x=a+b+c
y=a*b*c
z=a+b*c
No se aplica o conceito (no o mesmo operador)

Vocs se lembram de algum operador da


vida real que no segue esta regra?

Ordem de avaliao
Para todos os operadores binrios, o operando esquerda avaliado
antes do operando direita do operador.
Todos os operandos so avaliados integralmente antes do operador
ser avaliado.
Se vrios argumentos so mandados para um mtodo/procedimento,
eles so avaliados da esquerda para a direita.
Exemplos
a = x + y == 4 | a * b == 5
Celsius = Fahrenheit 32 * 5 / 9
Celsius = ( Fahrenheit 32 ) * 5 / 9

Literais
Um literal um valor que colocado diretamente no cdigo, que respeita
a regra de que o que voc digita o que voc obtm.
Um literal consiste em uma constante que tem um tipo de dados associado
a ele.
Estes tipos podem ser:
Inteiros: usados para representar nmeros inteiros (subconjunto de Z).
Ponto flutuante: representa nmeros decimais com componentes fracionrios
(subconjunto de Q).
Booleanos: tambm chamados de lgicos, representam os valores true (verdadeiro) ou
false (falso).
Caracter: so expressados por um nico caracter cercado por aspas simples (plics).
String: so combinaes de caracteres. Em Java strings so uma classe que ser
discutida com todo o cuidado mais frente.

Literais Numricos
Literais inteiros so representados simplesmente por uma seqncia de dgitos.
Exemplos:
123 ; -345 ; 2846556 ; 0 ; etc.
J literais de ponto flutuante normalmente tm duas partes : a parte inteira e a
parte fracionria.
Pode-se forar um nmero inteiro a ser do tipo ponto flutuante colocando-se a
letra f (ou F) ao fim daquele nmero.
Tambm podemos usar notao cientfica, definindo um expoente antecedido
pela letra e ou E
Exemplos:
Notao padro: 1003.45 ; 2f ; -13.873
Notao cientfica: 1.00345e3 ; 0.345E+11 ; 00345e-2 ; .00100345e6 ; etc.

Literais booleanos
Usados para representar valores lgicos
As palavras chave, true e false, podem ser usadas em qualquer
lugar que for necessrio usar um valor lgico.
Estes so os dois nicos valores que podem ser assumidos por
uma varivel booleana.

importante entender que no h


correspondncia entre valores lgicos e
numricos, como havia no C.

Literais Caracter
Um literal caracter representado por um caracter dentro de um par de aspas
simples ( ).
Exemplos: a ; z ; 9 (diferente do nmero 9)
Alguns caracteres no visveis, tais como o enter e o backspace, so
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

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!

Constantes
Como em todas as linguagens de programao, Java permite que
definamos constantes que recebem um nome para evitar
utilizao de valores literais.
Afinal, mais fcil entender porque o programador quis dizer
quando ele usou C_SALARIO_MAXIMO do que quando ele
usou 25000, no mesmo?
Para definir que um identificador uma constante, basta colocar
a palavra chave final em frente a ele.

Constantes
Logo, a sintaxe fica
final datatype CONSTANTNAME = VALUE;

Exemplos:
final double PI = 3.14159;
final int SIZE = 3;

Separadores
Smbolo
()
{}
[]
;
,
.

Nome
parnteses
chaves
colchetes
ponto-e-vrgula
vrgula
Ponto

Propsito
precedncia
definio de mtodos,
blocos de cdigo.
vetores
fim de statement
identificadores consecutivos
separador de pacote, classes,
mtodos e variveis.

Comentrios
Os smbolos /* e */ cercam comentrios de mltiplas linhas e todo o texto entre
eles devidamente ignorado:
/* This is the beginning of my Java program. ...
Please read it carefully ...
*/
Estes comentrios no podem ser aninhados, isto , no pode haver um
comentrio dentro de um comentrio
Barras duplas (//) podem ser usados para uma nica linha de comentrio. Todo o
texto daquele ponto at o fim da linha ser ignorado pelo interpretador.
taxrate = 0.075 // The tax rate for L.A. County

Comentrios com // tm a vantagem


de servir quando usarmos Javadoc

Objetos
Vamos comear agora a ver os conceitos
de objetos.
No vamos ver profundamente, mas sim
entender como as variveis se relacionam
com os objetos

Veremos depois os conceitos de classes e orientao a objetos

Criando Objetos
Uma varivel armazena um tipo primitivo ou uma referncia para um
objeto
Um nome de classe pode ser usado como um tipo para declarar uma
varivel de referncia a um objeto
String title;

Nenhum objeto foi criado com esta declarao


Assim como um ponteiro, uma varivel de referncia a um objeto armazena
o endereo do objeto.
O objeto deve ser criado separadamente usando as declaraes apropriadas.

Criando Objetos
Ns 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 mtodo especial para inicializar o objeto

O ato de criar um objeto chamado de instanciao


Um objeto chamado de instncia de uma classe particular

Criando Objetos da classe String


Dado que as strings so muito comuns, no 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 mtodos
title.length()

Mtodos da classe string


A classe String tem vrios mtodos teis para manipular strings,
como por exemplo:
char charAt(int index) retorna o caracter na posio dada pelo
ndice
int compareTo(String str) compara a string com o parmetro.
O retorno igual ao strcmp do C
String concat(String str) concatena a string com o parmetro
boolean equals(String str) verifica se duas strings so iguais.
No 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 comea na
posio dada por incio e tem comprimento tam. A primeira
posio de uma string zero (como em C)

Usando os mtodos 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 no descobriu a senha.);
System.exit(0);
}
}

Usando os mtodos da classe String


Lembre-se que quando usamos objetos, os mtodos pertencem a
eles
Algumas vezes os mtodos pertencem s classes, mas isto
veremos depois.
Logo, para chamar um mtodo precisamos lembrar da sintaxe
<objeto>.<mtodo>({<parmetros>});

Usando os mtodos da classe String


isto que fizemos no exemplo: sempre que precisamos usar um mtodo,
precisvamos saber a quem este mtodo se aplicaria.
Assim ,pudemos fazer as chamadas corretamente, sempre usando o formato:
<objeto>.<mtodo>({<parmetros>});
Exemplo : queremos saber o tamanho da string digitada. O mtodo para isto
length(), mas a quem ele se aplica.
Resposta : ao objeto
suaTentativa.length()

suaTentativa. Logo, a chamada correta

Bibliotecas de Classes
Uma biblioteca de classes uma coleo de classes que podemos usar
quando desenvolvemos programas.
Existe uma Biblioteca de Classes Padro Java (standard class library)
que parte do ambiente de desenvolvimento Java.
As classes no so parte da prpria linguagem Java, mas ns usamo-as
fortemente.
Parecido com o que acontecia com o C!
O printf tambm no era parte da linguagem C padro, mas sim de
uma biblioteca.
Isto no impedia que ns o usssemos na maioria de nossos
programas

Biblioteca de Classes
As classes System e String so parte da Biblitoeca Padro
Java.
Existem vrias outras classes nesta biblitoeca. Vamos vendo-as aos
poucos.
Outras bibliotecas podem ser criadas por vocs 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 diretrio
dentro da varivel classpath

Pacotes
As classes na biblioteca padro de classes esto organizadas em
pacotes.
Pacotes so basicamente organizados em diretrios.
O ponto na declarao de import corresponde a um sub-diretrio
no podemos ter pontos nos nomes de classes.
Alguns dos pacotes na biblioteca padro de classes so:
Pacote

Propsito

java.lang
java.applet
java.awt
javax.swing
java.net
java.util

Suporte genrico
Criao de applets para a web
Interfaces grficas e grficos
Componentes e capacidades grficas adicionais
Comunicao via rede
Utilitrios variados

Pacotes
Vamos ver todos os pacotes no
seu devido tempo!

A declarao import
Quando quisermos usar uma classe de um pacote, temos que usar seu nome
completamente qualificado
java.util.Random

Outra opo (a melhor delas!) importar a classe usando uma declarao


import no comeo 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.*;

A declarao import
Todas as classes no pacote java.lang so automaticamente
importadas para nossos programas
Por isto no precisamos importar explicitamente este pacote ou
qualificar completamente o nome das classes System ou
String nos programas que usamos at agora.

Exemplo de Criao 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
(Mtodo polimrfico)

Como uma classe pblica, deve estar


public class TestePonto {
em um arquivo chamado TestePonto.java
public static void main (String[] args) {
Criao de um objeto (chamada
Ponto p1=new Ponto(2,3);
ao construtor da classe)
Ponto p2=new Ponto();
System.out.println(p1.distancia(p2));
}
}

Objetos em Java

Em Java, um objeto na verdade um ponteiro para o seu


contedo.

Ele funciona igual aos ponteiros em C, mas no tm a mesma


aparncia (eles agem como variveis normais).
Seja a definio que vimos anteriormente

Ponto p1=new Ponto(2,3);


A verdadeira representao do que acontece na memria :
p1

x 2
y 3

Objeto do tipo Ponto

Objetos em Java

Assim, imagine a seguinte seqncia de instrues

Ponto p=new Ponto(2,3);


Ponto b;
b=a;
b.y=b.x
Quanto vale a.y?
Depois da criao de a

x 2

Logo, a.y=2

y 23

Depois da atribuio de b

Depois da atribuio de b.y

Mais objetos em Java


Assim, imagine a seguinte seqncia de instrues

Ponto p=new Ponto(2,3);


Ponto b;
b=a;
b=null;
Quanto vale a?
Depois da criao de a

x 2

y 3

Depois da 1a. atribuio de b

Depois da 2a. atribuio de b

Logo, a permanece inalterado!

Vetores (Arrays)
Um array uma rea contgua de memria que armazena zero ou
mais elementos do mesmo tipo, endereveis atravs de um
ndice.
meuArray

Elemento1
Elemento2
Elemento3
Elemento4

Assim como no C, os ndices do array comeam em zero e crescem. O


primeiro elemento de um array acessado como myArray[0]
Ao contrrio do C, arrays no so ponteiros disfarados, pois no h
ponteiros (explcitos) em Java

Arrays
Ao contrrio do C, em Java os arrays so na realidade instncias 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 prximo ao C, logo mais compreensvel para todos.
Entretanto, muitas pessoas preferem o primeiro formato, logo vocs podem ver isto
em cdigos alheios.

Alocando um Array
As declaraes acima s criam a varivel que se refere ao array, mas
no aloca espao para este.
J que o array um objeto, isto esperado.
Lembre-se que variveis de objetos nada mais so que ponteiros
disfarados.
Ns temos que alocar espao usando uma das seguintes maneiras:
Inicializao explcita
Usando o operador new

Alocando um Array
Se voc inicializar explcitamente um array, o espao necessrio 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

Alocando um Array
Se voc no alocar espao usando inicializao explcita, voc
pode faz-lo usando o operador new.
Este operador aloca um pedao contguo de memria para
armazenar os dados do array.
int
meuArray[] = new int[5];
double velocidade[] = new double[3];
Usando o operador new, no necessrio inicializar os elementos do array.
O JDK inicializa todos os elementos de arrays numricos com zeros, mas

no se deve confiar nisto.

Alocando um Array
Note-se que o seguinte C-ismo no permitido em Java:
int myArray[10];

Voc receber um erro de compilao se tentar fazer


isto. As nicas maneiras de alocar espao para um
array so atravs de inicializao explcita e atravs
do operador new.

Tamanho de um array
Podemos determinar o tamanho de um array em tempo de
execuo usando-se o atributo length (que uma constante) do
objeto Array em questo:
myArray.length;
Isto aumenta a manutenibilidade do cdigo.
Exemplo: qual dos dois cdigos abaixo mais fcil 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]);

Tamanho de um array
Lembre-se sempre que os ndices de um array comeam em zero.
Um erro comum comear a contar em 1 e tentar acessar algo alm do fim
do array.
Em C/C++ isto pode causar problemas catastrficos (escrever por cima de
dados valiosos, entre outros) e o programa pode passar a comportar-se
misteriosamente.
Em Java todos os acessos a rrays so checados contra o tamanho limite
antes de serem efetuados.

Verificao 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)

Verificao de limites
Podemos usar as capacidades de tratamento de erro do Java (que
veremos com cuidado mais a frente), de forma que o programa no
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);
}

Arrays de mais de uma dimenso


Podemos criar arrays de mais de uma dimenso, 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 dimenses forem necessrias para
nosso programa.

Passando Arrays para Mtodos


importante entender algo: se passarmos um array como um
parmetro para um mtodo, toda modificao de seu contedo
ser vista fora do mtodo tambm.
Isto , todos os arrays so passados por referncia e podem ser
modificados dentro do mtodo para o qual so passados.
Isto, claro, vale para todos os objetos. J que eles na verdade
so ponteiros, ao pass-los por valor, estamos fazendo uma
passagem por referncia do que eles apontam

Passando Arrays para Mtodos


Quando discutirmos classes e seus
mtodos, vamos voltar a este tpico que
ser ento discutido exaustivamente.
Entretanto, sempre importante
lembrar: objetos so, na realidade,
ponteiros.
Saber isto vai evitar que sejamos
enganados e cometamos erros bobos.

Arrays Dinmicos?
No permitido modificar o tamanho de um array uma vez
que ele j foi alocado.
O atributo length do tipo final (constante).
No 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.

Das könnte Ihnen auch gefallen