Beruflich Dokumente
Kultur Dokumente
Compatibilidade Retroativa!
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.
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++.
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.
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.
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.
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.
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.
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.
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
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.
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
Exemplos de Identificadores
Vlidos:
xpto
x123
$123
_x
Invlidos
1xpto
x-y
x^
y@
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
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
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
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
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
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
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.
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.
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
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
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;
Criando Objetos
Ns usamos o operador new para criar um objeto
title = new String ("Java Software Solutions");
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.
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
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.
Construtor da classe
(Mtodo polimrfico)
Objetos em Java
x 2
y 3
Objetos em Java
x 2
Logo, a.y=2
y 23
Depois da atribuio de b
x 2
y 3
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
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
Alocando um Array
Note-se que o seguinte C-ismo no permitido em Java:
int myArray[10];
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 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.