java completo

Upload: marceloresendemr

Post on 06-Jul-2015

131 views

Category:

Documents


2 download

TRANSCRIPT

Programao Orientada a Objetos

Linguagem de Programao JAVA

Programao Orientada a ObjetosSumrio Estrutura do curso................................................................................................................... 4 Breve Histrico do Java.......................................................................................................... 5 Introduo a Linguagem Java................................................................................................. 6 Java Virtual Machine............................................................................................................ 17 Coletor de Lixo..................................................................................................................... 18 Fundamentos da Linguagem Java ........................................................................................ 20 Identificadores, palavras reservadas, tipos, varivies e Literais........................................... 22 Aplicativos independentes em Java...................................................................................... 31 Operadores............................................................................................................................ 34 String .................................................................................................................................... 40 Para que serve....................................................................................................................... 41 StringBuffer .......................................................................................................................... 43 Resultado .............................................................................................................................. 44 Classe Integer ....................................................................................................................... 48 Classes Long, Short, Byte, Float e Double........................................................................... 51 Classe Character ................................................................................................................... 53 Objetos X Tipos primitivos de dados ................................................................................... 54 Fluxo de Controle ................................................................................................................. 55 Laos..................................................................................................................................... 58 Arrays ................................................................................................................................... 62 Tratamento de excees........................................................................................................ 65 Empacotamento de Classes .................................................................................................. 68 Converso de Tipos .............................................................................................................. 69 A referncia this.................................................................................................................... 71 Colees ............................................................................................................................... 72 Pacotes .................................................................................................................................. 77 Acessibilidade....................................................................................................................... 79 Programao Orientada a Objetos ........................................................................................ 85 Abstrao .............................................................................................................................. 85 Classe Indivduos.................................................................................................................. 87 Encapsulamento.................................................................................................................... 87 Herana................................................................................................................................. 88 Hierarquia de Agregao ...................................................................................................... 89 Hierarquia de Generalizao / Especializao...................................................................... 90 Polimorfismo ........................................................................................................................ 90 Principais conceitos em orientao a objetos ....................................................................... 92 Mtodos ................................................................................................................................ 93 Construtores.......................................................................................................................... 94 O que so construtores?.................................................................................................... 94 2 Anotaes

Liguanguem de programao JAVA

Programao Orientada a ObjetosAtributos e variveis............................................................................................................. 95 A referncia super................................................................................................................. 96 Classe Abstrata e Finais........................................................................................................ 97 Interfaces .............................................................................................................................. 99 Utilitrios ............................................................................................................................ 101 JavaDoc (Documentao)................................................................................................... 102 Jar (Compactao, Agrupamento e Distribuio)............................................................... 104 Captulo I - Fundamentos da Linguagem ........................................................................... 105 Captulo II - Modificadores e Controle de Acesso ............................................................ 128 Captulo III - Operadores e atribuies .............................................................................. 164 Captulo IV - Controle de fluxo, excees e assertivas..................................................... 188 Captulo VI - java.lang - a classe Math, Strings e Wrappers.............................................. 251 Captulo VII - Objetos e conjuntos..................................................................................... 280 Captulo VIII - Classes internas ........................................................................................ 304 Captulo IX - Threads ......................................................................................................... 328 Exerccios Tericos ............................................................................................................ 354 Exerccios Prticos ............................................................................................................. 358

Anotaes

3

Liguanguem de programao JAVA

Programao Orientada a ObjetosEstrutura do cursoIntroduo Tipos de dados e variveis; Estruturas de programao no Java; Conceitos de Orientao a Objetos; Objetos da biblioteca Swing; Bancos de dados e SQL.

BibliografiaDEITEL & DEITEL. Java como programar. 4a Edio, Bookman, 2003. FURGERI, SRGIO Java 2 Ensino Didtico. Editora rica, 2002. SIERRA, KATHY & BATES, BERT. JAVA 2 Certificao SUN Programador e desenvolvedor. 2 Edio, AltaBooks.

Anotaes

4

Liguanguem de programao JAVA

Programao Orientada a ObjetosBreve Histrico do Java1991 incio do projeto Green Requisitos do projeto No ficar dependente de plataforma Poder rodar em pequenos equipamentos Linguagem oak(carvalho) Em 1992 O projeto Green apresenta seu primeiro produto. (Start Seven) Revolucionar a industria de TV e vdeo oferecendo mais interatividade. 1992 Crise do Projeto Green 1993 explode a WWW (World Wide Web) Duke Mascote Java 1995 Maio - Nascimento oficial do Java. 1996 - Janeiro - Release do JDK 1.0. 1996 - Maio - Realizado o primeiro JavaOne, conferencia mxima da tecnolgia Java. Apresentados a tecnologia JavaBeans e Servlets. 1996 - Dezembro - Release do JDK 1.1 Beta. 1997 - Fevereiro - Release do JDK 1.1. 1997 - Abril - Anunciada a tecnologia Enterprise JavaBeans (EJB), alm de incluir a Java Foundation Classes (JFC) na plataforma Java. 1998 - Maro - inicio do projeto JFC/Swing. 1998 - Dezembro - Formalizado o Java Community Process (JCP). 1999 - Fevereiro - Release do Java 2 Plataform. 1999 - Junho - Anuncio da "diviso" da tecnologia Java em trs edies (J2SE, J2EE, J2ME). 2000 -Maio - Release da J2SE v. 1.3. 2001 -Abril - Release do J2EE 1.3 beta, contendo as especificaes EJB 2.0, JSP 1.2 e Servlet 2.3. 2002 - Dezembro - Release do J2EE 1.4 Beta. 2004 - Outubro - Release do Java 5.0, chamado de Java Tiger. 2005 - Maro - 10 aniversrio da tecnologia. 2005 - Junho - JavaOne de nmero 10. 2006 - JavaOne de nmero 11.

Anotaes

5

Liguanguem de programao JAVA

Programao Orientada a ObjetosIntroduo a Linguagem JavaCaractersticas do JavaJava sinttica e morfologicamente muito parecido com a linguagem C++, entretanto, existem diferenas: Inexistncia de aritmticas de ponteiros (ponteiros so apenas referncias); Independncia de plataforma; Arrays so objetos; Orientao a Objetos; Multhreading Strings so objetos; Gerenciamento automtico de alocao e deslocao de memria (Garbage Collection); No existe Herana Mltiplas com classes, apenas com interfaces; No existem funes, mas apenas mtodos de classes; Bytecode; Interpretado; Compilado; Necessita de ambiente de execuo (runtime), ou seja, a JVM (Java Virtual Machine).

Tecnologia JavaA tecnologia java oferece um conjunto de solues para desenvolvimento de aplicaes para diversos ambientes. J2SE Java 2 Standard Edition (Core/Desktop) J2EE Java 2 Entreprise Edition (Enterprise/Server) J2ME Java 2 Micro Edition(Mobile/Wireless)

Anotaes

6

Liguanguem de programao JAVA

Programao Orientada a ObjetosO QUE JAVA ? uma Linguagem de programao Orientada a objetos, portvel entre diferentes plataformas e sistemas operacionais. 1. Todos os programas Java so compilados e interpretados; 2. O compilador transforma o programa em bytecodes independentes de plataforma; 3. O interpretador testa e executa os bytecodes 4. Cada interpretador uma implementao da JVM - Java Virtual Machine;

Plataforma JavaUma plataforma o ambiente de hardware e software onde um programa executado. A plataforma Java um ambiente somente de software. Componentes: Java Virtual Machine (Java VM) Java Application Programming Interface (Java API)

Anotaes

7

Liguanguem de programao JAVA

Programao Orientada a ObjetosMitos da LinguagemO Java da Sun? Java uma linguagem direcionada para a Internet? Java igual a JavaScript? (LiveScript) Java lento?

Anotaes

8

Liguanguem de programao JAVA

Programao Orientada a ObjetosPortabilidade: A independncia de plataformaA linguagem Java independente de plataforma. Isto significa que o desenvolvedor no ter que se preocupar com particularidades do sistema operacional ou de hardware, focando o seu esforo no cdigo em si. Mas o que isto realmente significa?

A maioria das linguagens preciso gerar uma verso para cada plataforma que se deseja utilizar, exigindo em muitos casos, alteraes tambm no cdigo fonte. Em Java o mesmo programa pode ser executado em diferentes plataformas. Veja o exemplo abaixo: public class HelloWorldApp{ public static void main (String arg []){ System.out.println("Hello World!"); } } Compilao: > javac HelloWorldApp.java Execuo: > java HelloWorldApp

Anotaes

9

Liguanguem de programao JAVA

Programao Orientada a ObjetosGerando Aplicaes Para criar aplicaes ou programas na linguagem Java temos que seguir os alguns passos como: Edio, Compilao e Interpretao. A Edio a criao do programa, que tambm chamado de cdigo fonte. Com a compilao gerado um cdigo intermedirio chamado Bytecode, que umcdigo independente de plataforma. Na Interpretao, a mquina virtual Java ou JVM, analisa e executa cada instruo do cdigo Bytecode. Na linguagem Java a compilao ocorre apenas uma vez e a interpretao ocorre a cada vez que o programa executado. Plataforma de Desenvolvimento A popularidade da linguagem Java fez com que muitas empresas desenvolvessem ferramentas para facilitar desenvolvimento de aplicaes.Estas ferramentas tambm so conhecidas como IDE (Ambiente deDesenvolvimento Integrado), que embutem uma srie de recursos para dar produtividade. Todavia, cada uma delas tem suas prprias particularidades e algumas caractersticas semelhantes. As principais ferramentas do mercado so: Jbuilder (www.borland.com) NetBeans(http://www.netbeans.org) Java Studio Creator (www.sun.com) Jedit(www.jedit.org) IBM Websphere Studio Application Developer(WSAD) (www.ibm.com) Eclipse(www.eclipse.org) Jdeveloper(www.oracle.com) Instalao do ambiente de desenvolvimento (JDK) O J2SDK ambiente de desenvolvimento da linguagem Java. Na verdade conjunto de ferramentas para compilar, depurar, executar e documentar um programa escrito em java. As verses para Solaris, Linux e Windows podem ser obtidas no endereo: www.java.sun.com/j2se (Pgina oficial da linguagem).

Anotaes

10

Liguanguem de programao JAVA

Programao Orientada a ObjetosProcedimentos de Instalao: Para instalar o J2SDK basta executar o programa de instalao e seguir as instrues. Caso o J2SDK esteja compactado ser necessrio descompacta-lo primeiro, os formatos mais populares de arquivos compactados so zip (para Windows) e tar (para Unix). Instalao do ambiente de desenvolvimento (JDK) A partir do Menu iniciar, selecione Configuraes, depois selecione Painel de Controle e enfim Sistema. Estando em Sistema seleciona o guia Avanado e depois variveis de ambiente.

Anotaes

11

Liguanguem de programao JAVA

Programao Orientada a ObjetosPassos 1: 1 - Crie uma nova varivel de ambiente chamada JAVA_HOME com o seguinte valor C:\j2sdk1.4.2_04

Exemplo: JAVA_HOME = C:\j2sdk1.4.2_04. A varivel JAVA_HOME deve ter o mesmo nome do diretrio onde foi instalado o J2SDK.

Anotaes

12

Liguanguem de programao JAVA

Programao Orientada a ObjetosPasso 2: Classpath O Java defini uma varivel de ambiente chamada ClassPath. O Java procura pelas classes e pacotes atravs desta varivel. 1 - Crie ou edite a varivel de ambiente chamada CLASSPATH, informa o seguinte valor para ela. classpath=C:\j2sdk1.4.2_04\lib;.;

Anotaes

13

Liguanguem de programao JAVA

Programao Orientada a Objetos

A figura acima demostra uma viso do pacote de desenvolvimento J2SDK e tambm do ambiente de execuo (JRE). Ambos so necessrios para desenvolver uma aplicao.

Anotaes

14

Liguanguem de programao JAVA

Programao Orientada a ObjetosO Compilador javacSintaxe: javac [opes] NomedoArquivo.java Argumento classpath path -d dir -deprecation -g -nowarm -verbose -O -depend Descrio Localizao das classes. Sobrepe a varivel de ambiente Classpath; Determina o caminho onde as classes compiladas so armazenadas; Faz a compilao de cdigo em desuso, geralmente de verses anteriores e faz aviso de advertncia; Gera tabelas de "debugging" que sero usadas pelo pelo depurador JDB; Desabilita as mensagens de advertncia; Exibe informaes adicionais sobre a compilao; Faz otimizao do cdigo; Faz a compilao de todos os arquivos que dependem do arquivo que est sendo compilado. Normalmente somente compilado o arquivo fonte mais as classes que este invoca.

Exemplos > javac Hello.java > javac -d Hello.java > javac -deprecation Hello.java > javac -O -deprecation -verbose Hello.java > javac -O Hello.java

Anotaes

15

Liguanguem de programao JAVA

Programao Orientada a ObjetosO Interpretador javaSintaxe: java [opes] NomedoArquivo [lista de Argumentos] Argumento classpath path -help -version -debug -D -jar -X -v ou -verbose Lista Argumentos Descrio Localizao das classes. Sobrepe a varivel de ambiente Classpath; Exibe a lista de opes disponveis; Exibe a verso do interpretador; Inicia o interpretador no modo de "debug", geralmente em conjunto com JDB; propriedade=valor Possibilita redefinio de valores de propriedades. Pode ser usado vrias vezes; Indica o nome do arquivo (com extenso .jar) que contm a classe a ser executada; Exibe a lista de opes no padronizadas do interpretador; Exibe informaes extras sobre a execuo, tais como, mensagens indicando que uma classe est sendo carregada e etc; de Define a lista de argumentos que ser enviada a aplicao.

Exemplos > java Hello > javac -version > java -D nome=Meu Nome Hello > java -verbose Hello > javac Hello MeuNome

Anotaes

16

Liguanguem de programao JAVA

Programao Orientada a ObjetosJava Virtual MachineA JVM parte do ambiente de "runtime" Java e a responsvel pela interpretao dos bytecodes (programa compilado em java), ou seja, a execuo do cdigo. A JVM consiste em um conjunto de instrues, conjunto de registradores, a pilha (stack) , garbage-collected heap e a rea de memria (armazenamento de mtodos).

Funces da JVM Java Virtual Machine :Segurana de cdigo Responsvel por garantir a no execuo de cdigos maliciosos (ex. applets). Verificar se os bytecodes aderem s especificaes da JVM e se no violam a integridade e segurana da plataforma; Interpretar o cdigo; Class loader carrega arquivos .class para a memria. OBS: Em tempo de execuo estes bytecodes so carregados, so verificados atravs do Bytecode Verifier (uma espcie de vigilante) e somente depois de verificados sero executados.

Anotaes

17

Liguanguem de programao JAVA

Programao Orientada a ObjetosColetor de LixoA linguagem Java tem alocao dinmica de memria em tempo de execuo. No C e C++ (e em outras linguagens) o programa desenvolvido responsvel pela alocao e deslocamento da memria. Isto geralmente provoca alguns problemas. Durante o ciclo de execuo do programa, o Java verifica se as variveis de memria esto sendo utilizadas, caso no estejam o Java libera automaticamente esta rea para o uso. Veja exemplo abaixo: import java.util.*; class GarbageExample { private static Vector vetor; public static void main(String args[]) { vetor = new Vector(); for (int a=0; a < 500; a++){ vetor.addElement(new StringBuffer("teste")); Runtime rt = Runtime.getRuntime(); System.out.println("Memria Livre: " + rt.freeMemory()); vetor = null; System.gc(); System.out.println("Memria Livre: " + rt.freeMemory()); } } }

Anotaes

18

Liguanguem de programao JAVA

Programao Orientada a ObjetosEscrevendo um pequeno programa1 - Abra o editor de programas e crie o seguinte programa. public class Hello{ public static void main (String arg []){ String s = "world"; System.out.println("Hello " + s); } } 2 - Salvar como: Hello.java 3 - Compile o programa com o seguinte comando: javac Hello.java 4 - Para executar, digite o comando: java Hello

Anotaes

19

Liguanguem de programao JAVA

Programao Orientada a ObjetosFundamentos da Linguagem JavaEstrutura da LinguagemComentrios Temos trs tipos permitidos de comentrios nos programas feitos em Java: // comentrio de uma nica linha /* comentrio de uma ou mais linhas */ /** comentrio de documentao */ (este tipo de comentrio usado pelo utilitrio Javadoc, que responsvel por gerar documentao do cdigo Java) Exemplo int x=10; // valor de x Comentrio de linha /* A varivel x integer */ int x; Exemplo onde o comentrio usa mais que uma linha.Todo o texto entre "/*" e "*/", inclusive, so ignorados pelo compilador. /** x -- um valor inteiro representa a coordenada x */ int x; Todo o texto entre o "/**" e "*/", inclusive, so ignorados pelo compilador mas sero usados pelo utilitrio javadoc.

Anotaes

20

Liguanguem de programao JAVA

Programao Orientada a ObjetosEstilo e organizaoNo Java, blocos de cdigo so colocados entre chaves { }; No final de cada instruo usa-se o ; (ponto e vrgula); A classe tem o mesmo nome do arquivo .java; Todo programa Java representado por uma ou mais classes; Normalmente trabalhamos com apenas uma classe por arquivo. Case Sensitive;

Convenes de CdigosNome da Classe: O primeiro caracter de todas as palavras que compem devem iniciar com maisculo e os demais caracteres devem ser minsculos. Ex. HelloWorld, MeuPrimeiroPrograma, BancoDeDados. Mtodo, atributos e variveis: Primeiro caracter minsculo; Demais palavras seguem a regra de nomes da classes. Ex. minhaFuno, minhaVariavelInt. Constantes: Todos os caracteres maisculos e diviso de palavras utilizando underscore _. Ex. MAIUSCULO, DATA_NASCIMENTO. Exemplo: public class Exercicio1 { public static void main (String args []) { valor=10; System.out.println(valor); } }

Anotaes

21

Liguanguem de programao JAVA

Programao Orientada a ObjetosIdentificadores, palavras reservadas, tipos, varivies e LiteraisIdentificadoresQue so identificadores ? Identificadores so nomes que damos as classes, aos mtodos e as variveis. Regra: Um identificador dever ser inicializado com uma letra, sublinhado ( _ ), ou sinal de cifro ($). Em Java existe uma diferena entre letras maisculas e minsculas. Veja alguns exemplos: Teste diferente de TESTE teste diferente de Teste Exemplos de identificadores: Alguns identificadores vlidos: valor - userName - nome_usuario - _sis_var1 - $troca Exemplo: public class PessoaFisica Veja alguns invlidos: - 1nome - \TestClass - /metodoValidar

Anotaes

22

Liguanguem de programao JAVA

Programao Orientada a ObjetosPalavras ReservadasAs Palavras Reservadas, quer dizer que nenhuma das palavras da lista abaixo podem ser usadas como identificadores, pois, todas elas foram reservadas para a Linguagem Java. abstract char for transient continue protected new goto synchronized Veja o exemplo: public class TestPalavraReservada{ private int return =1; public void default(String hello){ System.out.println("Hello "); } } Este programa provocar erros ao ser compilado: --------------------------- Compiler Output --------------------------TestEstrutura.java:3: expected private int return =1; ^ TestEstrutura.java:6: expected public void default(String hello) boolean class long volatile instanceof throw import else break const short strictpf package void final default byte int if assert static switch implements return case double while try private throws extends super catch float do finally public native interface this

Anotaes

23

Liguanguem de programao JAVA

Programao Orientada a ObjetosTipos de DadosExistem tipos bsicos ou primitivos e os tipo de referncia. Sintaxe padro: ; ou = valor da varivel; = valor da varivel, = valor da varivel... ; Tipo Lgico - boolean: true e false Exemplo: boolean fim = true; Tipo Textual - char e String (String uma classe) Um caracter simples usa a representao do tipo char. Java usa o sistema de codificao Unicode. Neste sistema o tipo char representa um caracter de 16-bit. O literal do tipo char pode ser representado com o uso do ( ). Exemplos a = b; \n nova linha \r enter \t tabulao \\ - \ \ - \u???? especifica um caracter Unicode o qual representado na forma Hexadecimal. String (String uma classe) O tipo String um tipo referncia que usado para representar uma seqncia de caracteres. Exemplo String s = Isto uma string, Inteiros byte, short, int e long Possuem somente a parte inteira, ou seja, no suportam casas decimais.

Anotaes

24

Liguanguem de programao JAVA

Programao Orientada a ObjetosExemplos int i = 10, int i = 11; byte b = 1; Todo nmero Inteiro escrito em Java tratado como int, desde que seu valor esteja na faixa de valores do int. Quando declaramos uma varivel do long necessrio acrescentar um literal L, caso contrrio esta poder ser tratada como int, que poderia provocar problemas. Long L = 10L;

Ponto FlutuanteSo os tipos que tm suporte s casas decimais e maior preciso numrica. Existem dois tipos em Java: o float e o double. O valor default double, ou seja, todo vez que for acrescentado a literal F, no varivel tipo float, ela poder ser interpretada como varivel do tipo double. Exemplos float f = 3.1f; float div = 2.95F; double d1 = 6.35, d2 = 6.36, d3 = 6.37; double pi = 3.14D; Regra: Os tipos float e double quando aparecem no mesmo programa necessrio identific-los, para que no comprometa a preciso numrica: float f = 3.1F; double d = 6.35; Uma vez no identificado, ao tentar compilar o programa, ser emitida uma mensagem de erro.

Anotaes

25

Liguanguem de programao JAVA

Programao Orientada a Objetos

Tipo int short byte long float

Nome inteiro inteiro curto byte inteiro longo

Tipos primitivos de Dados Tamanho Intervalo de valores em bytes 4 - 2147483648 at 2147483647 2 1 8 4 8 1 2 - 32768 at 32767 -128 at 127 - 922372036854775808 at 922372036854775807 dependente da preciso dependente da preciso true ou false todos os caracteres unicode

ponto flutuante double ponto flutuante boolean boolenano char caracter

Exemplo public class TiposPrimitivos { public static void main ( String args [] ){ Int x=10, y = 20; // int double dolar = 2.62; // double float f = 23.5f; // float String nome = "JAVA"; // string char asc = 'c'; boolean ok = true; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("dolar = " + dolar); System.out.println("f= " + f); System.out.println("nome = " + nome); System.out.println("asc = " + asc); System.out.println("ok = " + ok); } } Anotaes 26

Liguanguem de programao JAVA

Programao Orientada a ObjetosInicializao de variveis As variveis dentro de um mtodo devem ser inicializadas explicitamente para serem utilizadas. No permitido o uso de variveis indefinidas ou no inicializadas. Exemplo int i; int a = 2; int c = i + a; Neste caso ocorre erro, pois, o valor de i est indefinido. public class TestVarInic { public static void main(String[] args) { int valor = 10; valor = valor + 1; System.out.println("valor = " + valor); } } Resultado: valor = 11 As variveis ou atributos definidos dentro de uma de classe, so inicializadas atravs do construtor, que usa valores default. Valores default para boolean false, para os tipos numricos 0 e tipo referencia null; public class TestVarInicClasse { private static int valor; public static void main(String[] args) { System.out.println("valor " + valor); } } Resultado: valor = 0

Anotaes

27

Liguanguem de programao JAVA

Programao Orientada a ObjetosTipos ReferenceVariveis do tipo reference armazenam o endereo de memria estendida para um determinado objeto e a quantidade de memria varia de acordo com o objeto em questo. Criao e Inicializao = new Somente o valor null, representando que a varivel no armazena nenhuma referncia. Exemplos String s = new String(); String s2 = teste; A classe String a nica que pode ser criada da seguinte forma: String s2 = teste;

Variveis LocaisVariveis declaradas dentro de mtodos ou blocos de cdigo so definidas como locais. Devem ser inicializadas, seno ocorrer um erro de compilao. public class VariaveisLocais{ public static void main (String args []) { int x=10; int y; System.out.println(x); System.out.println(y); } }

Anotaes

28

Liguanguem de programao JAVA

Programao Orientada a ObjetosO Escopo define em qual parte do programa a varivel estar acessvel. public class Escopo { public static void main (String args []){ int x=10; } { System.out.println(x); } }

Anotaes

29

Liguanguem de programao JAVA

Programao Orientada a ObjetosArmazenamento de variveisGeralmente as variveis so armazenadas em memria. A linguagem Java possui dois locais para armazenamento de variveis de acordo com as caractersticas.

Variveis declaradas dentro de um mtodo

Objetos com atributos

Stack Memory

Heap Memory

Objetos e seus atributos e mtodos so armazenados no Heap Memory. A Heap dinamicamente alocada para os objetos esperarem por valor. J Stack memory armazena as informaes que sero utilizadas por um breve intervalo de tempo, public class Teste{ public static void main(String args[]){ int valor = 10; byte numbyte = 1; } }

Stack Memory

Anotaes

30

Liguanguem de programao JAVA

Programao Orientada a ObjetosAplicativos independentes em JavaOs aplicativos independentes, assim como qualquer tipo de programa em Java, deve conter pelo menos uma classe, que a principal, e que d nome ao arquivo fonte. A classe principal de um aplicativo independente deve sempre conter um mtodo main, que o ponto de incio do aplicativo, e este mtodo pode receber parmetros de linha de comando, atravs de um array de objetos tipo String. Se algum dos parmetros de linha de comando recebidos por um aplicativo precisar ser tratado internamente como uma varivel numrica, deve ser feita a converso do tipo String para o tipo numrico desejado, por meio de um dos mtodos das classes numricas do pacote java.lang.

Mtodo mainO mtodo main o mtodo principal de um aplicativo em Java, constituindo o bloco de cdigo que chamado quando a aplicao inicia seu processamento. Deve sempre ser codificado dentro da classe que d nome para a aplicao (sua classe principal). No caso das Applets, a estrutura do programa um pouco diferente, e o mtodo main substitudo por mtodos especficos das Applets como: init, start, etc, cada um deles tendo um momento certo para ser chamado. public static void main(String[ ] parm)

O mtodo main pode receber argumentos de linha de comando. Estes argumentos so recebidos em um array do tipo String Um argumento de linha de comando deve ser digitado aps o nome do programa quando este chamado: Exemplo java Nomes "Ana Maria"

Anotaes

31

Liguanguem de programao JAVA

Programao Orientada a ObjetosComo o Java recebe os argumentos de linha de comando

Array do tipo String

parm[0]

parm[1]

parm[2]

parm[3]

etc...

C:...\> java Nomes Renata Pedro "Jos Geralo" Tatiana

parm[0]

parm[2]

parm[3]

parm[1]

Espaos em branco so tratados como separadores de parmetros, portanto, quando duas ou mais palavras tiverem que ser tratadas como um nico parmetro devem ser colocadas entre aspas. Para saber qual o nmero de argumentos passados para um programa, este deve testar o atributo length do array. for (i=0; i< parm.length; i++) processamento envolvendo parm[i];

parm.length = 0 comando parm.length = 5 de comando

indica que nenhum parmetro foi digitado na linha de indica que o aplicativo recebeu 5 parmetros pela linha

Anotaes

32

Liguanguem de programao JAVA

Programao Orientada a ObjetosExemplo de programa que trabalha com os programa mostra na tela os argumentos Este argumentos da linha de comando

digitados pelo usurio na linha de comando de chamada do programapublic class Repete { public static void main (String args[ ] ) { int i; for (i = 0; i < args.length; i++) System.out.println(args[i]); } }

Anotaes

33

Liguanguem de programao JAVA

Programao Orientada a ObjetosOperadoresOs operadores na linguagem Java, so muito similares ao estilo e funcionalidade de outras linguagens, como por exemplo o C e o C++.

Operadores Bsicos. , ; [] {} ( )referncia a mtodo, funo ou atributo de um objeto separador de identificadores finalizador de declaraes e comandos declarador de matrizes e delimitador de ndices separador de blocos e escopos locais listas de parmetros

Operadores Lgicos> >= < 10; x == y; Test != teste !y x || y

Anotaes

34

Liguanguem de programao JAVA

Programao Orientada a ObjetosOperadores Matemticos+ * / % ++ -+= -= *= /= %= ?: Operadores Binrios Soma Subtrao Multiplicao Diviso Mdulo (resto da diviso) Operadores Unrios Incremento Decremento Combinao de soma e atribuio Combinao de subtrao e atribuio Combinao de multiplicao e atribuio Combinao de diviso e atribuio Combinao de mdulo e atribuio Operadores Tercirios Verificao de condio (alternativa para o if...else)

Exemplos int a = 1; int b = a + 1; int c = b - 1; int d = a * b; short s1 = -1; short s2 = 10; short s1++; int c = 4 % 3;

Anotaes

35

Liguanguem de programao JAVA

Programao Orientada a ObjetosOutros OperadoresInstanceof Faz a comparao do objeto que est instanciado no objeto. new Este operador usado para criar novas instance de classes. Exemplos instanceof Objeto obj = new String(Teste); if (obj instanceof String) System.out.println(verdadeiro); new Hello hello = new Hello(); Precedncias de Operadores .[]() */% +Exemplo: Com a precedncia definida pelo Java int c = 4 / 2 + 4; Neste caso, primeiro ocorrer a diviso e aps a soma. Com a precedncia definida pelo desenvolvedor int a = 4 / (2 + 4); J neste caso, primeiro ocorrer a soma e depois a diviso.

Anotaes

36

Liguanguem de programao JAVA

Programao Orientada a ObjetosOperadores BinriosJava fornece extensa capacidade de manipulao de bits. Todos os dados so representados internamente como uma seqncia de bits. Cada bit pode assumir o valor de 0 ou 1. No geral uma seqncia de bits formam um byte, que a unidade de armazenamento padro, para uma varivel tipo byte. Os tipos de dados so armazenados em quantidade maiores que byte. Os operadores sobre os bits so utilizados para manipular os bits de operandos integrais (isto aqueles do tipo byte, char, short, int e long). Operador Nome & AND Descrio Mask Bit Input Bit Output Bit 1 1 1 1 0 0 0 1 0 0 0 0 AND=1 and 1 prouz 1. Qualquer outra combinao produz 0 Exemplo: & 00110011 11110000 00110000 Mask Bit Input Bit Output Bit 1 1 1 0 1 1 1 0 1 0 0 0 OR = 0 or 0 produz 0. Qualquer outra combinao produz 1. Exemplo: | 00110011 11110000 11110011 Mask Bit Input Bit Output Bit 1 1 0 0 1 1 1 0 1 0 0 0 XOR = 1 xor 0 ou 0 xor 1 produz 1. Qualquer outra combinao produz 0. Exemplo: ^ 00110011 11110000 ======== 11000011

|

OR

^

XOR

Anotaes

37

Liguanguem de programao JAVA

Programao Orientada a ObjetosOperadores BinriosOperador >

>>>

~

Manipulao de bits e os operadores sobre bits Exemplos de manipulao do bits: Right Shift (>>) 128 >> 1 128/21 256 >> 4 256/24 Left Shift ( < modificador > -> segmento que possui os diferentes tipos de modificaes inclundo public, protected, private e default (neste caso no precisamos declarar o modificador). < tipo de retorno > -> indica o tipo de retorno do mtodo. < nome > -> nome que identifica o mtodo. < lista de argumentos > -> todos os valores que sero passados como argumentos. Mtodo a implementao de uma operao. As mensagens identificam os mtodos a serem executados no objeto receptor. Para chamar um mtodo de um objeto necessrio enviar uma mensagem para ele. Por definio todas as mensagens tem um tipo de retorno, por este motivo em Java, mesmo que mtodo no retorne nenhum valor ser necessrio usar o tipo de retorno chamado void (retorno vazio). Exemplos public void somaDias (int dias) { } private int somaMes(int ms) { } protected String getNome() { } int getAge(double id) { } public class ContaCorrente { private int conta=0; private double saldo=0; public double getSaldo(){ return saldo; } public void setDeposito(int valordeposito){ return saldo +=valordeposito; } public void setSaque(double valorsaque){ return saldo -=valorsaque; } } Anotaes

93

Liguanguem de programao JAVA

Programao Orientada a ObjetosConstrutoresO que so construtores?Construtores so um tipo especial de mtodo usado para inicializar uma instance da classe. Toda a classe Java deve ter um Construtor. Quando no declaramos o Construtor default, que inicializado automaticamente pelo Java. Mas existem casos que se faz necessrio a declarao explcita dos construtores.

O Construtor no pode ser herdado. Para cham-lo a partir de uma subclasse usamos a referncia super.Para escrever um construtor, devemos seguir algumas regras: 1 O nome do construtor precisa ser igual ao nome da classe; 2 No deve ter tipo de retorno; 3 Podemos escrever vrios construtores para mesma classe. Sintaxe [ ] ([Lista de argumentos]){ [ ] }

public class Mamifero { private int qdepernas; private int idade; public Mamifero(int idade){ this.idade = idade; } //Mtodos }

Anotaes

94

Liguanguem de programao JAVA

Programao Orientada a ObjetosAtributos e variveisOs atributos so pertencentes a classe, eles podem ser do tipo primitivo ou referncia (objetos), os seus modificadores podem ser: public, private, protected ou default. O ciclo de vida destes atributos esto vinculados ao ciclo de vida da classe. Variveis Locais So definidas dentro dos mtodos. Elas tm o ciclo de vida vinculado ao ciclo do mtodo, tambm so chamadas de variveis temporrias. Sintaxe [] [ = ]; Exemplo public class Disciplina { private int cargaHoraria; // atributo private String nome; // atributo public Disciplina(String nome, int cargaHoraria){ this.nome = nome; this.cargaHoraria = calcCargaHoraria(cargaHoraria); } public String getNome(){ return nome; } public int getCargaHoraria(){ return cargaHoraria; } public int calcCargaHoraria(int qdeHoras) { int horasPlanejamento = (int) ( qdeHoras * 0.1); return cargaHoraria = horasPlanejamento + qdeHoras; } }

Anotaes

95

Liguanguem de programao JAVA

Programao Orientada a ObjetosA referncia superA palavra super usada para referenciar a super classe (classe pai), na verdade o construtor da classe hierarquicamente superior, podemos usa-lo tambm para fazer referncia aos membros (atributos e mtodos), da super classe. Desta forma temos uma extenso do comportamento. Exemplo

public class Empregado { private double salario; public Empregado(){ salario=0.00; } public double getSalario(){ return this.salario; } }

public class Gerente extends Empregado { private double bonus = .15; public Gerente(){ //referncia ao Construtor super(); } public double getSalario(){ //referncia ao mtodo getSalario return super.getSalario() +(super.getSalario()*this.bonus); } }

Anotaes

96

Liguanguem de programao JAVA

Programao Orientada a ObjetosClasse Abstrata e FinaisUma classe abstrata no pode ser instanciada, ou seja, no h objetos que possam ser construdos diretamente de sua definio. Por exemplo, a compilao do seguinte trecho de cdigo. abstract class AbsClass { public static void main(String[] args) { AbsClass obj = new AbsClass(); } } geraria a seguinte mensagem de erro: AbsClass.java:3: class AbsClass is an abstract class. It cant be instantiated. AbsClass obj = new AbsClass(); ^ 1 error Em geral, classes abstratas definem um conjunto de funcionalidades das quais pelo menos uma est especificada mas no est definida ou seja, contm pelo menos um mtodo abstrato, como em: abstract class AbsClass { public abstract int umMetodo(); } Um mtodo abstrato no cria uma definio, mas apenas uma declarao de um mtodo que dever ser implementado em uma classe derivada. Se esse mtodo no for implementado na classe derivada, esta permanece como uma classe abstrata mesmo que no tenha sido assim declarada explicitamente. Assim, para que uma classe derivada de uma classe abstrata possa gerar objetos, os mtodos abstratos devem ser definidos em classes derivadas: class ConcClass extends AbsClass { public int umMetodo() { return 0; } }

Anotaes

97

Liguanguem de programao JAVA

Programao Orientada a ObjetosUma classe final, por outro lado, indica uma classe que no pode ser estendida. Assim, a compilao do arquivo Reeleicao.java com o seguinte contedo: final class Mandato { } public class Reeleicao extends Mandato { } ocasionaria um erro de compilao: Exemplos[39] javac Reeleicao.java Reeleicao.java:4: Cant subclass final classes: class Mandato public class Reeleicao extends Mandato { ^ 1 error A palavra-chave final pode tambm ser aplicada a mtodos e a atributos de uma classe. Um mtodo final no pode ser redefinido em classes derivadas. Um atributo final no pode ter seu valor modificado, ou seja, define valores constantes. Apenas valores de tipos primitivos podem ser utilizados para definir constantes. O valor do atributo deve ser definido no momento da declarao, pois no permitida nenhuma atribuio em outro momento. A utilizao de final para uma referncia a objetos permitida. Como no caso de constantes, a definio do valor (ou seja, a criao do objeto) tambm deve ser especificada no momento da declarao. No entanto, preciso ressaltar que o contedo do objeto em geral pode ser modificado apenas a referncia fixa. O mesmo vlido para arranjos. A partir de Java 1.1, possvel ter atributos de uma classe que sejam final mas no recebem valor na declarao, mas sim nos construtores da classe. (A inicializao deve obrigatoriamente ocorrer em uma das duas formas.) So os chamados blank finals, que introduzem um maior grau de flexibilidade na definio de constantes para objetos de uma classe, uma vez que essas podem depender de parmetros passados para o construtor. Argumentos de um mtodo que no devem ser modificados podem ser declarados como final, tambm, na prpria lista de parmetros.

Anotaes

98

Liguanguem de programao JAVA

Programao Orientada a ObjetosInterfacesJava tambm oferece outra estrutura, denominada interface, com sintaxe similar de classes mas contendo apenas a especificao da funcionalidade que uma classe deve conter, sem determinar como essa funcionalidade deve ser implementada. Uma interface Java uma classe abstrata para a qual todos os mtodos so implicitamente abstract e public, e todos os atributos so implicitamente static e final. Em outros termos, uma interface Java implementa uma classe abstrata pura. A sintaxe para a declarao de uma interface similar quela para a definio de classes, porm seu corpo define apenas assinaturas de mtodos e constantes. Por exemplo, para definir uma interface Interface1 que declara um mtodo met1 sem argumentos e sem valor de retorno, a sintaxe : interface Interface1 { void met1(); } A diferena entre uma classe abstrata e uma interface Java que a interface obrigatoriamente no tem um corpo associado. Para que uma classe seja abstrata basta que ela seja assim declarada, mas a classe pode incluir atributos de objetos e definio de mtodos, pblicos ou no. Na interface, apenas mtodos pblicos podem ser declarados, mas no definidos. Da mesma forma, no possvel definir atributos, apenas constantes pblicas. Enquanto uma classe abstrata estendida (palavra chave extends) por classes derivadas, uma interface Java implementada (palavra chave implements) por outras classes. Uma interface estabelece uma espcie de contrato que obedecido por uma classe. Quando uma classe implementa uma interface, garante-se que todas as funcionalidades especificadas pela interface sero oferecidas pela classe. Outro uso de interfaces Java para a definio de constantes que devem ser compartilhadas por diversas classes. Neste caso, a recomendao implementar interfaces sem mtodos, pois as classes que implementarem tais interfaces no precisam tipicamente redefinir nenhum mtodo:

Anotaes

99

Liguanguem de programao JAVA

Programao Orientada a Objetosinterface Coins { int PENNY = 1, NICKEL = 5, DIME = 10, QUARTER = 25, DOLAR = 100; } class SodaMachine implements Coins { int price = 3*QUARTER; // ... }

Anotaes

100

Liguanguem de programao JAVA

Programao Orientada a ObjetosUtilitriosJavaDoc (Documentao)Javadoc uma utilitrio do JDK que gera a documentao dos programas java, geralmente em formato HTML. Localizao JDK1.X/BIN/Javadoc. Sintaxe padro: javadoc Opo Valor -d path de sada -sourcepath path -public -private Descrio Diretrio onde ser gerado os arquivos HTML Especifica o diretrio raiz dos fontes ou dos Package Documenta apenas variveis e mtodos pblicos Documenta todas as variveis e mtodos

Sintaxe: Javadoc [Opes] package/arquivo < package/arquivo> Exemplo: javadoc MinhasClasses.class Tags para Documentao: Usar: /** e */ Tag Declarao Class e Construtor Mtodo Interface @see Cria um link com outra X X Xpgina HTML @deprecated Informa quais mtodos esto ultrapassados @author Nome do Autor @param Documenta o parametro @throws Documenta Excees @Exception @return Documenta o returno (valor e tipo)

Atributo X X

X X X

X X X

X X X X

Anotaes

101

Liguanguem de programao JAVA

Programao Orientada a ObjetosJavaDoc (Documentao)usage: javadoc [options] [packagenames] [sourcefiles] [classnames] [@files] -overview Read overview documentation from HTML file -public Show only public classes and members -protected Show protected/public classes and members (default) -package Show package/protected/public classes and members -private Show all classes and members -help Display command line options -doclet Generate output via alternate doclet -docletpath Specify where to find doclet class files -1.1 Generate output using JDK 1.1 emulating doclet -sourcepath Specify where to find source files -classpath Specify where to find user class files -bootclasspath Override location of class files loaded by the bootstrap class loader -extdirs Override location of installed extensions -verbose Output messages about what Javadoc is doing -locale Locale to be used, e.g. en_US or en_US_WIN -encoding Source file encoding name -J Pass directly to the runtime system Provided by Standard doclet: -d Destination directory for output files -use Create class and package usage pages -version Include @version paragraphs -author Include @author paragraphs -splitindex Split index into one file per letter -windowtitle Browser window title for the documenation -doctitle Include title for the package index(first) page -header Include header text for each page -footer Include footer text for each page -bottom Include bottom text for each page -link Create links to javadoc output at -linkoffline Link to docs at using package list at -group :.. Group specified packages together in overview page -nodeprecated Do not include @deprecated information -nosince Do not include @since information -nodeprecatedlist Do not generate deprecated list -notree Do not generate class hierarchy -noindex Do not generate index -nohelp Do not generate help link -nonavbar Do not generate navigation bar -serialwarn Generate warning about @serial tag -charset Charset for cross-platform viewing of generated documentation. -helpfile Include file that help link links to -stylesheetfile File to change style of the generated documentation -docencoding Output encoding name

Anotaes

102

Liguanguem de programao JAVA

Programao Orientada a ObjetosJavadocEste exemplo exibe como implementar as tags de documentao que sero usados pelo utilitrio Javadoc. import java.util.List; /** * @author YourName * @version 2.0 */ public class DocExemplo { /** Declarao e atribuio de x. */ private int x; /** * This variable a list of stuff. * @see #getStuff() */ private List stuff; /** * O construtor inicia a variavel x. * @param int x */ public DocExemplo(int x) { this.x = x; } /** * Este mtodo retorna algum valor. * @throws IllegalStateException se nenhum retorno for encontrado * @return A lista de valores */ public List getStuff() throws IllegalStateException { If ( stuff == null ) { throw new java.lang.IllegalStateException("Erro, sem valor"); } return stuff; } }

Anotaes

103

Liguanguem de programao JAVA

Programao Orientada a ObjetosJar (Compactao, Agrupamento e Distribuio) um utilitrio do JDK que faz agrupamento de arquivos em nico, um arquivo .jar, geralmente com compresso. Localizao JDK1.X/BIN/Jar. usado tambm para fazer a distribuio de aplicao. Sintaxe: jar opes [meta-arq] nome-arquivo-destino [nome-arquivo-entrada]Argumento meta-arquivo arquivo-destino arquivo-entrada Opes c t x x f v m o Descrio Arquivo que contm as informaes sobre o arquivo destino gerado. Este argumento opcional, entretanto um arquivo meta-arquivo gerado, default, META-INF/MANIFEST.INF Nome do arquivo jar. A extenso .jar no automatica, deve ser Especificada. Nome dos arquivos a serem agrupados e/ou compactados Descrio Cria um novo arquivo Nome do arquivo jar. A extenso .jar no automatica, deve ser Especificada. Extrai todos os arquivos Extrai o arquivo especificado Mostra o contedo de um arquivo existente Mostra o status da operao (verbose) Suprime a gerao do meta-arquivo Faz apenas o agrupamento, sem compactao. Deve ser utilizado para arquivos jar na varivel de ambiente Classpath

Exemplos jar cvf Classes.jar ClassA.class ClassB.class ClassC.class Para ver o contedo do arquivo jar, gerado: jar tvf Classes.jar Para extrair arquivo: Jar xvf Classes.jar

Obs: a opo f sempre utilizada em operaes com arquivos. Os arquivos Jar podem conter um aplicao inteira, por isso, ele usado para fazer distribuio de aplicaes. Tambm bastante usado com componente Javabeans e Applet.

Anotaes

104

Liguanguem de programao JAVA

Programao Orientada a ObjetosCertificao JAVA Captulo I - Fundamentos da LinguagemEsse captulo bastante significativo para a assimilao dos demais contedos, pois ataca todos os conceitos iniciais da linguagem Java, portanto estude-o com bastante cuidado e ateno !

Palavras-ChaveNa linguagem Java, 49 so as palavras chaves e voc dever memoriz-las. No tente fazer como fazamos no ensino fundamental para decorar a tabuada (como era difcio a do 9, lembra?), essa assimilao ser com o tempo, mesmo assim, d uma olha na lista a seguir, e observe que TODAS as palavras chaves so definidas em letras minsculas: byte double abstract void else continue new package super short float final class do assert catch import int public strictfp interface default const try instaceof long private transient implements switch goto finally while char protected native extends case throws return for boolean static synchronized if break throw this volatile

LEMBRE-SE: null, false, true (No so palavras chaves, so valores literais!) Lembrar de todas essas palavras pode ser um pouco complicado, por isso tente entender sua utilizao !

Tipos primitivosbyte - Inteiro de 8 bits com sinal int - Inteiro de 16 bits com sinal short - Inteiro de 32 bits com sinal long - Inteiro de 64 bits com sinal char - Caracter Unicode (16 bits sem sinal) float - Ponto flutuante de 32 bits com sinal double - Ponto flutuante de 64 bits com sinal boolean - Valor indicando true ou false

Anotaes

105

Liguanguem de programao JAVA

Programao Orientada a ObjetosModificadores de acessoprivate - Define que um mtodo ou variavel seja acessada somente pela prpria classe. protected - Faz com que uma subclasse acesse um membro da superclasse, mesmo estando em pacotes diferentes. public - Faz com que um identificador possa ser acessado de qualquer outra classe.

Modificadores de classe, mtodos e varivelabstract - Define uma classe abstrata. class - Define a implementao de uma classe. extends - Define qual a hierarquia de classes, quem a superclasse. final - Faz com que um identificador no possa ser alterado. implements - Faz com que uma classe implemente todos os mtodos de uma interface. interface - Define uma interface. native - Define que o mtodo ser escrito em linguagem nativa como C, C++. new - Instancia um novo objeto na pilha. static - Defina um identificado de classe e no de instncia. strictfp - Define que o mtodo esta segundo o padrao IEE754. synchronized - Define que um mtodo s poder ser acessado por uma nica thread por vez. transient - Faz com que uma varivel no seja serializada. volatile - Indica que uma varivel pode no ficar sincronizada ao ser usada por threads.

Controle de Fluxobreak - Faz com que o fluxo seja desviado para o fim do bloco continue - Muda o curso do fluxo para a proxima iteracao do loop if - Testa o valor lgico de uma condio else - Indica qual o bloco que dever ser executado caso o teste feito pelo if seja falso. default - Bloco que ser executado caso nenhuma condio case satisfaa o swicth. switch - Iniciar uma sequencia de testes para uma variavel a ser testada pelo case. 106 Anotaes

Liguanguem de programao JAVA

Programao Orientada a Objetoscase - Testa o valor de uma variavel indicada pelo switch for - Usado para executar um bloco quantas vezes forem necessrias para satisfazer sua condio. do - Executa um bloco quantas vezes a condio se fizer verdadeira. A condio testada depois do bloco while - Executa um bloco quantas vezes a condio se fizer verdadeira. A condio testada antes do bloco return - Finaliza a execuo de um mtodo, podendo opcionalmente retornar um valor. instanceof - Testa se um objeto instancia de uma classe qualquer.

Tratamento de erroscatch - Define o bloco de deciso que executar se por acaso ocorrer no bloco try uma exceo pr-definida. finally - Bloco que sempre ser executado, mesmo que uma exceo seja lanada. throw - Lana uma exceo. throws - Indica que um mtodo pode lanar algum tipo de exceo try - Iniciar um bloco com auditoria assert - Usado no projeto, testa uma expresso para verificar alternativas para o programador.

Controle de pacotesimport - Importa uma ou todas as classes de um pacote. package - Define que a(s) classes faro parte de um pacote.

Variveis/Heranasuper - Refere-se a superclasse imediata this - Refere-se a instncia do objeto

Retornovoid - Define que um mtodo no retorna nada

Anotaes

107

Liguanguem de programao JAVA

Programao Orientada a ObjetosReservadas mas no utilizadasconst - No use para definir uma varivel, use final goto - No serve para nada

Tipo primitivosVoc precisar saber "tudo" sobre os tipos primitivos, suas faixas de valores, valores padres, converses implicitas e explcitas, e muito mais. Por isso, prepare-se o seu pesadelo comeou! Mas no se preocupe, com um pouco de f e perseverana, tudo se resolve! A Java composta por 8 (oito) tipos primitivos, e como voc j deve ter percebido, todos comeam com letras minsculas (pois tambm so palavras chaves), portanto se voc for tiver que responder uma pergunta onde aparece perguntando por exemplo se String um tipo primitivo, no hesite em responder que NO! Outro conceito importante sobres os tipos primitivos em Java que todos os tipos numricos tem sinal. Mas o que isso significa? - deve ter vindo sua mente! Significa que podem ser negativos ( - ) ou positivos ( + ), ou seja, o tipo int pode ter o numero -1 como tambem o numero +1. Observe a tabela de valores abaixo: tipobyte short int long

bits8 16 32 64

frmula-(2)^7 2^7 -1 -(2)^15 2^15 - 1 -(2)^31 2^31- 1 -(2)^63 2^63- 1

faixa-128 ~ +127 -32768 a +32767 -2147483648 a +2147483647 -9223372036854775808 a + 9223372036854775807

Entendendo essa frmula maluca... Voc deve estar se perguntando, porque deve elevar a 7 (sete) no caso do byte e no a 8 (oito), certo ? 1 Bit usado para guardar o sinal. E porque s subtrai -1 da faixa positiva ? Porque o zero includo no intervalo tambm. Se ainda ficou confuso, vamos fazer um teste. Um regra ns sabemos: o tipo byte em Java representado por oito bits. Se 1 bit usado para guardar o sinal (+) ou (-), ento sobrou 7 bits para representar um nmero. Se convertermos o nmero +125 em bits teremos 1111101 e ficaria representado da seguinte forma: 01111101 (observe que o zero inicial indica que um numero positivo, estranho mas se o primeiro digito fosse um 1, seria um numero negativo). Agora se 108 Anotaes

Liguanguem de programao JAVA

Programao Orientada a Objetosconvertermos o numero +128 em bits, teremos 10000000, como esse numero composto por oito bits no possvel adicionar o bit do sinal portanto o numero 128 positivo no est no intervalo do tipo byte, e est na faixa negativa pois o bit mais significativo a esquerda 1 que indica sinal negativo. Quais os bits representam o numero 127 ? Tipos primitivos (no acabou): Os demais tipos primitivos so: char, float, double, boolean ! char - representado por caracter Unicode de 16 bits (sem sinal). Tambem pode ser representado por um numero inteiro de 16 bits sem sinal, ou seja, pode-se atribuir uma variavel char o valor 100 ou 14555 ou 65535, mas no 65536 ! Pois essa a faixa de valores da tabela Unicode para representao de caracteres de qualquer idioma. Mas a unica coisa que voc precisa saber a faixa de valores do tipo char. 2 ^ 16 - 1 = 65535 (valores possveis). float - um tipo numrico ponto flutuante de 32 bits (COM SINAL) !! Apesar de ter um tamanho definido por 32 bits, no necessrio saber a faixa de valores. double - um tipo numrico ponto flutuante de 64 bits (COM SINAL) ! Apesar de ter um tamanho definido por 64 bits, no necessrio saber a faixa de valores. boolean - Um valor que indicado pelos valores literais: true ou false

Converses implicitas/explcitasVoc pode sempre que precisar, fazer converses entre os tipos numricos, mas uma regra no pode ser quebrada: nunca voc poder convertar um tipo de maior valor (bits) em um nmero de menos valor.

Anotaes

109

Liguanguem de programao JAVA

Programao Orientada a ObjetosExemplo 1. public class Conversao { 2. public static void main(String[] args) { 3. int x = 10; 4. long y = 20; 5. y = x; // perfeitamente possvel 6. x = y; // no possvel 7. x = (int)y; // quero correr o risco e deixa eu queto ! 8. } 9. } Na linha 5 houve um converso implicita perfeitamente possvel pois o tipo da variavel y long, ou seja, maior que o tipo da variavel x. Na linha 6 houve um tentativa de converso, mas o compilador no permitira essa operao, pois o tipo long maior que int. Na linha 7,uma converso explcita foi realizada e o compilador gentilmente atendeu a solicitao do programador.

Literais InteirosUm valor literal em Java um valor escrito no cdigo fonte e identificado como um tipo primitivo como por exemplo: int x = 10; char u = 'k'; boolean b = false; double d = 9832.11; // literal inteiro // literal char // literal boolean // literal double

H trs maneiras de representar valores inteiros em Java: octal (base 8), decimal (base 10) e hexadecimal (base 16) ! Ser bom voc estudar um pouco sobre esses sistemas de numerao, pode-se que os sacanas dos caras que fazem a prova, possa testar voc em alguma questo! Mas observe o cdigo abaixo e veja como se representam valores literais em octal e hexadecimal (pois decimal voc viu acima):

Anotaes

110

Liguanguem de programao JAVA

Programao Orientada a Objetospublic class Octal { public static void main(String[] args) { int seis = 06; // idem ao decimal 6 int sete = 07; // idem ao decimal 7 int oito = 010; // idem ao decimal 8 int nove = 011; // idem ao decimal 9 } } Ou seja, se voc ver o numero 0 antes de um nmero, saiba que est representando um nmero octal. public class Hexadecimal { public static void main(String[] args) { int quinze = 0xF; int vinte_e_nove = 0x1D; int vinte_e_nove = 0x1D; int valor = 0xBAFAFA; // tambm pode ser int valor = 0XBaFaFa; } }

// 15 (decimal) // 29 (decimal) // 29 (decimal) // 12253946 (decimal) // 12253946 (decimal)

Deve vir precedido do sufixo (0x) ! um dos poucos casos na linguagem em que no importa se as letras forem maisculas ou minsculas. Todos os tipos inteiros literais (tanto octal quanto hexa) so por padro definidos como int, portanto se ver no exame um questo que atribui a uma variavel menor que int (em bits) isso dar erro de compilao. Veja o cdigo a seguir: 1. public class ConversaoHexa { 2. public static void main(String[] args) { 3. int a = 0xbafa; // ok, sem converso 4. long b = 0xfff; // ok, converso implicita 5. long c = 0xfffL; // ok, converso explcita 6. byte d = 0xf; // ok, converso implcita 7. byte e = 0xff; // erro! - 255 no comportado 8. byte f = (int)0xff; // erro! - 255 no comportado 9. } 10. }

Anotaes

111

Liguanguem de programao JAVA

Programao Orientada a ObjetosNa linha 6 o compilador sabe que F em hexa equivale a 15, o que pode ser perfeitamente suportado no tipo byte, ento ele realiza a converso. Na linha 7 o compilador sabe que FF em hexa equivale a +255 o que no pode ser suportado, por isso, erro! Na linha 8 o compilador s no chinga o programador por conflito de drivers entre seu sistema operacional com sua placa de som, ou seja, mas intimamente ele fala: CARA OLHA O QUE VOC EST QUERENDO ME FORAR A FAZER !!! (%#%$!#%)

Literais de ponto flutuanteUm valor literal de ponto flutuante por padro em Java definido com double de 64 bits, portanto de voc quiser atribuir um valor literal float voc dever adicionar o sufixo f no final do valor como o exemplo: 1.public class Teste { 2. public static void main(String[] args) { 3. double a = 9223372036854775807.0; // ok tipo double 4. float b = 2147483647; // ok tipo int para float conversao implicita 5. float c = 2147483647.0; // erro! double -> float 6. float d = (float)2147483647.0; // ok - converso 7. float e = 2147483647.0f; // ok 8. } 9.} Na linha 4, funciona pois 2147483647 um literal int e no double! No tem decimal ! Na linha 5, o compilador reclamar pois 2147483647.0 um tipo double (o padro dos literais de ponto flutuante) no pode ser atribudo a uma varivel float. Na linha 6 feito uma converso explcita. Na linha 7 atribudo um valor float por causa do sufixo f.

Anotaes

112

Liguanguem de programao JAVA

Programao Orientada a ObjetosLiterais booleanosOs valores literais booleanos so compreendidos entre true ou false e s ! public class LitBoo { public static void main(String[] args) { boolean a = true; // ok boolean b = false; // ok boolean c = 1; // erro de compilacao } } Cuidado que em Java diferentemente de C e outras linguagens no se pode atribuir o valor 0 ou 1 para literais booleanos.

Literais CaracteresOs valores literais caracteres so compreendidos com um nico caracter entre apstrofo - se voc no sabe o que apstrofo, o mesmo que aspas simples ' public class Carac { public static void main(String[] args) { char a = 'a'; // ok char b = '@'; // ok char c = '\u004E'; // refere-se a letra N } } Como foi falado, o tipo char nada mais do que um tipo inteiro sem sinal de 16 bits, portanto voc poder atribuir 2 ^ 16 - 1 = 65535. Veja no cdigo abaixo: public class A { public static void main(String[] args) { char a = 65; char b = (char)-65; // fora do intervalo, precisa de converso char c = (char)70000; // fora do intervalo, precisa de converso } } O tipo char pode aceitar valores fora de sua faixa, desde haja uma converso explcita.

Anotaes

113

Liguanguem de programao JAVA

Programao Orientada a ObjetosARRAYUm array em Java um objeto criado na pilha (mmoria), usado para armazenar e trabalhar com elementos semelhantes por seu tipo. Para que se possa utilizar um array voc dever: Declarar - Especificar um nome e o tipo do array. Construir - Informar o tamanho do array, ou seja, numero de elementos. Inicializar - Atribuir valores aos elementos do array. Declarando um array int[] a; Thread b[]; String []c; // Recomendado

Observe que ainda no se sabe quantos elementos esses array armazenar, ou seja, no sabe qual ser o custo para a memria desse array. Nunca coloque a quantidade de elementos do array no passo de declarao, a no ser que voc faa tudo em uma nica linha (isso ser mostrado posteriormente). Se voc ver uma questo onde aparece algo como no trecho a seguir, marque sempre erro de compilao. int[3] a; // s pode mencionar a quantidade de elementos, na construo

Construindo um array int[] a = new int[3]; // Recomendado Thread b[] = new Thread[1]; String []c = new String[19]; Usa-se a palavra new conjugada com o tipo do array. Nunca se esquea, em Java a contagem dos elementos SEMPRE COMEAR EM 0 (ZERO), portando uma referncia ao elemento a[3] (no array a acima) causar um erro, pois s existem os elementos 0, 1, 2 -> com um total de 3 elementos. Esse passo reserva espao na memria para os elementos do objeto array, pois somente na construo que a JVM saber quantos elementos sero composto o array, com isso cria-se um objeto na pilha com espao necessrio para armazenar os elementos do objeto. No passo de construo, todos os elementos so inicializados com seus valores padro.

Anotaes

114

Liguanguem de programao JAVA

Programao Orientada a ObjetosVeja a tabela a seguir: TIPO byte short int long float double boolean char Object VALOR PADRAO 0 0 0 0 0.0 0.0 false '\u0000' null

Inicializando um array Atribuir valores aos elementos de um objeto array. Quando um array contrudo, seus elementos so automaticamente inicializados com seus valores padro. int[] x; // declarado x = new int[2]; // construindo x[0] = 10; // inicializando x[1] = 20; // inicializando Observe o seguinte cdigo: 1. 2. 3. 4. 5. 6. 7. 8. 9. public class ArrayInicia { public static void main(String[] args) { float[] f; f = new float[1]; System.out.println("valor antes "+f[0]); f[0] = 9.0; System.out.println("valor depois "+f[0]); } }

Anotaes

115

Liguanguem de programao JAVA

Programao Orientada a ObjetosO que ser impresso na linha 5 e 7 ??? ( Feche os olhos e responda !!, No vale olhar...) Se voc respondeu 0.0 e 9.0, parabns por voc ser uma pessoa de opnio! Mas infelizmente voc errou !!! Lembra-se que todo valor literal ponto flutuante em Java por padro double, portanto esse cdigo no compila. Se alterarmos esse cdigo e adicionar o sufixo f na linha 6 => f[0] = 9.0f;, o resultado seria 0.0 e 9.0, por isso: PRESTE MAIS ATENO !!! Os trs passos para a utilizao de um array: declarao, construo e inicializao podem ser realizados em uma nica linha de cdigo. EUREKA !!! boolean[] c = { false, true, false }; int[] a = {0,1,1,1}; char[] b = {'a','b','c'}; Observe que a palavra chave new no foi utilizada, visto que est implcito o tipo no incio, o nmero de elementos entre as chaves { }. Caso voc se depare com uma questo (como o cdigo abaixo) que especifica o nmero de elementos juntamente com a inicializao na mesma linha, no hesite em marcar a resposta: Erro de compilao !!! int[3] a = {1, 2, 1}; // erro de compilao Array Multidimensional Um array multidimensional um array com mais de uma dimenso (isso ridculo de dizer!), ou seja, uma coleo de objetos array dentro de um objeto array. Portanto um array definido como: int[][] i = new int[3][]; nada mais do que um objeto array i que contm trs objeto array (ainda no construdo) dentro. (Complicado?) int[][] i = new int[2][]; O que isso significa ? O que so os elementos de i ?? Significa que foi criado um objeto na pilha chamado a, e seus elementos ainda no foram contrudos. Para utilizar seus elementos, voc dever constru-los como mostra o cdigo a seguir: i[0] = new int[2]; // construdo o elemento 0 do array i i[1] = new int[3]; // construdo o elemento 1 do array i

Anotaes

116

Liguanguem de programao JAVA

Programao Orientada a ObjetosQuantos objetos foram criados na pilha ? 1 referenciado por a 2 referenciados por a[0] e a[1] Total de objetos criados: 3 (trs) Agora observe o seguinte cdigo: public class TestArray { public static void main(String[] args) { String s = new String("Kuesley"); String[] nomes = { s, null, new String("Kuesley") }; } } Quantos objetos foram criados na pilha ?? 1 obj String referencido por s 1 obj array de String referenciado por nomes 1 obj String referenciado por nomes[2] Observe que o elemento 0 apenas uma referncia para s portanto no criado um novo objeto. O elemento 1 no tem um objeto referenciado, j o elemento 2 um objeto String. Array Annimo Como o prprio nome j diz, um objeto array criado sem a definio de um nome. Imagine que voc precise passar um objeto array como parmetro para um mtodo, e voc no queira criar um array, basta passar anonimamente. Veja como no cdigo abaixo:

Anotaes

117

Liguanguem de programao JAVA

Programao Orientada a Objetospublic class A { public static void main(String[] args) { A obj_a = new A(); int soma = obj_a.somarArray( new int[] { 0,1,2,3 } ); System.out.println("Soma do array : "+soma); } public int somarArray( int[] a ) { int rc = 0; for ( int i=0; i < a.length; i++) { rc += a[i]; } return rc; } } Observe que no foi criado um objeto array com um identificador especfico e passado como parmetro, foi criado no momento em que se passar o argumento. Outro exemplo: int[][] numeros = new int[3][]; numeros[0] = new int[10]; numeros[1] = numeros[0]; numeros[2] = new int[] { 0,1,2,3 }; LEMBRE-SE: NUNCA ESPECIFIQUE O TAMANHO ENTRE OS COLCHETES, ISSO SER DEDUZIDO DOS ELEMENTOS ENTRE O PAR DE CHAVES !!! Array - Observaes Algumas regras devem ser consideradas no uso de array que referenciam objetos! Dado as classes: class Car implements CarMove { } class Mazda extends Car { } class Fusca extends Car { } class VMax { } interface CarMove { }

Anotaes

118

Liguanguem de programao JAVA

Programao Orientada a Objetos1. public class Test { 2. public static void main(String[] args) { 3. Car[] cars = new Car[3]; 4. Fusca f = new Fusca(); // instanciando um obj do tipo Fusca 5. cars[0] = f; 6. } 7. } Observe que na linha 5, um objeto Fusca foi armazenado em um array do tipo Car. Por que isto possivel ? Existe um pergunta que voc sempre dever fazer, para saber se uma classe X pode ser armazenada em um array do tipo Y. X membro de Y Em nosso contexto: Fusca membro de Car ? Em outras palavras, Fusca uma subclasse de Car ? Se a resposta for positiva, essa atribuio perfeitamente possvel ! Agora observe o seguinte cdigo (baseando-se nas mesmas classes Car, Fusca ) 1. public class Test { 2. public static void main(String[] args) { 3. Fusca[] fuscas = new Fusca[3]; 4. Car c = new Car(); 5. fuscas[0] = c; 6. } 7. } Isso possvel ?? Se tem dvida, faa voc mesmo e faa o teste e sem preguia !!! Aproveite e teste o seguinte: 1. public class Test { 2. public static void main(String[] args) { 3. Car[] c = new Fusca[1]; 4. Fusca[] f = new Car[1]; 5. } 6. }

Anotaes

119

Liguanguem de programao JAVA

Programao Orientada a ObjetosO que acontecer com o cdigo acima ? Mudando um pouco de assunto! Um objeto array de uma interface, pode receber referencias de instncias de classes que implementem essa interface. public class Test { public static void main(String[] args) { CarMove[] cm = new CarMove[4]; cm[0] = new Car(); // ok! Car implementa CarMov cm[1] = new Fusca(); // ok! Fusca implementa CarMov cm[2] = new Mazda(); // ok! Mazda implementa CarMov cm[3] = new VMax(); // erro de compilao } } LEMBRE-SE: Vmax membro de CarMove ??? Cuidado com detalhes de atribuies tais como: int[] n = new int[10]; int[] m = new int[] {8,2,1,2,0}; n = m; int[][] n = new int[3][]; int[] m = new int[] {1,2,3}; n = m;

// ok! mesmo tipo // erro! objetos diferentes

A JVM no elimina o objeto n da pilha e subtitui pelo valor de m! Observe tambm que o array n tem 2 dimenses, enquanto que m tem apenas uma! Mas o seguinte cdigo seria perfeitamente possvel: n[0] = m; // ok! As questes relacionadas com array multidimensionais so esdrxulas, portanto ESTUDE! Se achas que estou brincando imagine a seguinte questo ?

Anotaes

120

Liguanguem de programao JAVA

Programao Orientada a Objetos1. public class Test { 2. public static void main(String[] args) { 3. int[][][] nums = new int[2][][]; 4. int[] simple = new int[] {1,2,3,4,5}; 5. nums[0] = new int[1][]; 6. nums[0][0] = new int[10]; 7. nums[1] = new int[3][]; 8. nums[1][0] = simple; 9. nums[1][1] = new int[] { 3,3,3 }; 10. nums[1][2] = new int[] { 1,2,3 }; 11. ???? 12. } 13. } Qual das linhas abaixo podero ser colocadas na linha 11 do cdigo acima sem que d erro de compilao ?? (marque mais de uma) a) nums[1][0] = nums[0][0] b) nums[1][0] = 10; c) nums[1][0][3] = 9; d) nums[1][0][2] = 9; e) nums[0][0][3] = 9; f) nums[0][0] = nums[2][1] No sacanagem, os caras do questes da pra pior !!!

Variveis de InstnciaDeclarada no escopo da classe, e tem um valor padro conforme o seu tipo. (Mesmos valores atribudos na inicializao de um array estudado anteriormente) public class Book { String title; public static void main(String[] args) { Book b = new Book(); // instanciando a classe System.out.println("O titulo "+b.title); } }

Anotaes

121

Liguanguem de programao JAVA

Programao Orientada a ObjetosResultado: O titulo null ! String um objeto e no um tipo primitivo! Para utilizar um varivel primitiva, voc SEMPRE ter que inicializ-la, caso contrrio o compilador lhe tratar de forma inescrupulosa ! public class TheBookonTheTable { public static void main(String[] args) { int i; System.out.println("o valor de i "+i); } } O cdigo acima gerar um conflito entre o programador e o compilador! No tente! irreparvel!!!

Objeto LocalUm Objeto locai (varivel declarada dentro de um mtodo) tem comportamento distinto de uma varivel de instncia. Quando um objeto declarado como membro de uma classe, e uma instncia dessa classe criada, esse membro inicializado com null (pois em Java null um valor) e quando declarado no escopo de um mtodo, o objeto no inicializado, portanto qualquer ousadia de uso, relaes cortadas com o compilador! 1. import java.util.*; 2. public class Test { 3. public static void main(String[] args) { 4. Date data; 5. Periodo p = new Periodo(); 6. if (data == null) System.out.print("inicio nulo"); // erro de compilao 7. if (p.inicio == null) System.out.print("inicio nulo"); // ok - membro nulo 8. if (p.fim == null) System.out.print("fim nulo"); // ok - membro nulo 9. } 10. } 11. class Periodo { 12. Date inicio; 13. Date fim; 14. }

Anotaes

122

Liguanguem de programao JAVA

Programao Orientada a ObjetosO compilador mostrar um erro na linha 6, pois o objeto local data no foi inicializado !

Mtodo mainVoc j deve estar cansado de ver as declaraes public static void main(String[] args), porm saiba que essa a chave para a JVM executar uma aplicao em Java. Maiores detalhes sobre modificadores sero vistos no captulo 2, mas algumas observaes devem ser ressaltadas nesse captulo. Observe: public static void main(String[] args) { ... } // vlido - recomendado static public void main(String[] args) { ... } // vlido public static void main(String[] a) { ... } // vlido public static void main(String [] a) { ... } // vlido public static void main(String a[]) { ... } // vlido public static void main(String a []) { ... } // vlido public static void main([]String args) { ... } // no vlido Mas o que esse array de String que o mtodo main recebe ? Esse array usado para receber parmetros da linha de comando, quando um programa Java est sendo executado. c:\>java Test Kuesley Fernandes Nesse caso, dois parmetros esto sendo passados: Kuesley Fernandes Portanto com o seguinte cdigo: public class Test { public static void main(String[] args) { System.out.println("Meu nome : "+args[0]+args[1]); } } O Resultado seria: Meu nome Kuesley Fernandes E se fosse executado: c:\>java Test Kuesley Qual seria o resultado ?? TESTE !!!

Anotaes

123

Liguanguem de programao JAVA

Programao Orientada a ObjetosQUESTO O que far o seguinte cdigo ? public class Array { int[] a; public static void main(String[] args) { Array obj = new Array(); if (obj == null) { System.out.println("ERRO"); } else { System.out.println("OK"); } } } a) Mostrar ERRO na tela b) Mostrar OK na tela c) Programa no ir compilar d) Uma exceo ser lanada e) Mostrar null na tela

Anotaes

124

Liguanguem de programao JAVA

Programao Orientada a ObjetosResumos para certificao - Fundamentos da LinguagemPalavras Chave da Linguagem JavaAs palavras chave no podem ser usadas como identificadores (nomes) de classes, mtodos, variveis ou qualquer outro item de seu cdigo; Todas as palavras chave comeam com letra minsculas.

Valores literais e intervalos de todos os tipos primitivosTodos os seis tipos de nmeros em Java apresentam sinal, portanto, podem ser positivos e negativos; A frmula 2(bits-1) ou 2(bits-1) 1 usada para determinar o intervalo de um tipo inteiro; Os valores literais so uma apresentao do cdigo fonte para tipos de dados primitivos ou Strings; Um tipo char, na verdade, um inteiro de 16 bits sem sinal; Os inteiros podem ser representados como octais(0127), decimais(1254) e hexadecimais(0XCAFE); Os literais no podem ter virgulas; Um literal char pode ser representado como um nico caracter em aspas simples A; Um literal char tambm pode ser representado como um valor Unicode \u0041; Um literal char pode ser representado como um valor inteiro, contato que o inteiro seja menor do 65536; Um literal boolean pode ter o valor true e false; Os literais de ponto flutuante so sempre double por padro; se quiser um float acrescentar F ou f ao literal.

Declarao, construo e inicializao de arraysOs arrays podem conter tipos primitivos ou objetos, mas o array propriamente dito sempre ser um objeto; Quando declarar um array, os colchetes podero ficar esquerda ou direita do nome da varivel; No considerado vlido incluir o tamanho de um array na declarao; preciso incluir o tamanho de um array quando o construir usando new a menos que esteja criando uma array annimo; Os elementos de um array de objetos no so criados automaticamente,

Anotaes

125

Liguanguem de programao JAVA

Programao Orientada a Objetosembora elementos de arrays primitivos recebam valores padro; V0c receber um NullPointException se tentar usar elemento de um array de objetos e esse elemento no referenciar a um objeto real; Os arrays so indexados comeando pelo zero.; Receber um ArrayIndexOutOfBoundsException se tentar acessar algo fora do intervalo de um array; Os arrays possuem uma varivel length, que contm a quantidade de elementos do array; O ltimo ndice que ser acessado sempre uma unidade menor do que o tamanho do array; Os arrays multidimensionais so apenas arrays compostos por arrays; As dimenses de um array multidimensional podem ter tamanhos diferentes; Um array de tipos primitivos aceitar qualquer valor que possa ser promovido implicitamente ao tipo declarado para o array. Por exemplo uma varivel byte pode ser inserida em um array int; Um array de objetos pode conter qualquer objeto que passe no teste MEMBRO (ou instanceof) aplicado ao tipo declarado para o array; Se atribuir um array a uma referncia de array j declarada, o array ter que estar na mesma dimenso da referncia ao qual for atribudo;

Usando uma varivel ou elemento de array que no tenha sido inicializado ou atribudoQuando um array de objetos for instanciado, os objetos do array no sero instanciados automaticamente, mas todas referncias recebero valor padro null; Quando um array de tipos primitivos for instanciado. Todos os elementos recebero seus valores padres; Exatamente como os elementos de array, as variveis de instncia sero sempre sero inicializadas com um valor padro; As variveis locais \ automticas \ de mtodo nunca recebem um valor padro. Se tentar usar sem inicializ-la, receber um erro do compilador; Variveis locais e a mesma coisa que automticas.

Anotaes

126

Liguanguem de programao JAVA

Programao Orientada a ObjetosArgumentos de linha de comando para o mtodo mainOs argumentos de linha de comando so passados para o parmetros de array de String no mtodo principal; O primeiro argumento da linha de comando ser o primeiro elemento do parmetro de array de string do mtodo principal; Se nenhum argumento for passado para o mtodo principal, o tamanho do parmetro de array de String desse mtodo ser igual a zero.

Anotaes

127

Liguanguem de programao JAVA

Programao Orientada a ObjetosCaptulo II - Modificadores e Controle de AcessoComo em todas as linguagens de programao, a acessibilidade a uma classe/mtodo deve seguir algumas regras, e de extrema necessidade que voc as saiba para no vacilar na hora do exame!

Lista dos modificadorespublic static volative private final native protected transient padro abstract strictfp synchronized

LEMBRE-SE: com exceo ao modificador PADRO, todas as demais so palavras chaves em Java.

Modificadores para as ClassespadroUm modificador de acesso determina como ser a visibilidade de uma classe/mtodo a partir de outras classes ou mtodos. Dado o arquivo Car.java: class Car { // cdigo da classe } Observe que no foi definido nenhum modificador para a classe, portanto o modificador de acesso nesse caso padro (default ou como j vi em algum lugar na terra - friendy)! O modificador padro define que a classe s poder ser acessada por outra classes dentro do mesmo pacote. Uma tentativa de acesso a classe Car a partir de uma classe de outro pacote resultar em uma ofensa ao compilador.

Anotaes

128

Liguanguem de programao JAVA

Programao Orientada a ObjetosDada as classes: Car.java package carros; class Car { ... } Oficina.java package oficina; import carros.*; class Oficina extends Car { ... } // Erro de compilao Conserto.java package conserto; import carros.*; class Conserto { public static void main(String[] args) { Car c = new Car(); // Erro de compilacao } } Observe que na classe Oficina houve uma tentativa de acesso por herana, mas como a classe Car tem acesso padro e a classe Oficina est em um pacote diferente do pacote da classe Car, causou erro de compilao. Semelhantemente o erro ocorreu na classe Conserto, apesar de que a forma de tentativa de acesso classe Car foi atravs de referencia. Agora observe: Car.java package carros; class Car { ... } Oficina.java package carros; class Oficina extends Car { ... } // ok Conserto.java package carros; class Conserto { public static void main(String[] args) { Car c = new Car(); // ok } }

Anotaes

129

Liguanguem de programao JAVA

Programao Orientada a ObjetosObserve que uma classe com modificar padro pode ser acessada somente por classes/mtodos do mesmo pacote.

publicO modificador public o mais liberal, ou seja, faz com que a classe possa ser acessada por qualquer classe independente de estarem ou no no mesmo pacote. Car.java package carros; public class Car { String getColor() { return "yellow"; } } Oficina.java package oficina; import carros.*; public class Oficina { public static void main(String[] args) { Car c = new Car(); // ok } } Observe que a classe Car publica e visvel por qualquer classe, portanto muito cuidado ao definir uma classe como pblica, pode cair na vista do inimigo. O que acontecer com o seguinte cdigo: Car.java package carros; public class Car { String getColor() { return "yellow"; } }

Anotaes

130

Liguanguem de programao JAVA

Programao Orientada a ObjetosOficina.java package oficina; import carros.*; public class Oficina { public static void main(String[] args) { Car c = new Car(); System.out.println("A cor e "+c.getColor()); } } a) Mostrar: A cor e yellow b) Erro de compilao c) Exceo na hora da execuo d) Mostrar: A cor e null e) Mostrar: A cor e Caso vc tenha errado, no se preocupe, pois os modificadores aplicados a membros sero discutidos posteriormente.

abstractUma classe definida como abstract no permite criar instncias dessa classe, ou seja, no podemos ter objetos de uma classe abstrata. O modificador abstract aplica o mesmo conceito de abstrao que conhecemos no mundo real, ou seja, parta do pressuposto que uma classe abstrata no sabe qual seja o seu "inteiro" comportamento. Voc deve estar se perguntando, por que ento eu usaria uma classe abstrata se no posso instanci-la ? Esse e um recurso interessantssimo das linguagens orientadas a objetos, a extensibilidade, voc pode definir uma classe Car com comportamentos (mtodos) abstratos e deixar que as subclasses definam esses comportamentos de forma diferente, mesmo porque a forma de acelerao de um Mazda RX7 bem diferente de um Fusca. Car.java package carros; public abstract class Car { ... }

Anotaes

131

Liguanguem de programao JAVA

Programao Orientada a ObjetosOficina.java package carros; public class Oficina { public static void main(String[] args) { Car c = new Car(); // erro de compilao } } Erro: // carros.Car is abstract; cannot be instantiated No se preocupe se voc ver uma declarao: abstract public class Car No erro de sintaxe colocar o modificar abstract antes do public. Podemos concluir que uma classe abstrata no est pronta para ser usada como uma classe concreta, ou seja, ainda no sabe "coisas" sobre a classe, que muito provavelmento ser implementado em subclasses (a no ser que algum programador resolva criar uma classe abstrata e no us-la - puro capricho!)

finalUm classe final no permite que se tenha subclasses, ou seja, no se pode aplicar a herana em uma classe que seja final. Novamente voc como curioso quer saber porque usaria uma classe final ? Pense em um contexto que se tenha uma classe "perfeita" que faz tudo exatamente como voc definiu, e no precise que sua classe seja herdada por ningum, para evitar que Programadores Juniores faam cacas !!! Tem mais um detalhe tcnico mais importante que o citado anteriormente: uma classe final, mais rpida que classes no final, isso porque a mquina virtual sabe que no haver nenhuma herana (nem pelos prprios caras da Sun) por isso o processo de execuo mais rpido. Um exemplo disso a classe String. Car.java package carros; public final class Car { ... }

Anotaes

132

Liguanguem de programao JAVA

Programao Orientada a ObjetosOficina.java package carros; public class Oficina extends Car { // erro de compilao public static void main(String[] args) { Car c = new Car(); } } Erro: cannot inherit from final carros.Car Se voc um cara esperto, j deve ter percebido que o modificador final no deve ser usado com o modificador abstract, visto porque no faz sentido temos uma classe final e abstrata ! Como faramos a herana sendo que a classe final ! Car.java package carros; public abstract final class Car { ... } // erro de compilao Erro: illegal combination of modifiers: abstract and final

strictfpDefine que membros/variveis da classe sigam as normas do padro IEE754 de ponto flutuante. Se voc no tiver o que fazer, poder estudar esse padro, mas saiba que para o exame no ser necessrio saber nada sobre o padro, simplesmente o que o modificador faz. Como seu escopo a classe, todos os mtodos seguiram o mesmo padro. Voc tambem poder definir esse modificador para um mtodo especifico, mas isso ser discutido posteriormente. Car.java package carros; public strictfp class Car { ... } // ok Todos os mtodos seguiram o padro IEE754

Anotaes

133

Liguanguem de programao JAVA

Programao Orientada a ObjetosMODIFICADORES PARA MTODOSpadroNo ser necessrio falar muito, pois semelhante ao conceito de classe, ou seja, um mtodo definido como padro s poder ser acessado por classes dentro do mesmo pacote. Car.java package carros; public class Car { String getColor() { mtodo com acesso padro return "red"; } } Oficina.java package carros; public class Oficina { public static void main(String[] args) { Car c = new Car(); System.out.println("a cor do carro e "+c.getColor()); // ok } } Nenhum problema de acesso pois as classes esto no mesmo pacote Se definirmos a classe Oficina da seguinte forma: package oficina; import carros.*; public class Oficina { public static void main(String[] args) { Car c = new Car(); System.out.println("a cor do carro e "+c.getColor()); // erro de compilao } } Erro: getColor() is not public in carros.Car; cannot be accessed from outside package

Anotaes

134

Liguanguem de programao JAVA

Programao Orientada a ObjetospublicUm mtodo pblico pode ser acessado por qualquer classe em qualquer pacote. bvio que o acesso a um mtodo s permitido se voc tiver primeiro acesso classe, portanto uma tentativa de acesso a um mtodo pblico de uma classe com acesso padro no ser possvel a classes pertencentes a pacotes diferentes da classe que est se desejando o acesso! Se ficou confuso, no se preocupe, vai piorar! Car.java package carros; class Car { public String getColor() { return "red"; } } Oficina.java package oficina; import carros.*; class Oficina { public static void main(String[] args) { Car c = new Car(); System.out.println("a cor e "+c.getColor()); // erro de compilao } } Erro: carros.Car is not public in carros; cannot be accessed from outside package Portanto, mesmo que o mtodo seja pblico (como o caso de getColor()), a classe (nesse caso Car) tambm dever ser visvel ao mtodo que est chamando!

privateUm mtodo private restringe o acesso do mtodo somente classe que o definiu, ou seja, um mtodo privado s poder ser acesso dentro da classe que o definiu e ponto final!

Anotaes

135

Liguanguem de programao JAVA

Programao Orientada a ObjetosCar.java package carros; class Car { private String getColor() { // Nota 1 return "red"; } public void imprimirCor() { System.out.println( "a cor do carro e "+getColor()); // Nota 2 }

}

Oficina.java package carros; class Oficina { public static void main(String[] args) { Car c = new Car(); System.out.println("a cor e "+c.getColor()); // Nota 3 c.imprimirCor(); // Nota 4 } } Nota