modificadores marco antonio, arquiteto de software – tjdf [email protected] atualizado em...

39
Modificadores Marco Antonio, Arquiteto de Software – TJDF [email protected] Atualizado em Novembro/2008

Upload: internet

Post on 17-Apr-2015

107 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Modificadores

Marco Antonio,

Arquiteto de Software – TJDF

[email protected]

Atualizado em Novembro/2008

Page 2: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Modificadorespublic

protected

private

default

final

abstract

static

transientstrictfpsynchronizedvolatilenativeCom exceção do default, todos os demais são palavras reservadas.

Page 3: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

publicAplicado a classes, atributos e métodos

Elementos com esse modificador podem ser utilizados em todo o sistema sem nenhuma restrição

Page 4: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

ClassePublicapackage com.javabasico.modificadores;

public class ClassePublica {

public String variavelPublica = "Diga oi;";

}

Page 5: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

TesteClassePublicapackage com.javabasico.modificadores.teste;

import com.javabasico.modificadores.*;

public class TesteClassePublica { public static void main(String[] args) { ClassePublica classe = new ClassePublica(); System.out.println("Valor da variável: " + classe.variavelPublica); }}

Page 6: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

privateAplicado a variáveis e métodos

Métodos e atributos private são visíveis apenas dentro da própria classe que os definem

Nem mesmo as subclasses têm acesso a variáveis e métodos private de sua superclasse

Page 7: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

SubClassePublicapackage com.javabasico.modificadores;

public class SubClassePublica {

private void testeDaVariavelPrivada(){

System.out.println(variavelPrivada);

}

}

Page 8: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Testepackage com.javabasico.modificadores.teste;

import com.javabasico.modificadores.*;

public class TesteClassePublica { public static void main(String[] args) { ClassePublica classe = new ClassePublica(); System.out.println("Valor da variável: " + classe.variavelPublica); System.out.println("Valor da variável private: " + classe.variavelPrivada); }}

Page 9: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

protectedAplicado a métodos e atributos

Podem ser acessados pela própria classe e suas subclasses, mesmo que estejam em outros pacotes

Page 10: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

ClassePublicapackage com.javabasico.modificadores;

public class ClassePublica {

public String variavelPublica = "Diga oi;";

private String variavelPrivada = "Diga alô";

protected String variavelProtegida = "Diga olá";

}

Page 11: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

SubClassePublicapackage com.javabasico.modificadores;

public class SubClassePublica { private void testeDaVariavelPrivada(){ System.out.println(variavelPrivada); } private void testeDaVariavelProtegida(){ System.out.println(variavelProtegida); }}

Page 12: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Não é subclasse• Veja a mensagem informada pelo

compilador.

Page 13: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

SubClassePublicapackage com.javabasico.modificadores;

public class SubClassePublica extends ClassePublica { private void testeDaVariavelPrivada() { System.out.println(variavelPrivada); }

private void testeDaVariavelProtegida() { System.out.println(variavelProtegida); }}

Page 14: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

defaultNão é um modificador, e sim a ausência dele

Aplicado a classes, métodos e atributos

Métodos e atributos default podem ser acessados por qualquer classe que esteja no mesmo pacote

Não é uma prática incentivada

Page 15: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

finalAplicado a classes, métodos e atributos

Classes final:Não podem ter subclasses

Métodos:Não podem ser sobrescritos

Atributos:Não podem ter seu valor modificado

Page 16: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

ClasseFinalpackage com.javabasico.modificadores;

public final class ClasseFinal {

}

Page 17: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

SubClasseFinalpackage com.javabasico.modificadores;

public class SubClasseFinal extends ClasseFinal {

}

Page 18: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Variável finalpackage com.javabasico.modificadores;

public class ClassePublica { public String variavelPublica = "Diga oi;"; private String variavelPrivada = "Diga alô"; protected String variavelProtegida = "Diga olá"; public final String variavelFinal = "Valor inalterável";}

Page 19: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Testepackage com.javabasico.modificadores.teste;

import com.javabasico.modificadores.*;

public class TesteClassePublica { public static void main(String[] args) { ClassePublica classe = new ClassePublica(); System.out.println("Valor da variável: " + classe.variavelPublica); // System.out.println("Valor da variável private: " + classe.variavelPrivada); classe.variavelFinal = "Novo valor"; }}

Page 20: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Consequências• Podemos alterar o valor de uma variável

final?• Veja novamente a mensagem do

compilador.

Page 21: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Método finalpackage com.javabasico.modificadores;

public class ClassePublica { public String variavelPublica = "Diga oi;"; private String variavelPrivada = "Diga alô"; protected String variavelProtegida = "Diga olá"; public final String variavelFinal = "Valor inalterável"; public final void facaAlgumaTarefa(){ System.out.println("Alguma tarefa..."); }}

Page 22: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Método final sobrescritopackage com.javabasico.modificadores;

public class SubClassePublica extends ClassePublica { private void testeDaVariavelPrivada() { System.out.println(variavelPrivada); }

private void testaDaVariavelProtegida() { System.out.println(variavelProtegida); } public void facaAlgumaTarefa(){ System.out.println("Não pode ser sobrescrito"); }}

Page 23: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

abstractAplicado a classes e métodos

Métodos abstract não podem ter implementação, apenas a assinatura

Se houver ao menos um método abstract em uma classe, ela deverá ser definida como abstract

Uma classe pode ser abstract mesmo que não tenha nenhum método abstract

Page 24: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

staticAplicado a métodos e atributos

Utilizado em classes utilitárias

Métodos e atributos static podem ser utilizados sem a necessidade de criação de objetos

São chamados de métodos/atributos da classe, não do objeto

Compartilha os valores entre todas as chamadas

Page 25: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Utilitário padrãopackage com.javabasico.modificadores;

public class UtilString { public String capitula(String palavra) { return Character.toUpperCase(palavra.charAt(0)) + palavra.substring(1); }}

Page 26: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Testepackage com.javabasico.modificadores;

public class TesteUtilString { public static void main(String[] args) { String frase = "alguma frase a ser capitulada."; UtilString utilitario = new UtilString(); System.out.println(utilitario.capitula(frase)); }}

Page 27: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Método do objeto• Tivemos que criar um objeto da classe

utilitária, por isso dizemos que o método é do objeto.

Page 28: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Método staticpackage com.javabasico.modificadores;

public class UtilString { public static String capitula(String palavra) { return Character.toUpperCase(palavra.charAt(0)) + palavra.substring(1); }}

Page 29: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Teste sem objetopackage com.javabasico.modificadores;

public class TesteUtilString { public static void main(String[] args) { String frase = "alguma frase a ser capitulada."; System.out.println(UtilString.capitula(frase)); }}

Page 30: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Método da classe• Nessa nova situação não criamos um objeto

para utilizar o método, por isso dizemos que o método é da classe (e não do objeto).

• Tudo isso em função do modificador static.

Page 31: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Utilitário de datapackage com.javabasico.modificadores;

import java.sql.*;import java.text.*;

public class UtilDate { /** * Retorna um objeto da classe Date apartir de uma data informada em formato * texto. * @param dataEmFormatoTexto Data em formato texto. * @param mascaraDaData Formato da data informada. * @return Data * @throws ParseException * Data inválida. */ public static Date getData(String dataEmFormatoTexto, String mascaraDaData) throws ParseException { if (dataEmFormatoTexto != null) { SimpleDateFormat formatador = new SimpleDateFormat(mascaraDaData); java.util.Date parse = formatador.parse(dataEmFormatoTexto); long horaEmMilis = parse.getTime(); return new Date(horaEmMilis); } return null; }

Page 32: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Cont... /** * Retorna o dia da semana referente à data passada em forma de número.<br> * Ex: Domingo=0, Segunda=1..., Sábado=6 * * @param data * Data que se deseja saber o dia da semana. * @return Dia da semana */ public static int getDiaDaSemana(Date data) { java.util.GregorianCalendar calendario = new java.util.GregorianCalendar( java.util.TimeZone.getDefault()); calendario.setTime(data); return (calendario.get(java.util.GregorianCalendar.DAY_OF_WEEK) - 1); }}

Page 33: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

TesteDatapackage tjdf.infra.util;

import java.sql.*;import java.text.*;

public class TesteData { public static void main(String[] args) { try { Date dataSQL = UtilDate.getData("06/04/1979", "dd/MM/yyyy"); System.out.println("Data SQL: " + dataSQL); System.out.println("Dia da semana:" + UtilDate.getDiaDaSemana(dataSQL)); } catch (ParseException e) { e.printStackTrace(); } }}

Page 34: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

transient• Aplica-se a atributos de classe.• Indica ao compilador que o atributo não

deve ser serializado.

Page 35: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

strictfp• Indica que todas as variáveis da classe

atendem ao padrão IEE754, que é um padrão internacional que gerencia a precisão dos valores double e float.

Page 36: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

synchronized• Sincroniza blocos de código dentro de uma

thread.• Proíbe o acesso concorrente, ou seja, só

deixa uma thread acessar o recurso de cada vez.

Page 37: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

volatile• Aplicado a variáveis, tem a função

exatamente oposta do synchronized.• A idéia é compartilhar o valor da variável

entre todas as threads.

Page 38: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

native• Define que a implementação do método foi

escrita em linguagem nativa, geralmente C.• Recurso altamente dependente do sistema

operacional.• Geralmente não é portável.

Page 39: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

Dúvidas