Java Básico - Aula 1
Java Básico - Aula 1
Perez de Almeida
Revisão de Conceitos
Identificadores e JavaBeans
Declarações de Classes
Declarações de Interfaces
Modificadores de Acesso
Exercícios de Fixação
Histórico:
- Início em 1991 com o projeto Green.
- Voltada para dispositivos embarcados
- Primeiro Dispositivo: *7 (Star7) -> Com um auxiliar
- Linguagem utilizada: Oak (Carvalho)
- Fracasso no projeto -> Adaptação para a Web.
- Surge a Java 4
JAVA E ANDROID
- Java -> Aplicações Android são escritas em
linguagem Java.
- Compilação em bytecodes -> O código Java é
compilado em bytecodes (geração dos .class).
- Conversão dos bytecodes -> Os bytecodes gerados
são convertidos para o formato .dex (Dalvik
Executable).
- Empacotamento em .apk-> Os arquivos .dex e
recursos como imagens são empacotados em um
único arquivo com extensão .apk (Android Package
File).
- Execução na VM Dalvik -> Máquina virtual otimizada
para a execução de aplicações Android.
JAVA E ANDROID
Aplicação é escrita em Compilação é feita em Java (bytecodes)
Java
Aplicação é carregada
na VM Dalvik
Linux OS
MERCADO – ESTADOS UNIDOS
MERCADO MUNDIAL ->
CRESCIMENTO DE MAIS DE 1000%
VS.
Fonte: http://meiobit.com/71799/oracle-processa-google-por-causa-de-
android-e-java/
QUEM ESTÁ DE MAL DE QUEM?
Fonte: http://www.gizmodo.com.br/conteudo/quem-esta-processando-quem-entre-empresas-de-dispositivos-moveis
O QUE VAI ACONTECER COM
O ANDROID?
Um programa em Java consiste em uma coleção de
objetos se comunicando com outros objetos por
meio da invocação de métodos uns dos outros.
Classes são abstrações do mundo real, que
representam objetos com características afins.
Objetos são instâncias de classes. Cada objeto tem
seu próprio estado e pode acessar seus
comportamentos definidos na classe da qual faz
parte.
Estado (variáveis de instância) de um objeto
consiste nos valores atuais das variáveis de
instância de um objeto 12
Comportamentos (métodos) de um objeto
consistem nos métodos que o objeto pode chamar.
Esses métodos foram definidos na classe do Objeto
e armazenam toda a lógica da classe. Nos métodos
o verdadeiro trabalho é realizado.
Identificadores consistem nos nomes dados às
classes, variáveis e métodos. A definição de cada
identificador segue regras impostas pela linguagem
Java e convenções adotadas por programadores e
pela própria Sun.
13
14
Identificadores devem começar com uma letra,
um cifrão ($) ou um caractere de conexão (ex: _ ).
Depois do primeiro caractere, os identificadores
podem conter qualquer combinação de letras,
caracteres de moedas, caracteres de conexão ou
números.
Não há limite para o número de caracteres de um
identificador em Java.
Os identificadores não podem ser palavras-chave
Os identificadores são case-sensitive (há
diferenciação entre maiúsculas e minúsculas) 15
Identificadores Válidos Identificadores Inválidos
- int _a; - int :b;
- int $c; - int –d;
- int _____2_w; - int e#;
- int .f;
- int _$;
- int 7g;
- int
- int &j;
este_eh_um_identificad
- int *h;
or_bem_grande_mas_a_
linguagem_java_aceita;
16
abstract boolean break byte case catch
char class const continue default do
double else extends final finally float
for goto if implements import instanceof
int interface long native new package
private protected public return short static
strictfp super switch synchronized this throw
throws transient try void volatile while
assert enum
17
Herança de classes é um conceito de OO que
permite que o código de uma classe seja reutilizado
em outras classes. Estabelece-se uma hierarquia
entre a superclasse (classe Pai) e suas subclasses
(classes Filhas).
18
19
20
Interface consiste em uma espécie de superclasse
100% abstrata que define os métodos que uma
subclasse deve suportar (semelhante ao uso de
virtual puro em C++). A implementação dos
métodos de uma interface não é definida na
interface, mas sim na classe que a implementa
21
22
É uma boa prática de programação manter a
coesão das classes de uma aplicação. Isso
significa que cada classe deve ser destinada para
uma única finalidade.
Ex: Classe Pessoa é destinada para dados de
pessoas. Classe Animal é destinada para dados de
animais. Não é conveniente misturar as
funcionalidades das duas classes.
O uso de convenções de código diminui o esforço
despendido em testes e manutenção, uma vez que
melhoram a legibilidade do código.
A Sun define um conjunto de convenções para a
declaração de elementos em um código-fonte, os
quais são:
Classes e Interfaces: A primeira letra deve ser
maiúscula e, se várias palavras formarem o nome, a
primeira letra de cada palavra deve ser maiúscula
também (regra camelCase). Ex: Pessoa
Métodos: A primeira letra deve ser minúscula e o
resto do nome segue a regra camelCase. Ex: doIt()24
Variáveis: Usam a mesma convenção adotada para
métodos. Recomenda-se usar nomes curtos e
significativos. Ex: int idadePessoa;
Constantes: Constantes em Java devem ser criadas
definindo-se a variável como static ou final. Elas
devem ser nomeadas usando-se letras maiúsculas
com caracteres underscore ( _ ) como separadores.
Ex: static double TAXA_SERVICO = 7.00;
25
JavaBeans consistem em classes que possuem
propriedades. De maneira geral, uma propriedade é
uma variável de instância privada.
Por serem privadas, as variáveis dos JavaBeans
somente podem ser acessadas por métodos. Os
métodos que modificam as variáveis são chamados
de setters. Os métodos que retornam os valores
das variáveis recebem o nome de getters.
JavaBeans adotam o conceito de POJO (Plain Old
Java Objects). 26
Se a propriedade não for booleana, o prefixo do
método getter deve ser get. Ex: getSize() -> getter
para a propriedade size. O nome da propriedade é
inferido a partir dos getters e setters, e não através
das variáveis da classe.
Se a propriedade for booleana o getter deverá ter
prefixo get ou is. Ex: getStopped() ou isStopped()
O prefixo de cada método setter deve ser set. Ex:
setSize() -> setter para a propriedade size.
27
As assinaturas de métodos setter devem ser
marcadas como public, com retorno void e
parâmetro do tipo da propriedade
As assinaturas de métodos getter devem ser
marcadas como public, não devem conter
parâmetros e o tipo de retorno deve ser o mesmo da
propriedade ao qual estão associados
28
A especificação JavaBean tem suporte a eventos, os
quais permitem aos componentes notificarem uns
aos outros quando algo acontece.
O modelo de eventos é bastante usado em
aplicações GUI (presente também em linguagens
como C#, Delphi, etc.)
Os tratadores de eventos são chamados listeners e
os métodos que adicionam listeners em
componentes seguem padrões de nomeação
JavaBeans 29
Os nomes dos métodos que registram os listener
devem iniciar com o prefixo add seguido do tipo do
listener. Ex: addActionListener(ActionListener e).
Os nomes dos métodos que removem os listeners de
componentes devem iniciar com prefixo remove
seguido do tipo do listener. Ex:
removeActionListener()
O tipo de listener a ser associado ou removido deve
ser passado como parâmetro para o método
Os nomes de métodos listener devem terminar com
a palavra “Listener”. 30
public void setMyValue(int v)
public int getMyValue()
public boolean isMyStatus()
public void addMyListener(MyListener m)
public void removeMyListener
void setCustomerName(String s) X
public void modifyMyValue(int v) X
public void addXListener(MyListener m) X
31
Só pode haver uma classe public em cada arquivo-
fonte
Comentários (// ou /* */ ou /** */) podem aparecer no
início ou no fim de qualquer linha no arquivo do
código-fonte
O nome do arquivo-fonte deve ser o mesmo da classe
public definida nele. Ex: public class Animal obriga
que o arquivo-fonte seja Animal.java
Se a classe fizer parte de um pacote, a declaração do
pacote deve ser a primeira a aparecer no código
Declarações import e package são válidas para todas
as classes no arquivo-fonte. Impossível importar
mesma classe de pacotes diferentes. 32
O seguinte código está correto?
class MyClass { }
36
Visibilidade Public Protected Default Private
A partir da mesma classe Sim Sim Sim Sim
A partir de qualquer classe do mesmo pacote Sim Sim Sim Não
A partir de uma subclasse do mesmo pacote Sim Sim Sim Não
A partir de uma subclasse de fora do mesmo Sim, através
Sim Não Não
pacote de herança
A partir de qualquer classe que não seja uma
Sim Não Não Não
subclasse e esteja fora do pacote
37
final: Diversas utilidades
- Para classes: Impedir que a classe seja
herdada.Ex: public final class Gato { }
- Para métodos: Impedir que o método seja
sobrescrito em uma hierarquia.Ex: public final
void doIt() { }
- Para parâmetros: Impedir que o parâmetro
seja modificado.Ex: public void doIt(final int
value);
- Para variáveis: Impedir que a variável seja
modificada após sua inicialização. Ex: final int
idade = 23; 38
abstract: Diversas utilidades
- Para classes: Impedir que uma classe seja
instanciada.Ex: public abstract class Animal { }
- Para métodos: Usado quando o método não
conterá nenhum código dentro.Ex: public
abstract void doIt();. Qualquer classe com
métodos abstratos deve ser abstrata, mas uma
classe abstrata não precisa ter métodos
abstratos. Se uma classe herdar de uma classe
com métodos abstratos, ela deve implementar
esses métodos (tornando-se concreta) ou, do
contrário, deverá ser também abstrata. 39
Qual a vantagem de usar abstract?
40
abstract: Diversas utilidades
- Para interfaces: É redundante. Uma interface é
por padrão abstrata, ou seja, não é necessário
utilizar abstract.
- Os métodos de uma interface também são por
padrão públicos e abstratos e, por isso, não
precisam ser precedidos por esses
modificadores.
- Ex: public interface Bounceable {
void bounce();
}
41
Todas as variáveis de uma interface devem ser
public, static e final. Dessa forma, as variáveis em
interfaces são constantes e não variáveis de
instância.
Ex: interface Foo {
int BAR = 42;
}
É importante notar que não é necessário usar public,
static e final, já que implicitamente a constante terá
essas características.
42
Uma interface pode herdar uma ou mais
interfaces diferentes
Uma interface não pode herdar nada que não
seja outra interface
Uma interface não pode implementar outra
interface ou classe
Uma interface deve ser declarada com a
palavra-chave interface
43
Modificadores de Acesso não podem ser
aplicados a variáveis locais.
Ex: void doIt() { private int x = 7; } X
Apenas o modificador final pode ser usado
com variáveis locais.
Desde a versão 5.0, a linguagem Java permite
especificar métodos com um número de
argumentos variáveis (var-args).
Um método pode conter apenas um único var-
arg que pode ser declarado em conjunto com
outros parâmetros não-variáveis
O var-arg deve sempre ser o último parâmetro
do método.
A sintaxe de um var-arg se inicia pelo tipo do
argumento seguido de ... e do nome de um
array que armazenará os valores. 45
Declarações Válidas
- void doStuff(int... x) {} //espera 0 a muitos ints
- void doStuff2(char c, int... X) {} //espera um
char e em seguida 0 ou muitos ints
- void doStuff3(Animal... animal) {} //0 a muitos
Animals
Declarações Inválidas
- void doStuff(int x...) {} //sintaxe incorreta
- void doStuff2(int... x, char... c) {} //mais de um
var-arg
- void doStuff3(Animal... animal, int x) {} //var-
arg tem de vir por último 46
Objetos em Java são construídos a partir de
chamadas a métodos construtores.
Mesmo que o programador não declare um
construtor, o compilador gera um construtor
padrão
Construtores levam o mesmo nome da classe
ao qual representam e iniciam com letra
maiúscula.
Construtores não possuem tipo de retorno
47
Declarações Válidas
- Animal() {}
- private Animal(String nome) {}
- Animal(String nome) {}
- Animal(String nome, int... y) {}
Declarações Inválidas
- void Animal() {}
- Animal();
- static Animal(String nome) {}
- final Animal(String nome) {}
- abstract Animal(String nome) {}
- Animal(int... Y, String nome) {}
48
Existem dois tipos de variáveis em Java:
a) addSize
b) getCost
c) deleteRep
d) isColorado
e) putDimensions
55
Dados os dois arquivos mostrados a seguir:
1. package pkgA; 3. package pkgB;
2. public class Foo { 4. import pkgA.*;
3. int a = 5; 5. public class Baz {
4. protected int b = 6; 6. public static void main(String [] args) {
5. public int c = 7; 7. Foo f = new Foo();
6. } 8. System.out.print (“ “ + f.a);
9. System.out.print (“ “ + f.b);
10 System.out.print (“ “ + f.c);
Qual é o resultado? 11. }
a) 567 12. }
Qual é o resultado?
a) woof burble
b) Múltiplos erros de compilação
c) A compilação falha devido a um erro na linha 2
d) A compilação falha devido a um erro na linha 3
e) A compilação falha devido a um erro na linha 4
f) A compilação falha devido a um erro na linha 9 59
Dado o código a seguir:
1. public class Eletronic implements Device { public void doIt() {} }
2. abstract class Phone1 extends Eletronic {}
3. abstract class Phone2 extends Eletronic { public void doIt(int x) { } }
4. class Phone3 extends Eletronic implements Device { public void
doStuff() { } }
5. interface Device { public void doIt(); }
Qual é o resultado?
a) A compilação é bem-sucedida
b) Ocorre falha na compilação com um erro na linha 1
c) Ocorre um erro na compilação com um erro na linha 2
d) Ocorre um erro na compilação com um erro na linha 3
e) Ocorre um erro na compilação com um erro na linha 4
f) Ocorre um erro na compilação com um erro na linha 5 60
Dado o código a seguir:
1. public class TestDays {
2. public enum Days { MON, TUE, WED };
3. public static void main(String [] args) { ;
4. for(Days d : Days.values() )
5. ;
6. Days [] d2 = Days.values();
7. System.out.println(d2[2]);
8. }}
Qual é o resultado?
a) TUE
b) WED
c) Não é possível prever o resultado (a saída é inalcançável)
d) Ocorre uma falha na compilação com um erro na linha 2
e) Ocorre uma falha na compilação com um erro na linha 4
f) Ocorre uma falha na compilação com um erro na linha 6
g) Ocorre uma falha na compilação com um erro na linha 7 61
Dado o código a seguir:
1. public class Frodo extends Hobbit {
2. public static void main (String [] args) {
3. Short myGold = 7;
4. System.out.println(countGold(myGold,6));
5. }}
6. class Hobbit {
7. int countGold (int x, int y ) { return x + y; }
8. }
Qual é o resultado?
a) 13
b) Ocorre um falha na compilação devido a múltiplos erros
c) Ocorre uma falha na compilação com um erro na linha 3
d) Ocorre uma falha na compilação com um erro na linha 4
e) Ocorre uma falha na compilação com um erro na linha 7
62
63
Crie um projeto no Netbeans chamado JavaBeans
Crie o JavaBean Pessoa com os atributos nome,
idade,endereco e telefone
Crie o JavaBean Filme com os atributos nome,
dataLancamento, nomeDiretor e genero
Crie o JavaBean Aluguel que contenha um JavaBean
Pessoa e um JavaBean Filme
Na classe Main, crie uma Pessoa, um filme e faça o
aluguel do filme para a pessoa
64
Modifique o programa do exercício 1 para que os
dados da pessoa, do filme e do aluguel sejam
informados via console utilizando a classe Scanner
Ex:
65
Crie um projeto no Netbeans com o nome Quitanda
Crie uma superclasse abstrata chamada Fruta com
os atributos nome e valor e uma subclasse concreta
chamada Abacate. A superclasse deve pertencer a
um pacote chamado comida e a subclasse deve
pertencer a um pacote chamado frutas.
A superclasse deve ser public e a subclasse deve ter
acesso default
O programa deve permitir informar o nome e o valor
da fruta e em seguida exibir os dados na tela
66
Crie um projeto no Netbeans com o nome
Lanchonete
Crie um enum Lanches que conterá como elementos
os lanches SMALL, MEDIUM e BIG, com os valores
4.80, 7.00 e 11.30, respectivamente
Crie na classe Main uma iteração que solicita o
pedido do cliente até que seja digitado -1. Ao digitar
-1, o valor total do pedido deve ser exibido.
Tente sobrescrever o método toString() do enum
para exibir o valor do lanche
67
Crie um projeto no Netbeans com o Interfaces
Crie uma interface denominada Tocavel, que declara
o método tocar()
Crie as classes MP3Player, CDPlayer e DVDPlayer,
todas implementando a interface Tocavel
Na classe Main, crie objetos das classes
especificadas e chame o método tocar de cada uma
delas
68
Crie um projeto no Netbeans com o nome
Restaurante
Crie a classe Conta com a variável valor e a constante
TAXA_SERVICO com valor 0.07. Define o método
totalAPagar(double valor), não esquecendo de
aplicar a taxa de serviço
Na classe Main, crie objetos da classe Conta e exiba
os valores totais na tela.
69