Modificadores Marco Antonio, Arquiteto de Software – TJDF [email protected] Atualizado em...
Transcript of Modificadores Marco Antonio, Arquiteto de Software – TJDF [email protected] Atualizado em...
![Page 1: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/1.jpg)
Modificadores
Marco Antonio,
Arquiteto de Software – TJDF
Atualizado em Novembro/2008
![Page 2: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/2.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/3.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/4.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/5.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/6.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/7.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/8.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/9.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/10.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/11.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/12.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/13.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/14.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/15.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/16.jpg)
ClasseFinalpackage com.javabasico.modificadores;
public final class ClasseFinal {
}
![Page 17: Modificadores Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/17.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/18.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/19.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/20.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/21.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/22.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/23.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/24.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/25.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/26.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/27.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/28.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/29.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/30.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/31.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/32.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/33.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/34.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/35.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/36.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/37.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/38.jpg)
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.](https://reader034.fdocumentos.tips/reader034/viewer/2022051515/552fc0fb497959413d8b97d8/html5/thumbnails/39.jpg)
Dúvidas