se você quer aprender java do zero para conseguir criar seus primeiros programas nessa linguagem Esse vídeo é para você no vídeo de hoje a gente vai ver os principais tópicos que envolvem o Java começando pela jvm como compilar e executar um programa Java a sintaxe básica da linguagem e até conceitos de programação orientado a objetos então sem mais enrolações Bora pro vídeo quando a gente tá aprendendo Java pela primeira vez existem alguns conceitos que a gente precisa entender sobre a linguagem antes mesmo de colocar a mão no código porque esses conceitos vão influenciar diretamente a
forma como a gente pensa no momento que a gente vai escrever um programa em Java Então até coloquei aqui né o primeiro tópico como a base da linguagem Java porque esses conceitos iniciais que a gente precisa entender antes da gente ir pro código e ver a sintaxe da linguagem etc o primeiro deles é o poo né então para quem não conhece Poo significa programação orientada a objetos e por que que eu coloquei esse ponto aqui bom porque o Java é uma linguagem que segue o paradigma de programação orientada a objetos isso vai fazer com que
a linguagem Java e toda a sintaxe dela gire em volta de classes e objetos né então ela vai utilizar objetos e aí interações com esses objetos para projetar as aplicações para projetar os sistemas certo ter fazer toda a lógica do nosso programa então a gente precisa entender que o Java é uma linguagem orientada a objetos outras linguagens com por exemplo o JavaScript são linguagens multiparadigmática tem esse estranhamento Inicial certo essa essa certa estranheza ali do código porque ele te força a seguir o paradigma orientado a objetos enquanto no JavaScript por exemplo tu pode tanto fazer
teu programa orientado objetos com classes e objetos e enfins ou tu pode seguir ali para paradigma procedural ou até mesmo um paradigma funcional que são outros paradigmas de programação mas como esse não é o assunto do vídeo né Eu só dei uma pincelada aqui para vocês entenderem então primeiro tópico fechado segundo ponto é que o Java ele é uma linguagem fortemente tipada então o que que isso significa todas as variáveis e as expressões que a gente for definir dentro da linguagem Java elas vão ter um tipo definido tá então a gente vai definir explicitamente ali
no nosso código Qual é o tipo daquela variável Qual o tipo que aquele método vai retornar Qual o tipo das expressões que a gente tá evaluando ali ao longo do nosso programa e de novo para quem vem de uma linguagem Como por exemplo o JavaScript e o Python que são linguagens fracamente tipadas que a gente chama também vai ter essa estranheza no começo mas para quem veio de uma linguagem Como por exemplo o c o próprio c+ mais já tá acostumado ao a fortemente tipado certo então e outro ponto aqui sobre linguagens fortemente tipadas é
que ao longo da execução do nosso programa o tipo da variável não muda também porque no JavaScript O que que a gente pode fazer Vou até escrever aqui no notion mesmo a gente pode criar uma variável certo por exemplo o nome e inicialmente atribuir esse nome a uma string né colocar aqui Fernanda e depois ao longo do meu código eu posso trocar essa variável nome para receber um número e tá tudo certo no JavaScript a gente pode fazer isso no Java não é uma linguagem fortemente tipada então não posso alterar o tipo dessa variável depois
que eu já tiver declarado ela tá bem então é um ponto aqui que a gente tem que estar sempre atento E aí por fim é que o Java é uma linguagem Independente de plataforma o que que isso significa tá que o Java é uma linguagem portátil então a gente consegue fazer com que o nosso código seja executado em diferentes sistemas operacionais em diferentes arquiteturas de computadores por exemplo a linguagem C depois que a gente compila a linguagem C aquele código compilado ele só consegue ser executado numa arquitetura de computador pra qual ele foi compilado então
se eu tô na arquitetura RM 64 né compilei aqui na minha máquina e pegar e tentar rodar numa outra arquitetura vai dar pau não vai funcionar porque aquele código de máquina paraa qual ele foi compilado não condiz com um código de máquina aqui que o meu processador vai interpretar tá basicamente por isso eu resumi bastante e simplifiquei mas é basicamente por isso o Java não o Java é uma linguagem Independente de plataforma então eu consigo compilar um programa Java e esse programa compilado vai ser portátil eu consigo pegar esse executável do Java e executar em
diferentes sistemas operacionais e arquiteturas tá por conta dessa característica dele o que permite o Java ser independente de plataforma é a jvm que é o próximo tópico que a gente vai entrar aqui então o que que seria a jvm a jvm que a gente chama é a Java virtual Machine ela é o ambiente de execução que vai literalmente interpretar o bite code do Java vou dar um outro exemplo aqui para vocês tá quando a gente pega uma linguagem mais tradicional como por exemplo C A gente tem aqui um código em C certo quando a gente
compila esse código em C A gente transforma ele em código de máquina a gente literalmente transforma ele para o assemble ali o código de máquina que o no processador vai conseguir interpretar e executar as instruções o código JAVA então aqui quando a gente tem um código JAVA a gente consegue compilar ele certo ele passa por um processo de compilação mas quando a gente compila o código JAVA a gente não transforma ele em código de máquina a gente transforma ele em bite code que é o código de máquina da jvm então é a linguagem que a
jvm interpreta que é a Java virtual Machine a máquina virtual do Java e a jvm interpreta esse bite code então a gente pode dizer que o Java ele é ao mesmo tempo que ele é compilado ele também é interpretado porque quando a gente gera o executável do Java aquele executável não vai ser interpretado pela nossa máquina diretamente né ele não tá em código de máquina Ele tá em bite code quem vai interpretar aquele código vai ser jvm então ele passa por um processo de interpretação também diferente da linguagem C que ela é só compilada e
depois ela é só executada lá no processador Tô simplificando um pouco mas só para vocês entenderem então a jvm certo é esse ambiente de execução de Java então pra gente executar um programa Java na nossa máquina a gente precisa ter a jvm instalada Porque é ela que vai interpretar o Bat code e vai aí sim converter em instruções que são executáveis pelo nosso sistema operacional e ela que vai fazer todo o gerenciamento de memória do nosso programa realizar a coleta de lixo né clar variáveis que não estão mais sendo usadas espaços na memória que não
estão mais sendo usados e também garantir a segurança e o isolamento dos Nossos programas Java perfeito agora que a gente já entendeu Essa base da linguagem que a gente já pegou aqui uma parte mais teórica vamos partir pra mão na massa e pra gente começar a programar a gente precisa de alguns né pré-requisitos que é ter a linguagem instalada na nossa máquina em um ambiente de desenvolvimento Então vamos ver como é que a gente pode fazer isso então para ter o Java instalado na máquina de vocês eu vou precisar que vocês procurem no Google por
Java download quando vocês procurarem por esse termo né Java download vocês provavelmente vão cair nessa página aqui tá e a aqui vai ter o passo a passo para vocês fazerem a instalação nos diferentes sistemas operacionais então tanto no Mac no Linux e no Windows daí você seguem aqui certinho o passo a passo para instalar o Java na máquina de vocês o Java que eu tô usando aqui na minha máquina eu vou pegar a versão certinha é o Java 21 se eu não me engano então é eu tô usando aqui ó o open jdk 21 que
que quer dizer esse openjdk certo eu tô instalado aqui na minha máquina com o Java development kit então lembra que eu expliquei aqui que a gente tem a jvm que é o Java virtual Machine certo é quem vai literalmente pegar o o bte Code ali do Java fazer a interpretação dele para executar o programa só que antes da gente interpretar um byte code a gente tem que ter gerado esse bte code desenvolvido ele feito a compilação e etc essa parte né de de escrever código JAVA e conseguir compilar ele para gerar o bite code é
feito pela jdk pelo Java development kit quando a gente baixa somente a jvm a gente só tem um ambiente de execução de programa Java Mas a gente não consegue pegar um código JAVA e compilar ele fazer todo o processo ali de Build do do programa linkagem das classes etc então pra gente conseguir desenvolver códigos em Java na nossa máquina a gente precisa ter a jdk instalada que é a java development kit que adiciona todas as partes ali que precisa para desenvolvimento Build de aplicações Java mais a jvm para depois fazer do programa tá se a
gente instalar somente a jvm a gente não vai conseguir desenvolver e nem buildar os Nossos programas Então quando vocês procurarem por Java download vocês vão vir aqui e vão fazer o download da jdk na máquina de vocês tá feito isso então dando um ok aqui na instalação do Java eu vou precisar que vocês instalem também o nosso ambiente de desenvolvimento A ideia é que a gente vai estar utilizando certo e qual que eu tô usando no vídeo de hoje bom eu vou usar o intelij porque é o que eu costumo usar no meu trabalho e
que eu tenho mais familiaridade também então por isso que eu vou utilizar o intelij mas existem outras opções do mercado como por exemplo o visual Studio próprio visual Studio code que é gratuito tem também esqueci o nome de um outro que é muito popular no Java também mas é usado bastante pela comunidade Depois eu deixo aqui na descrição do vídeo para quem quiser explorar essas outras possibilidades mas a gente vai estar usando o intelij E aí para vocês não se confundirem existe o intelij na versão gratuita tá então normalmente a gente entra aqui na página
do intelij e cai nessa tela aqui direto né na parte do download onde diz né aqui pra gente fazer um free Trial de 30 dias e o pessoal já se assusta e acha que a ferramenta é paga mas não existe uma versão que é o intellij community certo que ele é feito para estudantes e entusiastas do Java então isso aqui empresas não podem usar no seu dia a dia no trabalho né é algo mais voltado pra comunidade open source então a gente pode instalar aqui a versão do intelij community que é gratuita certo e não
tem todas as funcionalidades do do intellij Ultimate mas eu nunca senti falta tá sempre utilizei o community e dá E sobra então instalem aqui que a versão gratuita pro sistema operacional de vocês certo é só fazer o download e aí a gente vai partir daqui para começar a entender os primeiros pontos da sintaxe do Java então eu já tô aqui com o intelij aberto e se vocês perceberem eu já tenho um arquivo Java aqui dentro do meu intelij certo o que que eu fiz aqui eu apenas Criei uma pasta então eu vim aqui na área
de trabalho do meu computador criei uma nova pasta certo vou mostrar aqui para vocês puxar a área de trabalho criei uma nova pastinha né New Folder dei um nove para ela por exemplo Java curso criada essa pasta aqui no intelij a gente tem a opção de abrir um novo projeto uma nova pasta então vim aqui na minha desktop né E abr essa pastinha dentro dessa pastinha vou até Abrir aquela aqui para vocês para mostrar né vou usar essa própria janela dentro dessa pastinha aqui com a pasta criada no intelij então uma pasta vazia ele que
vai adicionar esse arquivo aqui essa pasta pontoid que é as configurações do próprio intelij então nessa pasta aqui vazia que eu acabei de criar mostrei aqui para vocês eu vim aqui Cliquei no botão New certo e vou clicar em criar Java Class Então a gente vai criar uma nova classe do Java e aqui eu vou nomear ela como Main tá Tô só mostrando o processo para vocês porque pode ser que confunda algumas pessoas como é que eu já tava ali com o arquivo Java aberto tá então foi isso que eu fiz esse processo quando vocês
abrirem o intj pela primeira vez provavelmente ele já vai cair na tela ali Perguntando se vocês querem abrir um projeto E aí vocês abrem essa pastinha que vocês criaram só criar uma pasta vazia abrir ela aqui no intelij clicar com o botão direito na pasta certo para clicar nesse New E aí adicionar uma Java Class que a gente vai chamar de Main beleza e aqui a gente já começa a ver os primeiros pontos da sintaxe do Java primeira coisa certo todo arquivo Java que a gente for escrever repito todo o arquivo Java que vocês forem
escrever vocês vão precisar declarar uma classe nesse arquivo então a gente é obrigado a declarar uma classe em todo o arquivo Java que a gente for escrever segundo ponto o nome da classe que a gente for declarar ele tem que ser igual ao nome do arquivo Então se o meu arquivo se chama m. Java o nome da minha classe tem que ser Main Isso significa que eu só posso declarar somente uma classe por arquivo não eu posso vir aqui embaixo e criar uma nova classe certo uma classe carro e aí ela vai existir aqui dentro
sem problemas eu posso fazer isso mas eu preciso que exista dentro desse arquivo pelo menos uma classe que tenha o mesmo nome do arquivo essa classe principal vai ter o mesmo nome do arquivo certo e aí eu vou atropelar um pouquinho os bois aqui só para Caso vocês ter deu algum erro essa classe que for ter o mesmo nome do arquivo ela tem que ser anotada aqui na frente né ela tem que ter essa sintaxe de Public e a gente tem que colocar esse Public na frente dela se eu tirar daqui da frente e por
exemplo tentar colocar o Public na frente da classe carro a gente já vai ver que o próprio intelij vai me vai me indicar um erro aqui ó ele vai dizer ó a classe carro é pública e ela deveria ser declarada num arquivo chamado carro. jaava Então já coloquem aí na mente de vocês né A classe que for ser pública dentro de um arquivo tem que ser a classe que tem o mesmo nome do arquivo certo a gente já vai entender o que quer dizer esse p e esse não Public beleza não não se estressem ainda
com isso mas é só para Caso vocês fossem testar aí na máquina de vocês e vir sem um erro é para vocês entenderem que a classe que vai ter o mesmo nome do arquivo ela tem que ser a classe pública Tá beleza então esse ponto a gente já pegou agora vamos partir pra sintaxe básica aqui do Java antes da gente partir pras coisas que dizem respeito à programação orientado objetos e o primeiro ponto que a gente vai explorar é como a gente declara variáveis no Java certo como é que a gente faz a declaração das
variáveis basicamente as variáveis para quem não sabe para quem tá aprendendo uma linguagem de programação pela primeira vez né a variável é um espaço na memória do computador que a gente pode armazenar valores certo então o nosso programa pode pegar lá um espacinho na memória e armazenar lá um valor para ser usado depois né qualquer tipo de valor aqui pode ser pode ser um uma frase né uma palavra pode ser um número pode ser um decimal que a gente chama pode ser um boleano um true ou false certo e outros tipos de dados que a
gente vai ver mais adiante no vídeo e em Java não é diferente a gente pode declarar variáveis e aí como é que a gente faz para declarar uma variável no Java bom existem basicamente duas formas a primeira delas é a gente declarando dessa maneira aqui ó a gente vai dizer qual o tipo da variável então por exemplo eu tô criando uma variável int quer dizer que é um inteiro é um número inteiro número inteiro são números que são né maiores do que Opa desculpa são números que não possuem vírgula e aqui eu dou um nome
depois então declarei in é o tipo dessa variável Qual o nome da variável né eu vou dar uma referência para ela qual o nome eu posso dar o nome de por exemplo minha idade Essa vai ser a variável depois quando eu for usar ao longo do código eu vou me referir à variável minha idade e aí eu vou dar um valor né eu boto o igual para atribui um valor para essa variável e atribuo o valor 20 por exemplo né aqui que seria a minha idade e isso aqui é declaração de uma variável então declarei
ela aqui se eu quiser depois ao longo do código né Depois de ter escrito alguma coisa aqui no meu código feito lógicas Enfim eu posso atualizar esse valor então posso vir aqui e colocar que a minha idade né tem o valor de 21 por exemplo troquei o valor da variável minha idade tá aqui ele tá dando um errinho Deixa eu só declarar um método para vocês e eu já explico exatamente o que que é cada coisa tá não se assustem mas é que eu quero primeiro começar do dos pontos principais depois a gente vai incrementando
o nosso conhecimento então eu posso vir aqui e atualizar o valor de minha idade e não vai ter problema algum certo vou colocar aqui trocando os valores que ela possui e trocando e não tem problema o único problema é que se eu tentar pegar essa minha idade tentar trocar o tipo dela lembra que eu falei para vocês que o Java é fortemente tipado e não permite que a gente altere o tipo das variáveis ao longo da execução do programa então se eu vi aqui tentar colocar que a minha idade recebe Fernanda o próprio indid já
me indica um erro né Ele diz aqui ó o tipo que era necessário era do tipo inteiro e tu provê um tipo string Então tu não pode fazer isso não pode fazer essa transformação certo Se eu quisesse declarar uma variável que é uma string né para colocar uma frase uma palavra etc eu tinha que vir aqui declarar uma nova variável do tipo string dizer o meu nome certo colocar daí sim Fernando e aí depois ao longo do código eu poderia vir aqui atualizar o meu nome colocar né vazio enfim atualizar esse valor Então essa é
uma forma de variar de declarar variáveis no Java é colocando o tipo aí então o nome da variável certo então aqui atribuir o valor dela essa é a primeira forma da gente fazer mas existe uma outra forma forma que a gente pode declarar variáveis no Java que é através do que a gente chama de vars a sintaxe das vars a var basicamente permite com que a gente declare uma variável usando aqui o var sem colocar o tipo na frente e então já atribui o valor E aí o próprio Java aqui vai ser inteligente o suficiente
para inferir o tipo dessa varável né ele vai inferir essa é a palavra já já anota essa palavra aí na mente de vocês que vocês vão ouvir bastante então ele inferiu que o tipo dessa minha variável é do tipo string eu não disse para ele explicitamente mas quando eu atribuí o valor ele conseguiu entender que através desse valor que ele vê que é uma string essa variável tem um tipo string E se eu tentar vir aqui e atribuir essa minha variável o valor 10 ele vai dar um erro então ele vai dizer que ele tava
esperando o tipo string e eu passei o tipo inteiro Então essas são as duas formas que a gente faz aqui no Java para fazer a declaração de variáveis certo então vamos dar aqui um OK agora a gente vai entender quais são os tipos primitivos que a gente tem aqui no Java né que a gente pode manipular que a gente já entendeu Como declarar uma variável falei para vocês que a gente tem que declarar o tipo dela né E aí a gente precisa saber quais são os tipos que a gente tem aqui disponíveis para trabalhar dentro
do Java Então vamos lá né quais são os tipos que a gente tem aqui os tipos primitivos que a gente tem dentro do Java São primeiro os números inteiros né que a gente chama e são números que não possuem ã vírgula então o número inteiro é por exemplo 100 esse número aqui é um número inteiro 255 é inteiro 120 o número um são números inteiros tá o número não sei quantos milhões é um número inteiro só que dentro do Java a gente existe existe várias formas da gente declarar números inteiros certo existem vários tipos para
números inteiros existe o tipo bite o tipo short o tipo int e o tipo long botar aqui em outra linha o long Por que que existem esses diferentes tipos de inteiros aqui no Java bom porque cada um desses tipos aqui representa uma tem uma faixa de representação diferente então quando a gente declara uma variável como sendo do tipo byte a gente tá dizendo que ela só vai ocupar somente 8 bits na memória Isso significa que ela vai ter uma faixa de representação de somente né do número menos 128 até o número 127 então se eu
declarar uma variável como sendo do tipo byte então aqui minha var né e tentar atribuir a ela o valor 255 vai dar erro por quê Porque a faixa de representação de um byte aqui no Java Vai somente do número Men 128 até o número 127 Por que que isso é útil né Por que que eu já não uso sempre o que for maior porque isso aqui economiza espaço na memória tá basicamente por isso quando a gente quiser representar um número que vai est ali dentro dessa faixa de representação pequena a gente pode utilizar um byte
certo o short Ele também é um inteiro só que tem uma faixa de representação um pouco maior ele vai utilizar 16 bits na memória então eu vou conseguir representar do número - 32.768 até o número 32.767 então agora com o short né eu conseguiria colocar aqui a minha var né e dar ela o número 2 55 não ia ter um estouro aqui no tamanho da minha variável mas se eu quisesse tentar usar o número 100.000 aqui já ia ter um problema né porque o número 100.000 estour aqui a faixa de representação da dos shorts e
aí a gente vai pro inteiro o inteiro ele tem uma faixa de representação ainda maior ele tem 32 bits então ele ocupa 32 bits na memória e a faixa de representação dele vai daqui até aqui certo 2 trilhões desculpa 147 milhões 488 648 até 2 trilhões 37 milhões certo então o inteiro basicamente a gente consegue representar quase todos os números que a gente costuma manipular nos nossos códigos e o long ele é maior ainda então é para números muito longos tá E aí a gente vai para uma faixa de representação de 64 bits e consegue
representar toda essa faixa aqui de números Então é isso Esses são os números inteiros que a gente tem disponível mas a gente não tem só números inteiros a gente tem os nossos números decimais também que aí vão ser os números que possuem vírgula né então por exemplo se eu quero representar R 5,50 eu representaria assim só que esse número aqui 550 eu não consigo representar com o inteiro eu preciso usar um número decimal E aí no Java a gente tem dois tipos diferentes para isso a gente tem o float que o próprio CoPilot aqui já
completou para mim né que é uma faixa de representação de 32 bits e é o que a gente chama aqui de precisão simples né que nos fornece poucos números após a vírgula então quando eu quero representar um número tipo ah 39.23 123.1 [Música] isso aqui eu consigo representar com float mas se eu quiser representar um número que tem uma né uma precisão dupla né que ele é muito longo ele tem bastante números após a vírgula eu teria que usar um um um double eu não consigo mais utilizar um float então aqui a gente já pode
colocar é o Double que tem uma faixa tem um utiliza na memória 64 bits e é uma precisão dupla certo então se a gente quer usar decimais a gente usa um desses dois tipos aqui PR precisão simples e precisão dupla e pros inteiros a gente tem todos esses aqui dispon mas o que a galera mais costuma usar é os ints mesmo né inteiro inteiro por tudo quanto é lado e aí quando tem algum número que é muito grande né Por exemplo um ID que seja muito grande ou sei lá agora não consigo lembrar de um
exemplo para vocês mas volt meio a gente topa com alguns números assim gigantones né daí a gente utiliza o long certo mas não para por aqui a gente tem outros tipos aqui dentro do Java Então a gente tem por exemplo as Strings né Para representar as palavras e frases então representar palavras e frases aqui dentro do Java a gente tem os chars né que representam um único caractere então se eu quero salvar somente o caracter a caracter b caracter c d né eu vou usar um sh E aí eu não consigo colocar dentro de um
char uma string então se eu tiver aqui meu sh né meu caracter e eu declaro ele com aspas simples não aspas duplas Essa é a diferença dele pra string aí depois eu tentar pegar esse meu char e atribuir a ele uma string então aqui Fernanda ele vai dar erro ele vai estar estourando a faixa de representação desse caracter desse char né porque ele ele só consegue representar um único caracter e ele aqui me reclama do tipo né E a gente já consegue ver a diferença entre a string e o shar é que a string usa
aspas duplas e o char usa aspas simples aí não para por aqui a gente também tem os booleans né que representam os valores booleanos true ou falso verdadeiro ou falso tá E esse aqui basicamente são os tipos primitivos que a gente tem aqui no Java Então vou tirar tudo isso daqui vou comentar deixa eu tentar comentar deixar comentado aqui em cima que aí depois a gente a gente vai ao longo do nosso código usando isso daqui como colinha para vocês irem Relembrando deixa eu colocar eles aqui tudo coladinhos né na na lateral para ficar bonitinho
aqui os exemplos e a gente tem os booleanos certo então já entendemos aqui os principais tipos primitivos no Java Então vamos começar a fazer umas coisinhas mais interessantes vamos começar a adicionar umas condicionais mexer com alguns vetores a relist e Loops aqui tá Então vamos voltar lá pro nosso programa e vamos começar a brincadeira então pra gente escrever aqui nossos primeiros condicionais eu trouxe alguns exemplos de variáveis aqui certo no nosso código em cada um dos tipos primitivos que a gente acabou de aprender E lembrando que os tipos primitivos são os tipos nativos que o
Java oferece pra gente pra gente colocar né as nossas variáveis com esse tipo né usar esses tipos aqui pro nosso programa e aqui eu vou declarar uma string também que eu tinha me esquecido e se vocês derem uma olhada a string inclusive ela fica com essa cor branquinha porque ela é um adendo ela não é um tipo primitivo que nem os outros a string aqui se a gente abrir ela é uma classe dentro do Java né que foi implementada pra gente conseguir construir uma string Então ela é construída em cima de outros artefatos aqui do
Java os primitivos primitivos mesmo são esses aqui que tão até em minúscula né ão laranjinhas que são que tão nativos na linguagem a string ela tá dentro do do módulo principal do Java mas ela acaba sendo uma classe né ela não é um tipo primitivo a gente não pode chamar ela de tipo primitivo e se vocês verem aqui tem até algumas coisinhas né quando a gente olha aqui o long ele tem esse L aqui no final por quê Porque os longs tem que ter esse L aqui no final no Java certo então depois que a
gente termina de declarar um número long a gente coloca o l aqui no final da mesma forma pro float né que tem a representação simples a gente tem que terminar ele com esse Ezinho aqui beleza mas agora vamos pro que interessa que é escrever os nossos condicionais o que que são os condicionais bom as estruturas condicionais são estruturas dentro de linguagem de programação que permitem que a gente escreva condições né se acontecer uma coisa faça tal coisa se acontecer outra coisa faça outra coisa a gente vai adicionando condições ao longo do nosso código para que
o nosso programa se comporte de maneira diferente dependendo da entrada que ele recebeu dos números os valores que ele está lendo de algum lugar ou recebendo como input do usuário etc então pra gente escrever condicionais no Java como é que a gente faz bom a gente usa sintaxe do IF então para quem vem de uma outra linguagem de programação já tá habituado aqui com if para quem tá aprendendo pela primeira vez é dessa forma que a gente escreve um condicional simples né aqui no java em quase todas as linguagens de programação que eu utili utilizando
o if e o else o if é onde a gente vai escrever o nosso condicional então percebe aqui que toda a linguagem né Toda a sintaxe tá em inglês if em inglês Quer dizer se né se tal coisa eu vou fazer uma coisa sen não Outra coisa o senão seria o else então o else representa o se não então aqui dentro do IF a gente coloca um parênteses né para representar que aqui dentro vai ter a expressão que eu quero evaluar que a gente chama que eu quero verificar o valor dessa expressão então por exemplo
if bu eu vou botar aqui se o Bull for verdadeiro ele aqui ele já entende que se eu tô fazendo if Bull e esse Bull já é um verdadeiro ele já entende que é para verificar se esse valor é verdadeiro ou fals eu vou printar ou seja vou mostrar no conso aqui no terminal né pro usuário a string verdadeiro se não então se esse valor não for verdadeiro eu vou mostrar aqui falso tá E aí se a gente vier aqui e executar o nosso Main Java eu já mostro para vocês depois como é que a
gente faz toda essa parte de configuração aqui do de qual ã Java O nosso intelij vai est usando Mas eu só quero mostrar aqui para vocês o exemplo a gente já tem um tópico aqui para entender como é que a gente faz a compilação e a execução dos Nossos programas Mas enfim quando a gente executa aqui o nosso programa A gente já consegue ver que ele printa aqui para mim no terminal o valor verdadeiro por quê Porque esse boleano tá como verdadeiro e ele foi fazer a verificação né se é verdadeiro é então printou aqui
verdadeiro se eu Trocasse o valor desse boleano para false né e a gente executasse aqui o programa de novo ele vai printar falso mas não é somente com valores estritamente booleanos que a gente consegue fazer os nossos condicionais então a gente pode vir aqui e fazer o nosso condicional baseado num número né no inteiro então quero verificar se o número B né aqui o nosso o Nossa variável B é maior do que o número 99 eu quero fazer essa verificação se for maior do que o número 99 eu printo verdadeiro sen não vou printar falso
executo quando eu aparece aqui né tá aparecendo verdadeiro porque o b é 100 se eu colocasse aqui maior do que 101 ele já vai printar falso né porque não é maior do que 101 que é um valor 100 né e eu posso fazer aqui maior ou igual menor ou igual né posso fazer verificações se duas Strings são iguais Então posso verificar se a string é igual a outra string Fernanda né posso fazer essa verificação aqui também para validar se elas são iguais ele me prenta aqui verdadeiro Se eu colocar outra string ele vai printar falso
eu posso inclusive verificar caracteres também mas eu não posso fazer a comparação de caracter com string Porque não são os mesmos tipos Mas eu posso por exemplo verificar se uma string né aqui ó V um string ponto equals e aí passar um valor aqui para ela certo isso aqui essa expressão vai me retornar um boleano E aí vai dar verdadeiro ou falso ou eu posso verificar se essa string é vazia então is Blank né Se ela é vazia se ela for vazia eu vou printar verdadeiro senão vou printar falso então aqui ele me printa verdadeiro
se ela não for vazia Então se ela tem coisas aqui dentro dela e eu executo ela me printa falso então aqui vocês já entenderam né já Peg pegaram como é que a gente faz os condicionais inclusive aqui no Java além do IF e do else a gente tem o else if também então eu não preciso somente ter duas condições Ah se tem uma coisa faz se não faz outra não eu posso ter um se não ser então o se não ser seria o if else Então se tal coisa faz ah não é Ah então se
for outra coisa faz isso aqui ah não é então por fim faz isso daqui sabe então o inf else serve pra gente colocar mais um condicional aqui no meio seria por exemplo ver se é string é igual a Fernanda então primeiro eu verifico se ela é vazia e aí printo verdadeiro se ela não for vazia eu printo Fernanda se não por fim eu printo falso inclusive Aqui eu errei né else if não é if else é else if e aqui eu coloco a minha condicional então é sen não c né eu tinha colocado C sen
não mas é se não C if ELS if e aqui o meu ELS né que vai ser a última condicional que vai ser ã analisada se eu trocar de novo aqui para Fernanda que ela vai cair aqui nesse do meio e rodar daí ele vai printar ali Fernanda certo essa é a estrutura dos nossos condicionais aqui no Java então a gente já pode colocar lá um ok na nossa parte de condicionais e agora a gente vai para vetores certo o que que seriam os vetores aqui no Java bom tanto no Java quanto em outras linguagens
de programação o vetor ou arrei também como a gente costuma dizer ele é uma estrutura de dados que a gente utiliza para armazenar uma coleção de valores do mesmo tipo então aqui quando a gente declarou essas variáveis elas tinham todas ã cada um o seu tipo aqui né só que a gente estava colocando somente um valor aqui então quando eu declarei aqui a string Fernanda só tem uma string aqui que é string que tem esse valor quando eu declarei aqui esse número inteiro eu coloquei por exemplo aqui o número cinco só tenho aqui o número
cinco mas se eu quiser representar uma coleção de números inteiros eu vou precisar utilizar um vetor e aí como é que a gente faz isso bom a gente faz a forma de declaração da variável da mesma maneira que a gente aprendeu só que vai ter uma única diferença aqui então por exemplo coleção de inteiros como é que eu vou fazer fazer isso tem duas formas que a gente pode fazer isso a gente pode direto já colocar assim como ele tá me sugerindo né eu indico aqui e na verdade tá isso aqui no lugar errado eu
posso colocar assim ó eu indico pro Java que isso aqui é um int E aí coloco um abre e fecha ã Chaves e esse abre e fecha Chaves aqui é para indicar que isso aqui vai ser uma coleção de valores né vai ser um arrei vai ser um vetor E aí teria os valores aqui imaginariamente né dentro dessa coleção e eu já inicio esse meu eu arrei essa minha coleção de valores com valores padrões aqui por exemplo valor 1 2 3 e 4 e a se eu quiser eu posso vir aqui pegar essa minha coleção
de inteiros vira aqui brash e colocar System Pout P println que é o comandinho que a gente usa aqui para printar os valores no terminal e colocar coleção de inteiros ponto na verdade zero né para pegar o valor inicial que é o valor da posição um e printar esse valor então venho aqui executo e tô executando e vendo que ele tá me printando o valor um por quê Porque na posição são zero desse meu arrei ele tem o valor um antes que você se confundam para quem tá vendo arris pela primeira vez as posições são
diferentes mesmo tá então é comum a gente achar que vai ser Ah esse que tá aqui na um é a posição um esse que tá na dois é a 2 3 4 e por assim em diante mas não é assim tá E não é só no Java várias outras linguagens funcionam dessa forma os vetores costumam começar no índice zero então primeira posição de um vetor é o índice zero depois é o índice um depois é o índice dois três e quro E por aí vai tá então se a gente quer pegar o elemento que está
na primeira posição Eu vou acessar ele através do índice né que a gente chama o índice dele aqui no vetor o índice zero se eu quero pegar o que está na segunda posição Vou acessar através do índice um E por aí vai tá então se eu queria pegar aqui o último lá que é esse valor cinco eu acessaria certo pelo índice quatro aqui que vai acessar lá o valor que tá na posição cinco a gente printar aqui ó vai tá o c Beleza então essa é uma forma da gente declarar vetores aqui no Java Só
que tem um porém quando a gente faz a declaração de vetores dessa forma a gente tá fazendo com que esse vetor tenha um tamanho fixo quando eu declarei ele eu declarei ele já inicializando né aqui com cinco elementos Se eu tentar vir nessa coleção de inteiros e fazer aqui um inteiros na posição cinco recebe o valor seis e vai ter um problema ele vai me dizer ó Array index is out of bounds então o índice do array que tu tá tentando acessar tá fora dos limites desse arrei por quê Porque esse arrei só tem ã
o tamanho cinco eu inicialize ele desse tamanho e não posso mais mudar ele só tem né ele só consegue armazenar cinco elementos ele não consegue colocar mais do que isso então se eu tento colocar aqui algo na no índice cinco que seria a posição seis ele já me dá esse erro certo então eu tenho esse problema aqui se eu quiser saber qual o tamanho do meu arrei eu posso acessar isso através de coleção de inteiros pon lenf quando eu printo esse lenf lenf é com comprimento né em português ele me printa Qual o tamanho do
meu arrei ó o tamanho cinco se eu inicializo esse arrei com mais um elemento lá no final e eu vou aumentar esse tamanho para seis ele já vai me dizer que o Len é seis e para só para vocês verem que o valor não tá atrelado com os valores que tem aqui em cada posição eu vou botar uma posição um valor aleatório aqui na última posição e o Len vai continuar sendo seis tá porque tem seis elementos mas se eu quiser acessar o elemento na última posição que tá na posição cinco aí sim ele vai
me printar aquele valorzinho que os os arris funcionam aqui no Java e a gente pode criar um vetor um arrei com qualquer tipo primitivo Então posso criar um Array de booleanos né posso criar aqui uma R booleanos posso criar uma Ray de caracteres posso criar uma Ray de floats E por aí vai e aí eu posso inicializar eles dessa forma Então já inicializando com valores dentro em cada posição ou se eu ainda não quero colocar os valores inicializo dessa maneira aqui eu faço aqui int né meus números por exemplo int arrei meus os números recebe
New int passando cinco que eu tô dizendo que esse arrei aqui vai ter o tamanho cinco eu não consigo passar vazio aqui não passar valor nenhum eu tenho que declarar qual vai ser o tamanho desse Vetor pode ser 10 pode ser 20 pode ser 300 né mas eu tenho que dizer qual que vai ser o tamanho desse vetor no momento de inicializar ele no momento de fazer a declaração dele seja já passando os valores para cada posição ou só dizendo qual o length que ele vai possuir né qual o comprimento que ele vai possuir então
um ok aqui no vetor e agora né vocês devem estar se perguntando pô mas se eu nunca posso aumentar o tamanho do vetor Eu tenho um problema né se ao longo da execução do meu programa eu preciso recebi mais uma entrada do usuário preciso salvar ali no meu vetor ou preciso manipular ele colocar mais números é ou é um valor dinâmico né que vem do banco de dados ou vem de um arquivo do sistema do meu usuário que eu não sei quantos elementos vão vir eu tenho um problema vocês estão certos a gente tem um
problema e é por isso que existem o que a gente chama né dos Array lists que é o próximo tópico que a gente vai ver aqui então inclusive vou até tirar tudo isso daqui certo vou apagar para ficar mais claro aqui pra gente e agora a gente vai falar sobre os arrey lists o Array list ele é uma classe no Java então já é uma coisa diferente né uma classe que nem a string ali é que vai nos permitir que a gente implemente uma lista dinâmica de elementos né O que que seria uma lista dinâmica
é o que vai permitir que a gente remova e adicione itens ã de forma dinâmica sem Declarar no momento da declaração da variável Qual o tamanho que essa lista vai ter e eu consigo facilmente adicionar e remover elementos e ficar mudando dinamicamente o tamanho dessa dessa lista certo então posso vir aqui criei uma lista com nomes por exemplo lista de nomes eu venho aqui nomes poned e aí adiciono o nome Fernanda já vejam que é diferente de um vetor lá no vetor por exemplo se eu tinha aqui meu int é arrei ou até posso colocar
aqui meu string arrei né nomes arrei fazia aqui um um New string de L 10 Se eu quisesse adicionar um novo nome nesse meu arrei eu vinha aqui e acessava pela posição e atribuir um valor né vou atribuir aqui pra posição pra próxima posição por exemplo pra posição um e colocava um outro valor aqui por exemplo teste e por aí vai já no Array list não agora como ele é uma classe né o Array list é uma classe aqui dentro do Java que inclusive ó a gente tem que importar do Java P útil que é
um Packet aqui do Java né então para vocês não não passarem problemas aí verifiquem se o intlg importou aqui para vocês dentro do java.util.list.of classe pra gente adicionar é uma classe que representa uma estrutura de dados né pra gente adicionar elementos aqui no nosso arr list a gente vai ter que usar a sintaxe né o método aqui do ponto Ed então a gente pega o nome desse nosso ar list e faz ponto Ed para chamar o método dele de adicionar elementos e eu posso adicionar quantos eu quiser certo então venho aqui nomes poned e adiciono
Léo venho aqui nomes poned e adiciono João nomes PED e adiciono n sei lá Maria e por aí vai não tem um limite aqui né não tem um mínimo também eu vou adicionando de forma dinâmica quantos eu precisar E aí se eu precisar acessar os valores que estão em alguma dessas posições a gente acessa eles de uma forma diferente com o que a gente fazia com os arris também ao invés de eu acessar assim né chamando com as chaves e passando a posição eu faço né eu pego o nome da variável e boto um ponto
get então eu chamo o método get aí passando o índice e os índices continuam os mesmos dos que os vetores né o índice zero pra primeira posição um pra segunda e a assim por diante então se eu printar aqui o nome que tá na posição zero ele vai printar o nome Fernanda se eu printar o que tá na posição três ele vai printar o nome Maria então é assim que funciona se eu quiser remover um elemento é muito fácil eu posso vir aqui ó list Opa nomes né ponto remove passando o índice que eu quero
remover então por exemplo eu quero remover o índice zero Quero remover o nome Fernanda quando eu removo o nome Fernanda o próximo o quem vai passar seu índice zero vai ser aqui o Léo que era o índice um antes e agora ele vai passar é o índice zero e a gente inclusive pode printar isso aqui acontecendo para vocês verem ó primeiro o índice zero era a Fernanda aí eu removi o elemento que estava no índice zero e quem passou a ser o índice zero agora foi o Léo e aí quando eu printei índice zero printou
o nome de Léo tá e a gente pode remover tanto por índice quanto por ã objeto então se eu não me engano eu posso vir aqui e remover o Léo da lista também aí quem vai passar seu índice zero vai ser o João se eu venho aqui executo ó eu primeiro índice zero era a Fernanda certo aí excluir a Fernanda exclui o Leo então printei o novo índice zero e passou a ser o João Então os arre lists aqui são uma forma muito interessante da gente criar lista dinâmicas aqui no Java e vocês vão utilizar
muito isso daqui tá confia em mim vocês vão usar muito muito muito muito mesmo e agora vamos partir pro tópico de Loops que é como a gente faz aqui iterações dentro do Java então aqui no Java Existem algumas formas da gente declarar Loops né da gente fazer Loops que são interações iterações desculpa em ca dos elementos são Loops mesmo ficar rodando né sobre algum dado algum elemento ficar repetindo alguma expressão várias vezes a primeira e a mais clássica delas é através do do loop for é que a gente faz bem parecido com o que a
gente faz no C por exemplo que é declarar primeiro a minha variável de iteração então é a variável que eu vou usar para controlar minha iteração quanto tempo ela vai durar quantas voltas eu vou dar e etc depois eu declaro Qual é a condicional para essa minha iteração parar para esse meu loop parar Então o meu loop vai parar quando a minha variável de iteração né a letra i aqui enquanto ela for menor do que nomes P size por exemplo que é o o tamanho aqui do meu arre list de nomes enqu então enquanto a
minha variável I for menor eu vou continuando E aí por fim eu vou declarar aqui qual é o meu a minha incrementação Qual é a manipulação que eu vou fazer na minha variável de interação a cada né volta aqui do do iterador então repetindo primeiro é minha variável de iteração eu declaro ela que no caso aqui é um inteiro né que começa em zero a minha condicional então enquanto ela for menor do que nomes pon size o tamanho aqui do meu arre list que Nesse caso tem só dois né Depois eu ter removido o Fernanda
e Léo e aí por fim é a atribuição que eu vou fazer essa variável com o que que eu com a manipulação que eu vou fazer nela para ela ir mudando a cada loop no caso eu tô incrementando ela de um em um poderia ir incrementando de dois em dois de 20 em 20 de 50 em 50 diminuindo ela multiplicando ela dividindo por aí vai aqui no caso eu tô só incrementando de um em um que é o mais tradicional e o que que eu vou fazer aqui dentro né Depois eu ter declarado esse loop
for eu vou colocar para ele printar por exemplo um system.out println o meu nomes pget na posição I né na posição aqui que o o qual o meu a minha variável de iteração tiver nessa nessa iteração E aí dessa maneira eu vou fazer com que ele passe por todos os elementos do meu Array list por exemplo que tem meus nomes e vai printando cada um dos nomes Ele tá reclamando porque a variável i já tá declarada aqui em cima Então vou comentar ela e ele vai parar de dar problema aqui né então normalmente a gente
costuma declarar a variável de iteração como sendo o i mas eu poderia colocar aqui meu iterador né E aí usar essa variável aqui com esse nome da eu seria obrigada aqui usar meu iterador aqui passar como meu iterador e aqui meu iterador também se a gente executa isso aqui a gente vai ver que ele vai printar deixa eu comentar esses System pouts e o remove ali dos nomes a gente vai ver que ele vai printar aqui Fernanda Léo João e Maria Fernanda Léo João e Maria certo e a gente pode fazer isso com os vetores
também então posso vir aqui e fazer a mesma coisa só que ao invés de pegar o meu nomes pget eu vou fazer aqui o meu meus números Como é que é o nome ali da variável de nomes arrei pode ser meu nomes arrei vir aqui pegar um nomes arrei na posição que o meu iterador tiver certo e aqui ao invés de verificar pelo nomes pon size eu vou verificar pelo nomes arrei pon Len porque é um arrei não é uma aril list Então tem que usar o ponto Len E aí se eu venho aqui e
rodo ele printa Fernanda triste e depois nu nu nu porque as outras posições aqui as outras oito posições né não tem nada porque eu não coloquei nada dentro e aqui deixa eu mudar para feliz né triste não p triste é triste é triste então vamos botar aqui na posição dois o João Maria na posição oito por exemplo per aqui botar a Maria E aí quando ele for fazer ali a iteração né ele vai printar Fernanda feliz João e aqui a no índice oito desculpa que seria a posição nove né Então essa é a forma mais
clássica da gente fazer iterações aqui no Java mas tem outra forma que a gente pode usar para tanto aril lists quanto vetores que é essa forma aqui ó que a gente basicamente declara o tipo de cada item que vai ser atribuído nessa iteração e qual é a variável que a gente vai iterar sobre ou seja tem que ser uma variável que representa uma coleção de dados um vetor ou uma raay list E aí eu faço aqui o tipo o que vai conter cada elemento em cada interação dois pontos a variável que a gente vai iterar
sobre E aí aqui dentro do corpo do for eu consigo acessar diretamente essa variável aqui né que contém o item dessa rodada e ele vai printando então por exemplo se eu executo isso aqui ele printou todos os nomes que tem dentro do do meu arre list de nomes que é Fernanda Léo João e Maria se eu fizesse a mesma coisa com o meu aqui nomes a rei ele printar todos os nomes que estão dentro do nomes a Rei essa é uma outra maneira da gente fazer o loop fora e ele printa aqui de novo Fernanda
feliz João nu nu e Maria certo mas além do fora a gente também pode querer utilizar o a né a sintaxe do Wi o a o o loop Wi é um loop que vai ser executado até que ele chegue num numa condição então o for por exemplo é um um loop que é executado enquanto tal ã condição não é atingida então enquanto Tal condição não é atingida ele vai executando o io ele tem uma interpretação um pouquinho diferente ele é algo que vai ser executado até que alguma condição seja atingida parece igual né mas na
verdade são um pouquinho diferentes e eu por exemplo poderia pegar aqui o meu uma variável o meu por exemplo declarar uma variável nova meu contador e começar em zero né então i o contador por menor do que 10 eu vou printando que eu tô no Wi E aí a cada iteração aqui do meu Wi eu vou somando o contador aí eu venho aqui executo ele vai printar Stone Wi né nove ã nove vezes uma duas 3 4 5 6 7 8 9 10 vezes né porque ele começou no zero 10 vezes até que ele alcance
o valor 10 então não entre de novo de novo no a mas o a tem uma coisinha né que se a gente esquecer de incrementar ou decrementar ou atualizar a variável ele vai ele nunca vai parar esse loop então se eu executo aqui eu entro num Loop Infinito né que a gente chama ele nunca para de executar e tá printando várias e várias e várias vezes e Em algum momento o meu PC vai pedir arrego porque a gente entrou num loop finito porque no Wi aqui eu controlo direto ente né a variável de de iteração
e eu que tenho que atualizar ela aqui dentro do corpo do Wi diferente aqui daquele for né que eu fazia atualização aqui na declaração do for e nesse outro for aqui que eu nem mexo na variável de iteração ele faz automaticamente para mim certo de acordo com o tamanho aqui do rist ou do vetor beleza Esses são basicamente os dois principais tem outras sintaxes de Loops também como do a o loop direto aqui dos das dos aril lists usando o stream e tal mas esses aqui são os principais e são os mais importantes para vocês
aprenderem agora e aí a gente vai pro nosso último tópico aqui da sintaxe básica do Java antes da gente partir pra programação orientada a objetos que é a parte que mais pega mesmo quando a galera tá aprendendo sobre Java Então vamos entender o que que é o Casting Então pessoal o Casting aqui dentro do Java é algo que permite que a gente faça a conversão de um tipo de dado pro outro porque lembra que eu falei para vocês que depois que a gente declara uma variável com um tipo ela tem esse mesmo tipo ao longo
de todo o programa mas em determinados momentos em determinadas situações a gente vai ter uma variável que a gente precisa transformar ela para outro tipo né como por exemplo Digamos que eu recebi numa requisição né recebi de entrada aqui do usuário um arquivo TXT que tava escrito ali a idade de todos os funcionários da empresa por exemplo tinha a idade dos funcionários né tinha aqui a idade 20 a idade 40 a idade 60 a idade 23 e por aí vai tava escrito no arquivo TX ST quando eu leer esse arquivo texto de St e tentar
transformar tudo eu vou puxar isso como por exemplo uma string né Isso aqui vai ser lido inicialmente como uma string só que concorda comigo que eu compreendo que esses dados são inteiros depois quando eu for manipular eles ao longo do código vou querer multiplicar dividir e tal eu quero manipular eles como inteiros Então eu preciso fazer a transformação disso que foi lido como uma string para um inteiro né Isso é um exemplo pra gente fazer isso a gente usa o conceito de Casting que vai permitir que a gente faça essa transformação mas presta bem atenção
a gente não vai transformar uma variável de um tipo pro outro a gente vai literalmente transformar o valor então a gente vai acabar declarando uma variável nova então por exemplo se eu tenho aqui ã uma variável do tipo Double por exemplo aqui né Double é aquela variável que permite que a gente coloque vírgula né num número que é meu resultado meu resultado aqui tá com o número 0.0 e eu quero transformar essa variável para o inteiro como é que a gente vai fazer a gente vai fazer um Quest então vou ter aqui meu inteiro e
eu vou ter meu resultado resultado como int por exemplo E aí o que eu vou fazer é na frente aqui da minha variável resultado eu vou colocar os parênteses e vou passar um int isso vai indicar pro Java que eu tô tentando fazer um casting desse tipo aqui do double pro int porque essa variável Double né ela tem essa variável resultado ela tem o tipo Double quando eu boto isso aqui na frente dela eu tô indicando pro Java que eu quero que ela faça um casting esse Casting aqui é fácil porque o que que ele
vai fazer ele basicamente vai só cortar a faixa de representação desse Double vai remover tudo que tem depois da vírgula e vai pegar só o número inteiro é tranquilo pro Java fazer isso e quando eu quero fazer o contrário também então por exemplo eu tenho um inteiro aqui meu int que é o número 10 eu quero transformar ele para um double meu Double eu posso vir aqui e só colocar o meu int o próprio Java já vai fazer essa conversão ele já vai entender que é só ele expandir a faixa de representação aqui desse int
e colocar números após a vírgula certo só que existem alguns momentos onde eu vou precisar fazer um casting isso aqui é o que a gente chama de Casting implícito né Eu não tô a explicitamente declarando Casting esse aqui o explícito porque explicitamente eu pedi pro Java fazer essa conversão só que existe determinados momentos onde eu vou precisar converter por exemplo uma string para uma pro inteiro que aí não é só cortar ou aumentar a faixa de representação certo é algo um pouco mais complicado e aí como é que a gente faz isso bom a gente
vai usar um outro atributo aqui do Java né uma outra funcionalidade da linguagem pra gente fazer esse Casting então pra gente fazer o Casting daquele exemplo que eu dei para vocês de eu ter uma string aqui meu minha string né com o número 10 tentar transformar ela inteiro olha só o que eu vou precisar fazer eu vou precisar declarar uma nova variável né meu int 2 E aí para transformar essa string inteira eu vou usar uma funcionalidade aqui do integer que é uma classe dentro do Java né que aqui ele não vai mostrar no Import
Mas ela é uma classe como se fosse a classe string né que ela possui esse método aqui pars int onde eu vou passar a string ele vai parsear né vai fazer o parce dessa string para um inteiro e transformar ela inteiro Então me retornar uma variável do tipo inteiro isso também é um casting explícito que a gente chama porque eu tô tendo que dizer que diretamente pro Java que eu quero fazer essa transformação Se eu quisesse transformar um inteiro numa string eu também posso fazer então aqui eu posso ter a minha string né e tentar
pegar esse meu int aqui e fazer um string P valueof E aí passar aqui o meu inteiro e ele já vai transformar esse inteiro em uma string então tô fazendo a reconversão de novo Então dependendo do tipo aqui que a gente tiver querendo converter a gente vai usar uma forma diferente tá em alguns determinados cenários vai ser praticamente impossível converter vou ter que criar alguma lógica complexa para conseguir fazer a conversão porque tem dados que literalmente não condizem com os tipos né É como eu tentar transformar uma banana num leite não dá não tem como
transformar uma banana num leite então a gente também tem que ter essa esse raciocínio lógico essa entendimento se dá para fazer essa transformação se ela realmente faz sentido e se sim a gente vê se a linguagem gente tem alguma funcionalidade Nativa para isso senão a gente vai ter que fazer alguma lógica aqui para conseguir fazer essa conversão Então beleza passamos aqui pelo tema de Casting completamos a sintaxe básica do Java a gente já acabou executando aqui o nosso código na mão aqui no intelij mas eu vou mostrar para vocês como é que a gente compilar
e executaria ele aqui no terminal e como é que a gente faz essa configuração aqui no intelij também para ele fazer a execução magicamente aqui pra gente então galera pra gente compilar diretamente nosso programa Java sem utilizar o intelij como é que a gente consegue fazer aqui no terminal certo a gente tem que abrir o terminal na pasta Onde está o nosso projeto a gente vai rodar alguns comandinho o primeiro deles para gerar o executável do nosso Java então compilar ele vai ser o Java C Então a gente vai rodar Esse comando aqui e a
gente vai passar como parâmetro para esse comando o nome do programa Java que a gente quer compilar no nosso caso aqui o nome da classe né do arquivo que a gente quer compilar então Java m. jaava todos os arquivos que esse m. jaava utilizar vão ser compilados também e linkados por conta né que que esse aqui é o arquivo de entrada que vai estar puxando os outros ele já vai fazer esse mapeamento então a gente faz isso e se a gente abrir aqui a nossa pasta né e ver os arquivos que tem aqui a gente
vai ver que ele gerou essa classe aqui esse arquivo mainclass que seria o bite code aqui que representa o nosso programa o nosso programa Java E aí se a gente vier aqui no terminal agora e rodar o comando Java Main ele vai executar esse nosso programa no caso o nosso programa não tá fazendo nada então ele não vai mostrar nada no terminal mas se eu vier aqui e colocar um System Pout pprint LM um hello world né só pra gente testar aqui e fizer o mesmo processo novamente eu compilo depois executo ele printa aqui o
hello world porque ele fez a execução só que né convenhamos isso aqui é meio chatinho da gente ficar fazendo toda a hora ter que compilar o código e depois executar então a gente pode simplificar esse processo configurando o Java aqui no nosso para que quando a gente clicar no botãozinho aqui de Run ele Rode esse nosso programa né já faça a compilação dele e então printe o resultado aqui no terminal enfim faça o que o nosso programa faz como é que vocês podem fazer isso normalmente o intelij já vai perguntar para vocês se vocês querem
configurar o Java é que ele encontrar ali na máquina de vocês como default do intellij assim que vocês abrirem e abrirem uma classe de Java ele já vai perguntar mas se isso não tiver acontecido se não tiver Aparecido isso para vocês e vocês tiverem tem a configuração ainda como é que a gente vai fazer a gente vai vir aqui em file certo e a gente vai vir aqui em project structure quando a gente abrir Project structure a gente vai ver o nome desse nosso projeto que é o nome da nossa pasta Java curso Então qual
o SDK que ele tá usando no meu caso ele tá usando aqui ó o meu Oracle openjdk versão 21.0.1 que aqui ele tá com nome 17 mas na verdade é o meu Java 21 tá que tá instalado aqui na minha máquina vocês vão vir aqui e vão selecionar o Java de vocês certo a JD que vocês instalaram no começo do vídeo por exemplo se vocês tiverem recém instalado e não tiverem renomeado o nome da pasta vai est como openjdk 21 provavelmente vocês selecionam vão dar um apply e um OK e ele vai passar a usar
esse Java para executar esse projeto aqui dentro desse projeto porque isso aqui é uma configuração do projeto Então se vocês abrirem uma outra pasta né com outro projeto Java ele não vai pegar essa mesma configuração porque essa configuração aqui que a gente fez foi uma configuração somente pro projeto certo pro projeto Java curso eu quero que ele utilize esse essa jdk aqui por que isso porque pode ser que eu pegue um projeto Java muito antigo que tá usando o Java 8 por exemplo e eu tenho que ter o Java 8 ou 7 aqui na minha
máquina para conseguir rodar E aí só com esse projeto eu quero usar o Java 8 daí eu venho aqui e escolho essa jdk e uso peço para ele usar essa para executar tá então é por isso que tem essa configuração para projeto Mas também se a gente vier aqui em telj settings a gente vai ver que tem a configuração geral então se eu Vinho aqui e procuro por Java guild desculpa e abrir aqui o meu maven build Tools maven e Runner ele vai ter aqui uma opção né qual jre ã ele deve usar Java runtime
environment ele deve utilizar e eu tô pedindo para ele usar o Project né usar o jdk aqui do projeto certo o jdk que estiver configurado no projeto e eu posso vir aqui inclusive em compiler e também definir qual que vai ser o compilador que vai ser usado né Qual o Java que vai ser usado para compilar no caso aqui usar o compilador Java C né que foi mesmo que a gente usou aqui no terminal a gente poderia por exemplo usar o eclipse como compilador e agora lembrei o nome da outra ideia que eu queria falar
para vocês lá no começo do do vídeo que é o eclipse é outra ideia muito popular e ela tem um compilador próprio também o eclipse não é da ide mas é um compilador que eles fizeram pro Java certo então é isso essas configurações que a gente faz aqui no nosso projeto já a gente já consegue configurar qual ã jdk a gente quer usar para executar para compilar ã aqui no maven depois isso aqui é mais avançado para quando você vocês estiverem aprendendo por exemplo com Spring ou como instalar bibliotecas externas aqui na aplicação Java de
vocês vão usar o maven como package Manager ou gradle aí vocês vão se preocupar com essas configurações aqui Inclusive para quem quiser depois né assistir o vídeo para aprender sobre o Spring boot que é um dos frameworks mais utilizados na comunidade do Java e no mercado do Java eu vou deixar o link lincado aqui no card certo vou deixar aqui linkado no card o vídeo onde eu faço também um vídeo parecido com esse só que explicando o Spring boot do zero mas aí é para quem já tiver aprendendo sobre backend enfim outros conceitos Tá mas
feito isso a gente já matou aqui o nosso tópico do do Java né de compilando e executando agora a gente vai entrar no que mais pega aqui quando a gente tá aprendendo do Java que é a parte da programação orientada a objetos e a gente vai começar aqui pelo conceito de classes que a gente já acabou tendo uma pincelados do vídeo mas agora a gente vai ir um pouquinho mais a fundo inclusive depois das classes eu quero adicionar aqui depois depois das classes dos construtores os métodos que eu não tinha pontuado aqui mas eu quero
explicar para vocês também o que que significa certo então voltando ali para nosso programa é o nosso programa Java o que que são as classes aqui no Java né quando a gente fala de classes O que que a gente tá querendo dizer as classes é um conceito que vai além da linguagem Java então a classe é um conceito que vem da programação orientada a objetos né Desse Paradigma e a classe basicamente ela vai ser um modelo que vai definir a estrutura dos nossos objetos então ela vai definir os atributos né que esse objeto possui as
variáveis no caso mas a gente chama aqui Não a programação orientada objetos de atributos e ela vai definir também alguns métodos que são as funções que esse programa que esse objeto possui e vai descrever o comportamento do objeto então de novo aqui no Java sempre quando a gente for escrever um um arquivo né Java a gente criou um arquivo Java a gente vai ter uma classe dentro desse arquivo não tem como fugir disso porque o Java né funciona em volta do paradigma orientado a objetos então escrev um arquivo Java vai ter uma classe dentro desse
arquivo vai ter pelo menos uma classe que possui o mesmo nome do arquivo né que vai ser a classe principal desse arquivo e a classe que vai est decorado aqui com Public tá depois disso depois das classes que é um conceito um pouco mais abstrato a gente vai entrar aqui na parte dos construtores o que que é o Construtor bom o Construtor ele é um método especial de uma classe tá Por que que ele é um método especial porque esse método ele vai ser chamado Sempre quando um objeto dessa classe for criado E aí pra
gente entender isso eu vou criar uma nova classe aqui embaixo então eu vou criar uma classe que se chama carro certo e dentro dessa classe carro eu vou criar um método público tá que se que vai ter o mesmo nome da classe aqui o nome carro e aí esse método aqui ele vai printar um carro criado aqui dentro da nossa classe M dentro do método M também a gente vai vir e vamos fazer aqui uma declaração de uma nova variável que dessa vez vai ter o tipo carro então percebam que eu já não tô mais
criando usando um tipo primitivo eu tô usando um tipo que eu literalmente Acabei de criar que é o tipo carro a classe representa um tipo também né então tipo carro vai ser o meu carro certo para eu criar um novo objeto desse tipo o que eu tenho que fazer um New né então Nil criar algo novo carro então New carro quando eu faço isso daqui essa chamada aqui para meu New carro o método construtor da classe carro vai ser acionado toda vez que um novo carro for criado e aí esse System ponal pon print LM
aqui de carro criado vai ser acionado lá no terminal a gente vai ver aqui o carro criado e aí se eu que criar diversos carros né colocar aqui o carro meu carro um meu carro dois e Executar a gente vai ver que ele printou aqui carro criado carro criado carro criado e esse método Construtor para que que ele serve ele serve para que quando a gente estiver construindo um objeto a gente consiga passar parâmetros para essa construção desse objeto certo pra gente atribuir valores aos atributos desse objeto e também para que a gente consiga moldar
algumas dependências internas do próprio objeto Vamos explorar um pouco essa parte dos atributos então lembra que eu falei para vocês que uma classe ela vai ser composta de métodos e atributos os atributos é como se fosse as variáveis que que pertencem a a essa classe Então dentro do método carro dentro da classe carro eu quero que ela possua um atributo que vai ser uma string que vai ser o modelo desse carro certo modelo e esse modelo ele vai ser definido no momento que o carro for criado Então o meu dis P modelo dis por quê
Porque eu tô acessando a Estância atual desse carro então o dis P modelo vai receber o que eu receber por parâmetro aqui na chamada desse método então aqui string ã modelo certo e aqui eu vou fazer né modelo recebe modelo por quê Porque eu tô dizendo que o atributo modelo dessa minha classe carro vai possuir o valor que eu receber aqui no atributo Vocês já vão ver ó quando a gente volta aqui para cima a gente já consegue ver que o intelij tá mostrando um erro pra gente ó por quê Porque o o Construtor da
classe carro esperava um argumento Mas recebeu zero argumentos então tem algo errado a gente precisa passar um parâmetro para esse Construtor que é o modelo então aqui eu vou passar o modelo Fusca vou passar o modelo Sandero e vou passar o modelo BMW não golzinho não vamos passar BMW certo aqui pro meu carro agora quando a gente executar isso daqui ele não vai mais printar nada porque não tem mais nenhum System ponal print LM mas o que que a gente vai fazer a gente vai declarar um novo método aqui nessa classe e agora a gente
já não consegue mais fugir da explicação do método né vou ter que entrar nesse ponto Então os métodos então a gente já entendeu que os atributos é como se fosse né as variáveis de uma classe os métodos eles são funções que essa classe possui Então os métodos eles representam literalmente implementações de alguma coisa que que aquela classe faça né alguma lógica alguma tarefa que aquela classe realiza né E aí quando a gente quer declarar um método o que que a gente vai fazer a gente primeiro tem que colocar Qual é o o modificador de acesso
dessa desse método qual é o valor que ele retorna Então ele pode retornar uma string pode retornar um inteiro né que um int ou uma classe integer mesmo ou pode retornar nada se ele retornar nada a gente chama a gente diz que ele retorna void né void é o vazio e eu posso dizer que esse meu carro acelera Então o meu carro tem o método acelerar e aí se eu vier aqui e fizer meu carro um ponto acelerar acelerar a gente vai ver que ele vai acionar essa execução aqui fazendo o System Pout pon print
LN E aí printando aqui acelerando o carro certo é olha só que interessante vai ficando mais interessante se a gente vem aqui nesse método e tenta printar junto com acelerando o carro o modelo desse carro eu posso fazer isso então posso vir aqui e colocar mais né dispon modelo e ele vai dizer qual o modelo desse carro aí lembra que aqui quando a gente atribuiu a o parâmetro que a gente recebeu no Construtor para o meu atributo eu fiz disp modelo receber modelo então eu quis dizer que essa Estância desse carro vai receber o modelo
que eu acabei de receber pro parâmetro então vocês vão ver que dependendo do carro que eu acelerar ele vai printar um modelo diferente por quê porque cada modelo recebeu ali um valor no momento momento da sua construção né Cada carro recebeu um valor de modelo no momento da sua construção e esse valor aqui Fusca sandiro BMW ficou atrelada somente a essa Estância aqui de carro cada cada um desses objetos aqui é uma estância da classe carro já vão pegando esses termos também então quando eu criei um novo carro eu criei uma Nova Estância da classe
carro eu criei um objeto do tipo carro e aí quando eu passei aqui por parâmetro o Fusca né como modelo e ele fez o dis P modelo receber modelo ele atribuiu esse valor de modelo a essa Estância as outras estâncias vão ter os seus valores se a gente roda aqui a gente vai ver ó acelerando o carro Sandeiro BMW e Fusca tá então isso aqui é algo super importante e aí a gente poderia inclusive retornar um valor aqui desse nosso método Então se retornasse uma string eu poderia aqui fazer um return oi ou montar uma
string qualquer outra coisa e eu poderia pegar esse retorno aqui então receber uma string result né e printar esse resultado depois poderia vir aqui fazer um System Pout P print LM e printar esse resultado e a gente vai ver o oi lá porque esse valor foi retornado aqui do método né do da minha classe quando eu chamei quando eu acionei o método certo o método pode ou não retornar alguma coisa tá E aí ã vocês podem estar percebendo que esses nossos métodos que a gente declarou na nossa classe carro né o acelerar e o carro
eles parecem um pouco diferentes do que esse método aqui que tá dentro dessa nossa classe m o que que é esse método aqui ó acabei esperando um pouco demais para explicar ele para vocês já já era para ter explicado mas o que que ele se trata né do que que se trata esse método aqui esse método Public stack void Main ele representa um método que vai ser acionado quando essa minha classe for executado Então olha só o seguinte vocês perceberam que quando a gente compilou o nosso programa veio aqui no terminal né compilou o programa
então veio aqui com javac usou o compilador javac para compilar a minha classe m. Java e executei o Java Main ele printou essas coisas aqui ele executou as coisas que estão dentro desse método ele automaticamente sabia que ele tinha que prar essas coisas aqui só que se a gente vier e declarar outro método aqui Public stetic void Test e printar alguma coisa aqui dentro por exemplo system.out P print LM Test e compilar de novo a gente vai ver que isso aqui não vai ser executado não vai aparecer ali no terminal teste se a gente ver
aqui criar um outro método dentro de carro de teste que printas Oi sei lá e Executar a gente vai ver de novo que ISO aqui não vai aparecer no terminal por esse método aqui Main Public static void Main ele é um método especial ele é um método que a gente chama de método Inicial ou método de entrada da classe então quando essa classe aqui é chamada para ser executada aqui no terminal né a gente compila ela e bota ela para ser executada a gente roda o executável que foi gerado aqui o primeiro método que vai
ser acessado pela jvm e que vai iniciar a execução de tudo vai ser esse método aqui Public stat void m é um método de entrada literalmente do meu programa é onde começa a execução do meu programa E aí o que vai ser executado consequentemente vai sero tudo que estiver sendo chamado ou acionado aqui dentro desse método certo então ele como se fosse a Faísca para começar a desencadear as outras execuções se aqui dentro ele não desencadeia a execução desse método teste e não desencadeia a execução do método aqui teste dentro da classe carro isso aqui
não não acaba executando e não aparece aqui no terminal tá então esse método aqui Public static void m é um método especial e ele não precisa ter esse nome m por causa que o nome da classe é m tá ele tem esse nome M porque é assim que ele se comporta se a gente vier aqui criar uma nova classe eu vou vir aqui New Java Class e vou criar minha classe carro vou criar a classe carro eu vou pegar ela certo e vou copiar ela daqui de baixo e colar ela aqui certo e botar um
Public Class depois Public primeiro eu posso vir aqui nessa minha classe carro e criar é um Public static void Main posso vir aqui deixa eu copiar exatamente a anotação Public static void Main certo e aí colocar aqui um system.out p println de teste se eu vier aqui no terminal e compilar agora ao invés de compilar o meu Java C pedir para ele compilar o Main Java e pedir ao invés disso pedir para ele compilar o carro. Java e executar aqui o meu carro a gente vai ver que ele vai apresentar esse teste por quê de
novo esse método Main é o método de entrada e ele se chama Main porque é o principal não porque o nome da classe aqui era M aqui foi só uma coincidência tá então a gente pode colocar esse método Public stat void M em qualquer classe normalmente a gente coloca só em uma classe que é a classe principal do nosso programa que inicia tudo ela dá o começo a na Faísca para iniciar todo o resto do nosso programa e acionar as outras classes então isso aqui é muito importante a gente já pode vir aqui então dá
um ok em classes construtores e métodos e objetos também né a gente já entendeu aqui como é que a gente instancia novos objetos que é usando aqui o new né dessa forma a gente vai ter uma Nova Estância dessa classe que é um objeto e eu posso manipular ele aqui depois que eu tiver essa Estância e a gente vai passar agora pros modificadores de acesso certo que é literalmente essas palavrinhas que a gente estava colocando no nome das nossas classes E dos nossos métodos ainda sem entender porque que a gente tá fazendo isso então galera
o que que são os modificadores de acesso bom os modificadores de acesso são quem vão controlar a visibilidade das nossas classes E dos nossos métodos no Java então a gente utiliza os modificadores de acesso quando a gente quer Controlar se a nossa se um método de uma classe por exemplo vai ser visível por outras classes que não pertencem ao mesmo pacote ou pelas classes que pertencem ao mesmo pacote ou vai ser visível a todo mundo então para que a gente consiga entender o papel dos modificadores de acesso a gente também precisa necessariamente entender o que
são os pacotes no Java Então os pacotes eles são usados para organizar as nossas classes e as interfaces em spaces certo namespaces distintos para evitar conflito nos nomes desses pacotes basicamente eles vão fazer um agrupamento lógico dessas classes dizendo que elas pertencem ao mesmo grupinho certo e aí os modificadores de acesso impactam como essa essa classe e os métodos dentro dela são vistos pelas outras classes que pertencem ao mesmo grupo que ela ou ao mesmo pacote e pra gente fazer a declaração de um pacote numa classe Java então pra gente dizer que uma classe pertence
a um pacote a gente faz o seguinte no topo do nosso arquivo Java Então vou até tirar esse Import aqui que a gente tinha feito pro prr list no topo do arquivo Java a gente vai colocar a palavra-chave package Então dessa forma a gente vai est definindo a qual package essa classe aqui a classe M pertence Por exemplo essa nossa classe M aqui ela pode pertencer ao pacote Java curso certo e aqui eu não posso usar if para declarar Esse pacote então poderia dizer que o nome do package é Java curso Ele tá me dando
um erro por quê Porque não existe é um um file pef para isso por quê Porque a minha pasta que tá agrupando essa classe né a a pasta que tá por fora da classe Main é essa pasta que Java curso com efeito então então é mais uma coisa que a gente tem que entender aqui dos pacotes no Java os pacotes eles respeitam a estrutura de diretórios né a estrutura das pastas na qual a as classes estão dentro então A Hierarquia dos pacotes deve respeitar A Hierarquia dos diretórios A Hierarquia das pastas Então se a gente
quer dizer que uma classe tá dentro de um pacote por exemplo do pacote útil ponto enun ponto sei lá ã redes né Essa classe vai precisar estar dentro de uma pasta que se chama útil dentro de outra pasta que se chama enun e por fim dentro de uma pasta que se chama redes certo ele precisa respeitar essa hierarquia aqui de diretórios então pra gente dizer que a nossa classe Main pertence ao package Java curso eu preciso mover ela para dentro de um diretório para dentro de uma pasta que tem esse nome Java curso quando eu
clico aqui em move to Java curso a gente já vai ver aqui que Ele criou uma nova pasta que é um package Ele até fica com esse Icone Zinho diferente aqui e colocou minha classe bem dentro e aí a gente já começa a ver um problema né a gente já começa a ver ele dá um erro aqui no momento de tentar procurar pela classe carro ele passa a não conseguir mais enxergar essa classe carro por quê Porque a classe carro não tá dentro do mesmo pacote que a classe menj Ava ela tá fora desse pacote
aqui em outro lugar que a classe né não consegue enxergar ela então para que essa classe conseguisse né paraa minha classe M conseguisse continuar usando a classe carro eu tenho que mover ela para dentro do do pacote aqui né Java curso que a gente acabou de criar dessa maneira ele para de dar erro né ele para de apontar aquele problema ali então já entendemos O que são os pacotes agora voltando pros modificadores de acesso né lembra que eles vão controlar a visibilidade dos nossos métodos Então como é que eles funcionam tá vamos ver aqui num
exemplo prático tá começando pelo pelo modificador de acesso Public que foi o que a gente já utilizou esse modificador de acesso basicamente ele diz que esse método aqui e essa classe também né eles vão ser acessíveis de qualqu qualquer lugar então Independente de qual pacote eu estiver aqui dentro do meu projeto então poderia vir aqui e criar um novo package ó New package dentro desse package chamar ele por exemplo de rodas né E aqui criar uma nova classe que seria a minha Quatro Rodas sei lá Mesmo assim eu conseguiria né eu continuaria conseguindo enxergar a
classe carro então se a gente vem aqui ó por exemplo eu quero ter um carro meu carro faço aqui um New carro a gente já vê que não tem problema né ele continua conseguindo enxergar a classe Car porque ela tá declarada com modificador público Então ela é acessível de qualquer lugar tá mas isso aqui a gente já sabia porque lembra que Eu mencionei no começo do vídeo quando a gente cria um novo arquivo Java a gente precisa declarar dentro desse arquivo uma classe que acompanha o mesmo nome do arquivo e se a gente for decorar
essa classe com algum modificador de acesso tem que ser com modificador de acesso público Então ela precisa ser pública eu não consigo vir aqui por exemplo trocar o modificador de acesso dela para private eu posso tentar ali no carro também ó trocar para private que é outro modificador de acesso que a gente já vai entender e não vai funcionar né ele não vai deixar porque se eu for definir um modificador de acesso para ela tem que ser o modificador de acesso público mas aí agora vocês devem estar pensando tá Fei E se eu não definir
modificador de acesso nenhum se eu não colocar nada aqui né Se eu colocar só Class carro definir apenas como uma classe o que que vai acontecer bom aí o Java ele vai adotar o modificador de acesso padrão que a gente chama né que é o default como é que o modificador de acesso default funciona quando nenhum modificador de acesso é definido para uma classe que foi que a gente a gente fez aqui com a classe carro ela vai ser considerada como tendo o acesso defol é como se fosse o package Private o que que acontece
o todo mundo que tiver dentro do mesmo pacote dessa classe vai conseguir continuar vendo ela né então quem tiver no mesmo pacote no pacote Java curso continua conseguindo enxergar ela que é o caso aqui da classe Men ela conseguia ela continua conseguindo instanciar um carro ela continua enxergando a classe carro mas a nossa classe aqui Quatro Rodas ela já passa a ter um problema ela já não enxerga mais a classe carro por quê Porque a classe carro ó não é uma classe pública e ela não consegue ser acessada fora do seu pacote Então esse pacote
Def né quando a gente não declara nenhum ele acaba fazendo com que essa classe não seja vista por outras classes que não estejam no mesmo pacote mesmo que sejam sub pacotes do pacote principal como é o caso aqui né da Quatro Rodas né que tá dentro do package rodas que faz parte do do package Java curso que é o mesmo package que a classe carro pertence mas por ser uma subpasta né por ser um sub pacote mesmo assim ele não enxerga classe carro então se eu for colocar um modificador de acesso para essa classe eu
tenho que colocar aqui o modificador de acesso público ou ela usa esse default ou o público e aí com o público a classe aqui quatro rodas já consegue continuar enxergando né a classe carro mas lembra que eu falei que os modificadores de acesso não afetam somente a classe A gente pode colocar modificadores de acesso também em métodos então isso também vai controlar a visibilidade dos métodos dessa classe Então pega só isso aqui esse nosso método acelerar ele tá como método público então qualquer lugar onde eu criar uma nova Estância de carro eu consigo chamar o
método acelerar porque é um método público ele é visível acessível de qualquer lugar se Eu transformo esse método aqui ao invés de público pra Private Olha o que vai acontecer as outras os outros locais fora desse meu arquivo carro. jaava que estão tentando chamar o método acelerar não conseguem mais fazer isso mesmo que eu tenha uma Instância de carro né eu criei aqui um um objeto do tipo carro ele é desse tipo aqui dessa classe eu não consigo chamar esse método acelerar fora da classe carro porque ele é um método privado ele só consegue ser
acessado aqui dentro beleza ele só consegue ser acessado aqui dentro desse arquivo então ele já passa a me dar um erro aqui se eu vou lá e troco para pegar aqui o meu carro e troco paraa Public de novo ele para de mostrar o erro e a gente pode né inclusive testar com classes dentro da mesma do mesmo arquivo então resumindo os métodos que ti estiverem decorados aqui com o modificador de acesso Private só vão conseguir ser né utilizados só vão estar visíveis dentro da própria classe na qual eles foram declarados se ele for tentar
ser chamado né se a gente tentar Chamar esse método fora da classe aonde ele foi declarado a gente não vai conseguir a gente vai ter um erro porque esse método não tá visível por exemplo né voltando aqui eu voltei PR Private para mostrar para vocês se eu vier aqui dentro da própria classe carro e dentro dela eu fizer dis ponto acelerar eu consigo ó eu não tenho tem um erro a chamar aou acelerar aqui por quê Porque eu tô dentro da classe carro e como ele é privado só eu tenho essa visão Mas quem está
de fora não então lá a classe M não consegue se eu volto pra Público aqui a classe m para de dar erro lá ela volta aqui a funcionar e eu continuo conseguindo acessar aqui dentro de mim mesma né dentro da classe carro Inclusive a gente pode testar com classes dentro do mesmo pacote dentro do mesmo arquivo na verdade né então a gente pode vir aqui e criar uma nova classe aqui embaixo de carro que eu vou chamar de rodas por exemplo né uma classe rodas e aqui vou criar o construtor de rodas ele não pode
ser público né o único que deve ser Público aqui é o a classe carro que é que tem o mesmo nome do arquivo n eu não posso ter duas classes públicas dentro do mesmo arquivo Java ele me dá o erro aqui beleza então criei minha classe rodas essa classe rodas eu instancie um novo objeto do tipo carro Se eu tentar fazer aqui carro ponto acelerar eu consigo porque ele tá público mas se eu pegar e trocar ele para private eu já não vou mais conseguir eu já não consigo mais fazer isso mesmo eu estando dentro
do mesmo arquivo eu não consigo porque de novo ele é visível somente para dentro da mesma classe certo no Private é somente dentro da mesma classe mas f não tem nenhuma forma da gente fazer com que ele seja visível dentro do mesmo arquivo né ou dentro das subclasses mas não seja visível para fora desse pacote tem então tem como a gente fazer isso que é com um outro modificador de acesso que é o protected se a gente troca aqui pro modificador de acesso protected Pera aí que eu escrev errado protected se a gente troca aqui
pro modificador de acesso protected a gente vai ver que as rodas aqui né estão conseguindo chamar o carro ponto acelerar aqui dentro da classe roda eu tô conseguindo fazer essa chamada e dentro da classe Main Java eu continuo conseguindo fazer por quê Porque elas pertencem ao mesmo pacote então quando elas estão no mesmo pacote e estão decoradas com o método protected eu consigo enxergar dentro do mesmo pacote se em outro pacote eu tentar acessar Aí eu já não vou mais conseguir então por exemplo aqui no meu quro rodas lembra o quatro rodas tá em outro
pacote ele tá no pacote rodas né é uma outra pasta aqui ó tem a pasta principal que é a java curso que está contendo aqui o a classe carro e a classe Main dentro desse Java Curse eu tenho outro pacote que a gente criou que é o pacote rodas onde eu tenho a classe Quatro Rodas nessa classe Quatro Rodas eu consigo instanciar um carro porque o carro é uma classe pública certo e eu consigo ver ele daqui eu tenho AB visibilidade dele mas eu não consigo fazer carro ponto acelerar aqui dentro ó não consigo nem
achar esse método ele nem existe aqui para mim porque eu não tenho visibilidade dele por quê Porque esse método acelerar ele é um método protected ele é somente visível dentro da própria classe dentro das subclasses que estão nesse mesmo arquivo e dentro das outras classes que estão no mesmo pacote que é o pacote Java curso fora do pacote eu já não consigo mais enxergar Então são basicamente aí esses três esses quatro né modificadores de acesso que a gente tem no Java que é o modificador de acesso Public que eu vou conseguir acessar vai ser visível
de qualquer lug lugar eu vou ter o meu default então aqui vou ter o meu default vou ter o meu Private e vou ter também o meu protected Lembrando que o defa é quando eu não coloco nenhum modificador de acesso né então quando eu não defino ele segue esse daqui certo o Public é o visível né acessível de todo lugar o Private é acessível somente dentro da classe da classe que foi definido certo e o protected é acessível acessível por todo mundo que está no mesmo pacote para todo mundo que está no mesmo pacote Então
feito matamos aqui a parte de modificadores de acesso e agora a gente vai partir para umas coisas um pouquinho mais avançadas na programação orientada a objetos que é o conceito de interfaces e classes abstratas e a gente já mexeu bastante aqui com classes né já viu como manipular elas como criar os métodos instanciar objetos mas a gente vai ver que existem diferentes tipos de classe né e outras coisinhas a mais aqui que se comportam de uma forma diferente então vamos lá quando quando a gente fala de interfaces a gente tá falando de um modelo aqui
no Java certo vou chamar assim de um modelo que vai definir um contrato que as classes devem seguir Como assim a gente vai criar uma nova classe aqui vocês vão entender então a gente vai vir aqui dentro do nosso Packet Java curso e vamos fazer um New Java CL só que em vez de criar uma classe A gente vai colocar aqui para baixo e vai selecionar interface eu vou chamar essa interface de carro certo então vai ser uma interface com nome carro ele vai me dar um erro porque já existe um carro ponto Java dentro
do meu pacote eu já tenho essa classe aqui mesmo que eu esteja criando uma interface né que seria um modelo diferente ã eu já tenho um arquivo aqui carro.on Java então ele vai dar um erro então o que a gente vai fazer a gente vai vir aqui vamos deletar o nosso carro.on Java agora a gente vai ter que aqui no Main ele vai dar alguns erros mas não tem problema depois a gente corrige e vamos de novo New Java Class criar uma interface chamada carro certo se vocês verem agora a gente não tá mais colocando
aqui um Public Class A gente tá colocando um Public interface por quê Porque a interface ela tem um comportamento diferente de uma classe tá então lembra que eu falei a interface ela vai definir um contrato que a classe deve seguir o que que ela vai o que que isso significa né Isso significa que aqui dentro de uma interface a gente vai literalmente somente definir como a gente quer que uma classe se comporte quais atributos ela vai ter ou quais métodos ela vai ter na verdade quais métodos normalmente é o que a gente foca aqui na
interface só que a gente não vai implementar nada aqui dentro a gente só vai estar def un indo a carcaça né a casquinha de fora de como uma classe deveria se parecer e essa interface depois ela vai ser implementada por uma classe então uma classe pode implementar uma interface e ela vai ter que seguir esse contrato aqui que está estabelecido numa interface eu sei que ficou meio confuso são muitas palavras muitos conceitos mas agora na prática tudo vai fazer sentido e vocês vão entender porque que isso aqui existe Então imagina o seguinte certo eu tenho
aqui a minha interface carro essa interface carro eu quero que ela tenha três métodos né Eu quero que um carro se comporte de três maneiras diferentes eu vou ter um método que é o método acelerar Então vou só definir aqui que existe esse método né método acelerar que é do tipo void não retorna nada vai ter um outro método que vai ser o meu método aqui freiar também o tipo void não vai retornar nada e vai ter um método que vai ser meu método parar né que também é o tipo void todo o carro se
comporta dessa maneira concordam comigo ele acelera ele freia e ele para né S um comportamento comuns para um carro então por isso que eu tô colocando isso numa interface então vou ter aqui o parar mas se vocês derem uma olhadinha aqui né a fundo a gente consegue ver que em nenhum momento eu implementei esses métodos Eu não disse o que que esse método aqui faz eu só assinei eles isso que a gente chama de assinatura né a gente fez a somente a assinatura aqui do método a gente não implementou o método de fato não colocou
nenhuma nenhum código nenhuma lógica Ali vai fazer com que isso aconteça poderia ser até um System Pout Mas a gente não colocou não tá implementado tá porque a interface não tem implementação ela vai ter só aqui a o contratinho a carcaça certo agora a gente vai vir lá em outro arquivo a gente vai deletar aqui esse pacote rodas também para não nos atrapalhar deixa eu ver aqui botar para delite certo a gente vai criar um novo arquivo Man Class que vai ser o meu sandiro vai ser uma classe certo vai ser a classe aqui Sandeiro
Sandeiro é um tipo de carro concordam comigo o sandiro é um carro então o que que esse meu sandiro vai fazer ele vai implementar então ele implementa certo a a interface carro quando a gente fizer isso o próprio intelij já vai nos indicar um erro ele vai dizer ó o Sandero ele deve ser ou declarado como uma classe abstrata que a gente já vai entender o que é ou ele deve implementar o método acelerar na classe carro por quê Porque esse essa classe aqui sandiro ela implementa a interface carro então ela tem que respeitar o
contrato de um carro que é ter os métodos acelerar freiar e parar Então eu ten que vir aqui e vou pedir pro intelij certo para ele implementar os métodos os métodos da acelerar freiar e parar vou dar um Ok quando a gente der esse ok ele vai criar aqui os três métodos para nós E aí sim ele vai abrir aqui as chaves pra gente fazer a implementação de algo dentro desses métodos se vocês verem ele colocou esse @override aqui por que override porque ele tá sobrescrevendo o que veio lá da minha interface certo porque na
interface eu não implementei nada eu só coloquei assinatura e aqui eu vou sobrescrever o que vem de lá e vou realmente colocar uma implementação então aqui eu posso colocar assistem pon al pon ln né acelerando a 50 porh por exemplo e fiz a implementação aqui então Vocês conseguem enxergar que as interfaces elas são contrato que vão definir um comportamento comum para um tipo de objeto e aí quando de fato a gente for criar uma classe que respeita esse tipo ela vai ter que implementar né tudo que está definido lá no contratinho porque ela tem que
se comportar de uma forma a mesma coisa a gente pode dizer por exemplo para um ser vivo a gente poderia criar uma interface que é a ser vivo todo ser vivo ele tem que ter um método de respirar um método de dormir sei lá e o método de acordar se eu fosse criar aqui um humano né uma classe humano e implementasse entf ser vivo ela ia ter que ter implementado o método respirar o método dormir e o método acordar ali da maneira que funciona melhor para aquele objeto específico para aquela classe específico no caso do
humano respirar é com o pulmão então certo seria dessa maneira fazendo o pulmão contrair descontrair contrair descontrair acordar é a gente abrir os olhos dormir é deitar na cama enfim entendeu agora para um cachorro é diferente então por isso que que a gente define ali uma interface que vai ter um contratinho em comum então as classes fazem implementação seguindo aquele contratinho as classes que obviamente querem respeitar aquele contrato certo e aí fica mais interessante tá fica mais interessante Então beleza declaramos o nosso sandiro agora a gente vai lá na nossa classe M aqui na minha
classe m né eu coloquei que eu vou ter um objeto do tipo carro então deixa eu até comentar isso aqui vou deixar só esse carro esse objeto do tipo o carro eu quero né que ele seja do tipo carro porque eu quero que ele tenha os métodos acelerar freiar e parar só que quando eu tentei fazer aqui um New carro ele deu um erro por quê Porque esse meu carro aqui é uma interface e uma interface não pode ser instanciada por quê Porque ela é algo oco né vazio a interface ela só define o contrato
ela não tem implementação de fato então é como se fosse algo oco por dentro Eu não posso implementar eu não posso instanciar uma interface eu tenho que instanciar uma classe então aqui eu posso vir e instanciar um Sandeiro certo e o Sandeiro aqui não recebe nada no Construtor só que mesmo assim eu consigo dizer que o tipo desse sandiro é um carro porque ele respeita a interface carro então eu posso dizer que o sandiro é do tipo carro se eu vier aqui eu posso criar outro carro ao invés do Sandeiro eu posso vir aqui e
criar o mob é o Fiat Mob esse meu Fiat Mob também vai implementar aqui a minha interface carro e ele vai ter que implementar os métodos que são definidos lá E aí no acelerar o que que ele vai fazer ao invés de acelerar lá a 50 por hora que nem o o sandiro faz ele vai acelerar a 30 km né porh porque é um pouco mais lento Enfim vocês estão entendendo né que eles têm comportamentos diferentes só que respeitam ali o mesmo contratinho e eu posso vir aqui criar outro objeto do mesmo tipo do tipo
carro então aqui meu carro dois só que agora em vez de ser um Sandeiro criar aqui e vou ter um Mob e se eu fizer meu carro dois ponto acelerar e meu carro um aqui no caso ponto acelerar os dois vão possuir esse método aqui acelerar por quê Porque os dois respeitam a interface carro então Os dois têm esse método acelerar aqui mesmo que eles são classes distintas eu consigo colocar eles no mesmo grupinho né que é o grupinho aqui de carros porque os dois implementam essa interface se a gente executar aqui o nosso projeto
a gente vai ver que ele vai printar acelerando o carro a 30 km/h e a 50 km/h Então beleza entendemos O que são as interfaces e agora as classes abstratas né O que que são as classes abstratas bom as classes abstratas elas também são classes que não podem ser instanciadas né a interface não é uma classe mas ela não pode não pode ser instanciada né a classe abstrata também não ela também não vai poder ser instanciada a gente vai vir aqui e vamos criar uma nova classe que vai ser a minha Sei lá o ser
vivo que nem eu tinha falado para vocês ser vivo aqui certo essa classe se ela for abstrata ela não pode ser instanciada então se eu ver aqui colocar abstract na frente dela eu indico que ela é uma classe abstrata e o Java já não vai mais deixar o instanciar um objeto desse tipo só que a diferença da da classe abstrata pra interface é que na classe abstrata eu posso colocar métodos né Posso colocar aqui meus métodos abstratos por exemplo Public abstract void respirar que não contém nenhuma implementação da mesma forma que a gente fez aqui
na interface a gente só definiu ali o contratinho Mas eu também posso definir métodos que tem implementação aqui na classe abstrata então por exemplo eu posso colocar Public void dormir e aí o dormir vai ter implementação aqui por exemplo vai printar system.out pprint LM dormindo certo e aí se eu quiser chamar um objeto aqui desse tipo ser vivo ó eu não consigo instanciar Então aqui meu ser né meu ser é igual a new ser vivo não vai funcionar ele não vai deixar eu fazer ó eu vou ter que fazer um override desse método respirar e
ele não deixou fazer daquela forma né que nem a gente tá acostumado a fazer eu tive que reestruturar tudo que inclusive ele fica com erro A gente não consegue instanciar uma classe abstrata então eu não posso fazer só um n ser vivo se eu quero ter um objeto do tipo ser vivo eu vou ter que né de alguma maneira fazer com que uma classe implemente essa classe abstrata E aí pra gente chegar nesse tópico de como uma classe vai implementar uma classe abstrata a gente vai ter que passar pro próximo assunto que é o assunto
de herança e polimorfismo então vamos lá o que que é a herança e o polimorfismo começando pela herança ela é um conceito de dentro da programação orientada objetos que basicamente define né que uma classe consegue herdar então herdar literalmente do significado da palavra de herança ã atributos e métodos de uma outra classe então a gente tá dizendo que uma subclasse né uma classe filha vai herdar comportamentos de uma classe mãe e como que a gente vai fazer isso bom a gente vai voltar lá no nosso código e a gente já viu aqui como é que
a gente consegue fazer com que uma classe implemente uma interface agora a gente vai ver como é que a gente faz com que uma classe erde atributos e métodos de outra Classe A gente vai declarar uma nova classe que vai ser minha classe humano essa minha classe humano certo ela vai estender a minha classe ser vivo então a minha classe humano ela herda tudo que um ser vivo tem por quê Porque um humano é um ser vivo E aí dessa maneira eu já vou herdar o comportamento aqui de dormir que já está implementado lá na
classe ser vivo então se eu clicar aqui em implement methods ele vai me pedir para eu implementar Obrigatoriamente o método respirar senão eu não estou herdando da maneira correta eu vou ter que vir aqui e definir uma implementação para respirar mas para dormir eu não vou precisar definir essa implementação por quê Porque já está implementado lá na classe mãe né na superclasse que a gente chama então eu já tô herdando esse método dormir aqui na classe ser humano Eu só preciso reescrever o método respirar Porque o método respirar aqui é um método abstrato e não
tem implementação nenhuma só que uma classe normal ela precisa precisa ter implementação dos seus métodos então aqui meu humano precisa implementar o método respirar certo então aqui eu posso colocar um inalando e exalando CO2 e oxigênio né que é a forma com que o humano respira por exemplo aí agora lá na nossa classe Men eu posso dizer aqui que eu tenho uma classe do tipo ser vivo e eu faço um Nil humano certo e aí esse meu humano ele é do tipo ser vivo da mesma forma que a gente fez aqui com a interface só
que o que aconteceu esse meu humano além dele manter o tipo das da classe mãe né que é a classe ser vivo ele também herdou as coisas que tinham dentro dela então posso vir aqui na minha classe ser vivo por exemplo e colocar que ela possui um Construtor por exemplo Construtor aqui da classe ser vivo que vai definir para ela a idade todo ser vivo tem uma idade certo então aqui eu tenho int né idade Isso aqui vai ser por exemplo pode ser protected ou pode ser Public vou deixar como protected E aí eu recebo
no momento que essa classe ser instanciada né eu recebo aqui um int que é idade eu faço dis ponto idade certo dis ponto idade recebe idade pronto dessa forma aqui a minha classe humano ela é obrigada a passar pro construtor da classe servvo uma idade porque ela pertence né Ela é desse tipo Serv vivo então aqui o que eu vou fazer para chamar o Construtor da classe mãe é fazer o seguinte ó dentro do Construtor da classe humano Então dentro do Construtor da classe humano eu vou fazer um super que esse super aqui é uma
palavra especial do Java que aciona o Construtor da superclasse ou a classe mãe e eu vou passar um parâmetro por exemplo idade 42 só que agora dentro dos métodos aqui da minha classe humano eu consigo fazer dis pontu idade eu consigo acessar esse atributo certo consigo acessar ele então posso botar aqui um System pon out n System pon out LN de despont idade porque eu herdei esse atributo também mesmo que eu tenha passado ele pro construtor da superclasse a superclasse que definiu esse atributo né que nem a gente já tinha visto antes como os atributos
funcionavam aqui na classe humana eu consigo continuar tendo acesso a esse atributo porque eu herdei ele através aqui do extends Eu estendi um ser vivo então eu herdei tudo que vem do ser vivo eu herdei todos os métodos e todos os atributos certo só que para eu conseguir fazer com que os atributos sejam iniciados corretamente caso eles sejam iniciados no Construtor eu preciso chamar aqui o o Construtor da superclasse passar os parâmetros para ela para que ela consiga atribuir lá corretamente né os valores aos atributos E aí se a gente vir aqui e rodar o
nosso projeto de novo a gente vai ver que ele vai logar aqui a idade opa Na verdade eu nem chamei o meu meu ser ponto aqui respirar e se a gente Executar a gente vai ver aqui que ele tem a idade 42 certo então essa a forma que funcionam as heranças aqui no Java uma classe né consegue herdar tudo de outra e não necessariamente ela precisa Herdade de uma classe abstrata a gente pode fazer herança com classe Normal também então eu posso transformar aqui esse ser vivo numa classe normal não é uma classe abstrata e
eu vou ter que tirar esse método aqui respirar certo como sendo um método abstrato porque agora por ser uma classe normal é obrigado que os métodos TM implementações né eu não posso deixar aqui métodos só com assinatura porque não é mais uma classe abstrata Então vou comentar isso daqui mas eu continuo aqui no humano conseguindo estender a classe servível então a gente consegue fazer herança com qualquer tipo de classe certo não necessariamente só com classes abstratas eu quis só lincar os os conhecimentos aqui para vocês só que agora como isso aqui é uma classe normal
essa classe ser vivo e ela não tem mais esse método abstrato aqui respirar que seria só a assinatura dele eu não preciso mais colocar esse override aqui em cima do meu método respirar esse método respirar é um método normal certo é um método normal que existe dentro da classe humano só que aí olha só o que mudou aqui lá no meu Main quando eu chamo meu ser ponto respirar ele tá dando erro por quê Porque aqui eu tenho um objeto do tipo ser vivo o que que tem dentro de ser vivo ser vivo tem idade
e ser vivo tem dormir beleza o humano pode ser usado no lugar de um ser vivo né então eu posso dizer aqui que Todo humano é um ser vivo mas eu não posso dizer que todo ser vivo é um humano e esse método respirar ele existe somente dentro de humano não dentro da generalização aqui de ser vivos então não consigo fazer meu ser pon Respirar para que eu conseguisse chamar aqui o método respirar eu teria que transformar essa variável aqui no tipo humano certo aí sim eu conseguiria acessar aqui o método respirar dela porque de
novo Todo humano é um ser vivo então eu posso dizer que eu posso instanciar um objeto do tipo humano e dizer que é um ser vivo beleza não vai dar erro só que quando eu tentar acessar coisas que são específicas de um humano né Como por exemplo o método respirar que a gente declarou aqui que já não tá mais fazendo um override da superclasse porque ele só existe aqui ele passa da erro porque isso aqui só existe para um humano e nem todo ser vivo é um humano né então ele não vai ter isso daqui
se eu transferisse esse método Respirar para lá dentro de ser vivo ele passa a funcionar de novo aqui porque isso aqui existe dentro de ser vivo mas tudo o que for específico do humano por exemplo o nome né eu posso ter aqui o minha string nome certo e receber aqui fazer o dis ponto nome receber um nome aqui sei lá Fernanda certo fazer receber Fernanda eu teria que chamar a chamada colocar a chamada pro super aqui em cima e ele para de dar erro porque o super tem que ser a primeira coisa que eu vou
chamar porque vai inicializar os atributos da superclasse depois eu inicializo os atributos da subclasse né da classe filha beleza coloquei o nome aqui em Fernanda eu poderia né tentar acessar isso aqui eu vou colocar como público pra gente ter acesso de qualquer lugar poderia vir aqui e tentar acessar o nome do meu ser então meu ser pon nome só que eu não consigo ó eu não encontro por quê Porque o meu ser um ser vivo aqui não tem nome lá na definição dele não tem nome isso só existe dentro do humano tá então isso aqui
é algo que a gente tem que ter muito em mente quando a gente tá falando de herança que é a gente pode usar a herança tanto com classe abstrata quanto com classe normal e aí a gente consegue generalizar os tipos então a gente consegue dizer que todas as classes que estendem o a mesma superclasse são do mesmo tipo mas eu não consigo fazer a generalização contrária não consigo dizer que todo ser vivo é um humano porque não é só né Todo humano é um ser vivo Mas nem todo ser vivo é um humano porque eu
poderia ter um cachorro poderia ter um gato poderia ter uma bactéria são ser vivos que vão estender a classe ser vivo mas não vão ter aqui o atributo de nome que só tá dentro aqui da classe humana certo então a gente já pode colocar aqui um ok também pra herança passamos por esse termo E aí vamos pra última etapa aqui da programação S orientado a objetos que é a parte de polimorfismo e o polimorfismo ele vai muito de encontro aqui com o que a gente viu com herança tá isso aqui vai ser bem rapidinho basicamente
o polimorfismo é o conceito que permite né que uma única interface como um método ou uma classe é seja usada para representar diferentes tipos de ações ou objetos Como assim quando a gente vai pro pro significado da palavra polimorfismo né a gente chega ali no termo polimorfo que seria diferentes formas né polimorfo que vem do do latim ou do grego não sei direito não sou é estudiosa de línguas mas vem aí dessas línguas antigas que significa polimorfo né que seria um ser com diferentes formas e o que que isso significa aqui na programação certo especificamente
aqui no Java O que que significa o polimorfismo bom vamos voltar lá pro nosso exemplo de carro né que a gente criou aqui a nossa interface CL carro todos os objetos que são do tipo carro eles possuem esses métodos aqui os métodos acelerar o método frear o método parar só que a nossa interface ela só tá definindo de novo a assinatura o contrato cada um dos carros aqui o mob o Sandeiro uma BMW um Camaro né eles vão ter a sua forma única de acelerar de frear e de parar certo cada um vai ter a
sua implementação então objetos do mesmo tipo e sendo chamados os mesmos métodos podem ter comportamentos diferentes por causa do polimorfismo Então é isso que permite que o Sandeiro acelere a 50 por hora enquanto o mob tá acelerando a 30 porh né que é a implementação aqui que a gente fez então a gente já tinha lidado com o polimorfismo sem nem perceber são objetos do mesmo tipo né que possuem aqui o mesmo contratinho a mesma interface só que se comportam de maneira diferente certo então inclusive isso aqui poderia ser a própria manipulação dos atributos do objeto
Então esse sandiro por exemplo ele poderia ter aqui um int que é o limite de ã limite de velocidade e o Sandeiro ele tem um limite de velocidade de de 150 km/h por exemplo Isso aqui vai ser um final final é porque esse valor nunca vai ser redefinido né Essa variável é final a partir do momento que eu definir o valor dela eu não vou mais atualizar então é uma um atributo final e eu posso ter aqui Meu método acelerar certo e eu vou ter aqui um outro atributo nessa classe que é um atributo público
também é um inteiro que é a velocidade atual então velocidade velocidade atual que vai começar com 0 km/h a cada vez que eu chamar o método acelerar Eu posso vir aqui visualizar o atributo velocidade atual desse meu carro certo para mais igual a 10 então adicionar mais 10 km/h mais 10 km/h e aqui a gente printa depois né que tá acelerando então a gente pode botar aqui embaixo ó acelerando E aí velocidade atual vamos sendo aqui o dis ponto velocidade atual E aí o meu Sandeiro vai ter o limite aqui de 150 certo e ele
não vai conseguir acelerar mais do que isso então se a gente vier aqui no nosso Main e colocar o nosso Sandeiro né então é o meu carro um aqui para acelerar 20 vezes então vou vir aqui e vou acelerar todas essas vezes Pera aí que eu coloquei errado vou acelerar todas essas vezes aqui tentando passar o limite de velocidade vai chegar determinado momento que ele vai bater naquele limite de velocidade ali a gente só vai ter que implementar a lógica para que isso funcione então fiz assim e aqui no nosso sandir ó a gente vai
colocar if dis ponto velocidade atual por menor do que dis ponto limite de velocidade se for daí sim eu vou conseguir acelerar seão Eu não vou quando gente for executar esse nosso código aqui ó ele vai mostrar velocidade atual velocidade atual 60 70 80 chegou no momento que ele bateu no 150 ele parou e ficou sempre no 150 se a gente tentasse fazer a mesma coisa acelerar o nosso Mob 300 vezes o nosso Mob não tem esse limite de velocidade não funciona dessa forma então o mob ele ia só acelerar e ele vou botar aqui
vários prints nem tô colocando na linha correta mas só para vocês verem que eu vou botar 300 e o mob chamando o mesmo método né que tem a mesma cara por fora vai se comportar de uma forma diferente ó acelerando a 30 acelerando a 30 acelerando a 30 por quê Porque o polimorfismo permite que a gente faça isso tá então é basicamente isso que significa polimorfismo quando a gente fala de programação orientada a objetos e aqui é dessa forma que a gente faz no Java e a gente pode fazer tanto com interfaces quanto com classes
abstratas como a gente tinha visto a gente pode vir aqui e transformar o nosso ser vivo de novo numa classe abstrata E aí eu posso colocar aqui métodos que vão ter somente a assinatura né métodos abstratos como por exemplo respirar que vai retornar aqui ele não bota Chaves vai retornar void certo eu botei na ordem errada é abstract é Public abstract void E aí eu vou vir aqui vou tirar o respirar implementado e vou deixar esse método abstrato aqui aí lá no humano eu posso vir e escrever a forma como o humano respira é um
polimorfo cada cada ser vivo respira de uma forma o humano vai respirar de uma forma diferente então o humano vai vir aqui e vai pegar o o CO2 por exemplo e transformar em oxigênio né então transformando em oxigênio Então esse é o conceito de polimorfismo e a gente consegue usar com as classes abstratas e as interfaces e estender elas ou herdar delas né que nem a gente tinha visto anteriormente Então beleza fechamos aqui todos os tópicos que a gente tinha que ver sobre programação orientada a objetos e a gente vai entrar no último tema do
vídeo de hoje que é o tratamento de excessões que também é algo rapidinho mas que eu não poderia deixar de mencionar para vocês quando a gente tá falando de Java então para quem ainda não sabe quando a gente tá falando de uma exceção a gente tá falando de um evento que acontece durante a execução do nosso programa que vai interromper o fluxo normal de execução desse programa normalmente essa exceção é equivalente a um erro né então quando acontece algum erro nas manipulações nas operações que a gente fez o nosso programa nosso programa lança uma exceção
né os nossos métodos podem lançar uma exceção ou métodos de outras bibliotecas enfim que a gente tiver utilizando de outros pacotes certo e aí no Java a gente tem um mecanismo específico pra gente fazer o tratamento dessas exceções pra gente capturar elas e conseguir dar um tratamento adequado para aquele erro pra gente conseguir né ter uma forma ali de dbar aquele erro que aconteceu então como eu expliquei para vocês é essa exceção ela pode ser causada por algum erro algum mal funcionamento no nosso código ou algum ma funcionamento em outra pacote que a gente tá
importando e utilizando né e tem vários ã motivos que eles podem acontecer pode ser causado por por vários ã motivos e alguns exemplos mais comuns é por exemplo a gente fazer uma divisão por zero que é algo que não é permitido no Java não tem suporte pra gente dividir por exemplo número um por zero ou número 100 por zero não existe divisão por zero né inclusive se vocês pegarem calculadora do celular de vocês tentar fazer 100 dividido por zero ele vai dar um erro É uma exceção e aqui no Java acontece a mesma coisa outro
tipo de erro bem comum é o new Pointer Exception é quando a gente tenta manipular Algum objeto que tá nulo a gente tenta acessar o algum atributo algum método ou fazer alguma operação em cima desse objeto ou dessa desse dado né e ele é um dado nulo não tem nada ali e eu vou causar um New Pointer Exception certo Outro ponto também muito comum que pode acontecer outra exceção muito comum é quando a gente vai tentar ler um arquivo aqui da nossa da nossa máquina né E a gente não encontra esse arquivo ou o arquivo
tá corrompido a gente vai ter uma exceção de inout Exception né exceção de de entrada e saída e também outro exemplo muito comum é quando a gente tenta acessar um índice de um Array que tá fora dos limites do Array que é maior do que o tamanho do Array que aí a gente vai ter a sessão de Array index out of bouns Então vamos ver aqui um exemplinho né de exceção que a gente pode ter e vamos começar aqui com o no Pointer né que é a mais comum aqui então digamos eu vou ter um
um novo objeto do tipo carro e vai ser meu carro furado o meu carro foi uma furado eu comprei um carro que não funciona então um carro nulo Beleza não tem nada dentro desse objeto Se eu tentar acessar aqui o meu carro furado ponto acelerar e a gente executar o nosso programa A gente vai ver que ele vai lançar uma exceção ó Exception in thread Main uma exceção na thread principal do meu programa que not invoke aqui jav curso. carro acelerar porque o meu carro furado é nulo certo então aqui é o que a gente
chama da New Point Exception e como é que a gente pode fazer para tratar essa exceção aqui no Java bom a gente poderia envolver isso daqui num bloco de try Cat então o try Cat basicamente é um bloco aqui no nosso código onde a gente vai tentar fazer alg uma coisa e caso algum problema aconteça dentro desse nosso bloco de código a gente vai capturar esse erro capturar esse exceção e a gente vai ter que dizer qual exceção a gente quer capturar então aqui vou ter minha Exception certo e aí caso eu capture essa exceção
eu vou ter um comportamento B né vou ter um plano b aqui então qual seria meu plano b bom se eu não consigo acelerar esse meu carro furado eu vou tentar vender ele então eu tentei acelerar não deu certo então aqui vende carro furado né porque é uma furada esse carro aqui e aqui eu botei até furr mas é carro furado porque é uma furada quando a gente executar isso aqui ó ele vai dizer ó vende carro furado porque não tá dando tá causando exceção aqui de New Point Beleza então isso aqui é um algo
super básico sobre tratamento de exceções tem algo tem coisas muito mais avançadas Além disso mas para um primeiro contato com a linguagem Java esse conhecimento aqui já é suficiente para vocês conseguirem fazer os seus primeiros programas E aí conhecendo essas exceções mais comuns Vocês já vão conseguir tratar os principais erros que é de novo novo a po interception o Array out of bounds Exception deixa eu até colocar aqui na captura né Array out of bouns index out of bouns o outro que a gente pode ter também é runtime Exception que é uma exceção mais geral
que é normalmente exceções não verificadas que não tem uma descrição específica do por que ela aconteceu pode ser por n motivos tem o nosso inal Exception que normalmente acontece quando a gente tá tentando ler algum dado de um arquivo por exemplo um arquivo TXT um arquivo Jon um arquivo html e a gente não encontrou o arquivo o arquivo tá corrompido não tá da forma como a gente queria vai lançar uma exceção certo a gente tem também a aritmetic então aqui é ritm Exception que normalmente é lançada com divisões com zero e o no Pointer que
a gente acabou de ver certo que são as exceções aí mais comuns que vocês vão topar no dia a dia com de vocês com Java Beleza então concluído isso terminamos o todos os temas aqui do nosso curso Já podemos dizer né que a gente já consegue escrever os nossos primeiros programas em Java se você quer com continuar seus estudos no Java e aprender o Spring que é um dos frameworks mais utilizados no mercado usado por empresas como Itaú Mercado Livre Google e Facebook eu recomendo que você Assista esse vídeo aqui nele a gente abordou os
principais tópicos do Spring e aprendeu a criar a nossa primeira aplicação backend usando Java se você gostou desse vídeo Não esqueça de deixar seu like se inscrever aqui no canal e um agradecimento especial a todos os membros por todo o carinho e todo o suporte esse vídeo vai ficando por aqui nos vemos na próxima Live Ou no próximo vídeo