0% acharam este documento útil (0 voto)
102 visualizações69 páginas

Java Básico - Aula 1

O documento discute conceitos fundamentais de Java, incluindo classes, interfaces, modificadores de acesso, construtores, variáveis e enums. Também aborda tópicos como identificadores, JavaBeans, herança e convenções de código em Java.

Enviado por

Colonho
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
102 visualizações69 páginas

Java Básico - Aula 1

O documento discute conceitos fundamentais de Java, incluindo classes, interfaces, modificadores de acesso, construtores, variáveis e enums. Também aborda tópicos como identificadores, JavaBeans, herança e convenções de código em Java.

Enviado por

Colonho
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 69

Ricardo Ap.

Perez de Almeida
 Revisão de Conceitos
 Identificadores e JavaBeans

 Declarações de Classes

 Declarações de Interfaces

 Modificadores de Acesso

 Modificadores não referentes a acesso

 Construtores, Variáveis e Enums

 Exercícios de Fixação

 Exercícios Práticos na plataforma Netbeans


2
 Java é uma linguagem de programação orientada a
objetos desenvolvida na década de 90 por uma
equipe de programadores chefiada por James
Gosling, na empresa Sun Microsystems.
Diferentemente das linguagens convencionais, que
são compiladas para código nativo, a linguagem Java
é compilada para um "bytecode" que é executado
por uma máquina virtual. A linguagem de
programação Java é a linguagem convencional da
Plataforma Java, mas não sua única linguagem 3
 Compilada ou Interpretada?

 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

Bytecodes são transformados em


Aplicação é empacotada em um .apk
Bytecodes Dalvik

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

 O que é o acesso de uma classe?


 Qual o nível de acesso da classe no
exemplo?
33
 Modificadores de Acesso: public,
protected, private e...... default
 Toda classe, método ou variável de instância
possui um controle de acesso (se não
explicitar, será default).
 public: O elemento pode ser acessado por
qualquer classe da aplicação
 private: O elemento só pode ser acessado
dentro da classe onde está declarado.
Private não é usado para definir classes. 34
 Quando usar private para métodos?
 protected: O elemento pode ser acessado
pela classe em que está declarado, por classes
do mesmo pacote e por subclasses da classe.
Não pode ser usado para definir classes.
 default: O elemento só pode ser acessado
pela classe em que está declarado, por classes
do mesmo pacote.
 O que é um pacote?
 Quais regras utilizar para defini-lo?
 Ex: dc.ufscar.br.cursojava.source 35
 protected e default fornecem
praticamente o mesmo nível de acesso.
Contudo...
 O que acontecerá com o seguinte código
com nível de acesso default?

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?

 É possível usar abstract com final em um


método?
 Ex: public abstract final void doIt();

 É possível usar abstract com private em um


método?
 Ex: private abstract void doIt();

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:

 Primitivos: Pode ser de 8 tipos diferentes: char,


boolean, byte, short, int, long, double ou float.
Ex: byte b; int x; char c; double d;

 Variáveis de Referência: As variáveis de


referência são usadas para se referir a um
objeto.
Ex: String nome; Integer x; Double d;
49
 Enums (Enumerations) são usados para
restringir uma variável para ter um de apenas
uns poucos valores pré-definidos, ou seja, um
valor de uma lista enumerada
Ex: enum CoffeeSize { BIG, HUGE,
OVERWHELMING };
CoffeeSize cs = CoffeeSize.BIG;
 Os elementos de um enum não precisam ser
todos definidos com maiúsculas, mas,
considerando que são constantes e, seguindo a
convenção sugerida, é conveniente adotar esse
padrão. 50
 Enums podem ser declarados em um arquivo-
fonte ou dentro de uma classe, mas nunca
dentro de um método.
 Enums podem ter acesso public ou default
 Enums podem ou não terminar com ;
Ex: enum Lista { ELEM1, ELEM2}
enum Lista2 { ELEM3, ELEM4};
 Cada elemento de um enum é do tipo do
enum. Por exemplo, no exemplo acima
ELEM1 é do tipo Lista
 Enums podem ter construtores, variáveis de
instância e métodos
51
 Obs: Cada enum tem um método estático
chamado values() que retorna um array dos
valores de enum na ordem em que são
declarados 52
53
 Dado o código a seguir:
1. class Annouce {
2. public static void main (String [] args) {
3. for (int ___x = O; ___x < 3; ___x++);
4. int #1b= 7;
5. long [] x [5];
6. Boolean [] ba [] ;
7. enum Traffic { RED, YELLOW, GREEN };
8. } }
 Qual é o resultado?
a) A compilação é bem-sucedida
b) Ocorre falha na compilação com um erro na linha 3
c) Ocorre um erro na compilação com um erro na linha 4
d) Ocorre um erro na compilação com um erro na linha 5
e) Ocorre um erro na compilação com um erro na linha 6
54
f) Ocorre um erro na compilação com um erro na linha 7
 Quais nomes de métodos obedecem ao padrão
JavaBeans? (Cite todas as alternativas corretas)

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

b) 5 seguido de uma exceção


c) Ocorre falha na compilação com erro na linha 7
d) Ocorre falha na compilação com erro na linha 8
e) Ocorre falha na compilação com erro na linha 9
f) Ocorre falha na compilação com erro na linha 10
56
 Qual das afirmativas está correta?

a) “X extends Y é correto se, e somente se, X for


uma classe e Y for uma interface.
b) “X extends Y” é correto se, e somente se, X for
uma interface e Y for uma classe.
c) “X extends Y” é correto se X e Y forem ambos
classes ou ambos interfaces.
d) “X extends Y” é correto para todas as
combinações de X e Y sendo classes e/ou
interfaces.
57
 Dado o código a seguir:
class Voop {
public static void main(String [] args) {
doStuff(1);
doStuff(1,2);
}
//insira o código aqui
}
 Qual das opções irá compilar? (Cite todas as corretas)
a) static void doStuff(int... doArgs){ }
b) static void doStuff(int [] doArgs){ }
c) static void doStuff(int doArgs...){ }
d) static void doStuff(int... doArgs,int y){ }
e) static void doStuff(int x, int... doArgs){} 58
 Dado o código a seguir:
6. class TestEnum{
1. enum Animals { 7. static Animals a;
2. DOG(“woof”), CAT(“meow”), FISH(“burble”); 8. public static void main(String [] args) {
3. String sound; 9. System.out.println(a.DOG.sound + “
4. Animals (String s) { sound = s; } “ + a.FISH.sound);
5. } 10. }
11. }

 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

Você também pode gostar