1. Guia de Estudos paraSun Certified Java Associate (SCJA) Prof. Rafael Guimarães Sakurai 12/2009 1
2. Quem sou? Rafael Guimarães Sakurai (rafael.sakurai@metodista.br) Possui graduação em Ciência da Computação pela Universidade Metodista de São Paulo (2005), especialista em Engenharia de Componentes com Java Enterprise e Webservices pela Faculdade de Informática e Administração Paulista (2007). Atualmente é analista desenvolvedor de software da Virginia Surety e docente na Universidade Metodista de São Paulo. Tem experiência na área de Ciência da Computação, com ênfase em Linguagens de Programação. Possui as seguintes certificações: SCJA 1.0, SCJP 5.0, SCWCD 1.4 e SCSNI. 2 Guia de Estudos para SCJA
3. Agenda 1º Dia – Apresentação do curso Conceitos basicos de Orientação a Objetos. 2º Dia – UML e implementação Java 3º Dia – Implementação Java (continuação) 4º Dia – Implementação de algoritmos Principios básicos de desenvolvimento Java 5º Dia – Plataforma Java e tecnologias de integração Tecnologia cliente 6º Dia – Tecnologia servidor e simulado 3 Guia de Estudos para SCJA
4. Detalhes Número de Questões: 51 Score: 68% (35 de 51 questões) Tempo: 115 minutos 4 Guia de Estudos para SCJA
5. Sun Academic Initiative Site (https://sailearningconnection.skillport.com) Vantagens: Cursos Materiais Simulados Desconto no voucher 5 Guia de Estudos para SCJA
6. Objetivos do exame 1- Conceitos básicos Orientados a Objetos (OO) 2- Representação UML de conceitos OO 3- Implementação Java de conceitos OO 4- Projeto e implementação de algoritmos 5- Princípios básicos do desenvolvimento em Java 6- Plataforma Java e tecnologias de integração 7- Tecnologias de cliente 8- Tecnologias de servidor 6 Guia de Estudos para SCJA
8. 1.1- Descrever, comparar e contrastar primitivas (número inteiro, ponto flutuante, booleano e caractere), tipos de enumeração e objetos. 8
9. Tipos Primitivos Os tipos primitivos são representações de dados/valores básicos. Todos são representados por letras minúsculas e estão divididos nos seguintes tipos: Número Inteiro Número com Ponto Flutuante Caractere Booleano 9 Guia de Estudos para SCJA
10. Tipos Inteiros Representam números inteiros em forma decimal, hexadecimal ou octal. Recomendado quando o número é muito grande, capaz de armazenar 64 bits Tipo inteiro mais utilizado, capaz de armazenar 32 bits Valor numérico capaz de armazenar 16 bits Utilizado para representar números pequenos, no intervalo de -128 e 127, capaz de armazenar 8 bits 10 Guia de Estudos para SCJA
19. Tipo Caractere Representa um único caractere incluindo letras, números, caracteres especiais e outros, denominado char. Exemplos: char: a, b, c, 4, $, & 13 13 Guia de Estudos para SCJA
20. Tipo Booleano Representa o valor lógico true(verdadeiro)oufalse(falso), denominado boolean. Exemplos: boolean:true, false 14 Guia de Estudos para SCJA
21. Enumeração Tipo de classe com valores pré-definidos, ou seja, possui valores padrões previamente estabelecidos. Exemplo: public enumDiaSemana { SEGUNDA-FEIRA, TERÇA-FEIRA, QUARTA-FEIRA, QUINTA-FEIRA, SEXTA-FEIRA, SÁBADO, DOMINGO } 15 15 Guia de Estudos para SCJA
23. Objeto Um objeto é a representação de um conjunto de características e funcionalidades para representar algo do mundo real. Podemos por exemplo representar pessoas como objetos, onde cada pessoa terá suas características próprias como nome, data de nascimento, documento de identidade e outros. Também podemos representar as ações que uma objeto que é uma pessoa pode ter, como por exemplo andar, pensar, falar e outros. Na OO as características são chamados de atributos e as ações são chamadas de métodos, onde todos os objetos do mesmo tipo possuem os mesmos métodos, mas cada um pode ter seus atributos com valores diferentes (estado). 17 Guia de Estudos para SCJA
24. Objeto A partir de um modelo ou forma que define os atributos e métodos dos objetos podemos criar vários objetos cada um com um estado diferente: Objetos com diferentes estados Modelo 18 Guia de Estudos para SCJA
25. 1.2 - Descrever, comparar e contrastar classes concretas, classes abstratas e interfaces, e como a herança é aplicada a elas. 19
26. Classe Uma Classe define quais as características (atributos) e ações (métodos) para representar as “coisas” do mundo real, podemos dizer que uma classe é um modelo ou forma que define como devem ser os objetos. Os atributos de uma classe podem ser de tipos primitivos, enumerações ou outro objeto. Os métodos de uma classe vão representar as ações que aquela classe pode ter, dependendo do estado dos atributos os métodos podem executar de formas diferentes. 20 Guia de Estudos para SCJA
27.
28. Exemplo:publicclass Aluno { public String nome; public String matricula; public Aluno() { } public Aluno(String _nome, String _matricula) { nome = _nome; matricula = _matricula; } } 21 Guia de Estudos para SCJA
29.
30. A partir das classes abstratas não podemos instanciar objetos, pois ela pode ter métodos que não estão implementados.
31. Exemplo:publicabstractclass Pessoa { public String nome; public void dizerNome() { System.out.println("Meunome é:" + nome); } public void estudar(); } 22 Guia de Estudos para SCJA
32.
33. Exemplo:publicinterface Transporte { publicvoidentrarPessoa(Pessoa pessoa); public void sairPessoa(Pessoa pessoa); public void transportarPara(String localidade); } 23 Guia de Estudos para SCJA
37. Herança Visando a reutilização de código, a herança permite que classes herdem atributos e métodos de outras classes. É utilizada em objetos que possuem características e funcionalidades semelhantes. publicclass Pessoa { private String nome; public void setNome(String nome) { this.nome = nome;} public String getNome() { return this.nome; } } publicclass Programador extends Pessoa { publicvoiddizerProfissao() { return "Meu nome eh " + getNome() + " eu sou Programador." } } 27 Guia de Estudos para SCJA
39. 1.3 - Descrever, comparar e contrastar composições e associações (incluindo multiplicidade: um-para-um, um-para-vários e vários-para-vários) de classes, bem como a navegação de associações. 29
40. Associação Associação é quando uma classe pode utilizar uma outra classe, por exemplo, um cliente possui um endereço. A associação define que uma classe está relacionada com outra classe, mas elas podem ser utilizadas independente. publicclass Cliente { public String nome; publicEnderecoendereco; } publicclassEndereco { public String estado; public String cidade; public String bairro; public String logradouro; } 30 30 Guia de Estudos para SCJA
41. Composição Composição é quando uma classe depende de outra classe para poder existir, por exemplo, um estado possui varias cidades. Caso apaguem um estado do mapa, as cidades dele não devem continuar existindo. publicclass Cidade { public String nome; } publicclass Estado { public Cidade[] cidades; } 31 Guia de Estudos para SCJA
42. Multiplicidade Um-para-um Um logradouro pode ter apenas um CEP. Um-para-vários Exemplo: Um carro tem quatro pneus. Vários-para-vários Um programador pode trabalhar em vários projetos, e um projeto pode ter vários programadores. 32 Guia de Estudos para SCJA
43. Navegação Navegação informa qual a direção do relacionamento entre duas classes. Neste exemplo através da classe Produto podemos chegar até a classe Modelo. 33 Guia de Estudos para SCJA publicclass Modelo { public String nome; } publicclass Produto { public Modelo modelo; public ModelogetModelo() { return this.modelo; } }
44. 1.4 - Descrever a ocultação de informações (usando métodos e atributos privados), o encapsulamento e a funcionalidade de exposição de objetos usando métodos públicos; e descrever as convenções de JavaBeans para os métodos setter e getter. 34
45. Ocultação de informações Quando queremos restringir o acesso a atributos e métodos dentro de uma classe, podemos definir sua visibilidade como privada utilizando a palavra-chave private, desta forma somente dentro da própria classe podem ser alterados os valores de um atributo ou chamado um método. 35 Guia de Estudos para SCJA
46. Encapsulamento Quando temos uma classe com seus atributos com visibilidade publica, esses atributos podem ser alterados a qualquer momento por qualquer outra classe. 36 Guia de Estudos para SCJA nome matricula
47.
48. Encapsulamento Definindo os atributos como privados e criando métodos públicos para manipulação desses atributos podemos então restringir a manipulação desorganizada. 38 Guia de Estudos para SCJA Método Privado Método Público nome matricula Método Público Método Privado
50. Convenções Javabeans As convenções Javabeans são boas práticas de programação que definem como devem ser criadas as classes, normalmente essas convenções são seguidas pelos desenvolvedores Java. Nomes de classes são escritos com a primeira letra de cada palavra em maiúsculo. Possuir um construtor padrão (default) Todos os atributos são privados (private) Os atributos são escritos com letras minúsculas, a menos que ele seja composto por mais de uma palavra, a primeira palavra é toda em minúscula e as demais começam com a primeira letra em maiúsculo e o restante da palavra em minúscula. Todos os atributos devem ser acessíveis através de métodos “get” e “set”. Nomes de métodos seguem o mesmo padrão de escrita que atributos. 40 Guia de Estudos para SCJA
51. Convenções Javabeans Exemplo: Precisamos desenvolver uma classe para representar um produto que pode ter as informações nome, data de validade, preço e ativo. publicclass Produto { private String nome; private String marca; private Date dataValidade; privatedoublepreco; privateboolean ativo; publicvoidsetNome(String nome) { this.nome = nome; } public String getNome() { returnthis.nome; } publicvoidsetDataValidade(Date dataValidade) { this.dataValidade = dataValidade; } 41 Guia de Estudos para SCJA
52. Convenções Javabeans public Date getDataValidade() { returnthis.dataValidade; } publicvoidsetPreco(doublepreco) { this.preco = preco; } publicdoublegetPreco() { returnthis.preco; } publicvoidsetAtivo(boolean ativo) { this.ativo = ativo; } publicbooleangetAtivo() { returnthis.ativo; } // Quando é boolean podemos usar get ou is publicbooleanisAtivo() { returnthis.ativo; } } 42 Guia de Estudos para SCJA
53. 1.5 - DESCREVER O POLIMORFISMO CONFORME APLICADO A CLASSES E INTERFACES, BEM COMO DESCREVER E APLICAR O PRINCÍPIO "PROGRAMA PARA UMA INTERFACE". 43
54. Polimorfismo O termo polimorfismo vem do grego que significa “muitas formas”. Na Orientação a Objetos o polimorfismo é a forma de representar um objeto de varias formas. Podemos aplicar o polimorfismo quando temos uma estrutura de herança de classes (subclasse e superclasse) ou com estrutura de implementação de interface. 44 Guia de Estudos para SCJA
55. Polimorfismo Neste exemplo podemos representar o CarroVoador como um Aereo ou como um Terrestre, pois o CarroVoador segue essas interfaces e tem implementado as funcionalidades que estão definidos nelas. Da mesma forma podemos representar o CarroVoador como um Transporte. 45 Guia de Estudos para SCJA
56. Programe para uma interface “Programe para uma interface” deve ser entendido como “Programe para um supertipo” dessa forma podemos: Generalizar o tipo de retorno de método Generalizar o tipo de um atributo Generalizar os parâmetros de método 46 Guia de Estudos para SCJA
58. UnifiedModelingLanguage (UML) Definição: “É uma família de notações gráficas, apoiada por um metamodelo único, que ajuda na descrição e no projeto de sistemas de software, particularmente daqueles construídos utilizando o estilo orientado a objetos.” Martin Fowler 48 Guia de Estudos para SCJA
59. 2.1 - Reconhecer a representação UML de classes (incluindo atributos e operações, classes abstratas e interfaces), a representação UML de herança (implementação e interface) e a representação UML de modificadores da visibilidade dos membros da classe (-/privada e +/pública). 49
60. Estrutura da Classe Uma classe em UML possui três partes: Nome da Classe Atributos Operações Podemos abreviar a declaração da classe, caso não influencie o entendimento do diagrama: 50 Guia de Estudos para SCJA
61. Atributos Um atributo é formado por: visibilidade nome : tipo [multiplicidade] = valor inicial {propriedades} 51 Guia de Estudos para SCJA
62. Operações Uma operação é formada por: visibilidade nome (parâmetros) : tipo de retorno {propriedades} O parâmetro de um método é formado por: nome : tipo [multiplicidade] = valor inicial 52 Guia de Estudos para SCJA
63. Herança Utilizamos herança quando queremos declarar subclasses, permitindo reutilizar os códigos já declarados na superclasse. 53 Guia de Estudos para SCJA
64. Classe Abstrata Utilizado para informar que uma classe não implementa todos os seus métodos. 54 Guia de Estudos para SCJA
65. Interface Utilizamos interface para definir as operações básicas que uma classe de seu tipo precisa implementar. ou 55 Guia de Estudos para SCJA
67. Visibilidade Podemos definir as seguintes visibilidades em atributos e operações: -private ~ default #protected + public 57 Guia de Estudos para SCJA
68. Comentário Os comentários ou notas são utilizados para adicionar mais informações ao diagrama. 58 Guia de Estudos para SCJA
70. 2.2 - Reconhecer a representação UML de associações de classes, composições, indicadores de multiplicidade de associação e indicadores de navegação de associações. 60
71. Associações Utilizado para representar o relacionamento entre classes, as associações podem ser: Associação Agregação Composição Classe de associação As classes que fazem parte de um relacionamento também são chamadas de TODO (responsável pelo relacionamento) e PARTE (usado pelo relacionamento). 61 Guia de Estudos para SCJA
73. Agregação Informa que uma classe faz parte de outra classe, mas não de forma exclusiva. 63 Guia de Estudos para SCJA
74. Composição Informa que uma classe faz parte de outra classe de forma exclusiva. 64 Guia de Estudos para SCJA
75. Agregação x Composição A diferença entre ambos é: Agregação – se excluir a classe responsável pelo relacionamento, não deve excluir a classe que ele possui relacionamento. Composição – se excluir a classe responsável pelo relacionamento, então deve excluir a classe que ele possui relacionamento. 65 Guia de Estudos para SCJA
78. Multiplicidade A multiplicidade é utilizada para definir a quantidade de objetos devem ser criados: 0 .. 1 (zero ou um) 1 (um) * (zero ou muitos) 68 Guia de Estudos para SCJA
79. Dependência Utilizado para informar que uma classe depende de outra classe para executar alguma operação: Palavras - chave de dependência: <<call>> <<create>> <<dependency>> <<use>> 69 Guia de Estudos para SCJA
80. Associação x Dependência A diferença básica entre ambos: Associação temos um atributo da classe relacionada. Dependência utilizamos a classe relacionada, para passar um parâmetro, chamar um método, criar um objeto, etc. 70 Guia de Estudos para SCJA
88. A linguagem Java Os conceitos chaves da linguagem Java são: Programação Orientada a Objetos Independente de plataforma Seguro Distribuído Multi-thread O tema principal do Java é “escreva uma vez, rode em qualquer lugar” (writeonce, runanywhere). 74 Guia de Estudos para SCJA
89. JRE x JDK Há dois principais produtos dentro da plataforma Java SE: - Java RuntimeEnvironment (JRE) Fornece a Java Virtual Machine, bibliotecas Java e outros componentes para executar aplicações escritas em Java. - Java Development Kit (JDK) Contém tudo que tem na JRE, mais ferramentas adicionais para criar Java Archive (JAR) e desenvolver (compilar e depurar) aplicações feitas em Java. 75 Guia de Estudos para SCJA
90. Java Virtual Machine (JVM) A Java Virtual Machine é uma maquina imaginaria que é implementada através da emulação em software. Existe uma JVM diferente para cada Sistema Operacional. Uma vez que sua aplicação é criada, a mesma pode ser executada em diversos Sistemas Operacionais sem precisar recompilar. 76 Guia de Estudos para SCJA .java .classbytecode JVM JVM JVM Linux Windows Outros
91. Compilando e executando um arquivo java Fases da programação Java: Editor Java Compiler Java Interpreter PrimeiraClasse.class PrimeiraClasse.java 77 Guia de Estudos para SCJA
92. Criando um arquivo .java Crie um arquivo com a extensão .java com o seguinte código: 78 /** * Exemplo de uma classe simples em Java. */ public class PrimeiraClasse { public static void main(String[] args) { System.out.println("Hello world !!!"); } } Guia de Estudos para SCJA
93. Compilando um arquivo .java A aplicação javac é responsável por compilar o arquivo .java. Após a execução deste comando, um arquivo com a extensão .class contendo bytecode Java será criado em disco, com o seguinte nome: PrimeiraClasse.class. A aplicação java é utilizada para executar um arquivo .class. 79 Guia de Estudos para SCJA
94. Comentário em Java // -> Comentário de uma única linha /* Comentário longo com mais de uma linha */ /** *Javadoc * @author Rafael Guimarães Sakurai */ 80 Guia de Estudos para SCJA
95. Comentário em Java 81 /** * Classe utilizada para demonstrar o uso de comentários. * * Depois que uma classe Java é compilada, os comentários não vão * para os códigos compilados .class, dessa forma os comentários * não interferem no tamanho final do projeto. * * @author Rafael Guimarães Sakurai */ public class ExemploComentario { public static void main(String[] args) { //Imprime uma mensagem para o usuario. System.out.println("Demonstrando o uso dos comentarios."); /* Podemos utilizar esta forma quando queremos escrever um comentário mais longo para exemplicar o código. */ } } Guia de Estudos para SCJA
97. 3.1 - Desenvolver código que utilize primitivas, tipos de enumeração e referências a objetos, e reconhecer literais desses tipos. 83
98. Tipos Primitivos Uma variável é a forma de representar valores primitivos ou objetos: Variáveis primitivas: podem ser do tipo byte, short, int, long, float, double, char ou boolean. Variáveis de referência: usada para referenciar um objeto. Quando usamos uma variável de referencia definimos qual o tipo do objeto ou um subtipo do tipo do objeto (veremos isso mais para frente). 84 Guia de Estudos para SCJA
100. Tipos Inteiros (byte, short, int, long) Tipos inteiros trabalham apenas com números inteiros, positivos ou negativos. Os valores podem ser representados nas bases octal, decimal e hexadecimal. Inteiro em octal Qualquer valor escrito utilizando números de 0 a 7 começando com 0 é um valor na base octal, exemplo: short s = 010; // Equivale ao valor 8 em decimal. int i = 025; // Equivale ao valor 21 em decimal. 86 Guia de Estudos para SCJA
101. Tipos Inteiros (byte, short, int, long) Inteiro em decimal Qualquer valor escrito utilizando números de 0 a 9 é um valor decimal, este é o tipo de representação mais comum, pois é utilizada no dia a dia, exemplo: int i = 9; long b = 9871342132; 87 Guia de Estudos para SCJA
102. Tipos Inteiros (byte, short, int, long) Inteiro em hexadecimal Qualquer valor escrito utilizando números de 0 a 9 e A a F começando com 0x ou 0X é um valor hexadecimal, exemplo: long a = OxCAFE; // Equivale ao valor 51966 em decimal int b = 0X14a3; // Equivale ao valor 5283 em decimal 88 Guia de Estudos para SCJA
103. Tipos Inteiros (byte, short, int, long) Quando um número é maior que o tamanho de um tipo inteiro precisamos especificar o tipo como um long, para isso devemos adicionar a letra l ou L depois do seu valor, exemplo: long a = 0Xcafel; long b = 0752L; long c = 987654321L; 89 Guia de Estudos para SCJA
104. Exemplo tipo primitivo inteiro 90 /** * Exemplo de utilização dos tipos primitivos byte, short, int e long. */ public class ExemploTipoPrimitivo { public static void main(String[] args) { //Inicializando atributos primitivos com valores na base octal. byte a = 077; short b = 010; int c = 025; System.out.println(a); // Imprime 63 System.out.println(b); // Imprime 8 System.out.println(c); // Imprime 21 //Inicializando atributos primitivos com valores na base decimal. int d = 9; long e = 9871342132L; System.out.println(d); // Imprime 9 System.out.println(e); // Imprime 9871342132 Guia de Estudos para SCJA
105. Exemplo tipo primitivo inteiro 91 //Inicializando atributos primitivos com valores na base hexadecimal. long f = 0XCAFE; long g = 0Xcafel; int h = 0X14a3; long i = 0752L; long j = 987654321L; System.out.println(f); // Imprime 51966 System.out.println(g); // Imprime 51966 System.out.println(h); // Imprime 5283 System.out.println(i); // Imprime 490 System.out.println(j); // Imprime 987654321 } } Guia de Estudos para SCJA
106. Exemplo tipo primitivo inteiro Compilar e executar o arquivo ExemploTipoPrimitivo. java 92 Guia de Estudos para SCJA
107. Tipos Ponto Flutuante (float e double) Tipos de ponto flutuante servem para representar números com casas decimais, tanto negativos quanto positivos. Todos números com ponto flutuante são por padrão do tipo double. float f = 10.99f; double b = 10.3D; double c = 10.3; // Erro de compilação, pois o padrão do valor é double. floaf c = 1.99; OBS: Números com ponto flutuante devem ser escritos com ponto final ( . ). 93 Guia de Estudos para SCJA
108. Exemplo tipo primitivo inteiro com ponto flutuante 94 /** * Exemplo de utilização dos tipos primitivos float e double. */ public class ExemploTipoPrimitivo2 { public static void main(String[] args) { //Definindo explicitamente que o valor é float. float a = 10.99f; //Definindo explicitamente que o valor é double. double b = 10.3D; //Atribuindo o valor inteiro para um tipo double. double c = 5; //Atribuindo um valor double, por padrão todos números // com casas decimais são do tipo double. double d = 7.2; System.out.println(a); // Imprime 10.99 System.out.println(b); // Imprime 10.3 System.out.println(c); // Imprime 5.0 System.out.println(d); // Imprime 7.2 } } Guia de Estudos para SCJA
109. Exemplo tipo primitivo inteiro com ponto flutuante Compilar e executar o arquivo ExemploTipoPrimitivo2. java 95 Guia de Estudos para SCJA
110. Tipo caractere (char) O tipo caractere, como o próprio nome já diz, serve para representar um valor deste tipo. Sua inicialização permite 3 modelos: char a = ‘a’; //Inicialização usual com 1 caractere. char a = 97; //Inicialização com código ASCII. char u = ‘0025’; //Equivale ao caractere ‘%’ Os caracteres podem ser representados por números e possuem o mesmo tamanho de um atributo short. O unicode é no formato hexadecimal, portanto o exemplo anterior ‘0025’ equivale a 37 na base decimal. 96 Guia de Estudos para SCJA
111. Exemplo tipo primitivo caractere 97 /** * Exemplo de utilização do tipo primitivo char. */ public class ExemploTipoPrimitivo3 { public static void main(String[] args) { //Definindo explicitamente um valor caracter. char a = 'a'; //Definindo explicitamente um valor numerico. char b = 97; //Definindo explicitamente um valor unicode. char c = '0025'; System.out.println(a); // Imprime a System.out.println(b); // Imprime a System.out.println(c); // Imprime % } } Guia de Estudos para SCJA
112. Exemplo tipo primitivo caractere Compilar e executar o arquivo ExemploTipoPrimitivo3. java 98 Guia de Estudos para SCJA
113. Tipo booleano (boolean) Tipo que representa valores lógicos true (verdadeiro) ou false (falso), exemplo: boolean a = true; boolean b = false; 99 Guia de Estudos para SCJA
115. Casting Para fazer um casting, basta sinalizar o tipo para o qual se deseja converter entre parênteses, da seguinte forma: float f = (float) 5.0; Conversão do double 5.0 para float. int b = (int) 5.1987; Conversão de double para int. float c = 100; Conversão de int para float é implícito, não precisa de casting. int d = ‘d’; Conversão de char para int é implícito, não precisa de casting. 101 Guia de Estudos para SCJA
116. Exemplo casting 102 /** * Exemplo de conversão de tipos primitivos utilizando casting. */ public class ExemploCasting { public static void main(String[] args) { //Casting feito implicitamente, pois o valor possui um // tamanho menor que o tipo da variável que irá recebe-lo. char a = 'a'; int b = 'b'; float c = 100; System.out.println(a); // Imprime a System.out.println(b); // Imprime 98 System.out.println(c); // Imprime 100.0 //Casting feito explicitamente, pois o valor possui um tamanho // maior que o tipo da variável que irá recebe-lo. int d = (int) 5.1987; int e = (char) (a + 5); char f = (char) 110.5; System.out.println(d); // Imprime 5 System.out.println(e); // Imprime 102 System.out.println(f); // Imprime n } } Guia de Estudos para SCJA
117. Exemplo casting Compilar e executar o arquivo ExemploCasting.java 103 Guia de Estudos para SCJA
118. Vetor (array) Segundo a definição mais clássica da informática, um vetor é uma estrutura de dados homogenia, ou seja, todos os elementos de um vetor são do mesmo tipo. A estrutura básica de um vetor é representada por seu nome e um índice, que deve ser utilizado toda a vez que se deseja acessar um determinado elemento dentro de sua estrutura. Todo vetor possui um tamanho fixo, ou seja, não é possível redimensionar um vetor ou adicionar a ele mais elementos do que este pode suportar. Em Java a posição inicial do vetor é definida pelo valor zero. 104 Guia de Estudos para SCJA
119. Vetor (array) Um vetor é composto de três partes: Declaração Criação Inicialização Podemos também criar e inicializar o vetor da seguinte forma: 105 int[] valores; // ou int valores[]; String[] nomes; // ou String nomes[]; int[] valores = newint[100]; String[] nomes = new String[50]; valores[0] = 5; nomes[10] = "Rafael"; int[] valores = {2, 5, 4, 8, 5}; Guia de Estudos para SCJA
120. Vetor (array) Exemplo de utilização de array: 106 publicclassExemploVetor { publicstaticvoidmain(String[] args) { int[] vetor = {2, 5, 4, 8, 5}; System.out.println("Elemento do indice 2 = " + vetor[2]); System.out.println("Elemento do indice 4 = " + vetor[4]); System.out.println("Percorrendo todos os elementos do vetor"); for(int i = 0; i < vetor.length; i++) { System.out.println("Indice[" + i + "]= " + vetor[i]); } } } Guia de Estudos para SCJA
121. Vetor (array) Todo vetor em Java é um objeto, mesmo que ele possua apenas atributos primitivos. Quando os vetores são criados eles já são inicializado com os valores padrões para os tipos que eles guardam. O primeiro índice do vetor é sempre zero, logo, seu último elemento é sempre igual ao tamanho do vetor menos um. Se acessar uma posição do vetor que não existe será lançado uma java.lang.ArrayIndexOutOfBoundsException. 107 Guia de Estudos para SCJA
122. Enumeration Enumeration ou enum é uma alternativa ao uso de valores constantes. O enum criado pode ser criado em um arquivo separado ou dentro de outra classe. Podem conter: Variáveis de instância, métodos e construtores. Problemas na utilização de constante: As constantes não oferecem segurança. Não há um domínio estabelecido. Fragilidade de modelo. Seus valores impressos são pouco informativos 108 Guia de Estudos para SCJA
123. Enumeration Exemplo de utilização de constantes: 109 /** * Classe utilizada para demonstrar as fragilidades das contantes. */ public class ExemploUsarEnums { publicstatic final int CONCEITO_RUIM = 1; publicstatic final int CONCEITO_BOM = 2; publicstatic final int CONCEITO_OTIMO = 3; public void calcularAprovacao(int conceito) { if(conceito == CONCEITO_OTIMO) { System.out.println("Aprovado com louvor!"); } else if (conceito == CONCEITO_BOM) { System.out.println("Aprovado!"); } else if (conceito == CONCEITO_RUIM) { System.out.println("Reprovado!"); } } } Guia de Estudos para SCJA
124. Enumeration Exemplo de criação de enum: 110 /** * Enum para conceitos de avaliação de disciplinas. */ public enum ConceitoEnum { RUIM, BOM, REGULAR, OTIMO; public void calcularAprovacao(ConceitosEnum conceito) { if(conceito == OTIMO) { System.out.println("Aprovado com louvor!"); } else if (conceito == REGULAR) { System.out.println("Regular!"); } else if (conceito == BOM) { System.out.println("Aprovado!"); } else if (conceito == RUIM) { System.out.println("Reprovado!"); } } } Guia de Estudos para SCJA
125. Enumeration Exemplo de enum com atributo e construtor: 111 /** * Enum para conceitos de avaliação de disciplinas. */ public enumConceitoEnumComConstrutor { RUIM("Reprovado!"), BOM("Aprovado!"), REGULAR("Regular"), OTIMO("Aprovado com louvor"); private final String mensagem; //O construtor de um enum pode ser default ou private. privateConceitoEnumComConstrutor(String mensagem) { this.mensagem = mensagem; } public String calcularAprovacao() { return this.mensagem; } } Guia de Estudos para SCJA
126. Enumeration Compilando e executando a classe PrincipalTesteEnum. java 112 /** * Classe para testar o uso de enum. */ public class PrincipalTesteEnum { public static void main(String[] args) { System.out.println("Conceito..:" + ConceitoEnumComConstrutor.OTIMO.calcularAprovacao(); } } Guia de Estudos para SCJA
127. Outros informações das enums: Enumeration 113 publicclass PrincipalTesteEnum2 { publicstaticvoidmain(String[] args) { //Percorrendo todas as enums for(ConceitoEnumComConstrutor conceito : ConceitoEnumComConstrutor.values()) System.out.println(conceito); //Buscando um enum pelo seu nome. System.out.println(ConceitoEnumComConstrutor.valueOf("BOM")); //método name() que retorna o nome da propriaenum. System.out.println(ConceitoEnumComConstrutor.OTIMO.name()); //método ordinal() retorna a posição da ordem em que a enum foi declarada. System.out.println(ConceitoEnumComConstrutor.OTIMO.ordinal()); } } Guia de Estudos para SCJA
128. Referência a objeto Como Java é uma linguagem orientada a objetos é muito comum declararmos atributos ou variáveis que possuem referência a objetos em memória. Exemplo: 114 Produto prod = new Produto(); Pessoa paulo = new Pessoa("Paulo"); String texto = new String("Explicação de referência de objeto"); int[] valores = new int[100]; Guia de Estudos para SCJA
129. Referência a objeto 115 public class ExemploReferencia{ publicstaticvoidmain(String[] args) { Produto prod = new Produto(); prod.setNome("Duke"); prod.setPreco(75.90); Pessoa paulo = new Pessoa("Paulo"); paulo.setIdade(40); paulo.setCpf("111.111.111-11"); } } Heap 115 Guia de Estudos para SCJA
130. 3.2 - Desenvolver código que declare classes concretas, classes abstratas e interfaces, código que ofereça suporte a herança de interface e implementação, código que declare métodos e atributos de instâncias e código que utilize modificadores de acesso Java: privados e públicos. 116
131. Classe Concreta Nome da Classe Carro, Pessoa, ContaCorrente, CaixaCorreio Atributos idade, nome, listaMensagens, notaAluno Métodos getPessoa, consultarAluno, enviarMensagemEmail 117 Guia de Estudos para SCJA
132. Classe Concreta 118 /** * Classe utilizada para demonstrar a estrutura de uma classe. */ public class NovaClasse { /* Declaração dos atributos da classe. */ public int atributo1; public float atributo2; public boolean atributo3; /* Declaração dos métodos da classe. */ public void metodo1() { //Comandos System.out.println("Chamando o metodo 1."); } public void metodo2() { //Comandos System.out.println("Chamando o metodo 2."); } } Guia de Estudos para SCJA
133. Classe Concreta publicclass Livro { private String titulo; private String autor; privatedoublepreco; public Livro() { } publicvoidsetTitulo(String _titulo) { titulo = _titulo; } public String getTitulo() { return titulo; } publicvoidsetAutor(String _autor) { autor = _autor; } public String getAutor() { return autor; } publicvoidsetPreco(double _preco) { preco = _preco; } public String getPreco() { returnpreco; } } 119 Guia de Estudos para SCJA
134. Atributo de instância Atributos de instância são “variáveis” declaradas a nível de classe, que são utilizados para representar as propriedades (estado) que o objeto desta classe pode ter. Por convenção, costuma-se escrever o atributo com letras minúsculas, a menos que ele seja composto por mais de uma palavra, a primeira palavra é toda em minúscula e as demais começam com a primeira letra em maiúsculo e o restante da palavra em minúscula. Exemplo: idade, nome, listaMensagens, notaAlunoTurma, etc 120 Guia de Estudos para SCJA
135. Atributo de instância Exemplo de declaração de atributo: 121 /** * Classe utilizada para demonstrar a utilização de atributos. */ public class Atributo { /* Declaração dos atributos da classe. */ public int atributo1; public float atributo2; public boolean atributo3; } Guia de Estudos para SCJA
136. Métodos São blocos de códigos que representam as funcionalidades (ações) que a classe apresentará. Por convenção, costuma-se escrever o método com letras minúsculas, a menos que ele seja composto por mais de uma palavra, a primeira palavra é toda em minúscula e as demais começam com a primeira letra em maiúsculo e o restante da palavra em minúscula. Exemplo: getPessoa, consultarDadosAluno, enviarMensagemEmail, etc 122 Guia de Estudos para SCJA
137. Métodos Os métodos podem ou não retornar algum valor no final de sua execução, esta informação deve constar na assinatura do método. Quando não desejamos retornar valor devemos a palavra chave void. Podemos também informar o tipo de retorno que pode ser um tipo primitivo ou referencia de objeto, lembrando que quando informamos o tipo de retorno então é obrigatório que esse retorno aconteça. 123 Guia de Estudos para SCJA
138. Métodos 124 /** * Classe utilizada para demonstrar o uso de métodos com retorno de valor. */ public class MetodoRetorno { public int atributo1; /** * Método utilizado para retornar o atributo1. * @return int com o valor do atributo1. */ public int metodo1() { System.out.println("Chamou o metodo 1."); return atributo1; } /** * Método que verificar se o atributo1 é maior ou igual a 0 (zero). * @return boolean informando se o atributo1 é positivo */ public boolean metodo2() { System.out.println("Chamou o metodo 2."); return atributo1 >= 0; } } Guia de Estudos para SCJA
139. Métodos Os métodos também podem receber valores para serem utilizados durante sua execução, esses valores são chamados parâmetros. Exemplo: 125 /** * Classe utilizada para demonstrar o uso de métodos que recebem parâmetros. */ publicclassMetodoParametro { publicint atributo1; /** * Método utilizado para atribuir o valor do atributo1. */ publicvoid metodo1(int valor) { System.out.println("Chamando o metodo 1."); atributo1 = valor; System.out.println("O valor do atributo1 eh: " + atributo1); } Guia de Estudos para SCJA
140. Métodos 126 /** * Método que recebe uma quantidade de parâmetros variados e imprime todos os * valores recebidos. Essa possibilidade de receber uma quantidade de * parâmetros variados é chamado de varargs e foi implementado a partir * da versão 5.0 do java. */ publicvoid metodo2(int... valores) { System.out.println("Chamando o metodo 2."); if(valores.length > 0) { /* Para cada argumento recebido como parâmetro, imprime seu valor. */ for(intcont = 0; cont < valores.length; cont++) { int valor = valores[cont]; System.out.print(valor + " "); } System.out.println(""); /* Este for faz a mesma coisa que o anterior, este novo tipo de for chamado foreach foi implementado a partir da versão 5.0 do java. */ for(int valor : valores) { System.out.print(valor + " "); } } } } Guia de Estudos para SCJA
141. Métodos com passagem de parâmetro 127 Stack publicclassVendaLivro { publicstaticvoidmain(String[] args) { int quantidade = 3; Livro livro = new Livro(); livro.setTitulo("Java com Aveia"); livro.setAutor("Sakurai"); livro.setPreco(35.90); Comprovante c = new Comprovante(); c.emitir(quantidade, livro); } } Heap publicclass Comprovante { publicvoid emitir(int qtd, Livro l) { /* utiliza o qtd e o l para emitir comprovante. */ } } Guia de Estudos para SCJA
142. Métodos com passagem de parâmetro 128 Stack publicclassVendaLivro { publicstaticvoidmain(String[] args) { int quantidade = 3; Livro livro = new Livro(); livro.setTitulo("Java com Aveia"); livro.setAutor("Sakurai"); livro.setPreco(35.90); Comprovante c = new Comprovante(); c.emitir(quantidade, livro); } } Heap publicclass Comprovante { publicvoid emitir(int qtd, Livro l) { /* utiliza o qtd e o l para emitir comprovante. */ } } Guia de Estudos para SCJA
143. Métodos Para construirmos uma classe precisamos chamar um método construtor, exemplo: Livro livro = newLivro(); O método construtor é especial pois através dele é criado um objeto da classe. Um construtor tem a seguinte assinatura: visibilidade NomeClasse(parâmetros) Note que neste exemplo o método construtor Livro() não recebe nenhum parâmetro, também chamado de construtor padrão. Quando não declaramos nenhum construtor na classe, o compilador do Java adiciona um construtor padrão. 129 Guia de Estudos para SCJA
144. Classe Abstrata Define um modelo (template) para representar entidades e conceitos abstratos. Utilizada como classe pai (base) para criação de outras classes. Pode ter métodos implementados de forma genérica Pode definir métodos abstratos que devem ser implementados pelas subclasses concretas. Em Java para criarmos uma classe abstrata utilizamos a palavra-chave abstract. 130 Guia de Estudos para SCJA
145. Exemplo UML de classe abstrata 131 Guia de Estudos para SCJA
146. Exemplo de classe Abstrata 132 /** * Classe abstrata que possui os métodos básicos para * as telas do computador de bordo de um veiculo. */ publicabstractclass Tela { private String titulo; publicvoidsetTitulo(String titulo) { this.titulo = titulo; } public abstract String obterInformacao(); publicvoid imprimir() { System.out.println(this.titulo); System.out.println("" + obterInformacao()); } } Guia de Estudos para SCJA
147. Exemplo de classe Abstrata 133 /** * Tela que mostra a kilometragem percorrida por um veiculo. */ publicclassTelaKilometragemextends Tela { /* Atributo que guarda o valor da km atual do veiculo. */ int km = 0; /* Construtor que iniciliza o titulo da tela. */ publicTelaKilometragem() { /* Atribui o valor do titulo desta tela. */ super.setTitulo("Km Atual"); } /** * Implementa o método abstrato da classe Tela, * neste método buscamos a km atual do veiculo. * @return Texto com a km atual. */ @Override public String obterInformacao() { km += 10; return String.valueOf(km) + " km"; } } Guia de Estudos para SCJA
148. Exemplo de classe Abstrata 134 /** * Classe utilizada para testar a Tela Kilometragem. */ public class TesteTelaKm { public static void main(String[] args) { TelaKilometragem tk = new TelaKilometragem(); tk.imprimir(); System.out.println("------------"); tk.imprimir(); } } Guia de Estudos para SCJA
149. Exemplo de classe Abstrata Compilar os arquivos Tela.java, TelaKilometragem.java e TesteTelaKm e executar o arquivo TesteTelaKm.class. 135 Guia de Estudos para SCJA
150. Interface A interface é utilizada para definir assinaturas de métodos que todas as classes que forem implementá-la devem seguir. Podemos associar uma interface a um contrato onde todas as classes que querem ter esse contrato precisam implementar seus métodos. Para criar uma interface em Java utilizamos a palavra-chave interface. 136 Guia de Estudos para SCJA
151. Interface A interface pode: uma interface pode extender outra interface declarar atributos como constantes declarar assinatura de métodos públicos A interface não pode: implementar método declarar construtor extender classe implementar outra interface não pode ser final não pode ter métodos com visibilidade private, protected ou default (padrão) 137 Guia de Estudos para SCJA
153. Exemplo de Interface 139 /** * Classe utilizada para representar uma Conta bancaria. */ publicclass Conta { // Nome do proprietário da Conta. private String nomeProprietario; // Número da Conta. privateint numero; // Saldo da Conta. privatedouble saldo; public String getNomeProprietario() { returnnomeProprietario; } publicvoidsetNomeProprietario(String nomeProprietario) { this.nomeProprietario = nomeProprietario; } publicintgetNumero() { return numero; } publicvoidsetNumero(int numero) { this.numero = numero; } publicdoublegetSaldo() { return saldo; } publicvoidsetSaldo(double saldo) { this.saldo = saldo; } } Guia de Estudos para SCJA
154. Exemplo de Interface 140 /** * Interface utilizada para representar os métodos mínimos que * os bancos precisam implementar. */ publicinterface Banco { public abstractvoidmanutencaoConta(Conta conta); public abstractboolean saque(Conta conta, double valor); public abstractboolean deposito(Conta conta, double valor); public abstractvoid extrato(Conta conta); } Guia de Estudos para SCJA
155. Exemplo de Interface 141 /** * Classe utilizada para representar o Banco Sakurai */ public class BancoSakurai implements Banco { // Conta que representa o Banco Sakurai. private Conta contaBancoSakurai = null; /** * Construtor padrão da classe. * Cria uma conta para o banco sakurai. */ public BancoSakurai() { this.contaBancoSakurai = new Conta(); this.contaBancoSakurai.setNomeProprietario("Banco Sakurai"); this.contaBancoSakurai.setNumero(0); this.contaBancoSakurai.setSaldo(0d); } publicvoidmanutencaoConta(Conta conta) { booleantemSaldo = conta.getSaldo() >= 0.25; Guia de Estudos para SCJA
156. Exemplo de Interface 142 //Verifica se tem saldo para realizar a manutenção da conta. if(temSaldo) { doublenovoSaldo = conta.getSaldo() - 0.25; conta.setSaldo(novoSaldo); //Deposita o dinheiro da manutenção na conta do banco sakurai. deposito(this.contaBancoSakurai, 0.25); } else { System.out.println("Não conseguiu cobrar a manutenção da conta " + conta.getNumero() + " !!!"); } } public boolean saque(Conta conta, double valor) { //Verifica se tem saldo suficiente para fazer o saque if(conta.getSaldo() >= valor) { //Realiza o saque na conta. double novoValor = conta.getSaldo() - valor; conta.setSaldo( novoValor ); System.out.println("Saque efetuado!!!"); //Toda vez que fizer um saque faz cobra a manutenção da conta. manutencaoConta(conta); return true; Guia de Estudos para SCJA
157. Exemplo de Interface 143 } else { System.out.println("Não conseguiu fazer o saque!!!"); //Se não conseguir fazer o saque, mostra o extrato da conta. extrato(conta); returnfalse; } } public boolean deposito(Conta conta, double valor) { //Realiza o deposito na conta. double novoValor = conta.getSaldo() + valor; conta.setSaldo(novoValor); System.out.println("Deposito efetuado!!!"); return true; } public void extrato(Conta conta) { System.out.println(" -- BANCO SAKURAI -- "); System.out.println("-> EXTRATO CONTA"); System.out.println("Nome: " + conta.getNomeProprietario()); System.out.println("Numero: " + conta.getNumero()); System.out.println("Saldo: " + conta.getSaldo()); System.out.println("---------------------"); } Guia de Estudos para SCJA
158. Exemplo de Interface 144 public boolean transferencia(Conta contaOrigem, Conta contaDestino, double valor) { boolean fezSaque = saque(contaOrigem, valor); //Verifica se conseguiu sacar dinheiro na conta de origem. if(fezSaque) { //Faz o deposito na conta de destino. deposito(contaDestino, valor); System.out.println("Transferencia efetuada."); return true; } else { System.out.println("Não conseguiu fazer a transferencia."); return false; } } } Guia de Estudos para SCJA
159. Exemplo de Interface 145 /** * Classe utilizada para representar o Banco Cristiano. */ publicclassBancoCristianoimplements Banco { private Conta contaBancoCristiano = null; publicBancoCristiano() { this.contaBancoCristiano = new Conta(); this.contaBancoCristiano.setNomeProprietario("Banco Cristiano"); this.contaBancoCristiano.setNumero(0); this.contaBancoCristiano.setSaldo(0d); } publicvoidmanutencaoConta(Conta conta) { //Sempre executa o saque na conta bancaria. doublenovoSaldo = conta.getSaldo() - 0.01; conta.setSaldo(novoSaldo); //Deposita o dinheiro da manutenção na conta do Banco Cristiano. doublesaldoBanco = this.contaBancoCristiano.getSaldo() + 0.01; this.contaBancoCristiano.setSaldo(saldoBanco); } Guia de Estudos para SCJA
160. Exemplo de Interface 146 publicboolean saque(Conta conta, double valor) { //Verifica se tem saldo suficiente para fazer o saque if(conta.getSaldo() >= valor) { //Realiza o saque na conta. doublenovoValor = conta.getSaldo() - valor; conta.setSaldo( novoValor ); System.out.println("Saque efetuado!!!"); //Toda vez que fizer um saque faz cobra a manutenção da conta. manutencaoConta(conta); returntrue; } else { System.out.println("Não conseguiu fazer o saque!!!"); //Se não conseguir fazer o saque, mostra o extrato da conta. extrato(conta); returnfalse; } } Guia de Estudos para SCJA
161. Exemplo de Interface 147 publicboolean deposito(Conta conta, double valor) { //Realiza o deposito na conta. doublenovoValor = conta.getSaldo() + valor; conta.setSaldo(novoValor); System.out.println("Deposito efetuado!!!"); //Toda vez que fizer um deposito faz cobra a manutenção da conta. manutencaoConta(conta); returntrue; } publicvoid extrato(Conta conta) { System.out.println(" -- BANCO CRISTIANO -- "); System.out.println("-> EXTRATO CONTA"); System.out.println("Nome: " + conta.getNomeProprietario()); System.out.println("Numero: " + conta.getNumero()); System.out.println("Saldo: " + conta.getSaldo()); System.out.println("---------------------"); } } Guia de Estudos para SCJA
162. Exemplo de Interface 148 /** * Classe utilizada para testar a interface Banco, e as * classes BancoCristiano e BancoSakurai. */ publicclassBancoTeste { publicstaticvoidmain(String[] args) { Banco bancoCristiano = newBancoCristiano(); Conta contaC = new Conta(); contaC.setNomeProprietario("Cristiano Camilo"); contaC.setNumero(1); contaC.setSaldo(1000); bancoCristiano.deposito(contaC, 150.50); bancoCristiano.saque(contaC, 500); bancoCristiano.extrato(contaC); Banco bancoSakurai = newBancoSakurai(); Conta contaS = new Conta(); contaS.setNomeProprietario("Rafael Sakurai"); contaS.setNumero(1); contaS.setSaldo(500); bancoSakurai.deposito(contaS, 40.99); bancoSakurai.saque(contaS, 300); bancoSakurai.extrato(contaS); } } Guia de Estudos para SCJA
165. Herança Em Java, podemos criar classes que herdam atributos e métodos de outras classes, evitando reescrita de código. Este tipo de relacionamento é chamado de Herança. Para representarmos este tipo de relacionamento na linguagem, devemos utilizar a palavra reservada extends, de forma a apontar para qual classe a nossa nova classe deve herdar seus atributos e métodos. Utilizando herança podemos também guardar instâncias de objetos de subclasses em variáveis do tipo das superclasses. 151 Guia de Estudos para SCJA
166. Herança Uma classe pode herdar apenas de uma classe (superclasse). Quando uma classe não define explicitamente que está herdando outra classe então esta classe é filha de java.lang.Object, ou seja, a classe Object é a classe pai de todas as classes. Por Object ser pai de todas as classes, todas as classes herdam os seguintes métodos dela: 152 Guia de Estudos para SCJA
167. Herança Quando lidamos com classes que possuem a relação de herança, podemos fazer uso de duas palavras-chave que servem para identificar se estamos utilizando um método e ou atributo da classe atual ou de sua super classe, estes comandos são: thisDefine que o recurso pertence à classe atual. super Define que o recurso pertence à super classe. 153 Guia de Estudos para SCJA
168. Herança Neste exemplo temos a superclasse Pessoa, e três subclasses Funcionario, Aluno e Coordenador. 154 Guia de Estudos para SCJA
169. Herança 155 /** * Classe utilizada para representar a Pessoa. */ publicclass Pessoa { private String nome; privateint matricula; /** * Construtor que recebe o nome da pessoa. * @param nome */ public Pessoa(String nome, int matricula) { this.nome = nome; this.matricula = matricula; } publicintgetMatricula() { return matricula; } publicvoidsetMatricula(int matricula) { this.matricula = matricula; } public String getNome() { return nome; } publicvoidsetNome(String nome) { this.nome = nome; } } Guia de Estudos para SCJA
170. Herança 156 /** * Classe utilizada para representar um Funcionario que é uma Pessoa. */ publicclassFuncionarioextends Pessoa { private String departamento; publicFuncionario(String nome, int matricula, String departamento) { super(nome, matricula); this.departamento = departamento; } public String getDepartamento() { return departamento; } publicvoidsetDepartamento(String departamento) { this.departamento = departamento; } } Guia de Estudos para SCJA
171. Herança 157 /** * Classe utilizada para representar um Coordenador que é uma Pessoa. */ publicclass Coordenador extends Pessoa { private String cursoCoordenado; public Coordenador(String nome, int matricula, String cursoCoordenado) { super(nome, matricula); this.cursoCoordenado = cursoCoordenado; } public String getCursoCoordenado() { returncursoCoordenado; } publicvoidsetCursoCoordenado(String cursoCoordenado) { this.cursoCoordenado = cursoCoordenado; } } Guia de Estudos para SCJA
172. Herança 158 /** * Classe utilizada para testar a Herança da classe Funcionario. */ publicclassTesteFuncionario { publicstaticvoidmain(String[] args) { /* Declarações comuns. */ Pessoa camilo = new Pessoa("Camilo", 123); Funcionariorafael = newFuncionario("Rafael", 111, "informatica"); /* Todo Funcionario é uma Pessoa. */ Pessoa sakurai = newFuncionario("Sakurai", 222, "telecomunicação"); /* Erro de compilação, porque nem toda Pessoa é um Funcionario. */ Funcionariocristiano = new Pessoa("Cristiano", 456); } } Guia de Estudos para SCJA
173. Herança Com a declaração acima, temos as classe Funcionario e Coordenador como classes filha ou subclasses da classe paiPessoa. Com isso podemos dizer que as subclasses Funcionario e Coordenador herdam todos os atributos e métodos da sua superclasse Pessoa. Por isso lembre-se, o FuncionarioÉ UMAPessoa, pois é uma subclasse, logo apenas possui algumas características a mais do que Pessoa, porém podemos sempre manuseá-lo como uma Pessoa. 159 Guia de Estudos para SCJA
176. 3.3 - Desenvolver código que implemente associações de classes simples e código que implemente multiplicidade usando matrizes; e reconhecer código que implemente composições em oposição a associações simples e código que implemente corretamente a navegação de associações. 162
177. Associação de classe simples Associação é quando uma classe possui um relacionamento com outra classe, exemplo: A classe Usuario possui um atributo chamado perfil que é do tipo da classe Perfil e um atributo chamado endereco que é do tipo da classe Endereco. 163 Guia de Estudos para SCJA
178. A implementação em Java fica da seguinte forma: Associação de classe simples 164 publicclass Perfil { private String nome; } publicclassEndereco { private String estado; private String cidade; private String bairro; private String logradouro; private String cep; } publicclassUsuario{ private String nome; private String cpf; private String login; private String senha; private Perfil perfil; privateEnderecoendereco; } Guia de Estudos para SCJA
179. Composição Uma composição é um relacionamento mais forte que a associação, pois uma classe depende da outra para existir, exemplo: A classe DetalheUsuario depende da classe Usuario para ser criada, sem a classe Usuario não tem porque ela existir. 165 Guia de Estudos para SCJA
180. Composição A implementação em Java fica da seguinte forma: 166 publicclassUsuario{ private String nome; private String login; private String senha; private Perfil perfil; privateDetalheUsuario detalhe; } publicclassDetalheUsuario { private String endereco; private String telefone; private String email; } Guia de Estudos para SCJA
181. Navegação A navegação informa a direção entre os relacionamentos. A partir da classe Venda podemos chegar nas classes Funcionario, Produto e Cliente. 167 Guia de Estudos para SCJA
182. Navegação A implementação em Java fica da seguinte forma: 168 publicclassFuncionario { private String nome; } publicclass Cliente { private String nome; } publicclass Produto{ private String nome; privatedoublepreco; } publicclass Venda { private Cliente cliente; private Produto produto; privateFuncionariofuncionario; public Cliente getCliente() { returnthis.cliente; } public Produto getProduto() { returnthis.produto; } publicFuncionariogetFuncionario() { returnthis.funcionario; } } Guia de Estudos para SCJA
183. Multiplicidade com matrizes Quando uma classe pode guardar mais de uma referencia para outra classe, podemos utilizar uma estrutura de vetor, matriz, lista e outros, exemplo: A classe Pagamento possui um conjunto da classe Servico, através do relacionamento da UML sabemos que é no mínimo 1 e não tem limite de quantidade máxima. 169 Guia de Estudos para SCJA
184. Multiplicidade com matrizes A implementação em Java fica da seguinte forma: 170 publicclass Pagamento{ private Prestador prestador; privateServico[] servicos; privatelong numero; publicServico[] getServicos() { returnthis.servicos; } } publicclassServico { private String nome; privateBigDecimalpreco; privatechar status; } Guia de Estudos para SCJA
185. 3.4 - Desenvolver código que utilize polimorfismo para classes e interfaces, bem como reconhecer código que utilize o princípio "programa para uma interface". 171
186. Polimorfismo Polimorfismo é a capacidade de um objeto ser referenciado de diversas formas e com isso realizar as mesmas tarefas (ou chamadas de métodos) de diferentes formas. Durante a execução do programa, a JVM verifica qual a classe de origem do objeto e chama o método desta classe. 172 Guia de Estudos para SCJA
188. Polimorfismo com herança 174 /** * Classe utilizada para representar uma Pessoa. */ publicclass Pessoa { private String nome; public String getNome() { return nome; } publicvoidsetNome(final String nome) { this.nome = nome; } } Guia de Estudos para SCJA
189. Polimorfismo com herança 175 /** * Classe utilizada para representar uma Pessoa Fisica * que É UMA subclasse de Pessoa. */ publicclassPessoaFisicaextends Pessoa { private String cpf; public String getCpf() { returncpf; } publicvoidsetCpf(String cpf) { this.cpf = cpf; } public String getNome() { return "Pessoa Fisica: " + super.getNome() + " - CPF: " + this.getCpf(); } } Guia de Estudos para SCJA
190. Polimorfismo com herança 176 /** * Classe utilizada para representar uma Pessoa Fisica * que É UMA subclasse de Pessoa. */ publicclassPessoaJuridicaextends Pessoa { private String cnpj; public String getCnpj() { returncnpj; } publicvoidsetCnpj(String cnpj) { this.cnpj = cnpj; } public String getNome() { return "Pessoa Juridica: " + super.getNome() + " - CNPJ: " + this.getCnpj(); } } Guia de Estudos para SCJA
191. Polimorfismo com herança 177 /** * Classe utilizada para demonstrar o uso do polimorfismo, vamos criar um vetor * de Pessoa e adicionar nele objetos do tipo PessoaFisica e PessoaJuridica. */ publicclassTestePessoa { publicstaticvoidmain(String[] args) { PessoaFisicafisica = newPessoaFisica(); fisica.setNome("Cristiano"); fisica.setCpf("12345678901"); PessoaJuridicajuridica = newPessoaJuridica(); juridica.setNome("Rafael"); juridica.setCnpj("010101010101010101"); Pessoa[] pessoas = new Pessoa[2]; pessoas[0] = fisica; pessoas[1] = juridica; for(Pessoa pessoa : pessoas) { System.out.println(pessoa.getNome()); } } } Guia de Estudos para SCJA
192. Polimorfismo com herança Durante o laço for, mesmo as variáveis sendo do tipo Pessoa, o método getNome() foi chamado da classe PessoaFisica e PessoaJuridica, porque durante a execução do programa, a JVM percebe de qual classe foi criada o objeto que está guardado na variável pessoa. 178 Guia de Estudos para SCJA
194. Polimorfismo com Interface 180 /** * Interface que deve ser implementada por todas as classes que devem * ser ordenadas. */ publicinterfaceComparavel { /** * Assinatura de método que toda classe que quer permitir * a comparação entre seus objetos precisa implementar. * * @param o - Objeto que será comparado. * @return 0 se os objetos forem iguais * > 0 se o objeto recebido é menor que o objeto que será comparado. * < 0 se o objeto recebido é maior que o objeto que será comparado. */ public abstract int comparar(Object o); } Guia de Estudos para SCJA
195. Polimorfismo com Interface 181 /** * Classe utilizada para ordenar qualquer tipo de classe * que implementa a interface Comparavel. */ publicclass Ordenar { /** * Método que utiliza o algoritmo de bubblesort * para ordenar um vetor de objetos do tipo <code>Comparavel</code>. * @param objetos - Vetor de objetos que ordenados. */ publicvoid ordenar(Comparavel[] objetos) { for (int i = 0; i < objetos.length; i++) { for (int j = i + 1; j < objetos.length; j++) { /* Verifica se os objetos não estão na ordem. */ if(objetos[i].comparar(objetos[j]) > 0) { /* Troca os objetos de lugar no vetor. */ Comparaveltemp = objetos[i]; objetos[i] = objetos[j]; objetos[j] = temp; } } } } } Guia de Estudos para SCJA
196. Polimorfismo com Interface 182 /** * Classe utilizada para representar um Livro, esta classe * implementa a interface Comparavel. */ publicclass Livro implementsComparavel { private String autor; private String titulo; public Livro(String autor, String titulo) { this.autor = autor; this.titulo = titulo; } public String getAutor() { return autor; } publicvoidsetAutor(String autor) { this.autor = autor; } public String getTitulo() { return titulo; } Guia de Estudos para SCJA
197. Polimorfismo com Interface 183 public void setTitulo(String titulo) { this.titulo = titulo; } publicint comparar(Object o) { intcomparacao = 0; //Verifica se o objeto que vai comparar é do tipo Livro. if (o instanceof Livro) { Livro livro = (Livro) o; comparacao = this.getAutor().compareTo(livro.getAutor()); //Se os autores forem iguais, compara o titulo dos livros. if (comparacao == 0) { comparacao = this.getTitulo().compareTo(livro.getTitulo()); } } returncomparacao; } } Guia de Estudos para SCJA
198. Polimorfismo com Interface 184 /** * Classe utilizada para testar a ordenação genérica. */ publicclassTestarOrdenacao { publicstaticvoidmain(String[] args) { /* Cria uma vetor de livros. */ Livro[] livros = new Livro[4]; livros[0] = new Livro("Sakurai", "Almoçando com Java"); livros[1] = new Livro("Cristiano", "Classes Java em fila indiana"); livros[2] = new Livro("Sakurai", "Java em todo lugar"); livros[3] = new Livro("Cristiano", "Viajando no Java"); /* Ordena os livros */ Ordenar o = new Ordenar(); o.ordenar(livros); /* Imprime os livros ordenados. */ for(intcont = 0; cont < livros.length; cont++) { System.out.println("Autor: " + livros[cont].getAutor()); System.out.println("Livro: " + livros[cont].getTitulo()); System.out.println("---------"); } } } Guia de Estudos para SCJA
199. Polimorfismo Quando utilizamos polimorfismo estamos restringindo os métodos baseado no tipo de referencia do objeto, exemplo: O tipo de referencia do objeto é Comparavel e através dela podemos chamar apenas o método comparar(), não podemos chamar os métodos que foram declarados na classe Livro. 185 Comparavel livro = new Livro("Java com Aveia", "Rafael"); Livro onlyJava = new Livro("Only Java", "Sakurai"); livro.comparar(onlyJava); livro.getNome(); //Erro de compilação Guia de Estudos para SCJA
200. DinamicBinding Mas porque quando chamamos o método comparar() da interface Comparavel é chamado o método comparar() da classe Livro? Em tempo de execução a JVM verifica qual o objeto está sendo referenciado e chama seu método, isto é chamado DinamicBinding. 186 Comparavel livro = new Livro("Java com Aveia", "Rafael"); Livro onlyJava = new Livro("Only Java", "Sakurai"); livro.comparar(onlyJava); Guia de Estudos para SCJA
201. Casting de objeto Vimos anteriormente que uma Pessoa (superclasse) nem sempre É UMAPessoaFisica (subclasse), mas quando estamos trabalhando com uma superclasse e temos a certeza de qual o tipo de subclasse ele está representando podemos fazer o casting de objetos, para guardar o objeto em sua classe, funciona de forma similar ao casting de atributos primitivos. No exemplo abaixo vamos criar duas variáveis do tipo Pessoa com objetos do tipo PessoaFisica e PessoaJuridica, depois vamos também criar uma variável do tipo Object (que é a superclasse de todas as classes) e guardar nela um objeto do tipo String. 187 Guia de Estudos para SCJA
202. Casting de objeto 188 /** * Classe utilizada para demonstrar o uso do polimorfismo, vamos criar duas * variáveis do tipo Pessoa e adicionar nele objetos do tipo PessoaFisica e * PessoaJuridica. */ publicclass TestePessoa4 { publicstaticvoidmain(String[] args) { Pessoa pessoa1 = newPessoaFisica(); pessoa1.setNome("Cristiano"); Pessoa pessoa2 = newPessoaJuridica(); pessoa2.setNome("Rafael"); PessoaFisicafisica = (PessoaFisica) pessoa1; fisica.setCpf(12345678901L); PessoaJuridicajuridica = (PessoaJuridica) pessoa2; juridica.setCnpj(1000100012345678L); System.out.println(fisica.getNome()); System.out.println(juridica.getNome()); Object objeto = "Programacao Orientada a Objetos"; String texto = (String) objeto; System.out.println(texto); } } Guia de Estudos para SCJA
203. Casting de objeto Compilar e executar o arquivo TestePessoa4.java. 189 Guia de Estudos para SCJA
204. Programe para uma interface Programando para implementação Programando para interface 190 OrdenarLivroordenadorDeLivros = new OrdenadorLivro(); Livro[] livros = new Livros[] { new Livro("Only Java", "Sakurai"), new Livro("Java com Aveia", "Rafael") }; ordenadorDeLivros.ordenarLivro(livros); OrdenarPessoaordenadorDePessoas = newOrdenarPessoa(); Pessoa[] pessoas = new Pessoa[] { newPessoaFisica("Sakurai"), newPessoaJuridica("Rafael") }; ordenadorDePessoas.ordenar(pessoas); Ordenar o = new Ordenar(); Livro[] livros = new Livros[] { new Livro("Only Java", "Sakurai"), new Livro("Java com Aveia", "Rafael") }; o.ordenar(livros); Pessoa[] pessoas = new Pessoa[] { new PessoaFisica("Sakurai"), new PessoaJuridica("Rafael") }; o.ordenar(pessoas); Guia de Estudos para SCJA
206. 4.1 - Descrever, comparar e contrastar estes três tipos de instruções fundamentais: atribuição, condicional e iteração; com base na descrição de um algoritmo, selecionar o tipo apropriado de instrução para projetar o algoritmo. 192
207. Instruções fundamentais Quando queremos guardar o valor de um tipo primitivo ou uma referência para um objeto, podemos guardá-los em variáveis, isto também é chamado de atribuição. 193 Guia de Estudos para SCJA
208. Instruções fundamentais Quando queremos executar um determinado conjunto de instruções, em uma determinada condição ou situação, podemos utilizar estruturas do tipo condicional. 194 Guia de Estudos para SCJA
209. Instruções fundamentais Quando queremos executar um certo conjunto de instruções n vezes, durante uma determinada condição ou situação, podemos utilizar estruturas do tipo iteração. 195 Guia de Estudos para SCJA
210. 4.2 - Com base em um algoritmo como pseudo-código, determinar o escopo correto de uma variável usada no algoritmo e desenvolver código para declarar variáveis em qualquer um dos seguintes escopos: variável de instância, parâmetro de método e variável local. 196
211. Escopo de variável Variáveis de instânciasão criadas em nível de classe que podem ser utilizadas para guardar informações (estado) para cada objeto que estiver em memória. Este tipo de variável tem um escopo de vida igual a vida do objeto onde ele está referenciado. 197 Guia de Estudos para SCJA
212.
213. Escopo de variável Variável local é criada dentro de blocos de chave { }, este tipo de variável tem um escopo de vida limitado ao bloco.Estas variáveis são criadas para serem utilizadas para executar uma determinada instrução e depois são descartadas. 199 Guia de Estudos para SCJA
214. 4.3 - Com base em um algoritmo como pseudo-código, desenvolver código de método que implemente o algoritmo usando instruções condicionais (if e switch), instruções de iteração (for, for-each, while e do-while), instruções de atribuição e instruções break e continue para controlar o fluxo dentro das instruções switch e de iteração. 200
215. Instruções condicionais (if / else) A instrução condicionais if, é utilizada para executar alguns comandos apenas se sua condição for true (verdadeira). O else pode ou não acompanhar o if, mas o else não pode ser usado sozinho, e é utilizado para executar alguns comandos caso a condição do if for false (falso). 201 if (condição) { //Comandos executados caso a condição verdadeira. } if (condição) { //Comandos executados caso a condição verdadeira. } else { //Comandos executados caso a condição falsa. } Guia de Estudos para SCJA
216. Instruções condicionais (if / else) Podemos também utilizar vários if / else aninhados: 202 if (condição1) { //Comandos executados caso a condição1 verdadeira. } else if (condição2) { //Comandos executados caso a condição2 verdadeira. } else if (condição3) { //Comandos executados caso a condição3 verdadeira. } else { //Comandos executados caso nenhuma das condições for verdadeira. } Guia de Estudos para SCJA
217. Instruções condicionais (if / else) Exemplo: 203 /** * Exemplo de estrutura de controle IF. */ public class ExemploIf { public static void main(String[] args) { int idade = 15; if(idade >= 18) { System.out.println("Permissão para dirigir"); } else { System.out.println("Idade minima para dirigir eh 18 anos"); } } } Guia de Estudos para SCJA
218. Instruções condicionais (switch) A instrução condicional switch é utilizada quando queremos testar se o valor de uma variável pode atender um determinado caso. 204 switch(variável) { case<possível valor da constante> : < instruções > break; case<possível valor da constante> : < instruções > break; default: < instruções > break; } Guia de Estudos para SCJA
219. Instruções condicionais (switch) A instrução switch aceita apenas variáveis do tipo: byte, short, int, char e enumeração. Cada case é um caso onde os comandos dentro dele são executados se o valor constante dele for o mesmo que o valor da variável recebida no switch. O bloco de comandos default representa uma condição geral de execução caso nenhuma das anteriores tenha sido atendida, sendo a sua utilização também é opcional. O comando break é utilizado para bloquear a execução de blocos cases de forma desnecessária. 205 Guia de Estudos para SCJA
220. Instruções condicionais (switch) 206 /** * Exemplo de estrutura de seleção SWITCH. */ public class ExemploSwitch { public static void main(String[] args) { char nota = 'D'; switch(nota) { case 'A': System.out.println("Aluno aprovado. Conceito excelente!"); break; case 'B': System.out.println("Aluno aprovado. Conceito bom!"); break; case 'C': System.out.println("Aluno aprovado. Conceito medio!"); break; default: System.out.println("Aluno reprovado!"); break; } } } Guia de Estudos para SCJA
221. Instruções de iteração (for) Utilizamos a instrução for quando queremos executar um bloco de instruções n vezes. for(<inicialização>; <condição de execução>; <pós-instruções>) { << instruções >> } Utilizamos a área inicialização para criar variáveis ou atribuir valores para variáveis já declaradas, mas todas as variáveis precisam ser do mesmo tipo, está área é executada antes de começar a estrutura de repetição do for. Utilizamos a área condição de execução para definir a lógica de parada da estrutura de repetição for. Utilizamos a área pós-instruções para executar alguma ação que deve ocorrer cada vez que as instruções dentro for forem executados. 207 Guia de Estudos para SCJA
222. Instruções de iteração (for) Exemplo1: 208 /** * Exemplo de estrutura de repetição FOR */ public class ExemploFor { public static void main(String[] args) { for(int i = 0; i <= 10; i++) { if(i % 2 == 0) { System.out.println(i + " e um numero par."); } else { System.out.println(i + " e um numero impar."); } } } } Guia de Estudos para SCJA
223. Instruções de iteração (for) Exemplo2: 209 /** * Exemplo de estrutura de repetição FOR */ public class ExemploFor2 { public static void main(String[] args) { for(int i = 0, j = 10; i <= 10; i++, j--) { if(i == j) { System.out.println("i " + i + " eh igual a j " + j); } } } } Guia de Estudos para SCJA
224. Instruções de iteração (for-each) Muitas vezes o for é utilizado para percorrer um array ou uma coleção de objetos, para facilitar seu uso foi adicionado na versão 5 do Java o for-each. 210 for(<Tipo> <identificador> : <expressão>) { <instruções> } Guia de Estudos para SCJA
225. Instruções de iteração (for-each) 211 import java.util.ArrayList; import java.util.List; /** * Exemplo de estrutura de repetição For Each. */ public class ExemploForEach { public static void main(String[] args) { String[] nomes = {"Altrano", "Beltrano", "Ciclano", "Deltrano"}; //Percorre um array. for(String nome : nomes) { System.out.println(nome); } List<Integer> valores = new ArrayList<Integer>(); valores.add(100); valores.add(322); valores.add(57); //Percorre uma coleção. for(Integer numero : valores) { System.out.println(numero); } } } Guia de Estudos para SCJA
226. Instruções de iteração (while) A instrução while executa um bloco de instruções enquanto uma determinada condição for verdadeira (true). 212 while(condição) { < instruções > } Guia de Estudos para SCJA
227. Instruções de iteração (while) Exemplo: 213 /** * Exemplo de estrutura de repetição WHILE */ public class ExemploWhile { public static void main(String[] args) { int i = 0; while(i < 10) { System.out.println(++i); } } } Guia de Estudos para SCJA
228. Instruções de iteração (do / while) A estrutura do / while tem seu bloco de instruções executados pelo menos uma vez, então se a condição ao final das instruções for verdadeira (true), então o bloco de instruções é executado novamente. 214 do { < instruções > } while(condição); Guia de Estudos para SCJA
229. Instruções de iteração (do / while) Exemplo: 215 import java.util.Scanner; /** * Exemplo de estrutura de repetição DO / WHILE */ public class ExemploDoWhile { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); int opcao = 0; do { System.out.println("Escolha uma opcao:"); System.out.println("1 - Iniciar jogo"); System.out.println("2 - Ajuda"); System.out.println("3 - Sair"); System.out.println("OPCAO: "); opcao = entrada.nextInt(); } while (opcao != 3); } } Guia de Estudos para SCJA
230. Instrução break O comando break é uma instrução de interrupção imediata de qualquer laço, seja ele qual for e independente de sua condição de parada ter sido atendida. 216 /** * Exemplo do comando break. */ public class ExemploBreak { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.println("Digite um numero de 1 a 9 exceto o 5:"); int numero = entrada.nextInt(); System.out.println("Contando de 1 ate o numero que voce digitou... "); for(int cont = 1; cont <= numero; cont++) { if(numero == 5 || numero < 1 || numero > 9) { System.out.println("Um numero invalido foi digitado!!!"); break; } System.out.println(cont + " "); } } } Guia de Estudos para SCJA
231. Instrução continue O comando continue faz com que o laço salte para sua próxima iteração. Este comando pode ser utilizado com qualquer laço. 217 /** * Exemplo do comando continue. */ public class ExemploContinue { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.println("Digite um numero de 1 a 9: (saltaremos o 5)"); int numero = entrada.nextInt(); System.out.println("Contando de 1 ate o numero que voce digitou..."); for(int cont = 0; cont <= numero; cont++) { if(cont == 5) { System.out.println("# PULANDO O 5 #"); continue; } System.out.println(cont + " "); } } } Guia de Estudos para SCJA
232. 4.4 - Com base em um algoritmo como pseudo-código, desenvolver código que aplique corretamente os operadores apropriados, incluindo operadores de atribuição (limitados a: =, +=, -=), operadores aritméticos (limitados a: +, -, *, /, %, ++, --), operadores relacionais (limitados a: <, <=, >, >=, ==, !=) e operadores lógicos (limitados a: !, &&, ||) para produzir o resultado desejado. Além disso, escrever código que determine a igualdade de dois objetos ou duas primitivas. 218
233. Operadores de atribuição Símbolo = é chamado de atribuição, utilizado para atribuir o valor de um operando a uma variável. 219 /** * Classe utilizada para demonstrar o uso do operador de atribuição ( = ). */ public class OperadorAtribuicao { public static void main(String[] args) { int x; x = 25; System.out.println(x); } } Guia de Estudos para SCJA
234. Operadores de atribuição Símbolo += é utilizado para atribuir a uma variável o valor desta variável somada ao valor de um operando. 220 /** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de adição ( += ). */ public class OperadorAtribuicaoAdicao { public static void main(String[] args) { int x = 4; x += 2; System.out.println(x); } } Guia de Estudos para SCJA
235. Operadores de atribuição Símbolo -= é utilizado para atribuir a uma variável o valor desta variável subtraindo o valor de um operando. 221 /** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de subtração ( -= ). */ public class OperadorAtribuicaoSubtracao { public static void main(String[] args) { int x = 4; x -= 2; System.out.println(x); } } Guia de Estudos para SCJA
236. Operadores relacionais Símbolo > é chamado de maior que. <operando1> > <operando2> Retorna true se o valor do operando1 for maior que o valor do operando2, caso contrario retorna false. 222 /** * Classe utilizada para demonstrar o uso do operador * relacional maior que ( > ). */ public class OperadorMaiorQue { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a > b); } } Guia de Estudos para SCJA
237. Operadores relacionais Símbolo < é chamado de menor que. <operando1> < <operando2> Retorna true se o valor do operando1 for menor que o valor do operando2, caso contrario retorna false. 223 /** * Classe utilizada para demonstrar o uso do operador relacional menor que ( < ). */ public class OperadorMenorQue { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a < b); } } Guia de Estudos para SCJA
238. Operadores relacionais Símbolo >= é chamado de maior ou igual que. <operando1> >= <operando2> Retorna true se o valor do operando1 for maior ou igual que o valor do operando2, caso contrario retorna false. 224 /** * Classe utilizada para demonstrar o uso do operador * relacional maior ou igual que ( >= ). */ public class OperadorMaiorIgualQue { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a >= b); int c = 5; System.out.println(a >= c); } } Guia de Estudos para SCJA
239. Operadores relacionais Símbolo <= é chamado de menor ou igual que. <operando1> <= <operando2> Retorna true se o valor do operando1 for menor ou igual que o valor do operando2, caso contrario retorna false. 225 /** * Classe utilizada para demonstrar o uso do operador * relacional menor ou igual que ( <= ). */ public class OperadorMenorIgualQue { public static void main(String[] args) { int a = 5; int b = 5; System.out.println(a <= b); } } Guia de Estudos para SCJA
240. Operadores relacionais Símbolo != é chamado de diferente. <operando1> != <operando2> Retorna true se o valor do o