83
Programação Orientada a Objeto - Java Básico 1 Elementos Básicos da Linguagem Java Prof. Ricardo Linden

Java Aula02

  • Upload
    ronald

  • View
    240

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Java Aula02

Programação Orientada a Objeto - Java Básico

1

Elementos Básicos da Linguagem Java

Prof. Ricardo Linden

Page 2: Java Aula02

Programação Orientada a Objeto - Java Básico 2

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!

Page 3: Java Aula02

Programação Orientada a Objeto - Java Básico 3

Vantagens da Linguagem Java• Independência de plataforma

Sintaxe similar à linguagem C++

• Linguagem totalmente orientada a objetos

• Linguagem menos sujeita a erros de programaçãoFim da alocação de liberação manuais de memóriaFim da aritmética de ponteirosFim da confusão da atribuição com o teste de igualdadeFim da herança múltipla

Page 4: Java Aula02

Programação Orientada a Objeto - Java Básico 4

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.

Page 5: Java Aula02

Programação Orientada a Objeto - Java Básico 5

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

Page 6: Java Aula02

Programação Orientada a Objeto - Java Básico 6

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.

Page 7: Java Aula02

Programação Orientada a Objeto - Java Básico 7

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.

Page 8: Java Aula02

Programação Orientada a Objeto - Java Básico 8

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.

Page 9: Java Aula02

Programação Orientada a Objeto - Java Básico 9

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.

Page 10: Java Aula02

Programação Orientada a Objeto - Java Básico 10

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.

Page 11: Java Aula02

Programação Orientada a Objeto - Java Básico 11

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.

Page 12: Java Aula02

Programação Orientada a Objeto - Java Básico 12

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.

Page 13: Java Aula02

Programação Orientada a Objeto - Java Básico 13

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.

Page 14: Java Aula02

Programação Orientada a Objeto - Java Básico 14

Índice de temas•Palavras chaves

•Statements

•Expressões

•Operadores

•Separadores

•Identificadores

•Literais

•Constantes

•Comentários

•Strings

•Objetos

•Arrays

Page 15: Java Aula02

Programação Orientada a Objeto - Java Básico 15

Estrutura básica de um programa Java• Um programa Java básico tem uma estrutura similar à seguinte:

package <nome_pacote>;import <classes_importadas>;

class <nome_classe> {public static void main (String[] args) :: }

}

Mais a frente nós veremostudo isto com mais detalhes

Equivalentes às bibliotecas do C

Existe uma associação de pacote c/ diretório

Todo programa Java é uma coleção de classes, ao menosuma das quais é pública e tem um função main

A função main é onde começao processamento em Java

Page 16: Java Aula02

Programação Orientada a Objeto - Java Básico 16

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.

Page 17: Java Aula02

Programação Orientada a Objeto - Java Básico 17

Palavras Chave do Javaabstract boolean break byte byvaluecase cast catch char class const continuedefault do double else extends false final finally float for future generic gotoif implements import inner instanceof int interface long native new null operator outerpackage private protected public rest returnshort static super switch synchronizedthis throw throws transient true try var void volatile while

Page 18: Java Aula02

Programação Orientada a Objeto - Java Básico 18

Palavras Chaves do Java

Como no C, o núcleo da linguagem é relativamente pequeno, sendo extendido usando-se 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.

Page 19: Java Aula02

Programação Orientada a Objeto - Java Básico 19

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– condicionais

– declarações de variáveis– estruturas de repetição

Page 20: Java Aula02

Programação Orientada a Objeto - Java Básico 20

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

Page 21: Java Aula02

Programação Orientada a Objeto - Java Básico 21

Exemplos de Identificadores

• Válidos:– xpto– x123– $123– _x

• Inválidos– 1xpto– x-y– x^– y@

$ e _ são considerados como letras

Uso de caracteres inválidos

Identificadores têm que começar com letras

Page 22: Java Aula02

Programação Orientada a Objeto - Java Básico 22

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 sublinhadonext_value, temp_value

• Constantes (final) : tudo maiúsculoTAXRATE_CA, CURRENCY_US

Page 23: Java Aula02

Programação Orientada a Objeto - Java Básico 23

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

Page 24: Java Aula02

Programação Orientada a Objeto - Java Básico 24

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

byteshortintlong

floatdouble

Tamanho

8 bits16 bits32 bits64 bits

32 bits64 bits

Valor Mínimo

-128-32,768-2,147,483,648< -9 x 1018

+/- 3.4 x 1038 com 7 dígitos significativos+/- 1.7 x 10308 com 15 dígitos significativos

Valor Máximo

12732,7672,147,483,647> 9 x 1018

Page 25: Java Aula02

Programação Orientada a Objeto - Java Básico 25

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 )

Page 26: Java Aula02

Programação Orientada a Objeto - Java Básico 26

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úsculasLetras minúsculasPontuaçãoDígitosSímbolos especiaisCaracteres de Controle

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

Page 27: Java Aula02

Programação Orientada a Objeto - Java Básico 27

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.

Page 28: Java Aula02

Programação Orientada a Objeto - Java Básico 28

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;

Page 29: Java Aula02

Programação Orientada a Objeto - Java Básico 29

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.

Page 30: Java Aula02

Programação Orientada a Objeto - Java Básico 30

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!

Page 31: Java Aula02

Programação Orientada a Objeto - Java Básico 31

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.

Page 32: Java Aula02

Programação Orientada a Objeto - Java Básico 32

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 Exemplo + Adição 3 + 4 - Subtração 5 - 7 * Multiplicação 5 * 5 / Divisão 14 / 7 % Módulo 20 % 7

Page 33: Java Aula02

Programação Orientada a Objeto - Java Básico 33

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 Exemplo += Atribuição c/ adição a += 5 (a = a + 5) - = Atribuição c/ subtração b -= 3 (b = b - 3) * = Atribuição c/ multiplicação c *= 2 (c = c * 2) / = Atribuição c/ divisão d /= 7 (d = d /7) % = Atribuição c/ módulo e %= 10 (e = e % 10)

Page 34: Java Aula02

Programação Orientada a Objeto - Java Básico 34

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.

Page 35: Java Aula02

Programação Orientada a Objeto - Java Básico 35

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

}}

Page 36: Java Aula02

Programação Orientada a Objeto - Java Básico 36

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 Exemplo< Menor que x < 3> Maior que x > 3<= Menor ou igual que x <= 3>= Maior ou igual que x >= 3== Igual x == 3!= Diferente x != 3

Não valem para objetos (que são ponteiros)nem para strings (que são classes)

Page 37: Java Aula02

Programação Orientada a Objeto - Java Básico 37

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.

• Estão disponíveis: Operador Resultado & AND lógico | OR lógico ^ XOR lógico (ou exclusivo) && AND “curto circuitado” || OR “curto circuitado” ! NOT unário lógico

Page 38: Java Aula02

Programação Orientada a Objeto - Java Básico 38

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

Page 39: Java Aula02

Programação Orientada a Objeto - Java Básico 39

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.

Page 40: Java Aula02

Programação Orientada a Objeto - Java Básico 40

Precedência de operadoresOperador 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 = op= operadores de atribuição

Page 41: Java Aula02

Programação Orientada a Objeto - Java Básico 41

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– z = a + b * c Não se aplica o conceito (não é o mesmo operador)

Vocês se lembram de algum operador da vida real que não segue esta regra?

Page 42: Java Aula02

Programação Orientada a Objeto - Java Básico 42

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

Page 43: Java Aula02

Programação Orientada a Objeto - Java Básico 43

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.

Page 44: Java Aula02

Programação Orientada a Objeto - Java Básico 44

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.

Page 45: Java Aula02

Programação Orientada a Objeto - Java Básico 45

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.

Page 46: Java Aula02

Programação Orientada a Objeto - Java Básico 46

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 CRLF– \t Tab– \b Backspace– \r CR– \f Form feed– \\ Barra invertida– \’ Aspas simples– \” Aspas duplas

Page 47: Java Aula02

Programação Orientada a Objeto - Java Básico 47

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!

Page 48: Java Aula02

Programação Orientada a Objeto - Java Básico 48

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.

Page 49: Java Aula02

Programação Orientada a Objeto - Java Básico 49

Constantes

• Logo, a sintaxe ficafinal datatype CONSTANTNAME = VALUE;

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

Page 50: Java Aula02

Programação Orientada a Objeto - Java Básico 50

Separadores Símbolo Nome Propósito ( ) parênteses precedência { } chaves definição de métodos,

blocos de código. [ ] colchetes vetores ; ponto-e-vírgula fim de statement , vírgula identificadores consecutivos . Ponto separador de pacote, classes,

métodos e variáveis.

Page 51: Java Aula02

Programação Orientada a Objeto - Java Básico 51

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 vantagemde servir quando usarmos Javadoc

Page 52: Java Aula02

Programação Orientada a Objeto - Java Básico 52

Objetos

• Vamos começar agora a ver os conceitosde objetos.

• Não vamos ver profundamente, mas simentender como as variáveis se relacionamcom os objetos

Veremos depois os conceitos de classes e orientação a objetos

Page 53: Java Aula02

Programação Orientada a Objeto - Java Básico 53

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.

Page 54: Java Aula02

Programação Orientada a Objeto - Java Básico 54

• Nós usamos o operador new para criar um objeto

title = new String ("Java Software Solutions");

Este operador chama o construtor da classe String, queque é 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

Criando Objetos

Page 55: Java Aula02

Programação Orientada a Objeto - Java Básico 55

• 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()

Criando Objetos da classe String

Page 56: Java Aula02

Programação Orientada a Objeto - Java Básico 56

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)

Page 57: Java Aula02

Programação Orientada a Objeto - Java Básico 57

Usando os métodos da classe Stringimport 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);}

}

Page 58: Java Aula02

Programação Orientada a Objeto - Java Básico 58

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

Usando os métodos da classe String

Page 59: Java Aula02

Programação Orientada a Objeto - Java Básico 59

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

Page 60: Java Aula02

Programação Orientada a Objeto - Java Básico 60

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

Page 61: Java Aula02

Programação Orientada a Objeto - Java Básico 61

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

Page 62: Java Aula02

Programação Orientada a Objeto - Java Básico 62

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

java.langjava.appletjava.awtjavax.swingjava.netjava.util

Propósito

Suporte genéricoCriação de applets para a webInterfaces gráficas e gráficosComponentes e capacidades gráficas adicionaisComunicação via redeUtilitários variados

Page 63: Java Aula02

Programação Orientada a Objeto - Java Básico 63

Vamos ver todos os pacotes no seu devido tempo!

Pacotes

Page 64: Java Aula02

Programação Orientada a Objeto - Java Básico 64

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

Page 65: Java Aula02

Programação Orientada a Objeto - Java Básico 65

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

A declaração import

Page 66: Java Aula02

Programação Orientada a Objeto - Java Básico 66

Exemplo de Criação e Uso de Objetosimport 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);}

}

public class TestePonto { public static void main (String[] args) {

Ponto p1=new Ponto(2,3);Ponto p2=new Ponto();

System.out.println(p1.distancia(p2));}

}

Construtor da classe(Método polimórfico)

Criação de um objeto (chamadaao construtor da classe)

Como é uma classe pública, deve estar em um arquivo chamado TestePonto.java

Page 67: Java Aula02

Programação Orientada a Objeto - Java Básico 67

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 Objeto do tipo Ponto2x

3y

Page 68: Java Aula02

Programação Orientada a Objeto - Java Básico 68

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?

2x

3ya

Depois da criação de a

Depois da atribuição de b

b

2

Depois da atribuição de b.y

Logo, a.y=2

Page 69: Java Aula02

Programação Orientada a Objeto - Java Básico 69

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?

2x

3ya

Depois da criação de a

Depois da 1a. atribuição de b

b

Logo, a permanece inalterado!

Depois da 2a. atribuição de b

Page 70: Java Aula02

Programação Orientada a Objeto - Java Básico 70

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.

Elemento1Elemento2Elemento3Elemento4

meuArray

• 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

Page 71: Java Aula02

Programação Orientada a Objeto - Java Básico 71

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.

Page 72: Java Aula02

Programação Orientada a Objeto - Java Básico 72

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

Page 73: Java Aula02

Programação Orientada a Objeto - Java Básico 73

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

41713

pontoponto2

Page 74: Java Aula02

Programação Orientada a Objeto - Java Básico 74

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ãonão se deve confiar nisto.

Page 75: Java Aula02

Programação Orientada a Objeto - Java Básico 75

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

Alocando um Array

Page 76: Java Aula02

Programação Orientada a Objeto - Java Básico 76

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

Page 77: Java Aula02

Programação Orientada a Objeto - Java Básico 77

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.

Page 78: Java Aula02

Programação Orientada a Objeto - Java Básico 78

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)

Page 79: Java Aula02

Programação Orientada a Objeto - Java Básico 79

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

Page 80: Java Aula02

Programação Orientada a Objeto - Java Básico 80

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.

Page 81: Java Aula02

Programação Orientada a Objeto - Java Básico 81

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

Page 82: Java Aula02

Programação Orientada a Objeto - Java Básico 82

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.

Page 83: Java Aula02

Programação Orientada a Objeto - Java Básico 83

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.