Aula 03: Desenvolvimento de Software para Concursos - Curso Regular
Aula 03: Desenvolvimento de Software para Concursos - Curso Regular
AULA 03
SUMÁRIO PÁGINA
Apresentação 01
- Java: Conceitos Básicos 02
- Java: Sintaxe 12
- Java: Orientação a Objetos 33
- Java: Conceitos Avançados 48
Lista de Exercícios Comentados 135
Gabarito 161
Vamos falar agora sobre uma das linguagens mais famosas do mundo! Professor, o
que é Java? É uma linguagem de programação orientada a objetos, multiplataforma,
robusta, portável, segura, extensível, concorrente e distribuída. E ela é totalmente
orientada a objetos? Não! Por que não? Porque nem todos os seus tipos de dados
são objetos (possui alguns tipos primitivos: int, float, long, double, char, etc).
Só por causa disso, professor? Não, ela também não suporta Herança Múltipla!
Entendi, mas existe alguma linguagem totalmente orientada a objetos? Sim, por
exemplo: Smalltalk! E ela é uma linguagem compilada ou interpretada? Na verdade,
ela é híbrida, i.e., ela é compilada e interpretada! Professor, ouvi dizer que Java é
lento! É verdade? Atualmente, não!
Vocês sabiam que Java é uma Linguagem WORA? Pois é, esse acrônimo significa
Write Once, Run Anywhere ou Escreva uma vez, execute em qualquer lugar. Trata-se
de um slogan para exemplificar os benefícios multiplataforma da linguagem Java!
Idealmente, isso significa que um programa em Java (uma vez compilado em um
bytecode) pode rodar em qualquer equipamento que possua uma JVM!
A linguagem Java foi criada pela Sun Microsystems, que depois foi adquirida pela
16712855225
Oracle, por quem é mantida atualmente. Por que ela é uma linguagem concisa e
simples? Porque não contém redundâncias e é fácil de entender, implementar e
utilizar. Ela possui sintaxe bastante parecida com C++, facilitando o aprendizado e
a migração por novos programadores.
Professor, Java é robusta? Sim! Além de ser fortemente tipada, foi desenvolvida para
garantir a criação de programas altamente confiáveis. Ela não dispensa uma
programação cuidadosa, porém elimina alguns tipos de erros de programação
1
Compilador Just-In-Time (JIT) é o compilador que altera a maneira na qual programas em Java são executados,
geralmente otimizando-os e tornando-os mais rápidos.
Java é uma linguagem distribuída, i.e., foi projetada para trabalhar em um ambiente
de redes, oferecendo bibliotecas para facilitar a comunicação, manipulando objetos
distribuídos e oferecendo suporte à conectividade (Ex: URL, Sockets, Protocolos, etc).
Ela também é uma linguagem segura, implementando encapsulamento,
restringindo o acesso e a execução de diversos programas, tratando exceções, etc.
integridade dos dados. Por fim, ele também possui o Security Manager, utilizado
para impedir, por exemplo, que applets executem códigos arbitrariamente. Isso
impede o acesso direto a informações pela memória ou inserir código estranho.
Para finalizar, cabe salientar que Java é uma linguagem absurdamente extensível.
Por que, professor? Porque ela integra diversas bibliotecas com o código nativo, além
de permitir o carregamento dinâmico de classes em tempo de execução. Em outras
palavras, os programas são formados por uma coleção de classes armazenadas
independentemente e que podem ser carregadas no momento de utilização.
2
Garbage Collector (ou Coletor de Lixo) é o responsável pela automação do gerenciamento de memória. Ele é
capaz recuperar uma área de memória inutilizada por um programa, evitando vazamento de memória.
16712855225
16712855225
CURIOSIDADE
A Sun Microsystems declarou recentemente que existem atualmente cerca de 5.5 bilhões de
dispositivos executando uma Java Virtual Machine (JVM).
Vamos falar sobre passagem de parâmetros por valor e por referência. Vocês sabem
que, quando o módulo principal chama uma função ou procedimento, ele passa
alguns valores chamados Argumentos de Entrada. Esse negócio costuma confundir
muita gente, portanto vou explicar por meio de um exemplo, utilizando a função
DobraValor(valor1, valor2) – apresentada na imagem abaixo:
#include <stdio.h>
int main()
{
int valor1 = 5;
int valor2 = 10;
return();
}
Essa função recebe dois valores e simplesmente multiplica sua soma por dois. Então
o que acontece se eu passar os parâmetros por valor para a função? Bem, ela
receberá uma cópia das duas variáveis e, não, as variáveis originais. Logo, antes de
a função ser chamada, os valores serão os valores iniciais: 5 e 10. Durante a chamada,
ela multiplica os valores por dois, resultando em: 10 e 20.
Valor 1 = 5
Valor 2 = 10
Valores dentro da Função:
Valor 1 = 10
Valor 2 = 20
Valores depois de chamar a Função:
Valor 1 = 5
Valor 2 = 10
Após voltar para a função principal, os valores continuam sendo os valores iniciais:
5 e 10, como é apresentado acima na execução da função. Notem que os valores
só se modificaram dentro da função DobraValor( ). Por que, professor? Ora, porque foi
passada para função apenas uma cópia dos valores e eles que foram multiplicados
por dois e, não, os valores originais.
#include <stdio.h>
void DobraValor(int *valor1, int *valor2)
{
*valor1 = 2*(*valor1);
*valor2 = 2*(*valor2);
printf("Valores dentro da Função: \nValor 1 = %d\n Valor 2 = %d\n", *valor1,
*valor2);
}
int main()
{
int valor1 = 5;
int valor2 = 10;
return();
}
Professor, o que ocorre na passagem por referência? Bem, ela receberá uma
referência para as duas variáveis originais e, não, cópias. Portanto, antes de a função
ser chamada, os valores serão os valores iniciais: 5 e 10. Durante a chamada, ela
multiplica os valores por dois, resultando em: 10 e 20. Após voltar para a função
principal, os valores serão os valores modificados: 10 e 20.
fora também (na função principal). Por que isso ocorreu, professor? Ora, porque foi
passada para função uma referência para os valores originais e eles foram
multiplicados por dois, voltando à função principal com os valores dobrados! Por
isso, os valores 10 e 20.
JAVA: EMPACOTAMENTO
Uma vez criada uma pasta (que será um pacote), deve-se definir para as classes a
qual pacote elas pertencem. Isso é feito pela palavra-reservada package:
package br.com.site.pacoteEstrategia;
Essa deve ser a primeira linha de comando a ser compilada na classe. Java possui
vários pacotes com outros pacotes internos e várias classes já prontas para serem
utilizadas. Dentre os pacotes, podemos determinar dois grandes: o pacote java, que
possui as classes padrões para o funcionamento da linguagem; e o pacote javax, que
possui pacotes de extensão que fornecem ainda mais classes e objetos.
import javax.swing.JOptionPane;
JAVA: RAÍZ
Cada classe, na hierarquia de classes, representa uma camada que adiciona diversas
capacidades a um objeto. No topo desta hierarquia você sempre vai encontrar uma
classe chamada de Object (Objeto). Qualquer classe estende implicitamente (sem
necessidade de declarar) a classe Object. Claro que, na maioria das vezes, isso ocorre
indiretamente. Bacana, pessoal?
16712855225
JAVA: SINTAXE
JAVA: IDENTIFICADORES
Deve ser a combinação de uma ou mais letras e dígitos UNICODE-16: Letras: A-Z;
Letras: a-z; Underscore: _ ; Cifrão: $ ;Números: 0-9.
//CORRETO
int MyVariable, myvariable, MYVARIABLE;
int x, i, , OReilly;
int _myvariable, $myvariaBle, _9pins;
//INCORRETO
int My Variable; //Contém espaço
int 9pins; //Começa com um dígito
int a+c, test-1, o'reilly&; //Contém caractere não-alfanumérico
16712855225
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone {
public static void main (String[] args) throws java.lang.Exception
{ //Início Bloco 1
int a = 10;
int b = 1;
if (b==3)
{ //Início Bloco 2
b = a*10;
}
else
{ //Início Bloco 3
int a = 100;
b = a*10;
}
System.out.println("O valor de b é " + b);
}
}
16712855225
JAVA: COMENTÁRIOS
Os comentários, como o próprio nome preconiza, são notas que podem ser
incluídas no código-fonte de um programa para descrever o que o desenvolvedor
desejar. Dessa forma, eles não modificam o programa executado e servem somente
para ajudar o programador a melhor organizar os seus códigos. Os comentários
em Java seguem a mesma sintaxe da linguagem C++:
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone {
public static void main (String[] args) throws java.lang.Exception {
/**
* Comentário de mais de uma linha!
**/
int a = 10;
int b = (int)(a*3.141592); //Comentário de única linha!
16712855225
Espera, professor! Mas eu contei e deu 49 palavras! É que null true false não são
consideradas tecnicamente palavras-reservadas, mas valores literais. No entanto,
isso é só tecnicamente, porque caso se tente criar identificadores com essas
palavras, resultará em erro de compilação. Vamos ver todas as palavras reservadas?
A tabela abaixo apresenta cada uma e sua descrição:
Palavras Descrição
abstract Aplicado a um método ou classe indica que a implementação completa deste
método ou classe é efetuada posteriormente, por uma subclasse. Caso seja
uma classe, significa que ela não pode ser instanciada.
boolean É um tipo de dados cujos valores podem ser true ou false.
byte Tipo de dados inteiros com sinal, armazenado em formato binário na notação
de complemento a dois e tamanho de 8 bits.
catch É utilizado juntamente com try, seu bloco é executado somente em caso de o
programa lançar uma exceção do tipo indicado no seu parâmetro.
class Para definir o início de um arquivo Java, todas as classes possuem pelo
menos essa palavra-chave.
const Essa palavra não tem uso específico em Java mas mesmo assim é uma
palavra-chave.
do Estrutura de repetição que garante que o bloco será executado pelo menos
uma vez durante a execução do programa.
extends Utilizado para aplicar o conceito de herança para uma classe, onde uma
classe receberá os métodos e variáveis de instância da classe chamada de
pai.
final Marca uma variável, classe ou método para que não seja possível modificar
o seu valor ou comportamento no decorrer da execução do programa.
tratamento de erros, mais utilizado para limpar recursos que foram abertos
no bloco de tratamento.
float Variáveis numéricas e de pontos flutuantes com precisão de 32 bits.
for Estrutura de repetição que declara, testa e incrementa variável para uso
local.
implements Informa que uma determinada classe irá implementar uma determinada
interface.
import Para relacionar classes externas à atual, permitindo o uso de nomes mais
curtos para recursos da classe externa.
interface Informa que o modelo não é uma classe, mas sim um protótipo de classe sem
implementação para os métodos, obrigando as classes que a implementarão
a seguir as determinadas regras.
long Para variáveis numéricas de precisão de 64 bits.
native Métodos marcados como native dizem que sua implementação é feita em uma
outra linguagem (por exemplo, C), para que se possa acessar recursos
específicos do sistema operacional.
new Utilizada para se criar novas instâncias de objetos.
16712855225
public Marca a visibilidade de uma classe, método ou variável de instância para que
todas as classes em todos os pacotes tenham acesso.
return Devolve para o método chamador de um valor que é do mesmo tipo declarado
na assinatura do método.
static Marca um método ou variável para que se tenha apenas uma cópia da
memória desse membro.
switch Representa blocos de decisões de fluxos semelhantes ao if, mas com mais
organização em determinadas situações.
synchronized Um método com essa marcação será controlado para que não se possa ter
duas threads acessando o mesmo objeto.
throws É utilizado para se declarar que um método pode lançar uma exceção.
transient Indica que uma determinada variável de instância não será serializada junto
com o objeto da classe.
try Para executar métodos que têm chances de lançar exceções, mas que serão
tratados em blocos catch que o seguirão.
void Representa um retorno vazio, i.e., nenhum retorno para esse método.
volatile Indica que uma determinada variável de instância pode ser modificada em
duas threads distintas ao mesmo tempo.
while Bloco de repetição que será executado enquanto seu parâmetro estiver
retornando true.
16712855225
Variáveis do tipo byte, short, int e long, por exemplo, podem ser usadas para representar
números inteiros, variando em diferentes faixas de valores, embora os tipos int e long
sejam os mais utilizados. O mesmo acontece com variáveis do tipo float double, que
são usadas para representar números reais. O tipo boolean é usado para declarar
variáveis que podem assumir um os valores: true ou false.
Galera, vou enfatizar isso novamente porque é realmente importante! String não é
um Tipo Primitivo! Bacana? String não é um Tipo Primitivo, nunca foi e jamais será
um Tipo Primitivo. Além disso, a Classe String pertence ao pacote Lang e herda
diretamente de Object. Outra coisa: posso escrever números na forma decimal (8),
octal (08) ou hexadecimal (0x8).
OBSERVAÇÕES
O valor-padrão para um número decimal é Double; se o programador quiser que seja Float,
deve enviar como parâmetro o valor acrescido da letra f (Ex: 3.14f). Da mesma forma, o
valor-padrão para inteiro é um int. O único tipo primitivo que não pode ser atribuído a
nenhum outro tipo é o boolean.
16712855225
JAVA: OPERADORES
Os operadores são sinais que representam atribuições, cálculos e ordem dos dados.
As operações seguem uma ordem de prioridades, ou seja, alguns cálculos são
processados antes de outros, assim como ocorre na matemática. Para manipular os
valores das variáveis de um programa, devemos utilizar os operadores oferecidos
pela linguagem de programação adotada.
Operadores Aritméticos: +, -, *, /, %.
$Numero = 2 + 8; //$Numero = 2 + 8 = 10
$Numero = 8 - 2; //$Numero = 8 - 2 = 6
$Numero = 2 * 8; //$Numero = 2 * 8 = 16
$Numero = 8 / 2; //$Numero = 8 / 2 = 4
$Numero = 2 % 8; //$Numero = 2 % 8 = 8 (Resto da divisão de 2 por 8)
Operadores de Atribuição: =, +=, -=, *=, /=, %=, ++, --. 16712855225
int Variavel_2 = 4;
int Variavel_3 = 8;
boolean Teste = $celta instanceof Carro; //TRUE: $celta é uma instância de Carro
boolean Teste = $cg500 instanceof Carro; //FALSE: $cg500 não é uma instância de Carro
//Caso 1: y = 2 e x = 2
int x = 0;
int y = x++ + ++x;
//Caso 2: y = 1 e x = 2
int x = 0;
int y = x++ + x++;
//Caso 3: y = 3 e x = 2
int x = 0;
int y = ++x + ++x;
//Caso 4: y = 2 e x = 2
int x = 0;
int y = ++x + x++;
boolean $Variavel;
int $Variavel;
$Variavel = 34 & 435; //000100010 & 110110011 = 100010 = 34 (Operação AND)
$Variavel = 34^46; //000100010 ^ 000101110 = 000001100 = 12 (Operação XOR)
$Variavel = 436|547; //0110110100 | 1000100011 = 1110110111 = 951 (Operação OR)
16712855225
JAVA: VETORES
//Declaração 1
tipo[] identificador1;
tipo identificador1[];
//Declaração 2
tipo[] identificador2 = new tipo[];
tipo identificador2[] = new tipo[];
//Inicialização 1
int[] Vetor1 = {34,27,91,56};
//Inicialização 2 (Inválida)
int[] Vetor2 = new int[4];
Vetor2 = {34,27,91,56};
//Inicialização 3
int[] Vetor3 = new int[4];
Vetor3[0] = 34;
Vetor3[1] = 27;
Vetor3[2] = 91;
Vetor3[3] = 56; 16712855225
class Ideone {
public static void main (String[] args) throws java.lang.Exception {
System.out.println("Conversão Implícita:");
double a1 = 10*5.2 + 4 - 1.3;
System.out.println("Variável a1 = " + a1);
double a2 = 5/2; 16712855225
System.out.println("\nConversão Explícita:");
int a4 = (int) (10*5.2 + 4 - 1.3);
System.out.println("Variável a4 = " + a4);
int a5 = (int) (5/2.0);
System.out.println("Variável a5 = " + a5);
}
}
Conversão Implícita:
Variável a1 = 54.7
Conversão Explícita:
Variável a4 = 54
Variável a5 = 2
16712855225
Se esse valor for true, então o outro comando é executado; se for false, a execução
do programa segue adiante. A sintaxe do if-else é apresentada abaixo:
if(CondiçãoBooleana) {
comando1;
comando2;
(...)
comandoN;
}
else {
comando1;
comando2;
(...)
comandoN;
}
Uma variação desse comando, o if-else permite escolher alternadamente entre dois
outros comandos a executar. Nesse caso, se o valor da expressão condicional que
define o critério de seleção for true, então o primeiro dos outros dois comandos é
16712855225
int idade;
if (idade <= 1)
System.out.println( Bebê );
else if(idade > 1 && idade <= 10)
System.out.println( Criança );
else if(idade > 10 && idade <= 13)
System.out.println( Pré-adolescente );
else if(idade > 13 && idade <= 18)
System.out.println( Adolescente );
else
System.out.println( Adulto );
switch([expressão]) {
case [constante 1]:
[comando 1]
break;
case [constante 2]:
[comando 2]
break;
...
case [constante n]:
[de comando n]
break;
default:
[comando]
}
A [expressão] pode ser qualquer expressão válida. Ela é avaliada e o seu valor
resultante é comparado com as constantes distintas [constante 1], [constante 2], ...,
[constante n]. Caso esse valor seja igual a uma dessas constantes, o respectivo
comando é executado (e todos os demais são saltados). Se o valor for diferente, o
comando presente sob o rótulo default: é executado. Vejamos outro exemplo:
int mesAtual = 5;
switch (mesAtual) {
case 1:
System.out.println("Janeiro"); break;
case 2:
System.out.println("Fevereiro"); break;
case 3:
System.out.println("Março"); break;
case 4:
System.out.println("Abril"); break;
case 5:
16712855225
System.out.println("Maio"); break;
case 6:
System.out.println("Junho"); break;
case 7:
System.out.println("Julho"); break;
case 8:
System.out.println("Agosto"); break;
case 9:
System.out.println("Setembro"); break;
case 10:
System.out.println("Outubro"); break;
case 11:
System.out.println("Novembro"); break;
case 12:
System.out.println("Dezembro"); break;
default:
System.out.println("Mês inválido.");
}
Se o valor for true, então o comando subjacente é executado; se a expressão for false,
então o comando é saltado e a execução prossegue adiante. A diferença é que após
executar o comando subjacente, a expressão condicional é novamente avaliada e
seu resultado novamente considerado. Desse modo a execução do comando
subjacente se repetirá até que o valor da expressão condicional seja false.
while ([condição])
[comando subjacente]
Deve-se ter cuidado para não acabar implementando um laço infinito (desde que
essa não seja sua intenção). Um laço infinito é um laço em que a condição de saída
nunca é satisfeita, portanto ele roda eternamente. Uma variação do comando while
que funciona de maneira bastante análoga é o do-while. A diferença é que ele é pós-
testado, isto é, executa os comandos internos e só depois avalia a condição.
do
[comando] 16712855225
while ([condição]);
[expressão 1]
while ([condição]) {
[comando]
[expressão 2]
}
Resultado:
...
do {
System.out.println("Minha idade é " + idade);
idade = idade + 1;
} while (idade > 30)
Resultado:
Minha idade é 26
int idade;
Resultado:
Minha idade é 26
Minha idade é 27
Minha idade é 28
Minha idade é 29
16712855225
JAVA: CLASSES
A classe é a planta ou esquema que indica como os objetos são criados, quais os
seus comportamentos e variáveis de estado. Para declarar uma classe, é necessário
utilizar a sintaxe a seguir:
Portanto para declarar uma classe, deve-se colocar a palavra class seguida de um
identificador que irá servir de nome para a classe. O identificador pode ser qualquer
palavra, exceto palavras reservadas. Por exemplo: class Conta introduz a declaração
de uma nova classe chamada Conta. Note que, por convenção, o nome de uma classe
inicia sempre com uma letra maiúscula. A Palavra-Chave é opcional, podendo ser:
16712855225
JAVA: OBJETOS
Um objeto é uma instância de uma classe. Para criar um objeto, devemos utilizar a
seguinte sintaxe:
new construtor();
16712855225
JAVA: ATRIBUTOS
Um atributo ou campo é uma variável declarada no corpo de uma classe. Ele serve
para armazenar o estado de um objeto (atributo de instância) ou o estado de uma
classe (atributo de classe). A sintaxe de declaração de um atributo é a seguinte:
class Empregado
{
final String Nome; //Indica que Nome é um atributo constante;
volatile Salario; //Indica que Salário é modificável por threads distintas;
static Idade; //Indica que Idade é compartilhada por todos objetos;
transient Sexo; //Indica que Sexo não pode ser serializável;
}
Modificadores de Acesso:
class Empregado
{
public String nome; //Nome: público
private int Salario; //Salário: privado
protected short Idade; //Idade: protegido
char Sexo; //Sexo: default
}
16712855225
JAVA: MÉTODOS
Java utiliza métodos para se referir a trechos de código que são associados a classes.
Se os atributos servem para manter ou armazenar o estado ou o valor de um objeto,
os métodos servem para descrever os comportamentos de um objeto ou classe. Um
método é muito similar a uma função em C. A maior diferença é que os métodos
da linguagem Java são declarados completamente dentro de uma classe.
//Indica que esse método só pode acessar atributos de classe e não pode ser sobrescrito
static int soma (int a, int b) {//...//}
//Indica que esse método só é executável por uma thread por vez
synchronized soma (int a, int b) {//...//}
Modificadores de Acesso:
Professor, não entendo uma coisa! Em geral, no código da classe não há nenhum
método com o nome do método construtor. Ora, não há declaração de método
Outro método muito importante é o Método Main! Pois é, ele é sempre definido
como um método de classe, i.e., possui um modificador static:
16712855225
JAVA: HERANÇA
Se levarmos as categorias Carro e Moto para um outro nível mais elevado, as duas
se relacionarão uma com a outra por serem instâncias específicas de uma categoria
mais genérica ainda que elas: a categoria Veículo. Em outras palavras, carros e
motos são veículos. A imagem abaixo esquematiza as relações entre Pálio, Carro,
Honda CG 125, Moto e Veículo.
16712855225
Esse exemplo ilustrou a Herança Simples! Neste caso, uma entidade herda estados
e comportamentos (atributos e métodos) de uma e somente uma categoria. O Pálio,
por exemplo, herda da categoria Carro (e somente dela, diretamente). Em contraste,
a Herança Múltipla permite que uma entidade herde diretamente comportamentos
e estados de duas ou mais categorias ao mesmo tempo.
Imagine um Empregado chamado José de uma empresa qualquer. Para ser mais
específico, pense em José como sendo tanto Gerente quanto Contador
A sintaxe da herança sugere que você pode estender uma e somente uma classe.
O Java não suporta Herança Múltipla, porque – segundo projetistas da linguagem
– esse tipo de implementação poderia gerar confusão. Imagine, por exemplo, duas
classes-base declarando um atributo que possua o mesmo nome mas com tipos
diferentes. Qual dos dois a classe-filha deveria herdar?
o mesmo nome, mas diferentes listas de parâmetros ou tipos de retorno, qual deles a
subclasse deveria herdar? Vocês percebem como isso poderia causar inconsistências
de projeto? Para prevenir tais problemas, a linguagem Java rejeita a implementação
de herança múltipla.
Essa sintaxe pode ser lida da seguinte forma: NomeClasseFilha estende NomeClassePai. Em
outras palavras, NomeClasseFilha herda (ou deriva) capacidades (expressas através de
atributos e métodos) de NomeClassePai. A NomeClasseFilha é conhecida como subclasse,
classe derivada ou classe-filha e NomeClassePai é conhecida como superclasse, classe-
base ou classe-pai.
A palavra-chave extends faz com que uma subclasse herde (receba) todos os atributos
e métodos declarados na classe-pai (desde que ela não seja final), incluindo todas
as classes-pai da classe-pai. A classe-filha pode acessar todos os atributos e
métodos não-privados. Ela herda, mas não acessa (ao menos diretamente) métodos
e atributos privados.
Todo objeto criado a partir de uma subclasse é também um objeto do tipo da sua
superclasse (Ex: um objeto do tipo Carro também é um objeto do tipo Veículo). Essa
afirmação implica o fato de que você pode atribuir um objeto de uma subclasse
para uma referência criada ou declarada para um objeto de sua superclasse. Como
assim, professor? Vejamos!
A linha de código acima cria um objeto do tipo Carro e atribui sua referência à
variável v. Note que essa variável v é uma variável que armazena referências para
objetos do tipo Veículo. Esse tipo de atribuição é perfeitamente possível, já que um
Carro é uma subclasse de Veículo. Através da variável v, é possível chamar os
métodos que pertencem ao tipo Veículo. 16712855225
Portanto, pode-se utilizar esse artifício de nomeação para transformar uma classe-
filha em qualquer uma de suas classes-pai. Professor, é possível fazer o inverso?
Pode-se atribuir uma classe-pai a uma classe-filha? Não, isso só pode ser feito por
meio de um type cast. Assim, uma variável pode assumir momentaneamente outro
tipo para que o programador possa utilizá-la.
JAVA: ENCAPSULAMENTO
Pessoal, nós já sabemos que para se descobrir o que um objeto pode fazer, basta
olhar para as assinaturas de seus métodos públicos definidos na classe desse objeto
– que formam uma interface de uso. A assinatura de um método é composta pelo
seu nome e seus parâmetros. Por outro lado, para descobrir como um objeto realiza
suas operações, deve-se observar o corpo de cada um dos métodos da classe.
Da mesma forma, ele ajuda a manutenção, visto que para torna-se mais difícil fazer
“besteiras” no código e atrapalhar manutenções futuras. Trazendo isso para a vida
real, lidamos com encapsulamento o tempo inteiro. Você sabe como usar um
controle remoto, mas você não sabe como ele funciona internamente. Encapsula-
se seu funcionamento interno e disponibiliza-se apenas sua interface ao usuário.
<public>: essa instrução indica que a classe, método ou atributo assim declaradas
podem ser acessadas em qualquer lugar e a qualquer momento da execução do
programa – é o modificador menos restritivo.
<private>: essa instrução indica que métodos ou atributos (classes, não) assim
declaradas podem ser acessadas dentro da classe que os criou. Subclasses até
herdam-nos, mas não os acessam – é o modificador mais restritivo.
<protected>: essa instrução indica que métodos ou atributos (classes, não) assim
declaradas somente podem ser acessadas dentro do pacote em que está contida
ou por subclasses no mesmo pacote.
<default> também chamado friendly, não há palavra para esse modificador porque
ele é, na verdade, a ausência de um modificador. Indica-se que a classe, método
ou atributo podem ser acessadas por classes do mesmo pacote.
OBSERVAÇÃO
É importante ressaltar que, em caso de não haver modificador, a subclasse pode ou não
acessar os métodos e atributos da sua superclasse, e isso depende da localização da
subclasse. Se ela estiver em um pacote diferente do pacote da superclasse, não poderá
acessar. Se estiver em um mesmo pacote da superclasse, poderá acessar. Logo, para
diferenciar o Modificador Pacote do Modificador Protegido, deve-se saber primeiramente se
é desejável que a subclasse possa ter acesso a atributos e métodos da classe.
class Classe1 {
//Atributo privado
private String Algo;
16712855225
JAVA: INTERFACE
Professor, qual a diferença entre uma Interface e uma Classe Abstrata? Bem,
Interfaces não são classes; são, na verdade, entidades que não possuem qualquer
implementação, apenas assinatura, sendo que todos os seus métodos são públicos
e abstratos. Já as Classes Abstratas também contêm, em geral, métodos abstratos
(sem corpo), mas podem ter vários métodos concretos.
16712855225
Uma Classe Abstrata pode, inclusive, não conter nenhum método abstrato, i.e.,
todos os seus métodos são concretos. No entanto, se uma classe tiver um único
método abstrato que seja, ela será considerada uma Classe Abstrata. Aliás, uma
Interface é também chamada de classe abstrata pura por conta disso, ou seja, não
há impurezas (isto é, métodos concretos).
JAVA: POLIMORFISMO
Polimorfismo Estático: ocorre quando uma classe possui métodos com mesmo
nome, entretanto assinaturas diferentes, i.e., métodos de uma mesma classe se
sobrecarregando. Pode ser chamada também de Sobrecarga ou Overloading.
Ocorre em Tempo de Compilação e alguns não o consideram um tipo de
polimorfismo, porque a assinatura é diferente.
Professor, o que você quer dizer com mesma assinatura e assinatura diferente? É a
mesma quantidade, tipo e ordem dos parâmetros. Em outras palavras:
Dito isso, vou criar dois animais do meu gosto pessoal: um gato e um cachorro!
Bem, o gato é um animal! Que relacionamento é esse “é um”? Herança! Portanto as
classes gato e cachorro serão classes filhas da superclasse Animal. Observem abaixo
que ambas implementam o método abstract void som( ), porém cada uma a sua
maneira, visto que gatos e cachorros emitem sons diferentes!
16712855225
Olha que bacana: existem dois métodos com exatamente o mesmo nome e mesma
assinatura! Como o compilador saberá qual deve ser chamado? Ele não saberá – tem
que ser em tempo de execução. No primeiro momento, ele apresentará “MIAU!”,
porque animal é nesse instante um gato. Depois fazemos outra atribuição e ele
apresentará “AUAU”, porque animal naquele instante é um cachorro.
O Polimorfismo Estático é bem mais simples! Imaginem que eu deseje fazer dois
cálculos matemáticos. Primeiro somar três números e depois somar apenas dois
números. Eu posso ter dois métodos com mesmo nome, mas assinaturas diferentes.
Dessa forma, se eu passar três valores, ele saberá que é um método; e se eu passar
dois valores, ele saberá que é outro método. Simples, não?
class Calculo {
OBSERVAÇÃO
16712855225
O AWT (javax.awt) veio primeiro, é mais pesado, é gerado pelo sistema operacional,
logo é dependente de plataforma. O Swing (javax.swing) é mais leve, é gerado por
uma Máquina Virtual Java (JVM), logo é independente de plataforma. Galera, nem
tudo é diferente! Vejam: ambos são fáceis de programar, porque a orientação a
objetos proporciona alterar partes do programa, sem alterar toda a estrutura.
16712855225
Bem, os itens que aparecem em uma interface gráfica de interação com usuário
(janelas, caixas de texto, botões, listas, caixas de seleção, entre outros) são chamados
de componentes. Alguns componentes podem ser colocados dentro de outros
componentes, por exemplo, uma caixa de texto dentro de uma janela. Abaixo
podemos ver a definição básica dos principais componentes:
JFrame: define janelas com título, borda e alguns itens definidos pelo sistema
operacional como botão para minimizar ou maximizar;
JButton: permite que os usuários indiquem quais ações ele deseja que a
aplicação execute; 16712855225
Ele controla os componentes que estão dentro do componente ao qual ele está
associado. Os principais Layout Managers são:
16712855225
16712855225
Professor, e o Look and Feel (L&F)? O “Look” se refere a aparência e o “Feel” se refere
ao comportamento dos componentes. É como se fosse um skin, um tema,
customizável ou não. O Java oferece algumas opções: CrossPlatformLookAndFeel (ou
Metal), que parece o mesmo em qualquer plataforma; SystemLookAndFeel, que usa o L&F
nativo do sistema utilizado; e Synth, que permite criar novos.
Você pode descobrir quais tipos de eventos um componente pode disparar ao olhar
seus tipos de Event Listeners! Para criar um Listener, devemos implementar a
interface correspondente ao tipo de evento que queremos tratar. Por exemplo:
MouseListener: utilizado quando se deseja tratar eventos como cliques dos botões
do mouse (ex: duplo-clique, clique-arrasta, etc).
o tipo de evento. Então, o componente pega esse ID para decidir qual tipo de
ouvinte será útil, decidindo qual o método que vai chamar para cada objeto listener.
O evento é despachado por todas as decisões que são tratadas para o usuário
através dos componentes GUI. Sendo necessário ser feito, pois precisa ser registrado
um handler de evento para o tipo particular de evento que o aplicativo exige. O
componente vai assegurar que o método apropriado do handler de evento é
chamado quando o evento ocorrer.
Pessoal, todo JComponent pode ter um ou mais bordas. As bordas são objetos
inacreditavelmente úteis que, não sendo componentes, sabem como desenhar as
margens dos componentes. Elas são úteis não só para desenhar linhas e margens
elegantes, mas também para fornecer títulos e espaços vazios em componentes.
Para colocar uma borda em um JComponent, deve-se usar o método setBorder.
Pode-se usar a classe BorderFactory para criar a maioria das bordas fornecidas. Se você
precisar de uma referência para determinada uma borda, você pode salvá-la em
uma variável do tipo Border, que conterá sua borda customizada. Abaixo podemos
ver uma borda linear e, em seguida, vários outros tipos de bordas diferentes!
Observem a diversidade disponível...
16712855225
Trata-se de um tipo de dados especial que habilita uma variável a ser um conjunto
pré-definido de constantes. A variável deve ser igual a um dos valores que foram
predefinidos para ela. Exemplos comuns incluem direções de uma bússola ou os
dias da semana. Por que? Porque são valores constantes! Ademais, lembrem-se que
eles sempre vêm em letra maiúscula. A sintaxe básica inclui a palavra-reservada enum:
Professor, qual é? O que tem demais em uma lista de constantes? Calma, amigão!
Nós podemos adicionar alguns valores a essas constantes, mas para isso devemos
primeiro declarar um construtor para, então, inicializar os atributos com os valores.
Por exemplo, a distância para o sol em milhões de quilômetros! O construtor tem
apenas um argumento porque a constante tem apenas um valor. Bacana?
Planetas(int distanciaSol) {
this.distanciaSol = distanciaSol; }
}
JAVA: ANOTAÇÕES
Professor, por que arquivos de configuração são tão detestáveis? Cara, porque muitas
vezes eles tornam extremamente difíceis a compreensão de alguns sistemas. As
anotações são mais simples, discretas, compreensíveis e podem efetivamente ajudar
na automatização de algumas tarefas. Arquivos de Configuração são, algumas
vezes, complexos, grandes, chatos e difíceis de entender.
A Anotação, como o próprio nome diz, é uma forma de anotar, marcar, apontar
classes, campos ou métodos, de tal maneira que essas marcações possam ser
tratadas por um compilador, ferramentas de desenvolvimento e bibliotecas. Ela
provê dados sobre um programa, mas não faz parte dele em si, isto é, elas não
afetam diretamente a operação do código que elas anotam.
Elas podem fornecer informações sobre o código que está sendo escrito ou até
mesmo do próprio programa, semelhante a comentários. No entanto, elas podem
ser utilizadas como um objeto semântico de compiladores, isto é, facilita bastante a
vida dos compiladores. Dessa forma, eles podem entender que, por exemplo, não
é para mostrar mensagens de advertências (os famosos warnings).
Eles podem, inclusive, utilizar anotações para detectar erros de código; ou mesmo
para criar documentações por meio de XML. Algumas anotações podem ser
avaliadas em tempo de execução e podem possuir elementos ou não. Professor,
16712855225
@annotation
Por convenção, elas vêm antes do elemento que se deseja anotar (Ex: Antes do
método ou classe). Abaixo temos uma lista com as anotações mais utilizadas:
@Deprecated: indica que um método tem seu uso desencorajado por ser perigoso
ou por ter uma alternativa melhor desenvolvida;
E que tal inventar sua própria anotação? Cara, é muito fácil e semelhante a interfaces!
Tão parecido que se utiliza a mesma palavra, mas precedida de um @. Vejamos:
Classes Aninhadas
Classes Locais
Classes Anônimas
Java permite definir uma classe dentro de outra classe. Essa classe é conhecida como
Classe Aninhada e é ilustrada acima! Elas se dividem em duas categorias: estáticas
e não-estáticas. Classes Aninhadas que são declaradas com static são chamadas
Classes Aninhadas Estáticas. Já as Classes Aninhadas Não-Estáticas são chamadas
mais comumente de Classes Internas – como podemos ver abaixo:
class ClasseExterna {
...
static class ClasseAninhadaEstatica {
...
}
class ClasseInterna {
...
}
}
16712855225
As Classes Externas só podem ser declaradas como public ou default. Aí vocês devem
estar se perguntando: por que usar classes aninhadas? Cara, é uma maneira de
agrupar logicamente classes que são utilizadas em apenas um lugar. Se você possui
uma Classe B que com certeza será usada apenas dentro da Classe A, o melhor é
criar a Classe B como interna a Classe A.
Por fim, ela pode levar a códigos mais legíveis e fáceis de dar manutenção! Colocar
classes pequenas dentro de classes não-aninhadas, já que apenas essa a utilizará,
faz com que a lógica da classe não-aninhada seja mais fácil de ser identificada,
consequentemente tornando o código mais legível e de fácil manutenção. Essas são
apenas algumas das vantagens de se utilizar classes aninhadas.
Bem como métodos e variáveis de classe, uma classe aninhada estática é associada
à sua classe exterior. E assim como métodos de classes estáticas, uma classe
aninhada estática não pode se referir diretamente a variáveis ou métodos de
instância definidos na Classe Exterior. Elas são acessadas utilizando o nome da classe
externa: ClasseExterna.ClasseAninhadaEstatica.
Vamos falar um pouco sobre as Classes Internas! Da mesma forma que métodos e
variáveis de instância, uma classe interna é associada a uma instância de sua classe
externa e tem acesso direto a métodos e campos desse objeto. Além disso, como
uma classe interna é associada a uma instância, ela não pode definir nenhum
membro estático.
Objetos que são instâncias de uma classe interna existem dentro da instância de
uma classe externa. Entenderam isso? Uma instância da classe interna só pode existir
16712855225
dentro de uma instância da classe externa, e tem acesso direto aos métodos e
campos de sua instância externa. Para instanciar uma classe interna, deve-se
primeiro instanciar a classe externa, como segue:
Reflection pode permitir que aplicações executem operações que, por muito tempo,
se pensou impossível. Ele permite criar chamadas em tempo de execução, sem
precisar conhecer as classes e objetos envolvidos quando escrevemos nosso código.
Esse dinamismo é necessário para resolvermos tarefas que nosso programa só
descobre serem necessárias ao receber dados, em tempo de execução.
Essa tecnologia possibilita listar todos os atributos de uma classe e pegar seus
valores em um objeto; instanciar classes cujo nome só vamos conhecer em tempo
de execução; invocar métodos dinamicamente baseado no nome do método como
String; descobrir se determinados pedaços do código têm annotations. É um recurso
muito poderoso!
A partir daí, o compilador não permitirá que elementos não compatíveis com o tip
escolhido sejam adicionados na coleção. Isso garante o tipo do elemento no
momento em que ele é recuperado da coleção e elimina a necessidade de casting.
16712855225
Mas não só isso, esse método seria capaz de ordenar tanto um vetor de inteiros
como um vetor de String, ou qualquer outro tipo. Nossa tecnologia permite que
programadores especifiquem, com uma simples declaração de método, um
conjunto de métodos relacionados; ou, com uma simples declaração de classes, um
conjunto relacionado de tipos respectivamente.
Observem que se a idade informada for maior ou igual a zero, realiza-se uma
determinada operação; se for menor que zero (negativa), retorna-se o Código de
Erro 100 – para que o programador saiba o que ocorreu. Qual o problema dessa
abordagem? Primeiro, exige uma vasta documentação indicando o que significa
cada código de erro (Ex: 100 = Valores negativos; 200 = Sem permissão de escrita).
16712855225
Ele busca realizar o tratamento dos locais do código que podem vir a lançar
possíveis exceções. Java possui a classe Throwable, que modela todos os tipos de erros
de execução e que se divide em duas subclasses Error e Exception. A primeira define
erros que não devem ser capturados pelas aplicações, pois representam erros
graves que não permitem que a execução continue de maneira satisfatória3.
Bem, sempre que um método de alguma classe for passível de causar algum erro
previsto, nós podemos utilizar um método de tentativa chamado try. Tudo que
estiver dentro do bloco try será executado até que alguma exceção seja lançada, ou
seja, até que algo dê errado. Quando uma exceção é lançada, ela sempre deve ser
capturada. O trabalho de captura da exceção é executado pelo bloco catch.
3
Exemplo: estouro de memória.
É útil para liberar recursos do sistema quando utilizamos, por exemplo, conexões de
banco de dados e abertura de buffer para leitura ou escrita de arquivos. finally virá
após os blocos de catch. Portanto, o try indica que um bloco de código pode ocorrer
erro; o catch tem o objetivo de capturar, manipula e trata erros; e o finally busca
realizar ações mesmo após a captura de erros. Vejamos a estrutura básica:
//Tratamento da exceção
} finally { //Não vem sozinho: try/finally ou try/catch/finally.
Por fim, vamos falar da propagação de exceções! Imagine uma situação em que
não é desejado que uma exceção seja tratada na própria classe ou método, mas
sim em outra classe ou método que venha lhe chamar. Para solucionar tal situação
utilizamos o a cláusula throws na assinatura do método indicando explicitamente a
16712855225
Em outras palavras, utilizamos throws para indicar que qualquer um que chame
aquele método deve tratar suas possíveis exceções. No entanto, algumas vezes
podemos fazer com que um método lance um throwable (em geral, do tipo exceção)
sem exigir que aqueles que chamem esse método tratem essa exceção – para tal,
utilizamos throw. Sintaxe abaixo:
16712855225
E aqueles sistemas que você utiliza no seu trabalho em que várias pessoas acessam
para fazer coisas diferentes? Pois é, já que essas atividades são relativamente
independentes entre si, elas podem ser executadas em paralelo. Vocês concordam
comigo? Na verdade, a maioria dos softwares realizam diversas tarefas
paralelamente sem nós percebermos!
Quando nós executamos essas tarefas em paralelo, estamos usando Threads! Vocês
sabem o que essa palavra significa em português? Fios ou Linhas! Em outras palavras,
criamos linhas de execução de tarefas paralelas em memória – cada linha
responsável por executar alguma coisa simultaneamente e relativamente
independentes. Em Java, as Threads são objetos presentes no Pacote java.lang.
16712855225
New: uma nova thread começa seu ciclo de vida no estado new e permanece nele
até o programa inicializar a thread – é como se ela tivesse nascido.
Runnable: após uma nova thread ter sido inicializada, a thread se torna runnable – é
nesse estado que ela executa uma tarefa.
Waiting: algumas vezes, uma thread espera outra thread realizar alguma tarefa até
que esse thread sinalize que ela pode continuar sua execução.
Timed Waiting: é o mesmo caso que o anterior, no entanto aqui o intervalo de tempo
de espera é especificado.
Terminated: uma thread runnable entra nesse estado quando completa sua tarefa ou
quando termina.
Dissemos várias vezes que, em geral, threads são relativamente independentes. Nós
dissemos dessa maneira, porque quando elas utilizam recursos em comum, é
preciso haver um sincronismo. Quando muitas threads são executadas, é necessário
sincronizar suas atividades para prevenir, por exemplo, o acesso concorrente a
estruturas de dados no programa que são compartilhadas entre as threads.
}
}
O código acima começa com duas classes – GeraPDF, que evidentemente gera o PDF;
e BarraDeProgresso, que obviamente cria a barra de progresso! Observem que ambas
implementam a interface Runnable – isso é necessário para que as instâncias dessa
classe sejam executadas por uma thread. Aliás, essa interface possui um único
método (run()), que cria a thread e a executa.
No método main, criamos os objetos de cada classe e passamos para a classe thread.
Como assim, professor? Observem que primeiro geramos um objeto (gerapdf), em
seguida criamos uma thread com esse objeto (new Thread(gerapdf)) e depois chamamos
o método start(), responsável por chamar o método run() da classe específica – sem
isso, não seria possível saber qual método run() deveria ser chamado.
16712855225
JAVA: COLEÇÕES
Mas essa limitação na prática não existe, porque a cada tipo primitivo corresponde
uma classe, como as classes Integer e Character. Por exemplo, para cada valor de
int pode ser construído um objeto da classe Integer, que tem esse valor na sua única
variável de instância. Podemos então ter coleções de Integer, de Double, de
Character. Bacana?
É um erro conceitual comum pensar que uma coleção de objetos armazena esses
objetos dentro dela. O conceito de coleção é bem genérico, e significa qualquer
agrupamento de objetos. Existem conceitos mais específicos para representar
coleções com propriedades estruturais particulares. O mais simples é o conceito de
uma lista. Outras formas conceituais são as ideias de conjunto, árvore, grafo, etc.
Vamos começar falando das Listas (java.util.List)! Ela se caracteriza por ser sequencial,
com cada elemento ocupando uma posição relativa, indexada de 0 até N-1, onde N é
a quantidade de elementos. Em uma lista, faz sentido falar em primeiro, segundo,
16712855225
MÉTODO DESCRIÇÃO
Galera, sendo bem sincero, não vejo grandes vantagens no uso de sets. Tudo bem,
algumas vezes, eles possuem performance melhor que a das listas, mas não é nada
demais. O que eu acho importante é saber essas características básicas e diferentes
para outros tipos de coleções. Vamos ver agora um exemplo e algumas das suas
principais operações e suas descrições.
MÉTODO DESCRIÇÃO
Galera, percebam que uma fila é uma lista, porém com um objetivo diferente! A fila
é desenhada para ter elementos inseridos no final da fila e removidos no início da
fila. As principais classes implementadoras da interface Set são: PriorityQueue e LikedList.
Cada implementação possui suas características sendo apropriadas para contextos
diferentes.
MÉTODO DESCRIÇÃO
Por fim, vamos falar sobre os Mapas (java.util.Map). Aqui já começamos diferente,
porque mapas não são coleções. Pensem comigo: muitas vezes queremos buscar
rapidamente um objeto, dada alguma informação sobre ele (Ex: dada a placa do
carro, obter todos os dados). Poderíamos utilizar uma lista e percorrer todos os
elementos, mas isso é péssimo para a performance – aqui entra o mapa!
16712855225
MÉTODO DESCRIÇÃO
O que é Stream? Vamos ver um exemplo bacana: sabem quando vocês veem um
jogo de futebol ao vivo pela internet? Ou quando vocês assistem ao julgamento de
um réu pelo website do Supremo Tribunal Federal? Pois é, isso é streaming! Em outras
palavras, trata-se de um fluxo de dados contínuo (nesse caso, vídeo) transmitido de
uma fonte de dados para um destino específico.
Em Java, quando dizemos que um objeto é serializado, estamos querendo dizer que
ele será transformado em bytes, e poderá ser armazenado em disco ou transmitido
por um stream. Um stream é um objeto de transmissão de dados, em que um fluxo
de dados serial é feito através de uma origem e de um destino. Os tipos mais
comuns de stream são o FileOutputStream e o FileInputStream.
Sabe quando você já está lá quase zerando o jogo? E se você desligar o videogame e
perder tudo? Pois é, é útil salvar o estado atual! Como faço isso? Você deve
implementar a interface Serializable do pacote java.io.Serializable. O que tem nessa
16712855225
interface, professor? Nada, mas ela indica para a JVM que você deseja que
determinada classe esteja habilitada para ser serializada. Não encontrei questões!
Professor, o que é I/O? É uma sigla para Input/Output! Em português, seria E/S – ou
Entrada/Saída! Isso indica a comunicação entre sistemas de processamento de
dados (Ex: Computador) e o mundo externo (Ex: Humano). Entradas são dados
recebidos pelo sistema e Saídas são dados enviados pelo sistema. A melhor maneira
de entender isso é por meio de um exemplo!
Uma operação de entrada de dados seria aquele dado lido de uma base de dados
(Ex: read() – lê dados da entrada padrão do sistema). Já uma operação de saída de
dados seria aquele dado escrito em uma base de dados (Ex: write() – escreve dados
na saída padrão do sistema). Agora que vocês já sabem o que são operações de
Entrada/Saída, podemos prosseguir!
Vamos falar um pouco sobre a Classe InputStream! Ela oferece a funcionalidade básica
de leitura de um byte ou de uma sequência de bytes a partir de alguma fonte.
Podemos utilizar o método read() – o valor de retorno desse método é um inteiro,
que pode ser o byte lido do próprio método ou número de bytes lidos – quando o
retorno for igual a -1, é informado que o final do arquivo foi atingindo.
Classe Descrição
ByteArrayInputStream Valores são originários de um arranjo de bytes.
buffer interno.
DataInputStream Permite a leitura de representações binárias dos tipos primitivos
de Java.
ObjectInputStream Oferece o método readObject para a leitura de objetos que foram
serializados para um ObjectOutputStream.
PipedInputStream Faz a leitura de um pipe de bytes cuja origem está associada a um
objeto PipedOutputStream.
precisar escrever em uma saída, basta ele chamar o método que utiliza a classe
abstrata, visto que ele aceita qualquer dependente de OutputStream.
Observem um exemplo abaixo:
Classe Descrição
FileOutputStream Escreve em um arquivo ou em um descritor de arquivo.
NOVIDADES: JAVA 8
Pessoal, vocês já devem saber que nós temos uma nova versão! A cobrança ainda
é raríssima (só encontrei uma questão), mas é bom saber um pouco sobre as
principais novidades. A grande novidade foram as Lambda Expressions! Pois é, Java
agora tem algumas características de programação funcional. Professor, o que é
exatamente programação funcional?
Tudo aquilo que é permitido referenciar numa linguagem (no caso, objetos ou tipos
primitivos), passar como parâmetro para outras funções, etc, é dito ser "de primeira
classe". Outras linguagens, entretanto, permitem que funções e outras coisas mais
(como classes) sejam referenciados e passados como argumento. No JavaScript, por
exemplo, é bastante comum passar uma função para uma variável.
expressas como literais. Professor, o que é um literal? Um literal é uma notação que
representa um valor fixo no código fonte.
Em outras palavras, através do uso da própria sintaxe você consegue criar um objeto
que de outra forma exigiria a combinação de duas ou mais funcionalidades
diferentes. No Java 8, o literal para uma expressão lambda consiste em uma lista de
argumentos (zero ou mais) seguida do operador -> seguida de uma expressão que
deve produzir um valor. Exemplos:
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html#use-case
16712855225
Comentários:
Gabarito: C
Comentários:
Vocês sabiam que Java é uma Linguagem WORA? Pois é, esse acrônimo significa
Write Once, Run Anywhere ou Escreva uma vez, execute em qualquer lugar. Trata-
se de um slogan para exemplificar os benefícios multiplataforma da linguagem Java!
Idealmente, isso significa que um programa em Java (uma vez compilado em um
bytecode) pode rodar em qualquer equipamento que possua uma JVM!
16712855225
Conforme vimos em aula, seria mais correto dizer Java Virtual Machine (JVM) e, não,
Sistema Java. No entanto, a questão está correta.
Gabarito: C
Comentários:
Conforme vimos em aula, ela possui tudo que é necessário para executar programas
em Java. Para desenvolver programas, seria necessária uma JDK!
Gabarito: E
Comentários:
Conforme vimos em aula, está perfeito! Por que ele diz “independentemente de o
controle ser explicitamente indicado”? Porque quando não se indica o modificador
de acesso, assume-se que é Pacote ou Default.
16712855225
Gabarito: C
Comentários:
Palavras Descrição
Testa se um objeto é uma instância de uma classe específica ou se é null.
Instanceof
Conforme vimos em aula, ele também pode ser utilizado para testar se um objeto
é instância de uma classe específica.
Gabarito: E
Comentários:
//Indica que esse método só pode acessar atributos de classe e não pode ser sobrescrito
static int soma (int a, int b) {//...//}
//Indica que esse método só é executável por uma thread por vez
synchronized soma (int a, int b) {//...//}
Não, métodos finais, estáticos e privados não podem ser sobrescritos por métodos
de outra classe.
Gabarito: E
Comentários:
Perfeito, desde que haja uma Java Virtual Machine (JVM) específica para esse
Sistema Operacional. Portanto, a questão está incompleta, mas não é bom brigar
com a banca.
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Conforme vimos em aula, está perfeito! Para tal, utiliza-se o Java EE.
Gabarito: C
Comentários:
Gabarito: C
Comentários:
O que muda, então? É a forma como nós nos referimos a esse objeto!
Gabarito: C
Comentários:
Gabarito: E
a) try e catch.
b) try e finally.
c) finally e catch. 16712855225
d) finally e retry.
e) try e retry.
Comentários:
É útil para liberar recursos do sistema quando utilizamos, por exemplo, conexões de
banco de dados e abertura de buffer para leitura ou escrita de arquivos. finally virá
após os blocos de catch. Portanto, o try indica que um bloco de código pode ocorrer
erro; o catch tem o objetivo de capturar, manipula e trata erros; e o finally busca realizar
ações mesmo após a captura de erros. Vejamos a estrutura básica:
Gabarito: A
14. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação Ao contrário dos tipos primitivos que não são objetos, os tipos de
objetos são determinados pela classe de origem.
Comentários:
Gabarito: C
15. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação Uma classe final indica uma classe que não pode ser estendida. Um
método final não pode ser redefinido em classes derivadas.
Comentários:
Conforme vimos em aula, a classe final não pode ter filhos e Método Final não pode
ser sobrescrita.
16712855225
Gabarito: C
Comentários:
Conforme vimos em aula, está perfeito! Qual o nome desse código? Bytecode!
Gabarito: C
Comentários:
Essa questão é polêmica! Alguns afirmar que é possível inserir a instrução, mas não
utilizar componentes gráficos. Não faria sentido importar um pacote para não
utilizar suas funcionalidades, mas é possível – apesar de má prática! Eu acredito que
a questão cabe recurso, sim!
Gabarito: C
Comentários:
<public>: essa instrução indica que a classe, método ou atributo assim declaradas
podem ser acessadas em qualquer lugar e a qualquer momento da execução do
programa – é o modificador menos restritivo.
Gabarito: C
de aplicações para todos os seus dispositivos, como estações gráficas, iPad, iPod,
entre outros.
Comentários:
Conforme vimos em aula, a questão está cheia de erros! Primeiro, JSE é a sigla de
Java Standard Edition. Segundo, a tecnologia proposta no item é o JME!
Gabarito: E
Comentários:
Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos compactos
ou móveis, como smartphones, tablets, controles remotos, etc. Permite o
desenvolvimento de softwares embarcados, i.e., aplicações que rodam em um
dispositivo de propósito específico, desempenhando alguma tarefa útil. Em geral,
possuem limitações de recursos como memória ou processamento.
Gabarito: E
Comentários:
Conforme vimos em aula, está quase tudo certo! No entanto, JCE é uma API de
Criptografia (Java Cryptography Extension). Não se trata de uma plataforma ou
ambiente de desenvolvimento em nuvem!
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Conforme vimos em aula, int é uma variável primitiva que recebe valores inteiros,
i.e., não pode receber valor nulo. Já o tipo Integer é um objeto, logo pode receber
valores nulos.
Gabarito: C
Comentários:
É útil para liberar recursos do sistema quando utilizamos, por exemplo, conexões de
banco de dados e abertura de buffer para leitura ou escrita de arquivos. finally virá
após os blocos de catch. Portanto, o try indica que um bloco de código pode ocorrer
erro; o catch tem o objetivo de capturar, manipula e trata erros; e o finally busca realizar
ações mesmo após a captura de erros. Vejamos a estrutura básica:
Gabarito: E
Comentários:
16712855225
Conforme vimos em aula, podemos ter vários blocos catch de um único try. Além
disso, de fato elas devem tratadas (try-catch) ou propagadas (throws).
Gabarito: C
27. (CESPE – 2004 – STJ - Analista Judiciário - Análise de Sistemas) O Java collections
framework da API Java J2SE possui um conjunto de interfaces e implementações
que define estruturas usadas para manipular coleções de objetos. As interfaces
fundamentais do framework estão associadas à identificação de funcionalidades
típicas de estruturas de dados clássicas. Assim, a interface java.util.List está ligada
a estruturas de listas, a interface java.util.Set está associada a estruturas do tipo
conjuntos e a interface java.util.Map refere-se a estruturas do tipo mapas. Set,
List e Map possuem a interface abstrata java.util.Collection como superinterface.
Comentários:
Por fim, vamos falar sobre os Mapas (java.util.Map). Aqui já começamos diferente,
porque mapas não são coleções. Pensem comigo: muitas vezes queremos buscar
rapidamente um objeto, dada alguma informação sobre ele (Ex: dada a placa do
carro, obter todos os dados). Poderíamos utilizar uma lista e percorrer todos os
elementos, mas isso é péssimo para a performance – aqui entra o mapa!
Conforme vimos em aula, mapas não são coleções – não são filhos de java.util.Collection.
Gabarito: E
16712855225
Comentários:
Gabarito: C
Comentários:
interface Map são: HashMap, TreeMap e LinkedHashMap. Cada implementação possui suas
características sendo apropriadas para contextos diferentes.
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
16712855225
Comentários:
Conforme vimos em aula, trata-se de uma interface com o usuário, logo interage
com o usuário.
Gabarito: E
Comentários:
Conforme vimos em aula, a questão está correta! Qual a IDE utilizada pouco
importa, o swing suporta o desenvolvimento de GUI e ponto final!
Gabarito: C
Comentários:
16712855225
O AWT (javax.awt) veio primeiro, é mais pesado, é gerado pelo sistema operacional,
logo é dependente de plataforma. O Swing (javax.swing) é mais leve, é gerado por uma
Máquina Virtual Java (JVM), logo é independente de plataforma. Galera, nem tudo é
diferente! Vejam: ambos são fáceis de programar, porque a orientação a objetos
proporciona alterar partes do programa, sem alterar toda a estrutura.
Conforme vimos em aula, AWT veio primeiro que o Swing! Esse último veio dar mais
dinamismo e leveza aos componentes – hoje em dia, pouco se usa de AWT!
Gabarito: E
Comentários:
A redação ficou um pouco confusa, mas vejam que a questão fala em passar para
campo. Que campo? O saldo é um método e, não, um campo.
Gabarito: E
Comentários:
Pessoal, vocês já devem saber que nós temos uma nova versão! A cobrança ainda é
raríssima (só encontrei uma questão), mas é bom saber um pouco sobre as principais
novidades. A grande novidade foram as Lambda Expressions! Pois é, Java agora tem
algumas características de programação funcional. Professor, o que é exatamente
programação funcional?
ACERTEI ERREI
Comentários:
(a) Conforme vimos em aula, ele contém um Garbage Collector para gerenciamento
de memória;
Vocês sabiam que Java é uma Linguagem WORA? Pois é, esse acrônimo significa
Write Once, Run Anywhere ou Escreva uma vez, execute em qualquer lugar. Trata-
se de um slogan para exemplificar os benefícios multiplataforma da linguagem Java!
Idealmente, isso significa que um programa em Java (uma vez compilado em um
bytecode) pode rodar em qualquer equipamento que possua uma JVM!
(d) Conforme vimos em aula, é uma linguagem WORA (Write Once, Run Anywhere);
(e) Conforme vimos em aula, é uma linguagem orientada a objetos e possui suporte
nativo a threads;
16712855225
Gabarito: B
e) JavaFX.
Comentários:
Gabarito: A
(FCC - 2010 - Sergipe Gás S.A. - Analista de Sistemas É tida como uma das
principais linguagens de programação orientada a objeto; tem como
característica a compilação para um bytecode e execução por uma máquina
virtual. Trata-se da linguagem:
a) Algol.
b) Delphi.
c) C++.
d) Java.
e) PHP.
Comentários:
possa ser executado em qualquer máquina ou sistema operacional que possua uma
JVM. Ademais, busca que todos os aspectos da linguagem sejam independentes de
plataforma (Ex: ela especifica o tamanho e comportamento de cada tipo de dado).
Gabarito: D
Comentários:
Gabarito: C
a) instanceof.
b) extend.
c) new.
d) this.
e) type. 16712855225
Comentários:
Palavras Descrição
Testa se um objeto é uma instância de uma classe específica ou se é null.
Instanceof
Utilizado para aplicar o conceito de herança para uma classe, onde uma
Extends classe receberá os métodos e variáveis de instância da classe chamada de
pai.
Gabarito: C
Comentários:
Conforme vimos em aula, o operador new cria um novo objeto! Para tal, utiliza-se
o construtor da classe que se deseja criar uma instância: Nome_Classe( ). Por fim, ele
atribui esse novo objeto a uma variável Nome_Objeto pertencente a classe Nome_Classe.
Gabarito: B
Comentários:
<public>: essa instrução indica que a classe, método ou atributo assim declaradas
podem ser acessadas em qualquer lugar e a qualquer momento da execução do
programa – é o modificador menos restritivo.
Conforme vimos em aula, o public pode ser aplicado a atributos, métodos e classes.
Gabarito: B
a) static.
b) abstract.
c) protected.
d) volatile.
e) transient.
16712855225
Comentários:
<protected>: essa instrução indica que métodos ou atributos (classes, não) assim
declaradas somente podem ser acessadas dentro do pacote em que está contida
ou por subclasses no mesmo pacote.
Gabarito: C
byte j = 30;
short k = 54;
int m = 40;
long n = 12L;
long resultado = 0L;
resultado += j;
resultado += k;
resultado /= n;
resultado -= m;
a) -7.
b) -32.
c) -33.
d) 60.
e) 84.
Comentários:
Gabarito: C
métodos Java que não retornam valores devem possuir no parâmetro tipo-de-
retorno a palavra:
a) static.
b) public.
c) void.
d) main.
e) string args.
Comentários:
Palavras Descrição
Representa um retorno vazio, i.e., nenhum retorno para esse método.
Void
Gabarito: C
a) 0 0 1 0 0 1 0 0 1
b) 0 1 2 0 1 2 0 1 2
c) 0 1 0 1 0 1 0 1 0
d) 1 2 1 2 1 2 1 2 1
e) 0 2 1 0 2 1 0 2 1
Comentários: 16712855225
i = 3; 3%3 = 0;
i = 5; 5%3 = 2;
i = 7; 7%3 = 1;
i = 9; 9%3 = 0;
i = 11; 11%3 = 2;
i = 13; 13%3 = 1;
i = 15; 15%3 = 0;
i = 17; 17%3 = 2;
i = 19; 19%3 = 1;
Gabarito: E
}
}
a) No método main da classe Start não é possível instanciar objetos das classes
NewClassA e NewClassB, pois essas classes não contêm um construtor válido.
do construtor da NewClassB.
Comentários:
(a) Não, mesmo que não tenha um construtor explícito, o compilador cria um
construtor padrão no momento da criação do objeto; (b) Não, não se pode atribuir
uma instância de classe-pai a variável de uma classe-filha; (c) Não, não haveria erro!
Pode-se atribuir uma instância de classe filha a variável de uma classe-pai; (d) Não,
isso é sobrecarga; (e) Perfeito, ela herda tudo da classe-pai.
Gabarito: E
a) Byte.valueOf(cod);
b) (long) cod;
c) Byte.pasreByte(cod);
d) (byte) cod;
e) (cast) cod;
Comentários:
16712855225
Conforme vimos em aula, estamos indo do valor maior para o valor menor, portanto
precisamos fazer um cast explícito: byte codNovo = (byte) cod.
Gabarito: D
Comentários:
Vamos lá! Observem que há dois métodos estáticos, i.e., não é necessário criar um
objeto dessa classe para ter acesso aos seus métodos. Logo, há duas possibilidades:
pode-se instanciar um objeto dessa classe (Calculo c = new Calculo();) e chamar o método
pelo objeto (c.soma()) ou fazer o mesmo sem utilizar o objeto (Calculo.soma()). Portanto,
as letras B, C, D funcionariam, mas não exclusivamente, porque pode-se acessar o
método pelo objeto ou pela classe.
16712855225
Gabarito: A
Comentários:
(a) Perfeito, ela pode criar seus próprios métodos; (b) Perfeito, porque eles são
herdados; (c) Perfeito, eles são herdados da superclasse; (d) Não, super é utilizado
para acessar métodos da superclasse; (e) Perfeito, esse operador indica que a
superclasse será estendida.
Gabarito: D
Comentários: 16712855225
Cada classe, na hierarquia de classes, representa uma camada que adiciona diversas
capacidades a um objeto. No topo desta hierarquia você sempre vai encontrar uma
classe chamada de Object (Objeto). Qualquer classe estende implicitamente (sem
necessidade de declarar) a classe Object. Claro que, na maioria das vezes, isso ocorre
indiretamente.
(a) Não, ela permite métodos concretos; (b) Não, não tem chaves; (c) Não, todos os
métodos são abstratos; (d) Java não suporta herança múltipla; (e) Perfeito,
absolutamente todas as classes são filhas da Classe Object.
Gabarito: E
17. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da
Informação São tipos primitivos da linguagem Java:
Comentários:
(a) string e real, não; (b) real e bit, não; (c) Perfeito! (d) real, não; (e) apenas float.
Gabarito: C
Comentários:
São oito tipos: byte, short, int, long, float, double, char e boolean.
Gabarito: A
19. (FCC - 2009 - TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação
No âmbito da linguagem Java, considere:
Comentários:
compilação ocorre apenas uma vez e a interpretação a cada vez que o programa é
executado.
Gabarito: E
Comentários:
Conforme vimos em aula, deve-se declarar o pacote; depois, import; por fim, classe.
Gabarito: E
21. (FCC - 2014 – TRF/3 – Analista de Sistemas Considere a classe escrita em Java:
16712855225
a) 6.0
b) 7
c) 8.0
d) 5.0
e) 12.5
Comentários:
Gabarito: C
a) 0, -5 e 0
b) 0, 5 e 0 16712855225
c) 1, -5 e 3
d) 2, -5 e 3
e) 2, 5 e 3
Comentários:
X = X*2 = 0*2 = 0;
Y = Y-5 = 0-5 = -5;
Z = Z/3 = 0/3 = 0;
Portanto, a resposta é 0, -5 e 0.
Gabarito: A
a) override.
b) overload.
c) herança.
d) encapsulamento.
e) polimorfismo.
Comentários:
Essa questão é estranha! Ele não especifica exatamente o que ele quer saber, mas
vamos lá: por eliminação! (a) Impossível inferir algo sobre isso; (b) Impossível inferir
algo sobre isso; (c) Impossível inferir algo sobre isso; (d) Bem, há um modificador de
acesso, portanto representa um exemplo do conceito de encapsulamento; (e)
Impossível inferir algo sobre isso.
Gabarito: D
a) long. 16712855225
b) short.
c) float.
d) byte.
e) double.
Comentários:
Gabarito: A
Comentários:
Gabarito: D
int idade=12;
Analise:
Contém uma instrução correta que exibirá na tela a frase "Menor de idade":
Comentários:
(I) Operador Ternário: 12 é menor que 18, portanto irá imprimir “Menor de Idade”;
(II) 12 é menor que 18, portanto irá imprimir “Menor de Idade”; (III) 12 é menor que
18, portanto irá imprimir “Menor de Idade”; (IV) Case não aceita <, >, <=, >=, etc.
Gabarito: B
16712855225
a) 15 e 6.
b) 1 e 5.
c) 0 e 1.
d) 6 e 9.
e) 9 e 7.
Comentários:
r = r + cont = 0 + 1 = 1;
cont = cont + 4 = 1 + 4 = 5;
r = r + cont = 1 + 5 = 6;
cont = cont + 4 = 5 + 4 = 9; //Sai do loop
Portanto, r = 6 e cont = 9.
Gabarito: D
III. Faz uso explícito de ponteiros e usa conceitos modernos, tais como,
orientação a objetos e suporte a multithreading.
a) I, II e III, somente.
b) I, II e IV, somente.
c) I, III e IV, somente.
Comentários:
Gabarito: B
a) -8388608 a 8388607.
b) -128 a 127.
c) -32768 a 32767.
d) -9223372036854775808 a 9223372036854775807.
e) -2147483648 a 2147483647.
Comentários:
Gabarito: E
a) o J2EE.
b) o JDK.
c) o JRE.
d) uma JSP.
e) uma API.
Comentários:
Gabarito: C
31. (FCC - 2014 - TRT - 16ª REGIÃO (MA) - Analista Judiciário - Tecnologia da
Informação Considere as classes a seguir, presentes em uma aplicação Java
orientada a objetos:
16712855225
16712855225
a) encapsulamento.
b) sobrecarga de métodos.
c) polimorfismo.
d) sobrescrita de construtores.
e) métodos abstratos.
Comentários:
Primeiro, vamos analisar o código! Saca só... temos três classes: Funcionário,
Mensalista e Diarista. Observe que as classes Mensalista e Diarista 'estendem' a
classe Funcionário, i.e., são filhas de Funcionário! Agora vamos analisar cada classe:
Por fim, a classe Diarista possui um construtor Diarista(int diasPorSemana, int id,
String nome, double valorBase) e um método calcularSalario( ). De novo, você vai
dizer: professor, esse método também é igual àquele da classe Funcionário e
16712855225
Agora vamos para o método main! Observe que ele cria uma variável f do tipo
Funcionário. Em seguida, ele cria um objeto Diarista e atribui à variável f. Professor,
pode isso? Sim, eu posso atribuir um objeto de uma classe-filha para uma variável
do tipo da classe-pai - eu não posso é fazer o contrário (pelo menos, sem um
casting). Na linha seguinte, ele diz: s = f.calcularSalario( ).
Chegamos ao ponto crucial! Ele chama o método calcularSalario( ), mas você lembra
que nós temos 3 métodos com esse nome? Temos um na classe-pai e dois nas
classes-filhas, sobrescrevendo o método da classe-pai. E qual desses ele está
chamando? Lembra que na linha anterior ele diz que f recebe o objeto da classe
Diarista? Pois é, portanto, o método calcularSalario( ) é aquele da classe Diarista.
Mais abaixo, ele faz exatamente a mesma coisa, mas atribui o objeto Mensalista() à
variável f, portanto, na segunda vez que ele chama esse método, refere-se ao objeto
da classe Mensalista. Entendido? Agora vamos para os itens:
(c) Polimorfismo? Perfeito! Nós temos uma sobrescrita de métodos (que é um tipo
de Polimorfismo).
(e) Métodos Abstratos? Não, não há nenhum método abstrato nessa questão.
16712855225
Gabarito: C
b) não podem ser acessados diretamente pelo nome da classe a que pertencem,
mas sim por meio de um objeto da classe.
Comentários:
(a) Não, é estático, logo não depende de objetos; (b) Não, é justamente o inverso;
(c) Perfeito, não depende de objetos! (d) Na verdade, precisam sim ser instanciados
explicitamente; (e) Isso não define um método estático.
Gabarito: C
a) _Real e $real
b) um1 e dois2
c) 3tres e tres3
d) Codigo e codigo
e) cod_valor e cod$valor
Comentários:
Deve ser a combinação de uma ou mais letras e dígitos UNICODE-16: Letras: A-Z;
Letras: a-z; Underscore: _ ; Cifrão: $ ;Números: 0-9.
Gabarito: C
a) JEE e JME.
b) JEE e JPE.
c) JDE e JME.
d) JDE e JPE.
e) JEEP e JME.
Comentários:
Gabarito: A
Informação Uma classe Java pode ser instanciada por um comando, cuja sintaxe
é:
Comentários:
Gabarito: B
Comentários:
//Tratamento da exceção
} finally { //Não vem sozinho: try/finally ou try/catch/finally.
Gabarito: E
ACERTEI ERREI
a) static
b) const
c) abstract
d) final
e) virtual
Comentários:
Gabarito: D
Comentários:
(a) Não, podem ter outros comandos – não é só atribuição; (b) Perfeito, enquanto
for verdadeira, continua a iteração; (c) Não, enquanto ela for verdadeira; (d) Não,
esse comando não existe; (e) Não, esse comando entra no bloco e só depois avalia
a condição.
Gabarito: B
( ) J2ME (Java 2 Micro Edition) - tecnologia Java para dispositivos móveis com
limitações de memória ou processamento.
a) F, F, F, F
b) V, V, V, F
c) V, F, F, V
d) F, V, F, V
e) V, V, V, V
Comentários:
Gabarito: B
III. O J2EE é a edição corporativa do Java. Esta versão inclui o Java Standard
Edition além de outras tecnologias como javamail, servlets, JSF e Enterprise Java
Beans.
IV. O Java possui uma versão para dispositivos móveis chamada J2ME (Micro
Edition).
a) I, II e IV, somente;
b) I, III e IV, somente;
Comentários:
(a) Conforme vimos em aula, é tanto uma linguagem quanto uma plataforma;
Gabarito: E
Comentários:
Conforme vimos em aula, a questão está perfeita! No entanto, há uma coisa muito
errada nessa questão! O que, professor? Não se separa sujeito do predicado com
vírgula! Jamais... Vacilo, UFBA! ;-)
Gabarito: C
Comentários:
16712855225
Gabarito: B
Comentários:
Gabarito: E
a) falso
b) true
c) maior_valor 16712855225
d) Mp10
e) xBACON
Comentários:
Gabarito: B
Comentários:
(a) Não, essa afirmação não faz qualquer sentido; (b) Sim, as subclasses nunca
podem ser mais restritivas que as superclasses; (c) Não, default é mais restritivo; (d)
Não, eles podem ser acessados por quaisquer métodos de quaisquer classes ou
pacotes; (e) Não, eles podem ser acessados pela própria classe, pelas subclasses e
pelas classes do mesmo pacote.
16712855225
Gabarito: B
10. (UFBA - – UFBA – Analista de Sistemas) O bloco finally em uma instrução try
catch finally sempre será executado quer ocorra ou não uma exceção no bloco try.
Comentários:
Gabarito: C
Comentários:
Conforme vimos em aula, podemos ter vários blocos catch de um único try.
Gabarito: C
Comentários:
Quando nós executamos essas tarefas em paralelo, estamos usando Threads! Vocês
16712855225
sabem o que essa palavra significa em português? Fios ou Linhas! Em outras palavras,
criamos linhas de execução de tarefas paralelas em memória – cada linha responsável
por executar alguma coisa simultaneamente e relativamente independentes. Em Java,
as Threads são objetos presentes no Pacote java.lang.
Gabarito: C
Comentários:
Conforme vimos em aula, a questão não faz o menor sentido – não tem
absolutamente nada a ver com Swing.
Gabarito: E
14. (ESAF – – CGU - Analista de Sistemas) A linguagem Java possui uma API
(Application Program Interface) que disponibiliza pacotes e classes com diversas
funcionalidades para auxiliar no desenvolvimento de aplicações. O pacote que
contém classes que auxiliam na criação de interfaces de usuário, incluindo
tratamento de gráficos e imagens, é denominado:
a) java.util.
b) java.applet.
c) java.graphic.
d) java.image.
e) java.awt.
16712855225
Comentários:
Gabarito: E
a) imports;
b) extends;
c) inherits;
d) subclass;
e) superclass.
Comentários:
A palavra-chave extends faz com que uma subclasse herde (receba) todos os atributos
e métodos declarados na classe-pai (desde que ela não seja final), incluindo todas as
classes-pai da classe-pai. A classe-filha pode acessar todos os atributos e métodos
não-privados. Ela herda, mas não acessa (ao menos diretamente) métodos e
atributos privados.
Gabarito: B
16. (FGV – 2015 – PGE/RO – Analista de Sistemas) São tipos primitivos na linguagem
de programação Java:
Comentários:
Vamos falar agora sobre uma das linguagens mais famosas do mundo! Professor, o
que é Java? É uma linguagem de programação orientada a objetos, multiplataforma,
robusta, portável, segura, extensível, concorrente e distribuída. E ela é totalmente
orientada a objetos? Não! Por que não? Porque nem todos os seus tipos de dados são
objetos (possui alguns tipos primitivos: int, float, long, double, char, etc).
Gabarito: A
17. (FGV – 2014 – TJ/GO – Analista de Sistemas) Se uma classe na linguagem Java é
declarada com o modificador abstract, então essa classe:
Comentários:
Palavras Descrição
abstract Aplicado a um método ou classe indica que a implementação completa deste
método ou classe é efetuada posteriormente, por uma subclasse. Caso seja
uma classe, significa que ela não pode ser instanciada.
Gabarito: C
Comentários:
Portanto para declarar uma classe, deve-se colocar a palavra class seguida de um
identificador que irá servir de nome para a classe. O identificador pode ser qualquer
palavra, exceto palavras reservadas. Por exemplo: class Conta introduz a declaração
de uma nova classe chamada Conta. Note que, por convenção, o nome de uma classe
inicia sempre com uma letra maiúscula. A Palavra-Chave é opcional, podendo ser:
Gabarito: B
valores:
a) 42 e 41.
b) 42 e 42.
c) 42 e 43.
d) 43 e 42.
e) 43 e 43.
Comentários:
Gabarito: D
a) públicos e estáticos;
b) públicos e abstratos;
c) privados e estáticos;
d) públicos e finais;
e) privados e abstratos.
Comentários:
Gabarito: B
ACERTEI 16712855225
ERREI
a) try e catch.
b) try e finally. 16712855225
c) finally e catch.
d) finally e retry.
e) try e retry.
14. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação Ao contrário dos tipos primitivos que não são objetos, os tipos de
objetos são determinados pela classe de origem.
15. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação Uma classe final indica uma classe que não pode ser estendida. Um
método final não pode ser redefinido em classes derivadas.
(CESPE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Técnico Judiciário - Tecnologia da
Informação É possível indicar que parte de um código em um método pode
gerar uma exceção, por meio da utilização da palavra-chave finally.
27. (CESPE – 2004 – STJ - Analista Judiciário - Análise de Sistemas) O Java collections
framework da API Java J2SE possui um conjunto de interfaces e implementações
que define estruturas usadas para manipular coleções de objetos. As interfaces
fundamentais do framework estão associadas à identificação de funcionalidades
típicas de estruturas de dados clássicas. Assim, a interface java.util.List está ligada
a estruturas de listas, a interface java.util.Set está associada a estruturas do tipo
conjuntos e a interface java.util.Map refere-se a estruturas do tipo mapas. Set,
List e Map possuem a interface abstrata java.util.Collection como superinterface.
16712855225
c) JavaBeans.
d) J2SE.
e) JavaFX.
(FCC - 2010 - Sergipe Gás S.A. - Analista de Sistemas É tida como uma das
principais linguagens de programação orientada a objeto; tem como
característica a compilação para um bytecode e execução por uma máquina
virtual. Trata-se da linguagem:
a) Algol.
b) Delphi.
c) C++.
d) Java.
e) PHP.
a) instanceof.
b) extend.
c) new.
d) this.
e) type.
c) às classes, apenas.
d) aos atributos, apenas.
e) aos atributos e classes, apenas.
a) static.
b) abstract.
c) protected.
d) volatile.
e) transient.
byte j = 30;
short k = 54;
int m = 40;
long n = 12L;
long resultado = 0L;
resultado += j;
resultado += k;
resultado /= n;
resultado -= m;
a) -7. 16712855225
b) -32.
c) -33.
d) 60.
e) 84.
a) static.
b) public.
c) void.
d) main.
e) string args.
a) 0 0 1 0 0 1 0 0 1
b) 0 1 2 0 1 2 0 1 2
c) 0 1 0 1 0 1 0 1 0
d) 1 2 1 2 1 2 1 2 1
e) 0 2 1 0 2 1 0 2 1
16712855225
a) No método main da classe Start não é possível instanciar objetos das classes
NewClassA e NewClassB, pois essas classes não contêm um construtor válido.
a) Byte.valueOf(cod);
b) (long) cod;
c) Byte.pasreByte(cod); 16712855225
d) (byte) cod;
e) (cast) cod;
17. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da
Informação São tipos primitivos da linguagem Java:
19. (FCC - 2009 - TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação
16712855225
21. (FCC - 2014 – TRF/3 – Analista de Sistemas Considere a classe escrita em Java:
16712855225
a) 6.0
b) 7
c) 8.0
d) 5.0
e) 12.5
a) 0, -5 e 0
b) 0, 5 e 0
c) 1, -5 e 3
d) 2, -5 e 3
e) 2, 5 e 3
a) override.
b) overload.
c) herança.
d) encapsulamento.
e) polimorfismo.
a) long.
b) short.
c) float.
d) byte.
e) double.
int idade=12;
Analise:
Contém uma instrução correta que exibirá na tela a frase "Menor de idade":
d) II, apenas.
e) I e III, apenas.
a) 15 e 6.
b) 1 e 5.
c) 0 e 1.
d) 6 e 9.
e) 9 e 7.
a) I, II e III, somente.
b) I, II e IV, somente.
c) I, III e IV, somente.
d) II, III e IV, somente.
e) I, II, III e IV.
a) -8388608 a 8388607.
b) -128 a 127.
c) -32768 a 32767.
d) -9223372036854775808 a 9223372036854775807.
e) -2147483648 a 2147483647.
a) o J2EE.
b) o JDK.
c) o JRE.
d) uma JSP.
e) uma API.
31. (FCC - 2014 - TRT - 16ª REGIÃO (MA) - Analista Judiciário - Tecnologia da
Informação Considere as classes a seguir, presentes em uma aplicação Java
orientada a objetos:
16712855225
16712855225
a) encapsulamento.
b) sobrecarga de métodos.
c) polimorfismo.
d) sobrescrita de construtores.
e) métodos abstratos.
b) não podem ser acessados diretamente pelo nome da classe a que pertencem,
mas sim por meio de um objeto da classe.
a) _Real e $real
b) um1 e dois2
c) 3tres e tres3 16712855225
d) Codigo e codigo
e) cod_valor e cod$valor
a) JEE e JME.
b) JEE e JPE.
c) JDE e JME.
d) JDE e JPE.
e) JEEP e JME.
16712855225
a) static
b) const
c) abstract
d) final
e) virtual
( ) J2ME (Java 2 Micro Edition) - tecnologia Java para dispositivos móveis com
limitações de memória ou processamento.
a) F, F, F, F
b) V, V, V, F
c) V, F, F, V
d) F, V, F, V
e) V, V, V, V
III. O J2EE é a edição corporativa do Java. Esta versão inclui o Java Standard
Edition além de outras tecnologias como javamail, servlets, JSF e Enterprise Java
Beans.
16712855225
IV. O Java possui uma versão para dispositivos móveis chamada J2ME (Micro
Edition).
a) I, II e IV, somente;
b) I, III e IV, somente;
c) II, III e IV, somente;
d) I e IV, somente;
e) Todas as afirmações.
a) falso
b) true
c) maior_valor
d) Mp10
e) xBACON
10. (UFBA - – UFBA – Analista de Sistemas) O bloco finally em uma instrução try
catch finally sempre será executado quer ocorra ou não uma exceção no bloco try.
14. (ESAF – – CGU - Analista de Sistemas) A linguagem Java possui uma API
(Application Program Interface) que disponibiliza pacotes e classes com diversas
16712855225
a) java.util.
b) java.applet.
c) java.graphic.
d) java.image.
e) java.awt.
a) imports;
b) extends;
c) inherits;
d) subclass;
e) superclass.
16. (FGV – 2015 – PGE/RO – Analista de Sistemas) São tipos primitivos na linguagem
de programação Java:
17. (FGV – 2014 – TJ/GO – Analista de Sistemas) Se uma classe na linguagem Java é
declarada com o modificador abstract, então essa classe:
a) 42 e 41.
b) 42 e 42.
c) 42 e 43.
d) 43 e 42.
e) 43 e 43.
a) públicos e estáticos;
b) públicos e abstratos;
c) privados e estáticos;
d) públicos e finais;
e) privados e abstratos.
16712855225
1 2 3 4 5 6 7 8 9 10
C C E C E E C E C C
11 12 13 14 15 16 17 18 19 20
C E A C C C C C E E
21 22 23 24 25 26 27 28 29 30
E C C C E C E C C E
31 32 33 34 35 36 37 38 39 40
C E C E E C
1 2 3 4 5 6 7 8 9 10
B A D C C B B C C C
11 12 13 14 15 16 17 18 19 20
E E D A D E C A E E
21 22 23 24 25 26 27 28 29 30
C A D A D B D B E C
31 32 33 34 35 36 37 38 39 40
C C C A B E
16712855225
1 2 3 4 5 6 7 8 9 10
D B B E C B E B B C
11 12 13 14 15 16 17 18 19 20
C C E E B A C B D B