Java - Introdução
BCC 221 - Programação Orientada a Objectos(POO)
Guillermo Cámara-Chávez
Departamento de Computação - UFOP
Introdução
I A Sun Microsystems financiou uma pesquisa corporativa
interna em 1991, com codinome Green
I Microprocessadores;
I O foco eram dispositivos eletrônicos inteligentes destinados ao
consumidor final.
I O projeto resultou em uma linguagem de programação
baseada em C e C++
I Oak (Carvalho): já existia;
I Java: a cidade, o café.
1/69
Introdução (cont.)
2/69
Principais Caracterı́sticas
I Orientação a objetos;
I Portabilidade;
I Facilidades para criação de programas com recursos de rede;
I Sintaxe similar a C/C++;
3/69
Principais Caracterı́sticas (cont.)
I Facilidades para criação de programas distribuı́dos e
multitarefa;
I Desalocação automática de memória;
I Vasta coleção de bibliotecas (ou APIs);
I Frameworks.
4/69
APIs
I As bibliotecas de classes Java são também conhecidas como
APIs (Applications Programming Interface)
I Fornecidas por compiladores;
I Fornecidas por fornecedores independentes de software
I Aplicações gráficas;
I Estruturas de dados;
I Acessibilidade;
5/69
APIs (cont.)
I Sons;
I Programação distribuı́da e paralela;
I Bancos de dados
I Jogos
I E-mail
I Etc.
6/69
Criação de um Programa Java
I Cria-se um código fonte com a extensão .java;
I O programa é compilado
j a v a c meuPrograma . j a v a
I É gerado o bytecode (arquivo .class), que será interpretado
durante a execução;
7/69
Criação de um Programa Java (cont.)
I O(s) arquivo(s) .class são carregados para a memória ;
I O interpretador (ou Java Virtual Machine) Java executa os
programas carregados
j a v a meuPrograma
8/69
Bytecode
I Os programas em Java são compilados para bytecode
I Uma forma intermediária de código, a ser interpretada pela
máquina virtual Java (Java Virtual Machine - JVM).
I Isto permite maior portabilidade dos códigos Java
I Qualquer sistema que inclua uma JVM executa qualquer
código Java.
I A JVM é responsável pelo gerenciamento dos aplicativos,
à medida em que estes são executados
9/69
Bytecode (cont.)
10/69
Bytecode (cont.)
11/69
Instruções de Saı́da
p u b l i c c l a s s Welcome1
{
//o método main inicia a execução da aplicação Java
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] )
{
//Java é case sensitive, cuidado com as letras maiúsculas
System . o u t . p r i n t l n ( " Welcome to Java
Programming !" ) ;
}
}
12/69
Instruções de Saı́da (cont.)
I Todo programa em Java consiste de pelo menos uma classe
definida pelo programador
I Padrão de nomenclatura igual ao C++;
I As definições de classe que começam com o especificador
public devem ser armazenadas em arquivos que possuam
o mesmo nome da classe
I Definir mais de uma classe public no mesmo arquivo é um erro
de sintaxe.
13/69
Instruções de Saı́da (cont.)
I A assinatura do método main é invariável
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) ;
I O static indica que o método será executado
automaticamente pela JVM, sem necessidade de instanciar.
14/69
Instruções de Saı́da (cont.)
Especificador Descrição
public Acessı́vel a todos os membros do programa
private Acessı́vel apenas internamente à classe
protected Acessı́vel internamente à classe, às subclas-
ses e por classes do mesmo pacote
Acesso de pacote Atribuı́do quando nenhum especificador é
determinado.
Acessı́vel a todas as classes do mesmo pa-
cote, através de uma referência a um objeto
da classe.
15/69
Instrução de Saı́da
I System.out é conhecido como objeto de saı́da padrão
System . o u t . p r i n t l n ( " Welcome to Java Programming !"
);
I O método println imprime a string e quebra a linha ao final
I Para não quebrar a linha, utiliza-se o método print.
I Ambos também aceitam ’\n’ como caractere de nova linha.
16/69
Instrução de Saı́da (cont.)
Caractere de Escape Descrição
\n Nova linha
\t Tabulação horizontal
\r Retorno de carro
\\ Barra invertida
\" Aspas duplas
17/69
printf em Java
I Também há o método System.out.printf (a partir do Java
SE 5.0) para exibição de dados formatados
I Similar ao printf de C/C++.
18/69
printf em Java (cont.)
p u b l i c c l a s s Welcome4
{
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] )
{
System . o u t . p r i n t f ( " %s\n %s\n" , " Welcome to " , "
Java Programming " ) ;
}
}
19/69
Importanto Classes
I O compilador utiliza instruções import para identificar e
carregar classes usadas em um programa Java
I As instruções de importação são divididas em dois grupos:
I Núcleo do Java (nomes que começam com java);
I Extensões do Java (nomes que começam com javax).
20/69
Importanto Classes (cont.)
I Java possui um rico conjunto de classes predefinidas
I Agrupadas em pacotes;
I Por padrão, o pacote java.lang é importado automaticamente
I Classe System
21/69
Classe Scanner
import java . u t i l . Scanner ;
p u b l i c c l a s s Adicao {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
S c a n n e r e n t r a d a = new S c a n n e r ( System . i n ) ;
i n t numero1 , numero2 , soma ;
System . o u t . p r i n t l n ( " Informe o primeiro inteiro " )
;
numero1 = e n t r a d a . n e x t I n t ( ) ; //lê o primeiro inteiro
System . o u t . p r i n t l n ( " Informe o segundo inteiro " ) ;
numero2 = e n t r a d a . n e x t I n t ( ) ; //lê o segundo inteiro
soma = numero1+numero2 ;
System . o u t . p r i n t f ( "A soma é %d\n" , soma ) ;
}
}
22/69
Classe Scanner (cont.)
I Um Scanner permite que o programa leia dados
I Deve ser criado um objeto desta classe;
I Os dados podem vir de diferentes fontes
I Disco
I Teclado
I Etc.
23/69
Classe Scanner (cont.)
I Antes de utilizar um Scanner, o programa deve especificar
qual é a origem dos dados
I No nosso exemplo, System.in indica a entrada padrão.
I O método nextInt() lê o próximo número inteiro da entrada;
I É possı́vel evitar a importação da classe Scanner, se
utilizarmos o nome completo da classe
j a v a . u t i l . S c a n n e r e n t r a d a = new j a v a . u t i l . S c a n n e r (
System . i n ) ;
24/69
Classe Scanner (cont.)
I Outros métodos úteis da classe Scanner são:
I next();
I nextByte();
I nextDouble();
I nextFloat();
I nextLine();
25/69
Classe Scanner (cont.)
I Estes métodos ainda possuem métodos similares hasNext, que
determinam se ainda há possı́veis tokens a serem lidos
I Por exemplo, hasNextInt() .
26/69
Classe Scanner (cont.)
import java . u t i l . ∗ ;
p u b l i c c l a s s HasNext {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
S t r i n g s = " Hello World ! \n 23 " ;
// create a new scanner with the specified String Object
S c a n n e r s c a n n e r = new S c a n n e r ( s ) ;
// check if the scanner has a token
System . o u t . p r i n t l n ( "" + s c a n n e r . h a s N e x t ( ) ) ;
// print the rest of the string
System . o u t . p r i n t l n ( "" + s c a n n e r . n e x t L i n e ( ) ) ;
// check if the scanner has a token after printing the line
System . o u t . p r i n t l n ( "" + s c a n n e r . h a s N e x t I n t ( ) ) ;
}
}
27/69
Classe Scanner (cont.)
true
H e l l o World !
true
28/69
Caixas de Diálogo
I Caixas de diálogo são janelas utilizadas para informar ou obter
dados ao usuário
I Fornecem uma interface mais amigável que o terminal;
I Janelas simples.
I No exemplo a seguir, será importada a classe JOptionPane,
que oferece caixas de diálogo
I A classe está contida no pacote javax.swing.
29/69
Exemplo 3
// Pacotes de extensão Java
i m p o r t j a v a x . s w i n g . JO pt io nP a ne ;
//importa a classe JOptionPane
p u b l i c c l a s s Welcome4 {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
//o parâmetro null posiciona a janela no meio da tela
JOptionPane . showMessageDialog ( n u l l ,
" Welcome \ nto \ nJava \ nProgramming !" ) ;
//necessário em aplicações gráficas
System . e x i t ( 0 ) ; //termina o programa
}
}
30/69
Exemplo 3 (cont.)
31/69
Exemplo 4
i m p o r t j a v a x . s w i n g . JO pt io nP a ne ;
public class Addition {
p u b l i c s t a t i c v o i d main ( String args [ ] )
{
String firstNumber ; //primeira string digitada pelo usuário
S t r i n g secondNumber ; //segunda string digitada pelo usuário
i n t number1 ; //primeiro número
i n t number2 ; //segundo número
i n t sum ; //soma
//lê o primeiro número como uma string
f i r s t N u m b e r = JO p ti on Pa n e . s h o w I n p u t D i a l o g ( " Enter
first integer " ) ;
//lê o segundo número como uma string
secondNumber = J Op ti o nP an e . s h o w I n p u t D i a l o g ( " Enter
second integer " ) ;
32/69
Exemplo 4 (cont.)
// converte os números de String para int
number1 = I n t e g e r . p a r s e I n t ( f i r s t N u m b e r ) ;
number2 = I n t e g e r . p a r s e I n t ( secondNumber ) ;
// adiciona os numeros
sum = number1 + number2 ;
// mostra o resultado
J O p t i o n P a n e . s h o w M e s s a g e D i a l o g ( n u l l , " The sum is "
+ sum , " Results " , JO pt io n Pa ne . PLAIN MESSAGE ) ;
System . e x i t ( 0 ) ;
}
}
33/69
Exemplo 4 (cont.)
34/69
Constantes JOptionPane
35/69
Exemplo 4
I A InputDialog é outra caixa predefinida na JOptionPane
I Caixa de diálogo de entrada;
I O método showInputDialog() a mostra na tela.
I Os dados são lidos como strings, e depois convertidos para
inteiros
I As classes String e Integer são do pacote java.lang.
I O mesmo pode ser feito com as classes Float (parseFloat) e
Double (parseDouble).
36/69
Erro Comum
I Separamos texto e o conteúdo de variáveis pelo operador +
I Converte o valor da variável e a concatena no texto.
I Suponha y = 5:
I “y+2 = ”+y+2 imprime “y+2 = 52”;
I “y+2 = ”+(y+2) imprime “y+2 = 7”.
37/69
Operadores e Palavras Reservadas
38/69
Palavras Reservadas
39/69
Similaridades com C/C++
I Comentários;
I Operadores relacionais;
I Atribuições simplificadas;
I Incremento e decremento;
I Operadores lógicos;
40/69
Similaridades com C/C++ (cont.)
I Desvio Condicional
I if , if −else, operador ternário ( ?: ) e aninhamentos.
I Estrutura de seleção
I switch−case
I Estruturas de repetição
I while , do−while, for e aninhamentos
41/69
Vetores
I Em Java, os vetores são muito semelhantes aos de C++
I O primeiro ı́ndice é zero.
i n t c [ ] ; //declara um vetor
c = new i n t [ 12 ] ; //cria o vetor e o associa a uma variável
42/69
Vetores (cont.)
I Os vetores possuem o atributo público length, que armazena o
tamanho do vetor
i n t TAMANHO = 1 2 ;
i n t c [ ] = new i n t [TAMANHO ] ;
f o r ( i n t i = 0 ; i <c . l e n g t h ; i ++)
System . o u t . p r i n t f ( " %d " , c [ i ] ) ;
43/69
Vetores (cont.)
I Caso seja acessada uma posição fora dos limites de um vetor,
a exceção IndexOutOfBoundsException ocorre;
I Uma das formas de evitar este tipo de exceção é utilizar o for
aprimorado
I O contador é baseado no conteúdo do vetor
44/69
Vetores (cont.)
p u b l i c c l a s s ForAprimorado
{
p u b l i c s t a t i c v o i d main ( S t r i n g A r g s [ ] )
{
//cria e inicializa o vetor
int vet [ ] = {1 , 2 , 5 , 10 , 15 , 20 , 32};
//o contador do for é associado aos elementos do vetor
for ( int i : vet )
//imprime cada elemento do vetor
System . o u t . p r i n t f ( " %d\n" , i ) ;
}
}
45/69
Matrizes
I Matrizes, ou vetores multidimensionais em Java são
semelhantes às matrizes em C++;
I As declarações abaixo são válidas tanto em Java quanto em
C++:
int a [ ] [ ] = { { 1 , 2 } , { 3 , 4 , 5 } };
i n t b [ ] [ ] = new i n t [ 3 ] [ 4 ] ;
i n t c [ ] [ ] = new i n t [ 2 ] [ ] ; //cria duas linhas
c [ 0 ] = new i n t [ 5 ] ; //cria 5 colunas para a linha 0
c [ 1 ] = new i n t [ 3 ] ; //cria 3 colunas para a linha 1
46/69
Matrizes (cont.)
public class VetorBidimensional
{
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] )
{
//matriz estática
i n t [ ] [ ] t a b u l e i r o = new i n t [ 8 ] [ 8 ] ;
i n t [ ] [ ] dinamico ;
//aloca a primeira dimensão
d i n a m i c o = new i n t [ 1 0 ] [ ] ;
//aloca a segunda dimensão
f o r ( i n t i =0; i < d i n a m i c o . l e n g t h ; i ++)
d i n a m i c o [ i ] = new i n t [ i + 1 ] ;
}
}
47/69
API Java
I A especificação da API Java pode ser encontrada em:
http://download.oracle.com/javase/8/docs/api/
I Descrição de todos os pacotes e suas respectivas classes,
interfaces, exceções e erros.
48/69
API Java (cont.)
I java.awt: interfaces gráficas;
I java.io: entrada e saı́da;
I java.lang: classes básicas para programas Java;
I java.math: operações matemáticas com precisão arbitrária;
I java.net: aplicações que utilizam rede;
I java.rmi: programação distribuı́da;
I java.sql: banco de dados;
I java.util: coleções, utilidades de data e hora,
internacionalização e miscelânea (tokenizer, números
aleatórios, etc.). 49/69
Classes e Métodos
I Vejamos um exemplo conhecido sobre classes e métodos
I GradeBook (diário de classe).
I Notem que há algumas semelhanças com a sintaxe de C++
I E algumas diferenças.
50/69
Classes e Métodos (cont.)
p u b l i c c l a s s GradeBook
{
public void displayMessage ()
{
System . o u t . p r i n t l n ( " Bem vindo ao Diario de
Classe " ) ;
}
}
p u b l i c c l a s s DriverGradeBook
{
p u b l i c s t a t i c v o i d main ( S t r i n g A r g s [ ] )
{
GradeBook m e u D i a r i o = new GradeBook ( ) ;
meuDiario . displayMessage () ;
}
}
51/69
Classes e Métodos (cont.)
I Classes públicas são armazenadas em arquivos diferentes;
I O main fica dentro de uma classe, obrigatoriamente
I Logo, é um método;
I O static em seu cabeçalho indica que será executado
automaticamente.
I Para instanciar um objeto, é necessário utilizar o operador
new()
I Não é necessário importar a classe GradeBook.java no driver
I Automático, pois estão no mesmo pacote – o pacote padrão.
52/69
Classes e Métodos (cont.)
I Vamos alterar o exemplo anterior para agora considerar um
parâmetro para o método displayMessage()
53/69
Classes e Métodos (cont.)
p u b l i c c l a s s GradeBook
{
p u b l i c v o i d d i s p l a y M e s s a g e ( S t r i n g nomeCurso )
{
//o println foi substituı́do, porque gera erro de compilação
System . o u t . p r i n t f ( " Bem vindo ao Diario de
Classe de %s" , nomeCurso ) ;
}
}
54/69
Classe String
I Java trata cadeias de caracteres utilizando a classe String
I Com ’S’;
I Incluı́da no pacote java.lang
I Não é necessário importar.
55/69
Classe String (cont.)
I Possui 65 métodos (Java SE 7.0) para manipular Strings
I Sintaxe diferente de C++;
I + 15 construtores diferentes;
I + operadores sobrecarregados.
56/69
Lendo String
p u b l i c c l a s s GradeBook
{
p u b l i c v o i d d i s p l a y M e s s a g e ( S t r i n g nomeCurso )
{
//o println foi substituı́do, porque gera erro de compilação
System . o u t . p r i n t f ( " Bem vindo ao Diario de
Classe de %s" , nomeCurso ) ;
}
}
57/69
Lendo String (cont.)
import java . u t i l . Scanner ;
p u b l i c c l a s s DriverGradeBook
{
p u b l i c s t a t i c v o i d main ( S t r i n g A r g s [ ] )
{
GradeBook m e u D i a r i o = new GradeBook ( ) ;
S c a n n e r e n t r a d a = new S c a n n e r ( System . i n ) ;
S t r i n g nome ;
System . o u t . p r i n t l n ( " Digite o nome do curso " ) ;
//Lê a linha inteira, inclusive espaços
nome = e n t r a d a . n e x t L i n e ( ) ;
m e u D i a r i o . d i s p l a y M e s s a g e ( nome ) ;
}
}
58/69
Lista de Argumentos de Tamanho Variável
I Com Listas de Argumentos de Tamanho Variável ou
varargs, podemos criar métodos que recebem um número
não especificado de argumentos;
I Um tipo seguido de . . . na lista de parâmetros de um método
indica que este recebe um número de variáveis daquele tipo
I Só pode ser feito uma vez por método;
I Sempre no final da lista de parâmetros.
59/69
Lista de Argumentos de Tamanho Variável (cont.)
p u b l i c c l a s s VarArgs {
p u b l i c s t a t i c d o u b l e media ( d o u b l e . . . numeros ) {
double t o t a l = 0;
f o r ( d o u b l e d : numeros )
t o t a l+=d ;
r e t u r n t o t a l / numeros . l e n g t h ;
}
public static v o i d main ( S t r i n g a r g s [ ] ) {
d o u b l e d1 = 10.0;
d o u b l e d2 = 1.0;
d o u b l e d3 = 15.0;
d o u b l e d4 = 99.0;
System . o u t . p r i n t f ( " %lf " , media ( d1 , d2 , d3 , d4 ) )
;
}
}
60/69
Passagem de Parâmetros
I Duas formas de passar parâmetros para métodos ou funções
são:
I Por valor ou cópia (alterações não afetam a variável ou objeto
original);
I Por referência (alterações afetam a variável ou objeto original).
61/69
Passagem de Parâmetros (cont.)
I Java não permite que o usuário escolha qual será a forma de
passagem dos parâmetros:
I Tipos primitivos são sempre passados por valor;
I Objetos e vetores são passados por referência
I Vetores são passados por referência por uma questão de
desempenho.
62/69
Escopo de Variáveis e Atributos
I As regras para o escopo de variáveis e atributos são as
mesmas em Java:
I Variáveis locais só existem dentro do bloco de código ao qual
pertencem, delimitados por { e };
I Atributos são declarados dentro das classes e fora dos métodos;
63/69
Escopo de Variáveis e Atributos (cont.)
I Os especificadores de acesso determinam a visibilidade dos
atributos
I public , private e protected
I Consequentemente, o uso de getters e setters também é
mantido;
I Em Java, os especificadores não delimitam regiões de uma
classe (como em C++)
I São definidos membro a membro.
64/69
Exemplo GradeBook
p u b l i c c l a s s GradeBook {
p r i v a t e S t r i n g courseName ;
// método para definir o nome da disciplina
p u b l i c v o i d s et CourseName ( S t r i n g name ) {
courseName = name ; // store the course name
}
// método para recuperar o nome da disciplina
p u b l i c S t r i n g getCourseName ( ) {
r e t u r n courseName ;
}
// mostra a mensagem de bem vindas
public void displayMessage () {
// mostra a mensagem
System . o u t . p r i n t f ( " Welcome to the grade book
for \n %s !\ n" , getCourseName ( ) ) ;
}
} // fim classe GradeBook
65/69
Exemplo GradeBook (cont.)
// biblioteca de entrada de dados
import java . u t i l . Scanner ;
p u b l i c c l a s s GradeBookTest {
// método principal que inicia a execução
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s )
{
// permite a captura de dados de entrada
S c a n n e r i n p u t = new S c a n n e r ( System . i n ) ;
// cria um objeto da classe GradeBook
GradeBook myGradeBook = new GradeBook ( ) ;
System . o u t . p r i n t f ( " Initial course name is :
%s\n\n" , myGradeBook . getCourseName ( ) ) ;
66/69
Exemplo GradeBook (cont.)
// prompt for and read course name
System . o u t . p r i n t l n ( " Please enter the
course name :" ) ;
// lê uma linha de texto
S t r i n g theName = i n p u t . n e x t L i n e ( ) ;
// set courseName
myGradeBook . setCourseName ( theName ) ;
System . o u t . p r i n t l n ( ) ; // imprime uma linha em branco
// mostra a mensagem de boas vindas
myGradeBook . d i s p l a y M e s s a g e ( ) ;
}
} // fim classe GradeBookTest
67/69
Exemplo GradeBook (cont.)
I n i t i a l c o u r s e name i s : n u l l
P l e a s e e n t e r t h e c o u r s e name :
BCC Programacao O r i e n t a d a a O b j e t o s
Welcome t o t h e GradeBook f o r
BCC Programacao O r i e n t a d a a O b j e t o s
68/69
FIM
69/69