Você está na página 1de 29

Linguagem de Programação II

Miscelânea

Prof. João Neto


BCET - UFRB
Miscelânea
•  Só pode haver uma classe pública
•  Quando necessária, a declaração
package deve aparecer antes de qualquer
outra declaração (mesmo o import)
package -> import - > class

•  As declarações import e package são


aplicadas a todas as classes de um
arquivo
30/05/19 Free template from 2
www.brainybetty.com
Miscelânea
•  Vetores
–  Declaração
int[] key;
int key [];
String[][][] occupantName;
String[] ManagerName [];

–  Nunca usar:
int [5] scores;

30/05/19 Free template from 3


www.brainybetty.com
Miscelânea
•  Vetores
–  Construtores
int[] testScores = new int[4];
Thread[] threads = new Thread[5];
int[] [] myArray = new int [3] [];

–  Cuidado:
int[] carList = new int [] ; // falta o tamanho

30/05/19 Free template from 4


www.brainybetty.com
Miscelânea
•  Vetores
–  Inicialização
Animal [] pets = new Animal[3];
pets [0] = new Animal();
pets [1] = new Animal();
pets [2] = new Animal();

–  Também possível:
int x = 9;
int[] dots = {6,x,8};

30/05/19 Free template from 5


www.brainybetty.com
Miscelânea
•  Vetores
–  Inicialização
int[] dots;
dots = new int [3];
int x = 9;
dots[0] = 6;
dots[1] = X;
dots[2] = 8;

–  Também possível:
Dog puppy = new Dog("Frodo");
Dog[] myDogs = {puppy, new Dog("Clover"), new Dog("Aiko")};

30/05/19 Free template from 6


www.brainybetty.com
Miscelânea
•  for avançado
int [] a = {1,2,3,4};
for(int x = 0; x < a.length; x++) // tradicional
System.out.print(a[x]);

for(int n : a) // avançado
System.out.print(n);

30/05/19 Free template from 7


www.brainybetty.com
Miscelânea
•  for avançado

int x;
long x2;
Long [] La = {4L, 5L, 6L};
long [] la = {7L, 8L, 9L};
int [][] twoDee = {{1,2,3}, {4,5,6}, {7,8,9}};
String [] sNums = {"one", "two", "three"};
Animal [] animals = {new Dog(), new Cat()};
for(long y : la ) ;
for(long lp : La);
for(int[] n : twoDee);
for(int n2 : twoDee[2]);
for(String s : sNums);
for(Object o : sNums);
for(Animal a : animals);
for(x2 : la);
for(int x2 : twoDee);
for(int x3 : la);
for(Dog d : animals);

30/05/19 Free template from 8


www.brainybetty.com
Miscelânea
•  Métodos com lista de argumentos variável (Java 5.0)
–  argumento: especificados entre parênteses ao se invocar um
método
doStuff("a", 2);
–  parâmetro: assinatura do método
void doStuff(String s, int a) { }

void doStuff(int... x) { } // expects from 0 to many ints as parameters


void doStuff2(char c, int... x) { } // expects first a char, then 0 to many ints
void doStuff3(Animal... animal) { } // 0 to many Animals

void doStuff4(int x...) { } // bad syntax


void doStuff5(int... x, char... y) { } // too many var-args
void doStuff6(String... s, byte b) { } // var-arg must be last
30/05/19 Free template from 9
www.brainybetty.com
Miscelânea
•  Cuidado com os construtores

class Foo2 {
// legal constructors
Foo2() { }
private Foo2(byte b) { }
Foo2(int x) { }
Foo2(int x, int... y) { }

// illegal constructors
void Foo2() { } // it's a method, not a constructor
Foo() { } // not a method or a constructor
Foo2(short s); // looks like an abstract method
static Foo2(float f) { } // can't be
static final Foo2 (long x) { } // can't be final
abstract Foo2 (char c) { } // can't be abstract
30/05/19 Freevar-arg
Foo2 (int... x, int t) { } // bad templatesyntax
from 10
} www.brainybetty.com
Miscelânea
•  Cadeia de Construtores
Cavalo -> Animal - > Object
1) O construtor Cavalo() é invocado
•  Quando invocado, o construtor chama o construtor da superclasse
com uma chamada (implícita) super() – a menos que o construtor
chame outro construtor da mesma classe
2) O construtor Animal() é invocado
3) O construtor Object() é invocado. Neste momento, estamos no
topo da pilha
4) São realizadas as atribuições e operações de Object()
5) Object() é finalizado
6) São realizadas as atribuições e operações de Animal()
7) Animal() é finalizado
8) São realizadas as atribuições e operações de Cavalo()
9) Cavalo() é finalizado 4. Object()
3. Animal() invoca super()

30/05/19 Free template from


2. Cavalo() invoca super()
11
www.brainybetty.com 1. main() calls new Cavalo()
Miscelânea
•  Cadeia de Construtores
–  O que acontece ao executar o código abaixo?
class A {
A() {
this("foo");
}

A(String s) {
this();
}

30/05/19 Free template from 12


www.brainybetty.com
Miscelânea
•  Blocos de inicialização
class Init {
Init(int x) {
System.out.println("1-arg const");
}
Init() {
System.out.println("no-arg const");
}
static { System.out.println("1st static init"); }
{ System.out.println("1st instance init"); }
{ System.out.println("2nd instance init"); }
static { System.out.println("2nd static init"); }
public static void main(String [] args) {
new Init(); new Init(7);
30/05/19 } Free template from 13
} www.brainybetty.com
Miscelânea
•  Blocos de inicialização

–  Os blocos de inicialização são executados na ordem em que


aparecem
–  Blocos de inicialização estáticos são executados uma vez,
quando a classe é carregada pela primeira vez
–  Blocos de inicialização de instância são executados todas as
vezes que uma instância é criada
–  Blocos de inicialização de instância são executados depois da
chamada ao construtor da classe-mãe (super())

30/05/19 Free template from 14


www.brainybetty.com
Miscelânea
•  Formatação de números
double temp = 0.278;
NumberFormat formatter =
NumberFormat.getNumberInstance();
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
System.out.print(formatter.format(temp));

•  Formatação de moeda
NumberFormat formatter =
NumberFormat.getCurrencyInstance();
30/05/19 Free template from 15
www.brainybetty.com
Miscelânea
•  Números aleatórios
int x = (int) (Math.random() * 5);

•  Random
–  Faz parte do pacote java.util.*

Random t = new Random();


System.out.print(t.nextInt(100));

30/05/19 Free template from 16


www.brainybetty.com
Miscelânea
•  Variáveis estáticas
class Frog {
static int frogCount = 0;
public Frog() {
frogCount += 1;
}
public static void main (String [] args) {
new Frog();
new Frog();
new Frog();
System.out.println (“Quantidade de sapos " +
frogCount); }
}
30/05/19 Free template from 17
www.brainybetty.com
Miscelânea
•  Variáveis estáticas

O que acontece ao retirar a variável estática?

class Frog {
int frogCount = 0;
public Frog() {
frogCount += 1; }
public static void main (String [] args) {
new Frog();
new Frog();
new Frog();
System.out.println (“Quantidade de sapos " +
frogCount);
}
}
30/05/19 Free template from 18
www.brainybetty.com
Miscelânea
•  Variáveis estáticas

O que acontece ao retirar a variável estática?

class Frog {
int frogCount = 0;
public Frog() {
frogCount += 1; }
public static void main (String [] args) {
new Frog();
new Frog();
new Frog();
System.out.println (“Quantidade de sapos " +
frogCount);
}
}
ERRO DE COMPILAÇÃO!!!
30/05/19 Métodos estáticos nãofrom
Free template podem acessar variáveis de instância
19
www.brainybetty.com
Miscelânea
•  Variáveis estáticas

class Frog {
static int frogCount = 0;
public Frog() {
frogCount += 1; }
}

class TestFrog {
public static void main (String [] args) {
new Frog();
new Frog();
new Frog();

System.out.print("frogCount:"+Frog.frogCount);
}
}
30/05/19 Free template from 20
www.brainybetty.com
Miscelânea
•  Herança
–  Em Java, só é permitido usar herança simples
–  Promover reuso de código
–  Criação de classe generalistas que oferecem
métodos e atributos para classes
especialistas
–  Uso de Polimorfismo

30/05/19 Free template from 21


www.brainybetty.com
Miscelânea
•  Herança – reuso
class GameShape {
public void displayShape() {
System.out.println("displaying shape");
}
}
class PlayerPiece extends GameShape {
public void movePiece() {
System.out.println("moving game piece");
}
}
public class TestShapes {
public static void main (String[] args) {
PlayerPiece shape = new PlayerPiece();
shape.displayShape();
shape.movePiece();
30/05/19 } Free template from 22
} www.brainybetty.com
Miscelânea
•  Sobreposição

public class Animal {


public void eat() {
System.out.println("Generic Animal Eating
Generically");
}
}

class Horse extends Animal {


public void eat() {
System.out.println("Horse eating hay, oats, " +
"and horse treats");
}
}
30/05/19 Free template from 23
www.brainybetty.com
Miscelânea
•  Sobreposição

public class TestAnimals {


public static void main (String [] args) {
Animal a = new Animal();
Animal b = new Horse();
a.eat(); // Executa a versão Animal
b.eat(); // Executa a versão Horse
}
}

30/05/19 Free template from 24


www.brainybetty.com
Miscelânea
•  Sobreposição – CUIDADO!!!
class Horse extends Animal {
public void eat() {
System.out.println("Horse eating hay, oats,
"+ "and horse treats");
}
public void buck() {
}
}

public class TestAnimals {


public static void main (String [] args) {
Animal c = new Horse();
c.buck(); // o objeto c não pode acessar o método buck()
}
}
30/05/19 Free template from 25
www.brainybetty.com
Miscelânea
•  Sobreposição – final()
public class Animal {
public final void eat() {
System.out.println("Generic Animal Eating
Generically");
}
}

class Horse extends Animal {


public void eat() { // ERRO DE COMPILAÇÃO
System.out.println("Horse eating hay, oats, " +
"and horse treats");
}
}
30/05/19 Free template from 26
www.brainybetty.com
Miscelânea
•  Sobreposição – static()
public class Animal {
public static void eat() {
System.out.println("Generic Animal Eating
Generically");
}
}

class Horse extends Animal {


public static void eat() {
System.out.println("Generic Animal Eating
Generically");
}
}
30/05/19
Até ocorre a sobreposição, mas, não há redefinição!
Free template from 27
O método a ser chamado continua sendo o método da super-classe
www.brainybetty.com
Miscelânea
•  Sobrecarga
–  Métodos sobrecarregados DEVEM mudar a lista de
parâmetros;
–  PODEM mudar o tipo de retorno
–  PODEM mudar o modificar de acesso
–  A sobrecarga pode acontecer na mesma classe ou
entre superclasse e subclasse
•  ClasseA possui o método dostuff (String s) e a sua
subclasse ClasseB define o possui o método dostuff(int i)

Não confunda Sobreposição com Sobrecarga

30/05/19 Free template from 28


www.brainybetty.com
Miscelânea
•  Sobrecarga

public void changeSize(int size, String name, float pattern) { }

•  Sobrecargas possíveis:

public void changeSize(int size, String name) { }


public int changeSize(int size, float pattern) { }
public void changeSize(float pattern, String name) throws
IOException { }

30/05/19 Free template from 29


www.brainybetty.com