A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Modificadores Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008.

Apresentações semelhantes


Apresentação em tema: "Modificadores Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008."— Transcrição da apresentação:

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

2 Modificadores public protected private default final abstract static transient strictfp synchronized volatile native Com exceção do default, todos os demais são palavras reservadas.

3 public Aplicado a classes, atributos e métodos Elementos com esse modificador podem ser utilizados em todo o sistema sem nenhuma restrição

4 ClassePublica package com.javabasico.modificadores; public class ClassePublica { public String variavelPublica = "Diga oi;"; }

5 TesteClassePublica package 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); }

6 private Aplicado 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

7 SubClassePublica package com.javabasico.modificadores; public class SubClassePublica { private void testeDaVariavelPrivada(){ System.out.println(variavelPrivada); }

8 Teste package 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); }

9 protected Aplicado a métodos e atributos Podem ser acessados pela própria classe e suas subclasses, mesmo que estejam em outros pacotes

10 ClassePublica package com.javabasico.modificadores; public class ClassePublica { public String variavelPublica = "Diga oi;"; private String variavelPrivada = "Diga alô"; protected String variavelProtegida = "Diga olá"; }

11 SubClassePublica package com.javabasico.modificadores; public class SubClassePublica { private void testeDaVariavelPrivada(){ System.out.println(variavelPrivada); } private void testeDaVariavelProtegida(){ System.out.println(variavelProtegida); }

12 Não é subclasse Veja a mensagem informada pelo compilador.

13 SubClassePublica package com.javabasico.modificadores; public class SubClassePublica extends ClassePublica { private void testeDaVariavelPrivada() { System.out.println(variavelPrivada); } private void testeDaVariavelProtegida() { System.out.println(variavelProtegida); }

14 default Nã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

15 final Aplicado 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

16 ClasseFinal package com.javabasico.modificadores; public final class ClasseFinal { }

17 SubClasseFinal package com.javabasico.modificadores; public class SubClasseFinal extends ClasseFinal { }

18 Variável final package 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"; }

19 Teste package 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"; }

20 Consequências Podemos alterar o valor de uma variável final? Veja novamente a mensagem do compilador.

21 Método final package 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..."); }

22 Método final sobrescrito package 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"); }

23 abstract Aplicado 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

24 static Aplicado 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

25 Utilitário padrão package com.javabasico.modificadores; public class UtilString { public String capitula(String palavra) { return Character.toUpperCase(palavra.charAt(0)) + palavra.substring(1); }

26 Teste package 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)); }

27 Método do objeto Tivemos que criar um objeto da classe utilitária, por isso dizemos que o método é do objeto.

28 Método static package com.javabasico.modificadores; public class UtilString { public static String capitula(String palavra) { return Character.toUpperCase(palavra.charAt(0)) + palavra.substring(1); }

29 Teste sem objeto package 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)); }

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

31 Utilitário de data package 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; }

32 Cont... /** * Retorna o dia da semana referente à data passada em forma de número. * 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); }

33 TesteData package 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(); }

34 transient Aplica-se a atributos de classe. Indica ao compilador que o atributo não deve ser serializado.

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

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

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

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

39 Dúvidas


Carregar ppt "Modificadores Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008."

Apresentações semelhantes


Anúncios Google