<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bárbara Salla</title>
    <description>The latest articles on DEV Community by Bárbara Salla (@bsalla).</description>
    <link>https://dev.to/bsalla</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2564153%2F131559a2-60ea-419a-984b-73f37c578676.jpeg</url>
      <title>DEV Community: Bárbara Salla</title>
      <link>https://dev.to/bsalla</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bsalla"/>
    <language>en</language>
    <item>
      <title>"Pesquei, Java!": Transformações do Switch: Novidades e Recursos</title>
      <dc:creator>Bárbara Salla</dc:creator>
      <pubDate>Fri, 24 Jan 2025 03:14:41 +0000</pubDate>
      <link>https://dev.to/bsalla/evolucao-do-switch-em-java-do-classico-ao-moderno-35f1</link>
      <guid>https://dev.to/bsalla/evolucao-do-switch-em-java-do-classico-ao-moderno-35f1</guid>
      <description>&lt;p&gt;O &lt;code&gt;switch&lt;/code&gt; no Java, desde quando surgiu, já passou por várias atualizações, tornando-se cada vez mais versátil e poderoso. Essas melhorias impactaram tanto o comportamento, sintaxe, exaustividade e a capacidade de trabalhar com diferentes tipos de dados.&lt;/p&gt;

&lt;p&gt;Inicialmente, o &lt;code&gt;switch&lt;/code&gt; foi introduzido como uma declaração, e, mais tarde, evoluiu para incluir o conceito de expressão em versões mais recentes. Para entender melhor o que esses dois conceitos significam, podemos descreve-los como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Declaração&lt;/strong&gt;: É usada para controlar o fluxo do programa, executando diferentes blocos de código com base no valor de uma variável. Não retorna diretamente um valor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expressão&lt;/strong&gt;: Avalia uma condição e retorna um valor diretamente, que pode ser atribuído a uma variável, por exemplo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A seguir, exploraremos as mudanças ao longo das versões do Java e suas implicações práticas.&lt;/p&gt;

&lt;p&gt;1.&lt;strong&gt;Switch como Declaração (Forma Clássica)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quando falamos do &lt;code&gt;switch&lt;/code&gt; como &lt;em&gt;declaração&lt;/em&gt;, estamos nos referindo à forma clássica de uso dessa estrutura. Em versões anteriores do Java, o &lt;code&gt;switch&lt;/code&gt; só era utilizado apenas como uma declaração básica de controle de fluxo. Ele podia ser usado com tipos int, char, byte, short e outros, mas sempre sem retornar um valor diretamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitações da forma clássica do switch&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tipos restritos&lt;/strong&gt;: Apenas funcionava com tipos primitivos numéricos (int, short, char, byte) e, posteriormente, com String (a partir do Java 7) e enums (Java 5).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repetitividade&lt;/strong&gt;: Não permitia a reutilização de lógica ou a utilização de blocos mais compactos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inflexibilidade&lt;/strong&gt;: Não suportava expressões complexas ou a possibilidade de retornar diretamente valores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalabilidade&lt;/strong&gt;: O switch clássico era inadequado para cenários em que era necessário lidar com múltiplos tipos de dados ou condições compostas, como intervalos de valores.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Exemplo: Switch clássico com números inteiros&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
    var dayValue = 1;
    String day = "";

    switch (dayValue){
        case 1:
            day = "sunday";
            break;
        case 2:
            day = "monday";
            break;
        case 3:
            day = "Tuesday";
            break;
        case 4:
            day = "Wednesday";
            break;
        case 5:
            day = "Thursday";
            break;
        case 6:
            day = "Friday";
            break;
        case 7:
            day = "Saturday";
            break;
        default:
            System.out.println("Invalid Value: "+ dayValue);
    }

    System.out.println("\nValue: "+dayValue+"\nDay: "+ day+"");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Resposta do console:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrninn78mkatdyvo93yg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrninn78mkatdyvo93yg.png" alt="Image description" width="352" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesse cenário, por exemplo, se retirarmos o break, o programa executará todos os blocos a partir do caso correspondente ao valor, resultando no comportamento que conhecemos como &lt;strong&gt;"Fall Through"&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
        var dayValue = 1;
        String day = "";

        switch (dayValue){
            case 1:
                day = "Sunday";
            case 2:
                day = "Monday";
            case 3:
                day = "Tuesday";
            case 4:
                day = "Wednesday";
            case 5:
                day = "Thursday";
            case 6:
                day = "Friday";
            case 7:
                day = "Saturday";
            default:
                System.out.println("Invalid Value: "+ dayValue);
        }

        System.out.println("\nValue: "+dayValue+"\nDay: "+ day+"");
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Resposta do console:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzp3fi9eb1vspqsgm078.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzp3fi9eb1vspqsgm078.png" alt="Image description" width="309" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.&lt;strong&gt;Suporte a String no Switch (Java 7):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A partir do Java 7, podemos então passar valores do tipo &lt;code&gt;String&lt;/code&gt; como parâmetro no &lt;code&gt;switch&lt;/code&gt;, ampliando significativamente o seus casos de uso, por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
        String day = "Monday";

        switch (day) {
            case "Monday":
                System.out.println("Start of the work week.");
                break;
            case "Tuesday":
            case "Wednesday":
            case "Thursday":
                System.out.println("Midweek days.");
                break;
            case "Friday":
                System.out.println("Almost the weekend!");
                break;
            case "Saturday":
            case "Sunday":
                System.out.println("Weekend!");
                break;
            default:
                System.out.println("Invalid day.");
        }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Resposta do console:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx50jksem0otk1gc94lw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx50jksem0otk1gc94lw5.png" alt="Image description" width="339" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.&lt;strong&gt;Switch com Expressões (Java 12+)&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;O Java 12 introduziu as &lt;strong&gt;Switch Expressions&lt;/strong&gt; (inicialmente como recurso preview). Com isso, o &lt;code&gt;switch&lt;/code&gt; ganhou uma nova sintaxe e a capacidade de permitir ao &lt;code&gt;switch&lt;/code&gt; retornar diretamente valores a uma variável, eliminando a necessidade de utilizar o &lt;code&gt;break&lt;/code&gt;. No exemplo a seguir, podemos observar a implementação direta do &lt;code&gt;switch&lt;/code&gt; após o sinal de atribuição de valor (=) da variável &lt;code&gt;day&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; public static void main(String[] args) {
        int dayValue = 6;
        String day = switch (dayValue){
            case 1 -&amp;gt; "Sunday";
            case 2 -&amp;gt; "Monday";
            case 3 -&amp;gt; "Tuesday";
            case 4 -&amp;gt; "Wednesday";
            case 5 -&amp;gt; "Thursday";
            case 6 -&amp;gt; "Friday";
            case 7 -&amp;gt; "Saturday";
            default -&amp;gt; "invalid day.";
        };

        System.out.println("\nValue: "+dayValue+"\nDay: "+ day);
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Resposta do console:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzaz2bksfaqz43ukunoxu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzaz2bksfaqz43ukunoxu.png" alt="Image description" width="308" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.&lt;strong&gt;Uso do Yield (Java 13/14)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;yield&lt;/code&gt; foi introduzido no Java 13 como parte das Switch Expressions, sendo apenas oficializado no Java 14. O termo &lt;code&gt;yield&lt;/code&gt; é usado para retornar um valor em bloco de código dentro do &lt;code&gt;switch&lt;/code&gt;. Tornando possível  usar blocos de código mais complexos e retornar valores a partir deles.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public String getDayType(int day) {
    String dayType = switch (day) {
        case 1 -&amp;gt; "Monday";
        case 2 -&amp;gt; "Tuesday";
        case 3 -&amp;gt; "Wednesday";
        default -&amp;gt; {
            System.out.print("Invalid day");
            yield null;
        }
    };
    return dayType;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No exemplo acima, o &lt;code&gt;yield&lt;/code&gt; permite adicionar blocos de código em um case usando &lt;code&gt;{}&lt;/code&gt; e retornar valores específicos ao final do processamento, tornando possível implementar diferentes comportamentos para os diversos cases. Diferentemente do já conhecido &lt;code&gt;return&lt;/code&gt;, que sai e finaliza imediatamente a execução do método, o &lt;code&gt;yield&lt;/code&gt; apenas retorna um valor para a expressão &lt;code&gt;switch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;5.&lt;strong&gt;Múltiplos Valores por Case (Java 14)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Com o Java 14, as &lt;em&gt;Switch Expressions&lt;/em&gt; foram formalizadas e, além disso, tornou-se possível combinar vários valores em um único case, simplificando condições que compartilham o mesmo comportamento, como no exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
            String day = "Monday";
            switch (day) {
                case "Saturday", "Sunday":
                    System.out.println("Weekend");
                    break;
                case "Monday", "Tuesday", "Wednesday", "Thursday":
                    System.out.println("Weekday");
                    break;
                default:
                    System.out.println("Invalid day");
            }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Resposta do console:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjkud8bc9yrg3dyzwp4i6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjkud8bc9yrg3dyzwp4i6.png" alt="Image description" width="386" height="116"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.&lt;strong&gt;Exaustividade no Switch (Java 12 e Java 14)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Com o &lt;code&gt;switch&lt;/code&gt; e as &lt;strong&gt;Switch Expressions&lt;/strong&gt;, se os valores possíveis forem completamente definidos, como quando trabalhamos com Enum, o compilador pode verificar se todos os casos foram cobertos, garantindo maior controle e segurança na implementação. Assim, o compilador consegue interpretar se todas as opções foram tratadas nos &lt;code&gt;cases&lt;/code&gt; e sinalizar caso não esteja cobrindo todas as possibilidades, evitando comportamentos inesperados em tempo de execução.&lt;/p&gt;

&lt;p&gt;Portanto, se todos os casos não forem cobertos, o compilador emitirá um erro de compilação, como mostrado no exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class Main {
    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }

    public static void main(String[] args) {
        Day day = Day.FRIDAY;
        System.out.println("This day falls on a  " + getDayType(day));
    }

    public static String getDayType(Day day) {
        return switch (day) {
            case MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY -&amp;gt; "Weekday";
            case SATURDAY -&amp;gt; "Weekend";
        };
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Erro de compilação:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fia60tu027s5k6tpcxif3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fia60tu027s5k6tpcxif3.png" alt="Image description" width="503" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Já com todas as opções tratadas, o código compila e roda conforme esperado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class Main {
    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }

    public static void main(String[] args) {
        Day day = Day.FRIDAY;
        System.out.println("This day falls on a  " + getDayType(day));
    }

    public static String getDayType(Day day) {
        return switch (day) {
            case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -&amp;gt; "Weekday";
            case SATURDAY, SUNDAY -&amp;gt; "Weekend";
        };
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Resposta do console:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2zeze36avgqt7acc7350.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2zeze36avgqt7acc7350.png" alt="Image description" width="322" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.&lt;strong&gt;Exaustividade no switch com Classes Seladas (Java 17)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A exaustividade no &lt;code&gt;switch&lt;/code&gt; também se aplica a &lt;strong&gt;classes seladas&lt;/strong&gt; a partir do Java 17. Uma classe selada controla diretamente quais outras classes ou  interfaces podem estendê-las ou implementá-las, limitando a hierarquia de herança, permitindo que o compilador verifique se todos os casos possíveis foram tratados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sealed class Day permits Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday { }

final class Monday extends Day { }
final class Tuesday extends Day { }
final class Wednesday extends Day { }
final class Thursday extends Day { }
final class Friday extends Day { }
final class Saturday extends Day { }
final class Sunday extends Day { }

public class Main {
    public static void main(String[] args) {
        Day day = new Monday(); 
        System.out.println("Today is: " + dayType(day));
    }

    public static String dayType(Day day) {
        return switch (day) {
            case Tuesday t -&amp;gt; "Weekday";
            case Friday f -&amp;gt; "Weekday";
            case Saturday s -&amp;gt; "Weekend";
        };
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conforme o exemplo acima, verificamos que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Temos uma classe selada Day que permite apenas que as classe Monday, Tuesday, Wednesday, Thursday, Friday, Saturday e Sunday herdam seus atributos e comportamentos.&lt;/li&gt;
&lt;li&gt;Temos no método main a chamada de um método (&lt;code&gt;dayType()&lt;/code&gt;) que utiliza o &lt;code&gt;switch&lt;/code&gt; com classes seladas.&lt;/li&gt;
&lt;li&gt;Não temos todas as opções de subclasses da Classe Day contempladas nos cases do &lt;code&gt;switch&lt;/code&gt;, resultando num erro de compilação:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Filcr3fhakviyhjhw3cnr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Filcr3fhakviyhjhw3cnr.png" alt="Image description" width="492" height="43"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.&lt;strong&gt;Pattern Matching no Switch (Java 17)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outra novidade introduzida no Java 17 foi a integração do &lt;code&gt;switch&lt;/code&gt; ao recurso &lt;strong&gt;Pattern Matching&lt;/strong&gt;, permitindo verificar se determinado objeto é do tipo de uma classe especifica a partir de um &lt;code&gt;switch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Antes do Java 17, a verificação de tipos era feita com instanceof e exigia blocos separados de código, como no exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
        Object object = "text";

        if(object instanceof String){
            System.out.println("This object is a String");
        } else if (object instanceof Long) {
            System.out.println("This object is a long");
        } else {
            System.out.println("Unidentified object type");
        }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Resposta console:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kuea44a0c0bw1a31z9k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kuea44a0c0bw1a31z9k.png" alt="Image description" width="492" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Já quando aplicamos o &lt;strong&gt;Pattern Matching&lt;/strong&gt; com &lt;code&gt;switch&lt;/code&gt; temos a seguinte sintaxe:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
    Object object = "text";

    switch (object){
        case String s-&amp;gt; System.out.println("This object is a String");
        case Integer i -&amp;gt;  System.out.println("This object is a Integer");
        default -&amp;gt; System.out.println("Unidentified object type");
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Resposta console:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fic5yt0xomfeckm8zhtqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fic5yt0xomfeckm8zhtqg.png" alt="Image description" width="539" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esse recurso facilita a verificação de tipos, evitando a necessidade do instanceof e de blocos separados para diferentes tipos de objetos.&lt;/p&gt;

&lt;p&gt;9.&lt;strong&gt;Uso de null como case (Java 17)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A partir do Java 17, tornou-se possível atribuir valor &lt;code&gt;null&lt;/code&gt; a um &lt;code&gt;case&lt;/code&gt; no switch, por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;     case null -&amp;gt; System.out.println("This is a null object");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Espero que essas informações tenham sido úteis para você e agreguem ao seu código. Até mais!&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>java</category>
      <category>devjournal</category>
      <category>programming</category>
    </item>
    <item>
      <title>"Pesquei, Java!": Por que deixar o java.io.File para Trás?</title>
      <dc:creator>Bárbara Salla</dc:creator>
      <pubDate>Thu, 16 Jan 2025 10:22:45 +0000</pubDate>
      <link>https://dev.to/bsalla/pesquei-java-por-que-deixar-o-javaiofile-para-tras-4f97</link>
      <guid>https://dev.to/bsalla/pesquei-java-por-que-deixar-o-javaiofile-para-tras-4f97</guid>
      <description>&lt;p&gt;A classe &lt;strong&gt;File&lt;/strong&gt;, do pacote java.io, em Java representa de forma abstrata o &lt;em&gt;caminho de um arquivo ou diretório no sistema de arquivos&lt;/em&gt;. Com ela, é possível criar, deletar, renomear e consultar informações básicas, como metadados de arquivos. No entanto, a utilização da classe java.io.File, apesar de já ter sido amplamente adotada, vem sendo desestimulada desde o lançamento do pacote java.nio.file no Java SE 7.&lt;/p&gt;

&lt;p&gt;Essa mudança foi incentivada pela Oracle devido a várias limitações apontadas no artigo &lt;a href="https://docs.oracle.com/javase/tutorial/essential/io/legacy.html" rel="noopener noreferrer"&gt;Legacy File I/O Code&lt;/a&gt;, que, de forma geral, traduzido para o português, destaca:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exceções genéricas&lt;/strong&gt;: Os métodos não lançavam exceções detalhadas em casos de falha. Por exemplo, ao excluir um arquivo, não era possível identificar se o problema era falta de permissão, inexistência do arquivo ou outra razão.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comportamento inconsistente&lt;/strong&gt;: Métodos como rename não apresentavam comportamento uniforme entre diferentes sistemas operacionais.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Falta de suporte para links simbólicos&lt;/strong&gt;: Não havia suporte para links simbólicos ou acesso eficiente a metadados avançados, como permissões e proprietários.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Problemas de desempenho&lt;/strong&gt;: Operações em diretórios grandes frequentemente causavam problemas de desempenho ou até falhas na aplicação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Percurso de diretórios não confiável&lt;/strong&gt;: Não era possível percorrer diretórios de forma segura e evitar loops causados por links simbólicos circulares.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com a introdução do pacote java.nio.file, a API trouxe soluções mais seguras e modernas, sendo a escolha mais recomendada para manipulação de arquivos e diretórios.&lt;/p&gt;

&lt;p&gt;De maneira prática, podemos demonstrar alguns dos problemas mais comuns da classe File e compará-los com as soluções oferecidas pela classe Path (escolha recomendada), nos seguintes códigos:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Exclusão de Arquivos com Detalhamento de Exceções:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Usando File:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            System.out.println("Arquivo excluido com sucesso: "+ file.delete());
        } catch (Exception e){
            e.printStackTrace();
        }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resposta do Console:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0vn6s80bkv0vzeiuo2z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0vn6s80bkv0vzeiuo2z.png" alt="Image description" width="690" height="107"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Usando Path:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
        try {
            Path path = Path.of("example.txt");
            Files.delete(path);
        } catch (NoSuchFileException e) {
            System.out.println("Erro: O arquivo não existe - " + e.getMessage());
        } catch (AccessDeniedException e) {
            System.out.println("Erro: Permissão negada - " + e.getMessage());
        } catch (IOException e) {
            System.out.println("Erro inesperado ao excluir o arquivo - " + e.getMessage());
        } catch (Exception e){
            e.printStackTrace();
        }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resposta do Console:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fci5ayms4fm7jb38exjer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fci5ayms4fm7jb38exjer.png" alt="Image description" width="675" height="116"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Renomear Arquivos de Forma Confiável:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Usando File:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
        try {
            File oldFile = new File("old_name.txt");
            File newFile = new File("new_name.txt");
            System.out.println("Renomeou o arquivo com sucesso: "+ oldFile.renameTo(newFile));
        } catch (Exception e){
            e.printStackTrace();
        }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resposta do Console:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflky9lujsl20v0ocqzkg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflky9lujsl20v0ocqzkg.png" alt="Image description" width="685" height="114"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Usando Path:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
        Path oldPath = Path.of("old_name.txt");
        Path newPath = Path.of("new_name.txt");
        try {
            Files.move(oldPath, newPath);
            System.out.println("Arquivo renomeado com sucesso.");
        } catch (FileAlreadyExistsException e) {
            System.out.println("Erro: O novo nome já está sendo usado por outro arquivo.");
        } catch (NoSuchFileException e) {
            System.out.println("Erro: O arquivo original não existe.");
        } catch (IOException e) {
            System.out.println("Erro inesperado ao renomear o arquivo: " + e.getMessage());
        } catch (Exception e){
            e.printStackTrace();
        }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resposta do Console:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45952y0llsz60vyx2jzd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45952y0llsz60vyx2jzd.png" alt="Image description" width="670" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Ah, Mas todos os meus projetos utilizam o &lt;code&gt;File&lt;/code&gt;":&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;De acordo com a própria documentação da Oracle, caso o custo de substituir o uso da classe java.io.File por funcionalidades do pacote java.nio.file seja muito alto, existem soluções para facilitar a migração e minimizar o impacto no código.&lt;/p&gt;

&lt;p&gt;Por exemplo, a classe java.io.File oferece o método &lt;code&gt;toPath()&lt;/code&gt;, que converte uma instância de File para uma instância de Path. No exemplo que tentamos  excluir um arquivo, podemos fazer essa conversão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            Path path = file.toPath();
            Files.delete(path);
        } catch (NoSuchFileException e) {
            System.out.println("Erro: O arquivo não existe - " + e.getMessage());
        } catch (AccessDeniedException e) {
            System.out.println("Erro: Permissão negada - " + e.getMessage());
        } catch (IOException e) {
            System.out.println("Erro inesperado ao excluir o arquivo - " + e.getMessage());
        } catch (Exception e){
            e.printStackTrace();
        }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dessa forma, você pode migrar seu código de forma gradual e aproveitar os novos recursos e correções implementada no pacote &lt;code&gt;java.nio&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Espero que essa informação tenha sido útil para você e venha agregar ao seu código. Até mais!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fontes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ORACLE. &lt;strong&gt;Legacy I/O&lt;/strong&gt;. Oracle Java Tutorials. Disponível em: &lt;a href="https://docs.oracle.com/javase/tutorial/essential/io/legacy.html" rel="noopener noreferrer"&gt;https://docs.oracle.com/javase/tutorial/essential/io/legacy.html&lt;/a&gt;. Acesso em: 10 jan. 2025.&lt;/p&gt;

&lt;p&gt;ORACLE. &lt;strong&gt;Class File (Java SE 21 &amp;amp; JDK 21)&lt;/strong&gt;. Oracle Java Documentation. Disponível em: &lt;a href="https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/io/File.html" rel="noopener noreferrer"&gt;https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/io/File.html&lt;/a&gt;. Acesso em: 15 jan. 2025.&lt;/p&gt;

&lt;p&gt;ORACLE. &lt;strong&gt;Package java.nio.file (Java SE 21 &amp;amp; JDK 21)&lt;/strong&gt;. Oracle Java Documentation. Disponível em: &lt;a href="https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/nio/file/package-summary.html" rel="noopener noreferrer"&gt;https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/nio/file/package-summary.html&lt;/a&gt;. Acesso em: 15 jan. 2025.&lt;/p&gt;

</description>
      <category>java</category>
      <category>oracle</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>"Pesquei, Java!": Classe e Objeto em Foco: Da Abstração à Realidade</title>
      <dc:creator>Bárbara Salla</dc:creator>
      <pubDate>Thu, 09 Jan 2025 18:57:55 +0000</pubDate>
      <link>https://dev.to/bsalla/pesquei-java-classe-e-objeto-em-foco-da-abstracao-a-realidade-3d52</link>
      <guid>https://dev.to/bsalla/pesquei-java-classe-e-objeto-em-foco-da-abstracao-a-realidade-3d52</guid>
      <description>&lt;p&gt;Na Programação Orientada a Objetos (POO), buscamos representar elementos do mundo real dentro dos nossos programas. Para isso, abstraímos do objeto suas características (o que eles têm) e seus comportamentos (o que eles fazem), traduzindo essas ideias em classes e objetos. Dessa maneira, podemos encapsular estados e comportamentos de um tipo específico de objeto, facilitando sua manutenção e reutilização no código.&lt;/p&gt;

&lt;p&gt;Por exemplo, imagine que queremos representar uma caneta em nosso programa. Quais seriam as suas características? e quais seriam seus comportamentos? Vamos, então, projetar a caneta da seguinte forma:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuee8ogrj4t5m3l5pj5ys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuee8ogrj4t5m3l5pj5ys.png" alt="Image description" width="537" height="129"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para traduzir essa abstração em código, criamos uma &lt;strong&gt;classe&lt;/strong&gt; que funciona como o "molde" ou "projeto" que estabelece as características e comportamentos de uma caneta. A classe define o que todo objeto desse tipo terá (como atributos) e poderá fazer (como métodos). Assim, a classe serve como uma representação abstrata, enquanto o objeto é uma instância concreta/real dessa classe.&lt;/p&gt;

&lt;p&gt;Quando criamos um &lt;strong&gt;objeto&lt;/strong&gt; a partir de uma classe, ele se torna uma instância única, com valores específicos atribuídos às suas variáveis de instância. Assim, de acordo com Paul Deitel e Harvey Deitel (2017, p.56): “cada nova classe que você desenvolve torna-se um novo tipo que pode ser utilizado para declarar variáveis e delinear objetos”. Ou seja, diferentes objetos de um mesmo tipo (criados a partir da mesma classe), como no caso de uma “caneta”, podem ser criados e poderão compartilhar os mesmos comportamentos, mas cada um terá valores distintos para seus atributos, tornando-os únicos. Por exemplo, ao criar a &lt;strong&gt;Caneta A&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozg9790mv0ihumv67euo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozg9790mv0ihumv67euo.png" alt="Image description" width="282" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com essas definições em mente, ao projetar uma classe, deve-se refletir sobre o que o objeto sabe sobre si e o que ele faz (BATES, Bert; SIERRA, Kathy, 2005). O que ele conhece sobre si mesmo chamamos de variáveis de instância (estado) e o que faz são os seus métodos (comportamento). A classe sintetiza a estrutura e o comportamento que o objeto deve possuir. Ao criar um objeto a partir da classe, ele será construído com as mesmas características gerais descritas na classe, representando uma instância concreta do conceito abstrato. No entanto, cada objeto terá seus próprios valores para os atributos, refletindo suas características únicas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Classe ou objeto: Quem nasce primeiro?
&lt;/h2&gt;

&lt;p&gt;Ao compreender a classe como um “molde” abstrato para a construção do objeto, ela torna-se, de fato, a &lt;strong&gt;fundação&lt;/strong&gt;, enquanto o objeto é a concretização desse modelo. Em outras palavras, &lt;strong&gt;a classe nasce primeiro&lt;/strong&gt; e se estabelece como um tipo de objeto. Não é possível criar um objeto sem que exista uma classe, pois a classe fornece a estrutura necessária para sua criação. Assim, a classe representa o ponto de partida, enquanto o objeto é a materialização desse projeto em uma instância real e utilizável dentro do programa.&lt;/p&gt;

&lt;p&gt;Agora, podemos aplicar o conceito de classe e objeto diretamente no código, com um exemplo prático de como modelar um carro em programação orientada a objetos. &lt;/p&gt;

&lt;p&gt;Primeiramente, devemos nos perguntar: o que sabemos sobre carros? O que todo carro possui? Ele tem portas, é movido a álcool, gasolina ou outros combustíveis, pode ser automático ou manual, possui um modelo, cor e capacidade de passageiros. Essas características representam o estado do carro, ou seja, os atributos que o definem.&lt;/p&gt;

&lt;p&gt;E o que ele pode fazer? Ele pode acelerar, frear, ligar, desligar, buzinar, abrir as portas ou acionar o farol. Essas ações representam o comportamento do carro, ou seja, os métodos que descrevem o que ele é capaz de executar.&lt;/p&gt;

&lt;p&gt;Abaixo, temos a implementação de um Carro como classe (Car), combinando seus atributos e os seus métodos. Seguindo as boas práticas, colocamos todo o código em inglês:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class Car {

    private String model;
    private String color;
    private String fuelType;
    private int passengerCapacity;

    public Car(String model, String color, String fuelType, int passengerCapacity) {
        this.model = model;
        this.color = color;
        this.fuelType = fuelType;
        this.passengerCapacity = passengerCapacity;
    }

    public void accelerate() {
        System.out.println("The car is accelerating.");
    }

    public void brake() {
        System.out.println("The car is braking.");
    }

    public void start() {
        System.out.println("The car is started.");
    }

    public void stop() {
        System.out.println("The car is stopped.");
    }

    public void honk() {
        System.out.println("The car is honking.");
    }

    public void displayDetails() {
        System.out.println("Model: " + model);
        System.out.println("Color: " + color);
        System.out.println("Fuel Type: " + fuelType);
        System.out.println("Passenger Capacity: " + passengerCapacity);
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, vamos criar um objeto Car a partir da classe Car para utilizá-lo no nosso código, e assim demonstrar a função da classe como um modelo para construção do objeto e o objeto como a versão real criada a partir desse modelo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class Main {
    public static void main(String[] args) {

        Car carA = new Car("Fusca", "Blue", "Gasoline", 4);

        carA.displayDetails();

        carA.start();
        carA.accelerate();
        carA.honk();
        carA.brake();
        carA.stop();
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, demonstramos que ao projetarmos uma classe, estamos, na verdade, criando um modelo abstrato que pode ser concretizado em múltiplas instâncias, cada uma com dados próprios. Essa é a essência da Programação Orientada a Objetos: transformar ideias abstratas em representações concretas para aplicação no código.&lt;/p&gt;

&lt;p&gt;Agora que você sabe como funcionam as classes e o objetos, quais outros objetos você conseguiria representar em código? E para os que já possuem vasta experiência: qual foi a classe mais criativa ou desafiadora que você já criou em um projeto?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fontes&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;DEITEL, Paul; DEITEL, Harvey. &lt;strong&gt;Java: como programar&lt;/strong&gt;. São Paulo: Pearson &lt;br&gt;
Education do Brasil, 2017.&lt;/p&gt;

&lt;p&gt;SIERRA, Kathy; BATES, Bert. &lt;strong&gt;Use a Cabeça! Java&lt;/strong&gt;. 2ªEd. Rio de Janeiro: Editora Alta Books, 2005.&lt;/p&gt;

</description>
      <category>java</category>
      <category>poo</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>"Pesquei, Java!": Introdução à nova série semanal sobre Java.</title>
      <dc:creator>Bárbara Salla</dc:creator>
      <pubDate>Wed, 08 Jan 2025 19:03:34 +0000</pubDate>
      <link>https://dev.to/bsalla/pesquei-java-5dho</link>
      <guid>https://dev.to/bsalla/pesquei-java-5dho</guid>
      <description>&lt;p&gt;&lt;strong&gt;"Pesquei, Java!"&lt;/strong&gt; é uma série semanal que busca explorar os conceitos do vasto "mar" do Java. Toda semana, lançamos nossa linha no oceano da programação e fisgamos uma ideia, conceito ou prática que possam contribuir para os estudos sobre Java e estimular debates enriquecedores sobre os conteúdos. Aqui, você encontrará desde fundamentos de POO até insights avançados. Prepare sua xícara de café e venha conosco pescar ideias que farão diferença no seu código. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;A tecnologia é um vasto oceano&lt;/em&gt;, convido a todos(as) a navegar juntos e explorar as descobertas que ela nos reserva. Até mais!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
