jaycesar / java-springboot Goto Github PK
View Code? Open in Web Editor NEW[📚 Study ] This repository was created to add files and my notes from the course POO of Java ( + spring);
[📚 Study ] This repository was created to add files and my notes from the course POO of Java ( + spring);
Uma exceção é qualquer condição de erro ou comportamento inesperado encontrado por um programa em execução.
Em Java, uma exceção é um objeto herdado da classe:
Quando lançada, uma exceção é propagada na pilha de chamadas de métodos em execução, até que seja capturada (tratada) ou o programa seja encerrado.
Existe uma super classe genérica com todas as exceções e erros chamada "Throwable"
Vantagens:
GIT é um sistema de versionamento: você controla as modificações de um projeto por meio de de versões chamadas "commit".
Ele me permite gerenciar as versões!
GITHUB - É um serviço online de hospedagem de projetos gerenciados pelo GIT. Ele é tipo um serviço social de hospedagem de projetos e é o maior do mundo.
Algorito: É uma sequência finita de instruções para resolver um problema. Isso se aplcia a diversas áreas de conhecimento, como por exemplo lavar roupa.
Autmoação: Consiste em utilizar máquina(s) para executar o prodecimento desejado de forma automática ou semiautomática. Por exemplo uma máquina que encha de água, lave a roupa e depois seque-a.
Existe uma similaridade entre programa e algoritmo.
Mas qualquer algoritmo? Não. Apenas algoritmos computacionais, como processamento de dados e cálculos
É um conjunto de regras léxicas (ortografia) e sintáticas (gramática) para se escrever programas.
Léxicas:
Diz respeito à correção das palavras "isoladas" (ortografia);
Exemplo (Português):
Exemplo (Linguagem de programação):
main (está certo)
'maim' (está errado)
Sintática:
Diz respeito à correção das sentenças (gramática). As palavras isoladas estão certas mas como um todo elas estão erradas.
Exemplo (Português):
Exemplo (Linguagem de programação):
Existem inúmeras linguagens de programação no mercado (C, Pascal, C++, Java, C#, Python, Ruby, PHP, JavaScript, etc.)
Conclusão: Léxicas são as palavras que utilizo na linguagem que estou programnado e e Sintática é colocação dessas palavras na ordem correta.
É um conjunto de software utilizado para a construção de programas.
Por exemplo:
C/C++: Code Blocks
Java: Eclipse, NetBeans
C#: Microsoft Visual Studio
Funcionalidades de uma IDE:
Código fonte:
É aquele escrito pelo programador em linguagem de programação. Ele não é entendido computador nem pelo sistema operacional. É aqui que entra a compilação.
É o processo que transforma o código fonte em código objeto. Esse processo é feito por um software chamado compilador. Durante o processo de compilação o compilador faz uma análise léxica e análise sintática e se tiver algum erro léxico ou sintático, a compilação é abortada e o programador é obrigado a corrigir os erros que por ventura existam.
Após transformação em código objeto, esse código objeto vai ter que passar por um gerador de código para que seja feito um processo chamado de construção(build) que irá gerar um código executável - podendo agora ser exectuado pelo sistema operacional.
Código fonte -> Compilação -> Código Objeto -> Gerador de Código (build) -> Código Executável
Esse modelo de compilação e geração é adotado por algumas linguagens, como por exemplo C e C++
Contudo, nem toda linguagem utiliza esse processo. Existe um outro chamado Interpretação
É quando existe um software chamado Interpretador que vai ler o código fonte e fazer a análise léxica, análise sintática e a geração de código SOB DEMANDA. Isso signfica que gradualmente o interpetador lê o código, vai traduzindo ele para o código executável e executando.
Esse modelo de execução é utilizado por várias linguagens, tais como PHP, Javascript, Python e Ruby.
O código fonte é 'compilado' e transformado em um Bytecode, o qual pode ser executado em uma máquina virtual. O bom é que cada sistema operacional tem sua própria MV, ou seja, não é necessário alterar o código fonte para cada sistema operacional.
--
Vantagens:
Interpretação
Abordagem Híbrida
Ela aproveita diferentes aspectos das abordagens acima, sendo as principasi essas:
Draw chart!
Sim, Java está entre as linguagens mais demandandas do mercado! Javascript é voltado para o Front-end! (e domina).
Mapeamento Objeto Relacional:
Como eu mapeio o modlo de objetos para o modelo de tabelas
Banco de dados relacional:
Banco H2
Seed da base da dados:
Salvar no banco de dados alguns dados e veriicar como eles se relacionam
ORM: Mapemento de Objeto Relacional
O banco H2 e um banco em memória!
Essas são as dependências:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
É importante salientar que quando eu tenho uma classe que possui uma outra classe como atributo, então eu tenho uma associação!
Banco Relacional: Os dados sãorepresentados em foram de tabela!
Fazer o 'seed' signfica povoar!
Quando eu crio um objeto que acessa o banco de dados, esse objeto por convenção precisa ter o sugixo "Repository"
São aquelas expressões que comparam uma coisa com outra e resultam num valor vedade (verdadeiro ou falso)
Também resultado num valor verdade (verdadeiro ou falso)
É uma estrutura de controle que permite definir que um certo bloco de comandos somente será executado dependendo de um condição. Ou seja, agora eu tenho um controle para direcionar o fluxo do programa dependendo se a condição for verdadeira ou falsa.
E se eu tiver mais de duas possibilidades?
Eu posso fazer um encadeamento de estruturas condicionais!
Quando se tem várias opções de fluxo a serem tratadas com base no valor de uma variável, ao invés de várias estruturas if-else encadeadas, alguns preferem utilizar a estrutura switch-case.
Estrutura opcional ao if-else quando se deseja decidir um VALOR com base em uma condição;
Sintaxe:
( condição ) ? valor_se_verdadeiro : valor_se_falso;
Obs: Todas as variáveis que eu declarara dentro de uma esturutra condicional irão exsitir somente dentro dessa estrutura. Ou seja, deixarão de existir assim que a estrutura acabar;
Link: https://www.oracle.com/java/technologies/java-se-glance.html
SE = Stantard Edition
LTS = Long-term support
O Java lança novas versões entre uma LTS e outra. Isso significa que após uma versão LTS eu posso ver versões "pequenas".
A versões LTS (de longo período de suporte) possui suporte ao longo do tempo! Por isso que para o curso iremos utilizar a versão SE 11 (LTS). A versão 8 é a última versão de longo suporte antes da versão 11. Versões LTS implicam em menos trabalhos "dor de cabeça" com atualizações, por isso as empresas utilizam ela.
SE: Standard Edition (Padrão/Simples)
→ Indicado para quem irá desenvolver aplicativos em janelas
EE: Enterprise Edition
→ Indicado para quem irá desenvolver aplicativos em janelas e irá utilizar bancos de dados gigantes, coisas maiores, usados em empresas
ME: Micro Edition (Algo portátil)
→ Indicado para quem vai utilizar cosias pequenas, controle, controle de um dispositivo, aplicações para celular.
O que é Java?
É um conjunto de regras de programação (regras léxicas e sintáticas)
Mas ela também é uma plataforma de desenvolviment oe execução
Problemas resolvidos e motivo de seu sucesso
Ponteiros / gerenciamento de memória;
Portabilidade falha: reescrever parte do código ao mudar de SO;
Utilização em dispositivos diversos;
Custo alto;
Isso significa haviam todos esses problemas com a atual situação de desnvolvimento.
Por isso na meio da década de 90 a empresa Sun Microsystems criou o Java.
O Java foi adquirida pela Oracle Corporation em 2010!
Edições:
Com a abordadem interpretada eu não tenho problema com portabilidade, ou seja, roda em diferentes sistemas operacionais com apenas um executável, mudando somente o interpretador. Por isso são mais lentas pois são executadas Just in Time , ou seja, no momento da execução.
Obs: Linguagens compiladas rodam mais rápidas pois são feitas voltadas para o sistema operacional específico.
Linguagens Compiladas: C, C++ (Mais rápidas)
Linguagens Intepretadas. PHP, JS
Linguagens Híbridas. Java, C#.
Classes
Java é uma linguagem Orienteada a Objetos e a undiade lógica baica de um programa orientada objeto é a classe. Todo código Java tem que star dentro de Classes.
Pacotes (Packages):
Agrupamento lógico de classes relacionadas.
Módulos
Agrupamento de pacotes relacionados. (Introduzidos no Java 9)
Runtime = agrupamento físico
Aplicação = Agrupamento de módulso relacionados
Segui esse vídeo: https://www.youtube.com/watch?v=QekeJBShCy4
1) Eu preciso pesquisar por Java e uma distribuição gratuita, tem a 'adopt' e a 'zulu'.
"Java JDK zulu"
Link: https://www.azul.com/downloads/?package=jdk#zulu
2) Baixar a versão LTS para Windows, criar uma pasta chamda "Java" dentro de "Arquivos e Programas" e descompactar o arquivo baixado lá dentro.
3) Configurar as variáveis de ambiente
1 - Em avançado, clico em Variváveis de Ambiente
2 - Caso não exista nenhuma variável de sistema chamada Java, eu devo criar uma nova clicando em "Novo"
3 - Eu preciso adicionar o nome como JAVA_HOME em caixa alta e depois colocar o caminho do arquivo que acabei de baixar
4) Configurar a variável PATH
1 - Clicar na variável PATH e depois clicar em editar
2 - Copiar o caminho do arquivo que acabei de baixar, clicar em novo e adicionar ele:
3 - Adicionar '\bin' no final do caminho:
4 - Mover para cima para evitar possíveis conflitos com outras versões:
5) Para testar se está funcionando, devo abrir o Prompt de Comando e digitar 'java -version'
Usar este link: https://www.eclipse.org/downloads/packages/
Rolar e procurar as versões do Elcipse e selecionar a mais atual:
Procurar pela opção Eclipse IDE for Enterprise Java and Web Developer e clicar no tipo de SO que utilizo:
Obs: workspace é a pasta onde eu vou guardar os meus projetos
🎯 O objetivo das intercace é definir um contrato que as classes terão que implementar!
• A partir do Java 8, interfaces podem ter "default methods" ou "defender methods"
• Isso possui implicações conceituais e práticas, que serão discutidas mais à frente neste capítulo
• Primeiro vamos trabalhar com a definição "clássica" de interfaces. Depois vamos acrescentar o conceito de default methods
A interface é um tipo que define um conjunto de operações que uma classe deve implementar.
É como se fosse uma classe abstrata que possui somente métodos e todos os métodos são abstrados! (a grosso modo);
A interface estabelece um contrato que a classe deve cumprir.
É para criar sistemas com baixo acoplamento e flexíveis!
Existe o Springboot, Java, CDI, Java, Bin...mas é importante ter um bom fundamento. Sim, as empresas buscam um bom profissional, por isso tem que ter uma base bem consolidada.
A formação de um profissional Java tem duas etapas:
1) Etapa de Fundamentos
2) Etapa comercial
1) Etapa Fundamentos:
Lógica de Programação (Estrutura de dados, POO, Banco de Dados, Análise & Design de Sistemas)
Após isso vem a parte comercial:
2) Etapa Comercial
Para utilizar o potencial de um bom carro, é necessário saber dirigir!
Sobre as tecnologias:
Sobre a metologia:
Sobre os Projetos:
IDE:
Eclipse para mexer com Java;
Spring Tool Suite para mexer com spring-boot.
- Data-[hora] local:
- Data-hora global:
O programa precisa ler a data de que eu recebo por meio de uma API no banco de dados e conseguir diferenciar de acordo com os fuso-horários de países diferentes:
Contúdo, em alguns casos a hora local é mais indicada:
- Data-[hora] local:
Quando o momento exato não interessa a pessoas de outro fuso horário.
Uso comum: sistemas de região única, excel:
- Data-[hora] global:
Quando o momento exato interessa a pessoas de outro fuso-horário.
Uso comum: sustemas multi-região, web, live de futebol, jogo;
Esses são os tópicos abordados:
package boardgame;
public class Position {
private int row;
private int column;
public Position(int row, int column) {
this.row = row;
this.column = column;
}
public int getRow() {
return row;
}
public void setRow(int row) {
this.row = row;
}
public int getColumn() {
return column;
}
public void setColumn(int column) {
this.column = column;
}
@Override
public String toString() {
return row + ", " + column;
}
}
Aborded topics:
Termo novo: 'Boilderplate'
Boilerplate is any text, documentation, or procedures that can be reused more than once in a new context without any substantial changes to the original. Boilerplates are commonly used online and in written documents by a variety of entities including corporations, legal firms, and medical facilities.
Para rodar o jogo no terminal, eu preciso acessar a pasta bin - que é onde está a palsta application - e execudar o comando:
java application/Program
Serão utilizadas as calsses File, Scanner e IOException;
File
É um representação abstrata de um arquivo e seu caminho
https://docs.oracle.com/javase/10/docs/api/java/io/File.html
Scanner
É um leitor de texto
https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html
IOException (Exception)
A exceção padrão de entrada e saída quando se mexe co marquivos
Ela herda de Exception
https://docs.oracle.com/javase/10/docs/api/java/io/IOException.html
package application;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class Program {
public static void main (String[] args) {
File file = new File("D:\\workspace\\ws-eclipse\\java-springboot\\files_class\\file.txt");
// Precisa de 2 barras!
Scanner sc = null;
try {
sc = new Scanner(file);
while (sc.hasNextLine()) {
System.out.println(sc.nextLine());
}
}
catch(IOException e) {
System.out.println("Error: " + e.getMessage());
}
finally {
if (sc != null) {
sc.close();
}
}
}
}
Nesse capaítulo o 'Polimorfismo' será tratado de forma introdutória, de forma que quando eu chegar em interfaces eu poderei ver na prática!
Esse é link do design:
https://github.com/acenelio/chess-system-design
TIP:
É o gerenciador de credenciais que mostra qual user está logado no git:
Link pdf do projeto:
💡A classe ItemPedido é uma classe de associação! Isso ocorroe quando há uma relação de muitos para muitos com dados adicionais.
- Usos comuns:
Iniciar valores dos atributos;
Permitir ou obrigar que o objeto receba dados / dependências no momento de sua instanciação (injeção de dependência);
Se um construtor customizado não for especificado, a classe disponibiliza o construtor padrão:
Product p = new Product();
É possível especificar mais de um consturtor na mesma classe (isso se chama Sobrecarga);
continuando...
Quando eu crio um objeto assim:
product = new Product();
Eu crio espaços vazios na memória;
Eis a questão, isso faz sentido?
A ideia é já forçar/obrigar o programador a informar os dados do objeto dentro dos parenteses! Ou seja, criar um construtor;
Ele é o 'cara' que executa no momento da instanciação do objeto.
A palavrinah this signficado uma referência para o prórpio objeto. Eu referencio o atributo do objeto!
Conclusão: O construtor serve para proteger que programador não faça besteira
Os três conceitos básicos de POO são:
Classe:
É um tipo estruturado que pode conter (membros):
Atributos (dados/campos);
Métodos (funções / operações);
A classe também pode prover muitos outros recursos, tais como:
Construtores;
Sobrecarga;
Encapsulamento;
Herança;
Poliformismo
Quando eu crio uma classe, é isso que acontece:
Eu uso o "Triangle como um tipo, assim como eu fiz com o "double". Ou seja, quando eu crio um variável do tipo Triangule, eu to criando uma variável composta - classe é um 'variável composta' - e ela só se torna composta após eu digitar "new Triangle";
Para que eu possa usar o objeto - para que ele exista - eu preciso 'instanciar' ele!
Quando eu crio uma variável no programa, ela fica salva em uma parte da memória chamada 'stack'. MAS, quando eu instancio um objeto em uma variável; por exemplo: x = new Triangle() - essa variável x contém o endereço de memória do objeto que foi criado numa parte chamada heap
Isso seria o pontero? Provavelmente sim, pois eu 'aponto' para onde estão os dados da variável.
Conclusão:
Eu estou 'instanciando', ou seja, 'salvando' dentro daquela variável o endereço de memória onde estão os atributos/métodos daquele tipo de class;
Importante:
Eu coloco 'void' quando o método não retorna nada.
Benefícios de calcular a área dentro da Classe Triangulo utilizando um Método:
Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources
package exercises;
import java.util.Scanner;
public class calcula_hora_de_jogo {
/**
Leia a hora inicial e a hora final de um jogo. A seguir calcule a duração do jogo,
sabendo que o mesmo pode começar em um dia e terminar em outro, tendo uma duração
mínima de 1 hora e máxima de 24 horas
**/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int horaInicial = sc.nextInt();
int horaFinal = sc.nextInt();
int duracao;
if (horaFinal > horaInicial) {
duracao = horaFinal - horaInicial;
}
else {
duracao = 24 - horaInicial + horaFinal;
}
System.out.println("O JOGO DUROU " + duracao + " HORA(S)");
sc.close();
}
}
O JOGO DUROU 10 HORA(S)
Nó último else ettá assim:
duracao = 24 - horaInicial + horaFinal;
Mas quando eu altero para:
duracao = 24 - horaFinal + horaInicial ;
Desa forma alterando a ordem das variaáveis, o resultado sai diferente:
O JOGO DUROU 38 HORA(S)
Expressões que quando calculádas resultam em um valor numérico. Para eu fazer as expressõs arimtéticas eu preciso conehcer os operadores aritméticos. É importante conhecer a precedência também!
Precedência:
1°Lugar: * / %
2°Lugar: +-
Variável
Em programação, uma variável é uma porção de memória (RAM) utilizada para armanezar dados durante a execução dos programas.
Declaração de variáveis
Sintaxe (o jeito de se escrever):
'tipo' 'nome' = 'valor inicial';
Exemplo:
int idade = 25; double altura = 1.68; char sexo = 'F';
Uma variável possui:
A linguagem Java possui 8 tipos primitivos!
Um bit (1 bit) pode armazenar 2 valores possíveis (0 ou 1)
Cada bit = 2 possibilidades
2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 2⁸ = 256 possibilidades
Mas como pode haver número negativo, devemos utilizar entre -128 e 127.
Conclusão:
Adotar o padrão CamelCase
1) Entrada de dados:
Quando o user informa dados para o programas os quais serão armazenados em variáveis. Esse processo também é chamado de leitura;
2) Processamento de dados:
Quando o programa realiza os cálculos. O processamento de dados se dá por um comando chamado atribuição;
3) Saída de dados:
Quando o programa informa dados para o usuário - essa etapa também é chamada de escrita.
Para imprimir número double
System.out.printf("%.2f%n", x);
O printf por padrão pega o idioma do computador, para eu transformar tudo para um único tipo de separador, eu digito:
Local.setDefault(Locale.US);
Eu preciso adicionar "import java.util.Locale;" lá em cima da JDK.
Para concatenar várias elementos em um mesmo comando de escrita:
%s = texto;
%f = ponto flutuante;
%d = inteiro;
%n = quebra de linha.
For more information: https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
Boa prática: sempre indque o tipo do número, se a expressão for de ponto flutuante (não inteira);
Quando eu escrevo uma expressão de divisão de dois inteiros então eu tenho um resultaod inteiro:
O reusultado será 2.0
Para resolver isso, basta colocar a palavrinha (double) na frente:
O nome disse é Casting (a conversão explícita dos valores);
Para fazer entrada de dados, é necessário cirar um objeto do tipo "Scanner" da seguinte forma:
sc.close() devo usar essa função quando eu não precisar mais utilizar o Scanner;
Para ler caractere
Ele lê apenas o primeiro caractere:
Para ler vários dados na mesma linha (Separados por espaço)
** Para ler um texto ATÁ A QUEBRA DE LINHA**
Tips:
CTRL + SHIFT + F = Indentação do código
nextLine() = assim ele lê a linha inteira!
Quando eu digito enter eu quebro uma linha! Ou seja, cuidado! Pois quando eu preciso 'consumir' as quebras de linahs pendentes! Isso se chama limpar o bufer de leitura.
A = Math.abs()
A variável A recebe o valor absoluto de x, ou seja, o valor sem o negativo caso ele exista. É como se fosse o módulo da matemática.
Para mais informações: java.lang.math
Tip:
CTRL + SHIFT + O = Importar todos os pactoes necessários automaticamente no eclipse;
CTRL + SPACE = Mostra uma opção de autocomplete;
Interface Funcional possui apenas um método! A interface Comparator é uma delas
Transparência Referencial é quando o resultado da função depene exclusivamente dos valores de entrada!
Numa linguagem funcional eu posso passar uma função como argumento de outro função (Por isso é uma função de primeira classe / ordem )
Inferência de tipos: é quando o compilador sabe que tipo de variável está sendo utilizada (tipagem dinâmica)
Em programação funcional, expressão lambda corresponde a uma
função anônima de primeira classe
Eu tenho que instalar:
SDK (Software Development Kit) da linguagem:
Framework de linguagem
IDE
O "pessoal" da Spring criam plugins chamados "Spring Tools" que pode ser utilizados com o VS Code, Eclipse e Theia
Theia é um Mix do Vs Code com o Eclipse!
É um sistema que permite criar containers
Container é como se fosse uma MVM que compartilha o 'kerner' do windows da máquina local.
Dockers desktop: https://www.docker.com/products/docker.desktop/
Eu encontrei dificuldade com matrizes na parte que envolve buscar itens nas posições dentro dela
Exercício:
Fazer um programa para ler dois números inteiros M e N, e depois ler uma matriz de M linhas por N colunas contendo números inteiros, podendo haver repetições. Em seguida, ler um número inteiro X que pertence à matriz. Para cada ocorrência de X, mostrar os valores à esquerda, acima, à direita e abaixo de X, quando houver, conforme exemplo
Código:
package classes;
import java.util.Locale;
import java.util.Scanner;
public class MatrizExercise {
public static void main(String[] args) {
Locale.setDefault(Locale.US);
Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int N = sc.nextInt();
int[][] mat = new int[M][N];
for (int i = 0; i < mat.length; i++) {
for (int j = 0; j < mat[i].length; j ++) {
mat[i][j] = sc.nextInt();
}
}
int X = sc.nextInt();
for (int i = 0; i < mat.length; i++) {
for (int j = 0; j < mat[i].length; j++) {
if (mat[i][j] == X) {
System.out.print("Position: " + i + ", " + j + ": \n");
if (j > 0) {
System.out.println("Left: " + mat[i][j-1]);
}
if (i > 0) {
System.out.println("Up: " + mat[i - 1][j]);
}
if (j < mat[i].length-1) {
System.out.println("Right: " + mat[i][j+1]);
}
if (i < mat.length-1) {
System.out.println("Down: " + mat[i+1][j]);
}
}
}
}
sc.close();
}
}
Primeiro a gente precisa de um Web Server (É uma aplicação que recebe nossa aplicação Java + Spring) e será ele que irá escutar as requisições e responder à elas!
Nossa aplicação será a App Srping Boot Java.
Conclusão: Ou seja, fazer tudo isso utilizando apenas uma linguagem do zero levaria muito tempo e um trabalho muito complexo. Por isso para agilizar o processo nós utilizamos um framework e é aqui que entra o Spring.
O Spring é um framework Java criado com o objetivo de facilitar o desenvolvimento de aplicações, explorando, para isso, os conceitos de Inversão de Controle e Injeção de Dependências.
Enumerações
Enumerações servem para representar vários tipos que compõem CONSTANTES relacionadas!
Os estados de um pedido pode ser representados por uma enumeração ou tipo enumerado!
Composição de objetos:
Como consigo compor objetos para construir/desenvolver modelos mais complexos.
Restrições
Conveções:
- Camel Case: lastName
Utilizar com
- Pascal Case: ProductService
Utilizar com
Ele serve para avaliar o bit de um número, ou seja, os números binários que compõem um número. O número '1' por exemplo é igual a 0001:
Essa forma (utilizando o operador bitwise) eu consigo analisar qual é o sexto, sétimo, oitavo número de um determinado número.
Obs: o ou-exclusivo signnifica que será verdade somente se um dos dois forem verdadeiros e não os dois!
Funções mais utilizadas:
- Formatar: toLowerCase(), toUpperCase(), trim();
- Recortar: substring(inicio), substring(inicio, fim);
- Substituir: Replace(char, char), Replace(string, string);
- Buscar: indexOf(); LastIndexOf();
Operador Split
Quando eu utilizo o oeprador Split, eu consigo adicionar o separador dele, ex:
String s = "potato apple lemon";
String[] vect = s.split(" ");
Elas representam um processamento que possui um significado. Por exemplo:
Math.sqrt(double);
System.out.print(string);
Principais vantangens: modularização, delegação e reaproveitamento
Divido em várias partes (módulos);
Eu delego a lógica de executar algo para outro lugar;
Dados de entrada e saída:
Funções podem receber dados de entrada (parâmetros ou argumentos);
Funções podem ou não retornar uma saída
Em orientação a objetos, funções em classes recebem o nome de "métodos;
Obs:
Função: Parte de um programa ou classe que retorna um valor (da definição de Delphi/Pascal/Visual Basic/Visual Basic . NET);
Método: Procedimento ou função pertencente a uma classe (várias linguagens de programação definem desta forma, por exemplo, c++, c#, java, etc.).
public = fique disponível em outras calsses;
static = indica que pode ser chamada independente de se criar um objeto;
o tipo de dado que ela retorna
Quando uma função simplesmente faz uma ação sem retornar um valor que pode ser reaproveitado no programa, logo o tipo
que esssas função retorna é void! Ou seja, retorna vazio. Isso significa que quando ela faz somente uma ação, como por exemplo imprimir uma mensagem.
Eu ainda não entendi como funciona a quebra de linha em alguns casos, por exemplo o caso do desafio do pensionato.
Generics permitem que classes, interfaces e métodos possam ser parametrizados por tipo, Seus benefícios são:
Reuso
Type safety;
Performance;
Uso comum: coleções
List<String> list = new ArrayList<>();
list.add("Maria");
String name = list.age(0);
Supomos que ao invés de números, eu queira utilizar nomes! ou seja, "Strings", logo não seria possível!
Seu deixar a List com o tipo "Object"
List<Object> list = new ArrayList<>();
Quando eu foi querer adicionar um dos valores dela para uma variável do tipo integer, eu terei que fazer um casting (converter):
Integer x = (Integer) ps.first(); // Eu vou ter que converter
Logo eu terei um problema de segurança de tipos → TypeSafety e também de Performance.
public class PrintService<T> {
List<T> list = new ArrayList<>();
public void addValue(T value) {
list.add(value);
}
}
Quando eu for instanciar no programa principal, eu preciso indicar o tipo:
PrintService<Integer> ps = new PrintService<>();
// Repare que é preciso colocar '<>' no final antes dos parêntreses para dizer pro compilador que é um Generics;
// Seu quiser adicionar um tipo String eu não irei conseguir:
ps.addValue("Maria"); // O compilador irá reclamar
// Agora minha classe está parametrizada com um certo tipo "T";
public class PrintService<T> {
List<T> list = new ArrayList<>();
public void addValue(T value) {
list.add(value);
}
public T first() {
if (list.isEmpty()) {
throw new IllegalStateException("List is empty"); // Programação defensiva
}
return list.get(0);
}
public void print() {
System.out.print("[");
if (!list.isEmpty()) {
System.out.print(list.get(0));
}
for(int i = 1; i < list.size(); i++) {
System.out.print(", " + list.get(i));
}
System.out.println("]");
}
}
package application;
import java.util.Scanner;
import services.PrintService;
public class Program {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PrintService<Integer> ps = new PrintService<>();
System.out.println("How many values? ");
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
Integer value = sc.nextInt();
ps.addValue(value);
}
ps.print();
Integer x = ps.first();
System.out.println("First: " + x);
sc.close();
}
}
Variáveis cujo tipo são classes não devem ser entendidas como caixas, mas sim como "tentáculos" (ponteiros) para caixa. Ou seja, as classes nada mais são d que variáveis que guardam um endereço que mostra onde estão os objetos. Elas guardam um endereço memória e essa memória fica ho HEAP. As variáveis ficam dentro do Stack e dentro delas ficam o endereço que aponta para o a memória dentro do Heap:
Nos livros eu encontrarei isso:
Tipos referência aceitam o valor "null", que indica que a variável aponta pra ninguém;
Em Java, tipos primitivos são tipo valor. Tipos valor são CAIXAS e não ponteiros.
Esss tipos primitivos abaixo são Caixas, ou seja, eles ficam dentro do Stack!
Quando alocamos (new) qualquer tipo estruturado (calsse ou array) são atribuídos valores padrão aos seus elementos
- números: 0;
- boolean: false;
- char: caractere código 0;
- objeto: null
Obs: String é um objeto!
Garbage collector é um processo que serve para verificar o heap e desalocar os objetos que não estão sendo mais utilizados!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.