Title: Desenvolvimento de Software / Java
Tags: Desenvolvimento_de_Software Resumo
On every note of this deck, unless a note says otherwise:
tldr: Visão Geral de Java
Java é uma linguagem de programação orientada a objetos, lançada em 1995 pela Sun Microsystems (agora Oracle), com o lema "Write Once, Run Anywhere" (WORA) para portabilidade via JVM. É uma plataforma completa: JVM executa bytecode, JRE roda apps (JVM + libs), JDK inclui ferramentas de dev (JRE + compilador/depurador). Usos: apps desktop/mobile, web, servidores, jogos. Mais de 3 bi de dispositivos a usam.
Sintaxe Básica e Compilação
Código em classes (arquivo .java com nome da classe pública). Ponto de entrada: public static void main(String[] args). Compilação: javac Arquivo.java → .class; Execução: java Classe. Tipagem estática e forte (tipos explícitos, verificados na compilação). Comentários: // (linha) ou /* */ (bloco). Organização: pacotes (ex: package com.exemplo;), estrutura de diretórios (src, bin, lib, etc.).
Tipos de Dados e Variáveis
- Primitivos (8): byte/short/int/long (inteiros), float/double (flutuantes), char (Unicode), boolean (true/false).
- Referenciados: Objetos (Strings, arrays, classes). Wrappers (Integer, Double, etc.) para tratar primitivos como objetos.
- Declaração: <tipo> var = valor;. Escopos: local (bloco), instância (classe), classe (static). Finais: final para constantes.
Generics
Introduzidos no Java 5 para tipos parametrizados (ex: class Caixa<T>), evitam casts e erros em runtime. Ex: Caixa<String> caixa = new Caixa<>(); – segura e legível.
Operadores
- Aritméticos: +, -, *, /, %, ++, --.
- Atribuição: =, +=, -=, *=, /=, %=.
- Comparação: ==, !=, >, <, >=, <=.
- Lógicos: && (AND), || (OR), ! (NOT).
- Para objetos: == compara referências; use .equals() para conteúdo.
Strings e Operações
Strings imutáveis (java.lang.String). Criação: literal "texto" (pool otimizado) ou new String("texto"). Métodos: .length(), .charAt(), .substring(), .equals(), .toUpperCase(), etc. Para concatenações eficientes: StringBuilder (mutável).
Controle de Fluxo
- Condicionais: if/else (com else if); switch (enhanceado no Java 14+ com -> e expressões).
- Repetições: while/do-while (condição first/last); for (inicialização-condição-atualização); for-each (itera coleções/arrays sem índice).
Estruturas de Dados
- Arrays: Estáticos, fixos, homogêneos (ex: int[] arr = {1,2,3};). Acesso O(1) por índice (0-based).
- Collections Framework:
- List: Ordenada, duplicatas OK. Impl: ArrayList (rápido acesso), LinkedList (inserções rápidas).
- Set: Unicidade (no dups). Impl: HashSet (geral), LinkedHashSet (ordem inserção), TreeSet (ordenado).
- Map: Chave-valor única. Impl: HashMap (padrão), TreeMap (ordenado por chave), LinkedHashMap (ordem inserção).
- Iterator: Percorre coleções sequencialmente com hasNext(), next(), remove() (seguro).
Exceções
Eventos de erro (herdam Throwable: Error/Exception). Checked (compilação, ex: IOException – tratam com try/catch/throws); Unchecked (runtime, ex: NullPointerException). Tratamento: try { } catch (Ex e) { } finally { }. Throw: lança explicitamente; Throws: declara em método.
Métodos
Bloco reutilizável: [modificadores] tipoRetorno nome(params) { corpo }. Modificadores: public/private/protected/default (acesso); static (classe), final (não override), abstract (sem corpo). Retorno: void (nada) ou tipo. Main: public static void main(String[] args).
Memória
Automática via Garbage Collector (GC): libera objetos sem refs no Heap (Young/Old Gen). Stack: vars locais e chamadas de métodos. Evita leaks/manuais.
OOP
- Classes: Blueprint com atributos (vars) e métodos. Construtores: new Classe();. this/super para refs.
- Interfaces: Contratos (métodos sem corpo; impl com implements).
- Herança: class Sub extends Super – herda attrs/métodos.
- Encapsulamento: Privados attrs + getters/setters públicos.
- Polimorfismo: Sobrecarga (mesmo nome, params diff – compile-time); Sobrescrita (override em sub – runtime).
link: https://documentacao.online/estudos/s2sk.html

front: (QUADRIX/CFO/2025) As linguagens de programação são responsáveis por tirar do papel os algoritmos criados pelo programador e por transformá-los em programas para serem executados pelos computadores modernos. Considerando essa informação, julgue o item seguinte. Java não suporta tipos de dados primitivos, sendo obrigado a utilizar apenas objetos para representar valores como inteiros, caracteres e booleano
response: Errado
comment: Pelo contrário... como vimos, temos tanto tipos primitivos quanto tipos referenciados (ou wrappers). (Gabarito: Errado)
title: Java
Other fields (not shown on cards):
back: Errado - Pelo contrário... como vimos, temos tanto tipos primitivos quanto tipos referenciados (ou wrappers). (Gabarito: Errado)

front: (FGV/PC MG/2025) Considere as características fundamentais da linguagem Java e seus recursos no desenvolvimento de aplicações. Com base nos conceitos básicos de orientação a objetos, em relação ao uso de classes e objetos no Java, assinale a afirmativa correta.
a) Em Java, uma classe pode ser instanciada apenas se tiver um construtor público ou um construtor com especificadores de acesso adequados.
b) O modificador public impede que um método ou variável de instância seja acessado fora da sua própria classe.
c) Uma classe semi-abstrata não pode ser instanciada diretamente, mas pode conter métodos implementados e não implementados.
d) O conceito de polimorfismo permite que um objeto se comporte de forma diferente dependendo do tipo da referência usada para acessá-lo.
e) O uso da palavra-chave super é utilizado para acessar membros da classe pai em classes que herdam de outra classe.
response: Letra E
comment: Vamos às alternativas. a) Errado. A classe pode ser instanciada mesmo que não tenhamos um construtor público, não há essa necessidade. b) Errado. O modificador public permite acesso total ao método. O modificador que impede o acesso fora da classe é o private. c) Errado. Java não possui o termo "classe semi-abstrata". O termo correto é apenas classe abstrata. d) Errado. O polimorfismo permite que objetos se comportem de maneira diferente dependendo do tipo real do objeto criado (não do tipo da referência usada para acessá- lo). e) Certo. super é usado para chamar métodos e construtores da classe pai (superclasse). Amplamente utilizado para acessar comportamentos originais após sobrescrita de métodos. Portanto, correta a letra E.
title: Java
Other fields (not shown on cards):
back: Letra E - Vamos às alternativas. a) Errado. A classe pode ser instanciada mesmo que não tenhamos um construtor público, não há essa necessidade. b) Errado. O modificador public permite acesso total ao método. O modificador que impede o acesso fora da classe é o private. c) Errado. Java não possui o termo "classe semi-abstrata". O termo correto é apenas classe abstrata. d) Errado. O polimorfismo permite que objetos se comportem de maneira diferente dependendo do tipo real do objeto criado (não do tipo da referência usada para acessá- lo). e) Certo. super é usado para chamar métodos e construtores da classe pai (superclasse). Amplamente utilizado para acessar comportamentos originais após sobrescrita de métodos. Portanto, correta a letra E.

front: (FGV/CGE PB/2024) O desenvolvedor José implementou a classe CGEPrincipal em Java 17. A fim de tornar a implementação mais aderente ao modelo de domínio, José restringiu a herança da classe na declaração, especificando que a CGEPrincipal poderia ser herdada apenas pelas classes CGEUm e CGEDois. Para restringir a herança na declaração da classe CGEPrincipal, José utilizou a funcionalidade do Java 17:
a) reflection;
b) static class;
c) sealed class;
d) foreign function;
e) pattern matching.
response: Letra C
comment: A questão explora o conceito de sealed class. Elas foram incorporadas no Java 17, permitindo que o desenvolvedor restrinja quais classes podem herdar uma determinada classe. Essa funcionalidade permite declarar explicitamente as subclasses permitidas, promovendo controle na hierarquia de herança, maior segurança de design e facilitando a manutenção e validação de modelos de domínio. Veja um exemplo em código da aplicação:
title: Java
Other fields (not shown on cards):
back: Letra C - A questão explora o conceito de sealed class. Elas foram incorporadas no Java 17, permitindo que o desenvolvedor restrinja quais classes podem herdar uma determinada classe. Essa funcionalidade permite declarar explicitamente as subclasses permitidas, promovendo controle na hierarquia de herança, maior segurança de design e facilitando a manutenção e validação de modelos de domínio. Veja um exemplo em código da aplicação:

front: (CEBRASPE/FINEP/2024) Assinale a opção em que é apresentado o principal método usado na linguagem Java para iniciar a execução de um programa.
a) execute( )
b) run( )
c) start( )
d) begin( )
e) main( )
response: Letra E
comment: O método mais comum e presente em toda classe Java é o main(String[] args). Ele que demarca o início do programa principal dentro da aplicação Java e será o primeiro método a ser chamado pela JVM.
title: Java
Other fields (not shown on cards):
back: Letra E - O método mais comum e presente em toda classe Java é o main(String[] args). Ele que demarca o início do programa principal dentro da aplicação Java e será o primeiro método a ser chamado pela JVM.

front: (CEBRASPE/FINEP/2024) Assinale a opção em que é indicado o modificador de acesso em Java que pode permitir que os membros de uma classe sejam acessados apenas por classes do mesmo pacote.
a) package-private
b) internal
c) static
d) public
e) private
response: Letra A
comment: O modificador de acesso package-private (também conhecido como default access) é o comportamento padrão em Java quando nenhum modificador é explicitamente declarado antes de atributos, métodos ou classes (não públicas). Nesse caso, o membro só pode ser acessado por outras classes que estejam no mesmo pacote.
title: Java
Other fields (not shown on cards):
back: Letra A - O modificador de acesso package-private (também conhecido como default access) é o comportamento padrão em Java quando nenhum modificador é explicitamente declarado antes de atributos, métodos ou classes (não públicas). Nesse caso, o membro só pode ser acessado por outras classes que estejam no mesmo pacote.

front: (CEBRASPE/TRF 6/2025) Julgue o próximo item, relativo a Java.
import java.io.*;
class Easy {
public static void main(String[] args) {
int x[] = {1, 3, 7, 22, 51};
for (int size : x)
System.out.print(size);
}
}
O resultado da execução do código precedente, desenvolvido em Java, será 6.
response: Errado
comment: A questão envolve o uso do for each em Java. Estamos chamando cada elemento da estrutura x de “size”, e o printando – o resultado será 1372251 (cada valor da sintaxe concatenado, pois usamos print e não println) – portanto, item incorreto.
title: Java
Other fields (not shown on cards):
back: Errado - A questão envolve o uso do for each em Java. Estamos chamando cada elemento da estrutura x de “size”, e o printando – o resultado será 1372251 (cada valor da sintaxe concatenado, pois usamos print e não println) – portanto, item incorreto.

front: (CEBRASPE/FINEP/2024) Assinale a opção em que é apresentada, na linguagem Java, a sintaxe para declarar um array de nome productPrices, que será usado para armazenar os preços de produtos.
a) int productPrices[] = int[5];
b) int productPrices[5];
c) productPrices[] int = new int[5];
d) int productPrices[] = new int[5];
e) int[] productPrices = new int[];
response: Letra D
comment: Para declarar um array de inteiros, declaramos o tipo de dado (int), o nome da variável (productPrices) e a declaração de array com colchetes duplos []. Em seguida, precisamos declarar o construtor, com palavra-chave new. A sintaxe completa será: int productPrices[] = new int[5]; Portanto, correta a letra D.
title: Java
Other fields (not shown on cards):
back: Letra D - Para declarar um array de inteiros, declaramos o tipo de dado (int), o nome da variável (productPrices) e a declaração de array com colchetes duplos []. Em seguida, precisamos declarar o construtor, com palavra-chave new. A sintaxe completa será: int productPrices[] = new int[5]; Portanto, correta a letra D.

front: (FGV/TJ AP/2024) Analise o código Java a seguir.
public class Main {
public static void main(String[] args) {
System.out.println(x);
int x = 100;
}
}
Quando esse código é executado:
a) “null” é exibido;
b) “undefined” é exibido;
c) o valor 100 é exibido;
d) ocorre um erro de símbolo não encontrado;
e) ocorre um erro de variável não inicializada.
response: Letra D
comment: Temos um exemplo clássico de uso de variável antes da sua declaração. Em Java, as variáveis locais não têm escopo anterior à sua declaração, ou seja, não são "elevadas" (hoisted) como ocorre em outras linguagens como JavaScript. Assim, o comando System.out.println(x) tenta acessar a variável x antes de ser declarada, mas o compilador não consegue encontrar o símbolo x naquele ponto do código, resultando no erro error: cannot find Symbol. Cuidado para não confundir com erro de variável não inicializada, que acontece quando ela é definida mas não possui atribuição de valor.
title: Java
Other fields (not shown on cards):
back: Letra D - Temos um exemplo clássico de uso de variável antes da sua declaração. Em Java, as variáveis locais não têm escopo anterior à sua declaração, ou seja, não são "elevadas" (hoisted) como ocorre em outras linguagens como JavaScript. Assim, o comando System.out.println(x) tenta acessar a variável x antes de ser declarada, mas o compilador não consegue encontrar o símbolo x naquele ponto do código, resultando no erro error: cannot find Symbol. Cuidado para não confundir com erro de variável não inicializada, que acontece quando ela é definida mas não possui atribuição de valor.

front: (FGV/TJ MS/2024) Considere o seguinte código em Java:
public static void main(String[] args) throws MalformedURLException {
URL url = new URL(“https://bloco13:trib@”+ ”www.tjms.jus.br/ws?id=0#A");
String s1 = url.getRef(), s2 = url.getUserInfo(), s3 = url.getQuery(), s4 = url.getFile();
Arrays.asList(s1,s2,s3,s4).stream()
.map(s->s.concat(";"))
.forEach(System.out::print);
}
Ao ser executado com as importações necessárias, o código acima imprime na saída padrão:
a) Exception;
b) A;bloco13;id=0;null;
c) null;bloco13:trib;id=0#A;null;
d) A;bloco13:trib;id=0;/ws?id=0;
e) null;bloco13;id=0#A;/ws?id=0#A;
response: Letra D
comment: A URL fornecida é a seguinte: https://bloco13:trib@www.tjms.jus.br/ws?id=0#A. Temos 4 strings (s1, s2, s3, s4) criadas a partir dessa URL, com métodos diferentes: Método Retorno getRef() "A" (fragmento após #) getUserInfo() "bloco13:trib" (antes do @) getQuery() "id=0" getFile() "/ws?id=0" (path + query) A array criada mapeia essas 4 strings e faz um print com cada elemento, em ordem. Ou seja, a saída será: A;bloco13:trib;id=0;/ws?id=0; Portanto, correta a letra D
title: Java
Other fields (not shown on cards):
back: Letra D - A URL fornecida é a seguinte: https://bloco13:trib@www.tjms.jus.br/ws?id=0#A. Temos 4 strings (s1, s2, s3, s4) criadas a partir dessa URL, com métodos diferentes: Método Retorno getRef() "A" (fragmento após #) getUserInfo() "bloco13:trib" (antes do @) getQuery() "id=0" getFile() "/ws?id=0" (path + query) A array criada mapeia essas 4 strings e faz um print com cada elemento, em ordem. Ou seja, a saída será: A;bloco13:trib;id=0;/ws?id=0; Portanto, correta a letra D