<?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: Aswin Arya</title>
    <description>The latest articles on DEV Community by Aswin Arya (@aswin_arya_89918234fee18f).</description>
    <link>https://dev.to/aswin_arya_89918234fee18f</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%2F3764234%2F074b9f4f-a2d2-432e-b107-a62289b7abc9.png</url>
      <title>DEV Community: Aswin Arya</title>
      <link>https://dev.to/aswin_arya_89918234fee18f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aswin_arya_89918234fee18f"/>
    <language>en</language>
    <item>
      <title>Factory Design Pattern in Java (With Real-Time Example)</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Sat, 04 Apr 2026 07:56:26 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/factory-design-pattern-in-java-with-real-time-example-5716</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/factory-design-pattern-in-java-with-real-time-example-5716</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In real-world applications, creating objects directly using &lt;code&gt;new&lt;/code&gt; can tightly couple your code, making it hard to scale and maintain. As projects grow, this leads to messy conditionals, duplication, and poor flexibility.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Factory Design Pattern&lt;/strong&gt; solves this by centralizing object creation logic—allowing you to create objects without exposing instantiation details to the client.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Factory Design Pattern?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Factory Design Pattern&lt;/strong&gt; is a creational design pattern that provides an interface for creating objects, but lets subclasses decide which class to instantiate.&lt;/p&gt;

&lt;p&gt;In simple words:&lt;br&gt;
👉 &lt;strong&gt;“Instead of creating objects directly, you ask a factory to create them for you.”&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Do We Need Factory Pattern?
&lt;/h2&gt;

&lt;p&gt;In my decade of teaching &lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, I’ve seen developers struggle with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tight coupling between classes&lt;/li&gt;
&lt;li&gt;Repeated object creation logic&lt;/li&gt;
&lt;li&gt;Difficulty in adding new features&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Factory Pattern solves:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Loose coupling&lt;/li&gt;
&lt;li&gt;Centralized object creation&lt;/li&gt;
&lt;li&gt;Easy scalability&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Real-Time Scenario
&lt;/h2&gt;

&lt;p&gt;Our students in Hyderabad often relate to this example:&lt;/p&gt;
&lt;h3&gt;
  
  
  🚗 Vehicle Manufacturing System
&lt;/h3&gt;

&lt;p&gt;Imagine you are building a system for a vehicle company.&lt;/p&gt;

&lt;p&gt;You have multiple vehicle types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Car&lt;/li&gt;
&lt;li&gt;Bike&lt;/li&gt;
&lt;li&gt;Truck&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of creating objects like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You use a factory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;VehicleFactory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getVehicle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CAR"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step-by-Step Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Create an Interface
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;drive&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 2: Create Concrete Classes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;drive&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Driving Car"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Bike&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;drive&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Riding Bike"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Truck&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;drive&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Driving Truck"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 3: Create Factory Class
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;VehicleFactory&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="nf"&gt;getVehicle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toUpperCase&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"CAR"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Car&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"BIKE"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Bike&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"TRUCK"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Truck&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Invalid vehicle type"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 4: Client Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Main&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

        &lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;VehicleFactory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getVehicle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CAR"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;drive&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;VehicleFactory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getVehicle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"BIKE"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;drive&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Expert Explanation
&lt;/h2&gt;

&lt;p&gt;In my experience building enterprise apps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The client doesn’t know which class is instantiated&lt;/li&gt;
&lt;li&gt;Object creation logic is encapsulated in one place&lt;/li&gt;
&lt;li&gt;Easy to extend without modifying client code&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Edge Cases You Must Handle
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ❗ 1. Invalid Input
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;VehicleFactory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getVehicle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PLANE"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Exception&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Always validate input and throw meaningful exceptions&lt;/p&gt;




&lt;h3&gt;
  
  
  ❗ 2. Null Values
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;VehicleFactory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getVehicle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Handle nulls to avoid &lt;code&gt;NullPointerException&lt;/code&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ❗ 3. Too Many Conditions
&lt;/h3&gt;

&lt;p&gt;If you add many types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="n"&gt;becomes&lt;/span&gt; &lt;span class="n"&gt;messy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Solution: Use &lt;strong&gt;Map or Reflection-based factory&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Improved Factory Using Map
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.HashMap&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Map&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.function.Supplier&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BetterVehicleFactory&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Supplier&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Vehicle&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;registry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;

    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;registry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CAR"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;Car:&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;registry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"BIKE"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;Bike:&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;registry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"TRUCK"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;Truck:&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="nf"&gt;getVehicle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Supplier&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Vehicle&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;supplier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;registry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toUpperCase&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;supplier&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;supplier&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Invalid vehicle type"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Key Advantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Loose coupling&lt;/li&gt;
&lt;li&gt; Better code readability&lt;/li&gt;
&lt;li&gt; Easy to add new classes&lt;/li&gt;
&lt;li&gt; Follows Open/Closed Principle&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Disadvantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Adds extra classes&lt;/li&gt;
&lt;li&gt; Can increase complexity for small apps&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Factory vs Singleton (Quick Comparison)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Factory Pattern&lt;/th&gt;
&lt;th&gt;Singleton Pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Purpose&lt;/td&gt;
&lt;td&gt;Object creation&lt;/td&gt;
&lt;td&gt;Single instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flexibility&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Usage&lt;/td&gt;
&lt;td&gt;Multiple objects&lt;/td&gt;
&lt;td&gt;One object only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example&lt;/td&gt;
&lt;td&gt;VehicleFactory&lt;/td&gt;
&lt;td&gt;Logger instance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Where Factory Pattern is Used in Real Projects
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Spring Framework (&lt;code&gt;BeanFactory&lt;/code&gt;, &lt;code&gt;ApplicationContext&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Logging frameworks&lt;/li&gt;
&lt;li&gt;Payment gateway integrations&lt;/li&gt;
&lt;li&gt;Notification systems (Email, SMS, Push)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  When to Use Factory Pattern
&lt;/h2&gt;

&lt;p&gt;Use it when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don’t know exact object type at runtime&lt;/li&gt;
&lt;li&gt;You want to centralize object creation&lt;/li&gt;
&lt;li&gt;You need to follow clean architecture&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  When NOT to Use
&lt;/h2&gt;

&lt;p&gt;Avoid when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Object creation is simple&lt;/li&gt;
&lt;li&gt;Only one class is needed&lt;/li&gt;
&lt;li&gt;Over-engineering small applications&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. What is Factory Pattern in simple terms?
&lt;/h3&gt;

&lt;p&gt;It creates objects without exposing instantiation logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Is Factory Pattern used in Spring?
&lt;/h3&gt;

&lt;p&gt;Yes, Spring internally uses Factory patterns for bean creation.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. What is the difference between Factory and Abstract Factory?
&lt;/h3&gt;

&lt;p&gt;Factory creates one product, Abstract Factory creates families of related objects.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Is Factory Pattern thread-safe?
&lt;/h3&gt;

&lt;p&gt;Depends on implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Can Factory Pattern replace Singleton?
&lt;/h3&gt;

&lt;p&gt;No, both serve different purposes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The Factory Design Pattern is one of the most practical patterns you’ll use in real-world &lt;a href="https://medium.com/@eshikashah2001/exploring-the-factory-method-design-pattern-4d270b6ff935" rel="noopener noreferrer"&gt;Java &lt;/a&gt;development. It improves flexibility, scalability, and maintainability.&lt;/p&gt;

&lt;p&gt;If you want to master design patterns with real-time scenarios and crack interviews confidently, I recommend exploring:&lt;br&gt;
 &lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;https://www.ashokit.in/courses/core-java-online-training&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow the complete roadmap to become a Java Full Stack Developer:&lt;br&gt;
&lt;a href="https://www.ashokit.in/java-full-stack-developer-roadmap" rel="noopener noreferrer"&gt;https://www.ashokit.in/java-full-stack-developer-roadmap&lt;/a&gt;&lt;/p&gt;

</description>
      <category>designpatterns</category>
      <category>java</category>
      <category>factorypattern</category>
    </item>
    <item>
      <title>How Does ConcurrentHashMap Achieve Thread Safety Without Locking the Whole Map</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Thu, 02 Apr 2026 07:04:34 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/how-does-concurrenthashmap-achieve-thread-safety-without-locking-the-whole-map-1he</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/how-does-concurrenthashmap-achieve-thread-safety-without-locking-the-whole-map-1he</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;1. Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;ConcurrentHashMap is a powerful data structure in Java that allows multiple threads to access and modify data safely without locking the entire map. This makes it highly efficient for multi-threaded applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. What is ConcurrentHashMap&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;ConcurrentHashMap is a thread safe version of HashMap that allows concurrent read and write operations without causing data inconsistency.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Thread safe collection.&lt;br&gt;
Supports concurrent access.&lt;br&gt;
High performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. How Thread Safety is Achieved&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.1 Segment Based Locking Before Java 8&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before Java 8, ConcurrentHashMap used segment level locking. The map was divided into multiple segments, and each segment had its own lock.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Locks only a portion of map.&lt;br&gt;
Improves concurrency.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.2 Bucket Level Locking After Java 8&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;After &lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;Java &lt;/a&gt;8, the segment concept was removed. Instead, it uses finer level locking at the bucket level. Only the specific bucket is locked during updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;More granular locking.&lt;br&gt;
Better performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.3 Use of CAS Compare And Swap&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;ConcurrentHashMap uses CAS operations to update values without locking. This is a non-blocking algorithm that ensures thread safety.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Lock free mechanism.&lt;br&gt;
Faster updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.4 Synchronized Blocks on Buckets&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When multiple threads try to modify the same bucket, synchronization is applied only to that bucket instead of the entire map.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Locks only required portion.&lt;br&gt;
Avoids full map locking.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.5 Read Operations Without Locking&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Read operations are mostly lock free, which improves performance significantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Faster reads.&lt;br&gt;
No blocking.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. Internal Working&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When a thread performs a read operation, it directly accesses the data without locking.&lt;br&gt;
When a write operation occurs, only the specific bucket is locked or updated using CAS.&lt;br&gt;
This ensures that multiple threads can work simultaneously without blocking each other.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Efficient concurrency model.&lt;br&gt;
Minimal locking.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5. Advantages of ConcurrentHashMap&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Better performance than synchronized collections.&lt;br&gt;
Allows multiple threads to work simultaneously.&lt;br&gt;
Reduces contention.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6. Common Mistakes to Avoid&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Assuming it is completely lock free.&lt;br&gt;
Using it unnecessarily for single threaded applications.&lt;br&gt;
Not understanding its internal working.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;7. Key Takeaways&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;ConcurrentHashMap uses fine grained locking.&lt;br&gt;
CAS operations improve performance.&lt;br&gt;
Read operations are mostly lock free.&lt;br&gt;
Better than HashMap in multi-threaded environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;8. Useful Resources&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Learn more from the AI powered Core JAVA Online Training in Hyderabad.&lt;br&gt;
&lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;https://www.ashokit.in/courses/core-java-online-training&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow the Java Full Stack Developer Roadmap to become job ready.&lt;br&gt;
&lt;a href="https://www.ashokit.in/java-full-stack-developer-roadmap" rel="noopener noreferrer"&gt;https://www.ashokit.in/java-full-stack-developer-roadmap&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;9. FAQ Section&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9.1 How does ConcurrentHashMap ensure thread safety&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It uses bucket level locking and CAS operations to allow safe concurrent access without locking the entire map.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9.2 What is CAS in ConcurrentHashMap&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;CAS Compare And Swap is a non-blocking algorithm used to update values safely without using locks.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9.3 Are read operations locked in ConcurrentHashMap&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;No, most read operations are lock free, which improves performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9.4 What is the difference between HashMap and ConcurrentHashMap&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;HashMap is not thread safe, while ConcurrentHashMap supports concurrent access with better performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9.5 Is ConcurrentHashMap completely lock free&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;No, it uses minimal locking for write operations but avoids locking the entire map.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;10. Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;ConcurrentHashMap achieves thread safety using advanced techniques like fine grained locking and CAS operations. This allows multiple threads to access and modify data efficiently without performance issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;11. Promotional Content&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Start learning today with the &lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;AI powered Core JAVA Online Training in Hyderabad&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>concurrenthashmap</category>
      <category>thread</category>
      <category>map</category>
    </item>
    <item>
      <title>What are Lambda Expressions?</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Wed, 01 Apr 2026 07:24:46 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/what-are-lambda-expressions-ii6</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/what-are-lambda-expressions-ii6</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;1. Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Lambda expressions are one of the most powerful features introduced in Java 8. They allow you to write cleaner, shorter, and more readable code, especially when working with collections and functional programming concepts.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. What Are Lambda Expressions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A lambda expression is a short block of code that takes input parameters and returns a result. It is mainly used to implement functional interfaces without writing full class definitions.&lt;/p&gt;

&lt;p&gt;In simple terms, lambda expressions help reduce boilerplate code and make &lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;Java &lt;/a&gt;programming more concise.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Syntax&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;java&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"3r5kpa"&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parameters&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;expression&lt;/span&gt;


&lt;span class="n"&gt;or&lt;/span&gt;

&lt;span class="n"&gt;java&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"p7m2vx"&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parameters&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;statements&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Used to write short and clean code&lt;br&gt;
Introduced in Java 8&lt;br&gt;
Works with functional interfaces&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;3. Functional Interface Concept&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A functional interface is an interface that contains only one abstract method. Lambda expressions are used to implement these interfaces.&lt;/p&gt;

&lt;p&gt;Example of a functional interface&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;java&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"z8d1qs"&lt;/span&gt;
&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;MyInterface&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;display&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using lambda expression&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;java&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"y6n4wb"&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LambdaExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;MyInterface&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello Lambda"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Contains only one abstract method&lt;br&gt;
Lambda expressions provide implementation&lt;br&gt;
Simplifies code structure&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;4. Advantages of Lambda Expressions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Lambda expressions provide multiple benefits in Java programming&lt;/p&gt;

&lt;p&gt;Reduces code length&lt;br&gt;
Improves readability&lt;br&gt;
Encourages functional programming&lt;br&gt;
Makes working with collections easier&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;5. Real Time Example Using Lambda Expressions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Sorting a list using lambda&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;java&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"m2k8zn"&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LambdaSortExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Java"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Python"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"C++"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;compareTo&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;

        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Used in collections&lt;br&gt;
Simplifies sorting logic&lt;br&gt;
Improves code clarity&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6. When to Use Lambda Expressions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Use lambda expressions when working with functional interfaces&lt;br&gt;
Use them for short operations like sorting, filtering, and iteration&lt;br&gt;
Avoid using them for complex logic to maintain readability&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;7. Common Mistakes to Avoid&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Using lambda for complex logic reduces readability&lt;br&gt;
Not understanding functional interfaces&lt;br&gt;
Overusing lambda expressions unnecessarily&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;8. Key Takeaways&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Lambda expressions simplify Java code&lt;br&gt;
They work with functional interfaces&lt;br&gt;
They improve readability and maintainability&lt;br&gt;
They are widely used in modern Java applications&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;9. Useful Resources&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Learn more from the No 1 Core JAVA Online Training in ameerpet&lt;br&gt;
&lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;https://www.ashokit.in/courses/core-java-online-training&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow the Java Full Stack Developer Roadmap to become job ready&lt;br&gt;
&lt;a href="https://www.ashokit.in/java-full-stack-developer-roadmap" rel="noopener noreferrer"&gt;https://www.ashokit.in/java-full-stack-developer-roadmap&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;10. FAQ Section&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;10.1 What is a lambda expression in Java&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A lambda expression is a short block of code that takes parameters and returns a value. It is used to implement functional interfaces in a concise way&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;10.2 Why are lambda expressions used in Java&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;They are used to reduce boilerplate code and make programs more readable and efficient&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;10.3 What is a functional interface&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A functional interface is an interface with only one abstract method, which can be implemented using lambda expressions&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;10.4 Can lambda expressions replace methods&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;No, lambda expressions cannot fully replace methods but can simplify implementations of functional interfaces&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;10.5 In which Java version were lambda expressions introduced&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Lambda expressions were introduced in Java 8&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;11. Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Lambda expressions are a key feature in modern Java that help developers write clean and efficient code. By understanding how they work and where to use them, you can significantly improve your coding skills. To gain practical experience and real-time knowledge, consider joining the No 1 Core JAVA Online Training in ameerpet.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;12. Call to Action&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Start learning today with the No 1 Core JAVA Online Training in ameerpet&lt;br&gt;
&lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;https://www.ashokit.in/courses/core-java-online-training&lt;/a&gt;&lt;/p&gt;

</description>
      <category>lambda</category>
      <category>expressions</category>
    </item>
    <item>
      <title>Difference Between Interface and Abstract Class in Java</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Tue, 31 Mar 2026 06:57:21 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/difference-between-interface-and-abstract-class-in-java-21hn</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/difference-between-interface-and-abstract-class-in-java-21hn</guid>
      <description>&lt;h3&gt;
  
  
  1. Introduction
&lt;/h3&gt;

&lt;p&gt;Both &lt;strong&gt;Interface&lt;/strong&gt; and &lt;strong&gt;Abstract Class&lt;/strong&gt; are used to achieve &lt;strong&gt;abstraction&lt;/strong&gt; in &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, but they differ in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design purpose&lt;/li&gt;
&lt;li&gt;Implementation&lt;/li&gt;
&lt;li&gt;Flexibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding this difference is very important for interviews and real-time design.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Abstract Class
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;An &lt;strong&gt;abstract class&lt;/strong&gt; can have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abstract methods (without body)&lt;/li&gt;
&lt;li&gt;Concrete methods (with implementation)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Can have &lt;strong&gt;constructors, variables, and method implementations&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Supports &lt;strong&gt;partial abstraction (0–100%)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;abstract&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;abstract&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;fuel&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Fuel type: Petrol/Diesel"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Vehicle&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Car starts with key"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation of Code
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Vehicle&lt;/code&gt; defines common behavior&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Car&lt;/code&gt; provides implementation for abstract method&lt;/li&gt;
&lt;li&gt;Allows code reuse&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. Interface
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;interface&lt;/strong&gt; provides &lt;strong&gt;100% abstraction&lt;/strong&gt; (traditionally)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abstract methods&lt;/li&gt;
&lt;li&gt;(Java 8+) default and static methods&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Variables are &lt;strong&gt;public static final&lt;/strong&gt; by default&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Supports &lt;strong&gt;multiple inheritance&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Payment&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UpiPayment&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Payment&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Paid using UPI"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation of Code
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Payment&lt;/code&gt; defines contract&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;UpiPayment&lt;/code&gt; implements it&lt;/li&gt;
&lt;li&gt;Focus is on &lt;strong&gt;what to do&lt;/strong&gt;, not how&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Key Differences Table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Abstract Class&lt;/th&gt;
&lt;th&gt;Interface&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Abstraction&lt;/td&gt;
&lt;td&gt;Partial (0–100%)&lt;/td&gt;
&lt;td&gt;100% (mostly)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Methods&lt;/td&gt;
&lt;td&gt;Abstract + Concrete&lt;/td&gt;
&lt;td&gt;Abstract (default/static allowed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variables&lt;/td&gt;
&lt;td&gt;Instance variables allowed&lt;/td&gt;
&lt;td&gt;Only public static final&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constructors&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inheritance&lt;/td&gt;
&lt;td&gt;Single inheritance&lt;/td&gt;
&lt;td&gt;Multiple inheritance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keywords&lt;/td&gt;
&lt;td&gt;&lt;code&gt;extends&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;implements&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Slightly faster&lt;/td&gt;
&lt;td&gt;Slight overhead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use Case&lt;/td&gt;
&lt;td&gt;Common base class&lt;/td&gt;
&lt;td&gt;Contract definition&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  5. Real-Time Use Case
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Abstract Class
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;When classes share &lt;strong&gt;common functionality&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vehicle → Car, Bike&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  Interface
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;When different classes share &lt;strong&gt;common behavior&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Payment → UPI, CreditCard, NetBanking&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  6. When to Use What?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;strong&gt;Abstract Class&lt;/strong&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need &lt;strong&gt;code reuse&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You have a strong &lt;strong&gt;is-a relationship&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Use &lt;strong&gt;Interface&lt;/strong&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want &lt;strong&gt;loose coupling&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;multiple inheritance&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You define a &lt;strong&gt;contract&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  7. Summary
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Abstract Class&lt;/strong&gt; → Partial abstraction + implementation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface&lt;/strong&gt; → Full abstraction + contract&lt;/li&gt;
&lt;li&gt;Abstract class = “IS-A” relationship&lt;/li&gt;
&lt;li&gt;Interface = “CAN-DO” capability&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Java Full Stack Developer Roadmap
&lt;/h2&gt;

&lt;p&gt;To master OOP concepts like interfaces and abstract classes:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.ashokit.in/java-full-stack-developer-roadmap" rel="noopener noreferrer"&gt;https://www.ashokit.in/java-full-stack-developer-roadmap&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Promotional Content
&lt;/h2&gt;

&lt;p&gt;Want to master OOP concepts like Interface vs Abstract Class?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Best Core JAVA Online Training in ameerpet&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>interface</category>
      <category>abstract</category>
      <category>java</category>
    </item>
    <item>
      <title>Difference Between Checked and Unchecked Exceptions in Java</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Mon, 30 Mar 2026 07:27:49 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/difference-between-checked-and-unchecked-exceptions-in-java-4noa</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/difference-between-checked-and-unchecked-exceptions-in-java-4noa</guid>
      <description>&lt;h3&gt;
  
  
  1. Introduction
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://ashokitech.com/core-java-online-training" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, exceptions are categorized into two main types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Checked Exceptions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unchecked Exceptions&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key difference lies in &lt;strong&gt;when they are checked&lt;/strong&gt; (compile-time vs runtime) and &lt;strong&gt;how they are handled&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Checked Exceptions
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Checked exceptions are &lt;strong&gt;checked at compile-time&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The compiler &lt;strong&gt;forces you to handle&lt;/strong&gt; them using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;try-catch&lt;/code&gt; block OR&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;throws&lt;/code&gt; keyword&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;These exceptions represent &lt;strong&gt;recoverable conditions&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  Common Examples
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;IOException&lt;/li&gt;
&lt;li&gt;SQLException&lt;/li&gt;
&lt;li&gt;FileNotFoundException&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.io.FileReader&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CheckedExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;FileReader&lt;/span&gt; &lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FileReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"test.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"File not found"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation of Code
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;FileReader&lt;/code&gt; may throw &lt;code&gt;FileNotFoundException&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Compiler forces handling using &lt;code&gt;try-catch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Without handling → compilation error.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. Unchecked Exceptions
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Unchecked exceptions are &lt;strong&gt;checked at runtime&lt;/strong&gt;, not at compile-time.&lt;/li&gt;
&lt;li&gt;The compiler &lt;strong&gt;does NOT force you to handle them&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;They usually occur due to &lt;strong&gt;programming mistakes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Common Examples
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;NullPointerException&lt;/li&gt;
&lt;li&gt;ArithmeticException&lt;/li&gt;
&lt;li&gt;ArrayIndexOutOfBoundsException&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UncheckedExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation of Code
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Division by zero causes &lt;code&gt;ArithmeticException&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Compiler allows it, but error occurs at runtime.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Key Differences Table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Checked Exceptions&lt;/th&gt;
&lt;th&gt;Unchecked Exceptions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Checked At&lt;/td&gt;
&lt;td&gt;Compile-time&lt;/td&gt;
&lt;td&gt;Runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handling Required&lt;/td&gt;
&lt;td&gt;Yes (Mandatory)&lt;/td&gt;
&lt;td&gt;No (Optional)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parent Class&lt;/td&gt;
&lt;td&gt;Exception (excluding RuntimeException)&lt;/td&gt;
&lt;td&gt;RuntimeException&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cause&lt;/td&gt;
&lt;td&gt;External issues (I/O, DB)&lt;/td&gt;
&lt;td&gt;Programming errors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example&lt;/td&gt;
&lt;td&gt;IOException&lt;/td&gt;
&lt;td&gt;NullPointerException&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  5. Code Comparison
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Checked Exception&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.io.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Test&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;readFile&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;IOException&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;FileReader&lt;/span&gt; &lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FileReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"abc.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Unchecked Exception&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Test2&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;divide&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;readFile()&lt;/code&gt; must declare &lt;code&gt;throws IOException&lt;/code&gt; → Checked&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;divide()&lt;/code&gt; compiles fine but fails at runtime → Unchecked&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  6. When to Use What?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;strong&gt;Checked Exceptions&lt;/strong&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The error is &lt;strong&gt;recoverable&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You want the caller to handle it&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Use &lt;strong&gt;Unchecked Exceptions&lt;/strong&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The error is due to &lt;strong&gt;logic mistakes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;It cannot be reasonably recovered&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  7. Summary
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Checked Exceptions&lt;/strong&gt; → Compile-time, must handle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unchecked Exceptions&lt;/strong&gt; → Runtime, optional handling&lt;/li&gt;
&lt;li&gt;Checked = predictable &amp;amp; recoverable&lt;/li&gt;
&lt;li&gt;Unchecked = programming errors&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Java Full Stack Developer Roadmap
&lt;/h2&gt;

&lt;p&gt;To master exception handling and advanced Java concepts:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.ashokit.in/java-full-stack-developer-roadmap" rel="noopener noreferrer"&gt;https://www.ashokit.in/java-full-stack-developer-roadmap&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Promotional Content
&lt;/h2&gt;

&lt;p&gt;Want to master Java Exception Handling and crack interviews?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training" rel="noopener noreferrer"&gt;Top Core JAVA Online Training in 2026&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>checked</category>
      <category>exceptions</category>
      <category>unchecked</category>
      <category>java</category>
    </item>
    <item>
      <title>What are Best Practices to Improve Performance?</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Sat, 28 Mar 2026 07:01:38 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/what-are-best-practices-to-improve-performance-2cda</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/what-are-best-practices-to-improve-performance-2cda</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Why Performance Optimization Matters&lt;/li&gt;
&lt;li&gt;Key Best Practices to Improve Performance&lt;/li&gt;
&lt;li&gt;Backend Optimization Techniques&lt;/li&gt;
&lt;li&gt;Database Optimization&lt;/li&gt;
&lt;li&gt;Frontend Optimization&lt;/li&gt;
&lt;li&gt;Real-Time Example&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1. Introduction
&lt;/h2&gt;

&lt;p&gt;In today’s fast-paced digital world, users expect applications to respond instantly. Slow applications lead to poor user experience and loss of business. Performance optimization helps in building fast, reliable, and scalable systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Why Performance Optimization Matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Faster response time&lt;/li&gt;
&lt;li&gt; Better scalability&lt;/li&gt;
&lt;li&gt; Efficient resource utilization&lt;/li&gt;
&lt;li&gt; Improved user experience&lt;/li&gt;
&lt;li&gt; Reduced infrastructure cost&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Key Best Practices to Improve Performance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use Caching
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Store frequently accessed data in memory (e.g., Redis)&lt;/li&gt;
&lt;li&gt;Reduce repeated database calls&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Optimize Algorithms &amp;amp; Data Structures
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Choose efficient algorithms&lt;/li&gt;
&lt;li&gt;Avoid unnecessary loops and computations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Use Asynchronous Processing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use multi-threading or async calls&lt;/li&gt;
&lt;li&gt;Avoid blocking operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Minimize Resource Usage
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Optimize memory and CPU usage&lt;/li&gt;
&lt;li&gt;Remove unused objects and code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Profiling &amp;amp; Monitoring
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use tools to analyze performance bottlenecks&lt;/li&gt;
&lt;li&gt;Continuously monitor application metrics&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Backend Optimization Techniques
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;connection pooling&lt;/strong&gt; for database access&lt;/li&gt;
&lt;li&gt;Implement &lt;strong&gt;lazy initialization&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;microservices architecture&lt;/strong&gt; where needed&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;compression (GZIP)&lt;/strong&gt; for APIs&lt;/li&gt;
&lt;li&gt;Implement &lt;strong&gt;rate limiting&lt;/strong&gt; to control traffic&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Database Optimization
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Use proper indexing&lt;/li&gt;
&lt;li&gt; Optimize SQL queries&lt;/li&gt;
&lt;li&gt; Avoid unnecessary joins&lt;/li&gt;
&lt;li&gt; Use connection pooling&lt;/li&gt;
&lt;li&gt; Partition large tables&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Frontend Optimization
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Minify CSS, JS, and HTML&lt;/li&gt;
&lt;li&gt; Optimize images&lt;/li&gt;
&lt;li&gt; Use CDN for static content&lt;/li&gt;
&lt;li&gt; Lazy load images and components&lt;/li&gt;
&lt;li&gt; Reduce HTTP requests&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Real-Time Example
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scenario:
&lt;/h3&gt;

&lt;p&gt;A web application experiences slow response times.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implement Redis caching → Faster data access&lt;/li&gt;
&lt;li&gt;Use connection pooling → Reduced DB overhead&lt;/li&gt;
&lt;li&gt;Optimize queries → Faster execution&lt;/li&gt;
&lt;li&gt;Add CDN → Faster content delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved performance&lt;/li&gt;
&lt;li&gt;Better user experience&lt;/li&gt;
&lt;li&gt;Increased scalability&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Conclusion
&lt;/h2&gt;

&lt;p&gt;Performance optimization is not a one-time task but an ongoing process. By applying best practices such as caching, efficient coding, database tuning, and monitoring, developers can build high-performing and scalable applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use caching to reduce load&lt;/li&gt;
&lt;li&gt;Optimize code and database queries&lt;/li&gt;
&lt;li&gt;Implement connection pooling&lt;/li&gt;
&lt;li&gt;Monitor and improve continuously&lt;/li&gt;
&lt;li&gt;Focus on both frontend and backend performance&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Promotional Content
&lt;/h2&gt;

&lt;p&gt;If you want to master performance optimization techniques, Java backend development, and real-time projects, this is the right time to upgrade your skills.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Top Core JAVA Online Training in 2026&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Java Full Stack Developer Roadmap
&lt;/h2&gt;

&lt;p&gt;Want to become a complete Java developer?&lt;/p&gt;

&lt;p&gt;👉 Follow this step-by-step roadmap:&lt;br&gt;
🔗 &lt;a href="https://www.ashokit.in/java-full-stack-developer-roadmap" rel="noopener noreferrer"&gt;https://www.ashokit.in/java-full-stack-developer-roadmap&lt;/a&gt;&lt;/p&gt;

</description>
      <category>performance</category>
      <category>bestpractices</category>
      <category>java</category>
      <category>backendoptimization</category>
    </item>
    <item>
      <title>What is idempotent API?</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Fri, 27 Mar 2026 07:02:02 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/what-is-idempotent-api-520p</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/what-is-idempotent-api-520p</guid>
      <description>&lt;p&gt;An &lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Idempotent &lt;/a&gt;API&lt;/strong&gt; is an API where &lt;strong&gt;making the same request multiple times produces the same result as making it once&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉 In simple terms:&lt;br&gt;
&lt;strong&gt;Repeat the request any number of times — the outcome won’t change.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Simple Definition
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Idempotency = Same request → Same result (no side effects after first call)&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Idempotent Operation
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;PUT /users/101
{
  "name": "Harish"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;First request → updates user name&lt;/li&gt;
&lt;li&gt;Second request → still "Harish" (no extra change)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✔ Result remains the same&lt;/p&gt;


&lt;h3&gt;
  
  
  Non-Idempotent Operation
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /users
{
  "name": "Harish"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;First request → creates user (ID: 101)&lt;/li&gt;
&lt;li&gt;Second request → creates another user (ID: 102)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different result each time&lt;/p&gt;


&lt;h2&gt;
  
  
  Idempotent vs Non-Idempotent
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Idempotent API ✅&lt;/th&gt;
&lt;th&gt;Non-Idempotent API ❌&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Multiple Requests&lt;/td&gt;
&lt;td&gt;Same result&lt;/td&gt;
&lt;td&gt;Different results&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Side Effects&lt;/td&gt;
&lt;td&gt;No additional effect&lt;/td&gt;
&lt;td&gt;Creates/changes data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example Methods&lt;/td&gt;
&lt;td&gt;GET, PUT, DELETE&lt;/td&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  HTTP Methods and Idempotency
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✔ Idempotent Methods:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GET&lt;/strong&gt; → Fetch data (no change)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PUT&lt;/strong&gt; → Update/replace resource&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DELETE&lt;/strong&gt; → Remove resource (once removed, same result)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Non-Idempotent:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;POST&lt;/strong&gt; → Creates new resource each time&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Real-Time Example
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Payment API 💳
&lt;/h3&gt;

&lt;p&gt;Imagine a payment request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /pay
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If not idempotent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple clicks → Multiple charges 😱&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If idempotent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only one payment processed ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 That’s why &lt;strong&gt;idempotency is critical in real-world systems&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Idempotency Key
&lt;/h2&gt;

&lt;p&gt;To make APIs idempotent (especially POST), systems use an &lt;strong&gt;Idempotency Key&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /pay
Idempotency-Key: 12345
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Same key → Same response&lt;/li&gt;
&lt;li&gt;Prevents duplicate processing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Benefits of Idempotent APIs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Prevents duplicate operations&lt;/li&gt;
&lt;li&gt;Safe retries (network failures)&lt;/li&gt;
&lt;li&gt;Improves system reliability&lt;/li&gt;
&lt;li&gt;Essential for distributed systems&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Important Note
&lt;/h2&gt;

&lt;p&gt;Even if response status differs (like 200 vs 404),&lt;br&gt;
👉 &lt;strong&gt;The system state must remain the same&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;Idempotent API&lt;/strong&gt; ensures that repeating the same request does not cause unintended side effects. It’s a key concept in building &lt;strong&gt;robust, fault-tolerant systems&lt;/strong&gt;, especially in microservices and payment systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;p&gt;Want to master REST APIs, Java backend development, and real-time projects?&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;No 1 Core JAVA Online Training in 2026&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




</description>
      <category>idempotent</category>
      <category>api</category>
    </item>
    <item>
      <title>What is Gradle?</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Thu, 26 Mar 2026 06:54:32 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/what-is-gradle-lb3</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/what-is-gradle-lb3</guid>
      <description>&lt;p&gt;In modern Java development, build automation tools play a crucial role in managing dependencies, compiling code, and packaging applications. While tools like Maven are widely used, &lt;strong&gt;Gradle&lt;/strong&gt; has gained popularity due to its flexibility and performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔹 What is Gradle?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Gradle&lt;/strong&gt; is an open-source build automation tool used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automating project builds&lt;/li&gt;
&lt;li&gt;Managing dependencies&lt;/li&gt;
&lt;li&gt;Supporting multiple programming languages (&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, Kotlin, Groovy, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It combines the best features of tools like &lt;strong&gt;Apache Maven&lt;/strong&gt; and &lt;strong&gt;Apache Ant&lt;/strong&gt;, while offering more flexibility and faster builds.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔹 Key Features of Gradle
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ 1. Groovy &amp;amp; Kotlin DSL
&lt;/h3&gt;

&lt;p&gt;Gradle uses &lt;strong&gt;Groovy&lt;/strong&gt; or &lt;strong&gt;Kotlin DSL&lt;/strong&gt; instead of XML.&lt;/p&gt;

&lt;p&gt;📌 Example (build.gradle):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;groovy&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"u4x3xk"&lt;/span&gt;
&lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s1"&gt;'org.springframework:spring-core:5.3.0'&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;👉 Easier to read and write compared to XML-based configurations.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ 2. Dependency Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Automatically downloads required libraries&lt;/li&gt;
&lt;li&gt;Uses repositories like Maven Central&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Similar to Maven but more flexible.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ 3. Incremental Builds (Faster Performance)
&lt;/h3&gt;

&lt;p&gt;Gradle only rebuilds the parts of the project that have changed.&lt;/p&gt;

&lt;p&gt;👉 This makes builds &lt;strong&gt;much faster&lt;/strong&gt; than traditional tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ 4. Highly Customizable
&lt;/h3&gt;

&lt;p&gt;You can customize build logic using code instead of rigid configurations.&lt;/p&gt;

&lt;p&gt;👉 Ideal for complex enterprise applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ 5. Multi-Project Support
&lt;/h3&gt;

&lt;p&gt;Gradle is perfect for large projects with multiple modules.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔹 Gradle vs Maven
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Gradle&lt;/th&gt;
&lt;th&gt;Maven&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Configuration&lt;/td&gt;
&lt;td&gt;Groovy/Kotlin (code-based)&lt;/td&gt;
&lt;td&gt;XML (pom.xml)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Faster (incremental builds)&lt;/td&gt;
&lt;td&gt;Slower (full builds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flexibility&lt;/td&gt;
&lt;td&gt;Highly flexible&lt;/td&gt;
&lt;td&gt;Less flexible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning Curve&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🔹 Build Lifecycle in Gradle
&lt;/h2&gt;

&lt;p&gt;Gradle has three main phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Initialization&lt;/strong&gt; – Identifies project structure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configuration&lt;/strong&gt; – Loads build scripts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution&lt;/strong&gt; – Runs tasks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👉 Example command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"t9n5hv"&lt;/span&gt;
gradle build

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔹 Real-Time Example
&lt;/h2&gt;

&lt;p&gt;If you're building a Spring Boot application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gradle allows faster builds during development&lt;/li&gt;
&lt;li&gt;You can easily customize tasks&lt;/li&gt;
&lt;li&gt;Supports modern DevOps workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 This makes it a preferred choice in many companies.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔹 Why Use Gradle?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;⚡ Faster builds with incremental execution&lt;/li&gt;
&lt;li&gt;🧩 Flexible and customizable&lt;/li&gt;
&lt;li&gt;📦 Efficient dependency management&lt;/li&gt;
&lt;li&gt;🚀 Ideal for large-scale applications&lt;/li&gt;
&lt;li&gt;🔧 Supports modern development practices&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔹 Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Gradle&lt;/strong&gt; is a powerful and modern build tool that improves productivity and performance in Java development. With its flexible configuration and faster execution, it has become a preferred choice for many developers and organizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Promotional Content
&lt;/h2&gt;

&lt;p&gt;Want to master build tools like Gradle and Maven along with Core Java?&lt;/p&gt;

&lt;p&gt;👉 Join the &lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Best Core JAVA Online Training in 2026&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>gradle</category>
      <category>automation</category>
      <category>groovy</category>
    </item>
    <item>
      <title>Difference between TCP vs UDP in Java</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Wed, 25 Mar 2026 07:10:39 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/difference-between-tcp-vs-udp-in-java-1mja</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/difference-between-tcp-vs-udp-in-java-1mja</guid>
      <description>&lt;p&gt;When working with networking in Java, two fundamental protocols are &lt;strong&gt;TCP (Transmission Control Protocol)&lt;/strong&gt; and &lt;strong&gt;UDP (User Datagram Protocol)&lt;/strong&gt;. Both are used in socket programming, but they differ in how they send and receive data.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 What is TCP?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TCP (Transmission Control Protocol)&lt;/strong&gt; is a &lt;strong&gt;connection-oriented protocol&lt;/strong&gt; that ensures reliable communication between client and server.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ Key Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reliable (guarantees delivery)&lt;/li&gt;
&lt;li&gt;Data is sent in order&lt;/li&gt;
&lt;li&gt;Error checking and recovery&lt;/li&gt;
&lt;li&gt;Slower due to overhead&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔹 &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java &lt;/a&gt;Classes:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Socket&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ServerSocket&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📌 What is UDP?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;UDP (User Datagram Protocol)&lt;/strong&gt; is a &lt;strong&gt;connectionless protocol&lt;/strong&gt; that sends data without establishing a connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ Key Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Faster communication&lt;/li&gt;
&lt;li&gt;No guarantee of delivery&lt;/li&gt;
&lt;li&gt;No order of packets&lt;/li&gt;
&lt;li&gt;Lightweight protocol&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔹 Java Classes:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DatagramSocket&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DatagramPacket&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 TCP vs UDP (Key Differences)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;TCP&lt;/th&gt;
&lt;th&gt;UDP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;Connection-oriented&lt;/td&gt;
&lt;td&gt;Connectionless&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reliability&lt;/td&gt;
&lt;td&gt;High (guaranteed delivery)&lt;/td&gt;
&lt;td&gt;Low (no guarantee)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speed&lt;/td&gt;
&lt;td&gt;Slower&lt;/td&gt;
&lt;td&gt;Faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Order&lt;/td&gt;
&lt;td&gt;Maintained&lt;/td&gt;
&lt;td&gt;Not maintained&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error Handling&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overhead&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Communication&lt;/td&gt;
&lt;td&gt;Continuous stream&lt;/td&gt;
&lt;td&gt;Packets (datagrams)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🔥 Example in Java
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ TCP (Client Connection)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Socket&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Socket&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"localhost"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1234&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ UDP (Datagram)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;DatagramSocket&lt;/span&gt; &lt;span class="n"&gt;ds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DatagramSocket&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🎯 When to Use TCP vs UDP?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Use TCP when:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Data accuracy is important&lt;/li&gt;
&lt;li&gt;File transfer systems&lt;/li&gt;
&lt;li&gt;Web applications (HTTP/HTTPS)&lt;/li&gt;
&lt;li&gt;Banking systems&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Use UDP when:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Speed is more important than reliability&lt;/li&gt;
&lt;li&gt;Live streaming 🎥&lt;/li&gt;
&lt;li&gt;Online gaming 🎮&lt;/li&gt;
&lt;li&gt;Voice/video calls 📞&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚡ Real-Time Analogy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;TCP&lt;/strong&gt; = Courier service with tracking (safe &amp;amp; reliable)&lt;/li&gt;
&lt;li&gt;📮 &lt;strong&gt;UDP&lt;/strong&gt; = Normal post (fast but no guarantee)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Conclusion
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TCP → Reliable but slower&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UDP → Fast but less reliable&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both protocols are crucial in networking, and knowing when to use each one is a key skill for Java developers.&lt;/p&gt;

&lt;p&gt;Mastering these concepts is important if you're preparing for real-time development and interviews through &lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Top Core JAVA Online Training in Hyderabad&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>tcp</category>
      <category>udp</category>
      <category>java</category>
    </item>
    <item>
      <title>Difference Between `List&lt;Object&gt;` vs `List&lt;?&gt;` in Java</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Tue, 24 Mar 2026 06:49:58 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/difference-between-list-vs-list-in-java-64l</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/difference-between-list-vs-list-in-java-64l</guid>
      <description>&lt;p&gt;This is one of the most commonly asked questions in &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java &lt;/a&gt;Generics interviews. At first glance, both may look similar—but they behave very differently.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 &lt;code&gt;List&amp;lt;Object&amp;gt;&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;List&amp;lt;Object&amp;gt;&lt;/code&gt; means a list that can hold &lt;strong&gt;only &lt;code&gt;Object&lt;/code&gt; type (and its subclasses explicitly added as Object)&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Example:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Java"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;10.5&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✔ Key Characteristics:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You can &lt;strong&gt;add any type of object&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You can &lt;strong&gt;read as Object&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;It is a &lt;strong&gt;specific type&lt;/strong&gt;, not flexible&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 &lt;code&gt;List&amp;lt;?&amp;gt;&lt;/code&gt; (Wildcard)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;List&amp;lt;?&amp;gt;&lt;/code&gt; means a list of &lt;strong&gt;unknown type&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Example:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✔ Key Characteristics:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It can point to &lt;strong&gt;any type of list&lt;/strong&gt; (&lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt;, &lt;code&gt;List&amp;lt;Integer&amp;gt;&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;You &lt;strong&gt;cannot add elements&lt;/strong&gt; (except &lt;code&gt;null&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;You can &lt;strong&gt;only read values as Object&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 Core Difference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;&lt;code&gt;List&amp;lt;Object&amp;gt;&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;List&amp;lt;?&amp;gt;&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;Specific type&lt;/td&gt;
&lt;td&gt;Unknown type (Wildcard)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can hold&lt;/td&gt;
&lt;td&gt;Only Object list&lt;/td&gt;
&lt;td&gt;Any type of list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add elements&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;❌ No (except null)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read elements&lt;/td&gt;
&lt;td&gt;As Object&lt;/td&gt;
&lt;td&gt;As Object&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flexibility&lt;/td&gt;
&lt;td&gt;❌ Less flexible&lt;/td&gt;
&lt;td&gt;✅ More flexible&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔹 Important Concept
&lt;/h2&gt;

&lt;p&gt;👉 &lt;code&gt;List&amp;lt;Object&amp;gt;&lt;/code&gt; is &lt;strong&gt;not the parent&lt;/strong&gt; of &lt;code&gt;List&amp;lt;String&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;();&lt;/span&gt; &lt;span class="c1"&gt;// ❌ Compile-time error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 But wildcard works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;();&lt;/span&gt; &lt;span class="c1"&gt;// ✅ Valid&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 Real-Time Understanding
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;List&amp;lt;Object&amp;gt;&lt;/code&gt;&lt;/strong&gt; when you want to &lt;strong&gt;store different types in the same list&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;List&amp;lt;?&amp;gt;&lt;/code&gt;&lt;/strong&gt; when you want to &lt;strong&gt;accept any type of list as input (read-only)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 Interview Tip
&lt;/h2&gt;

&lt;p&gt;👉 If the question is about &lt;strong&gt;flexibility → use &lt;code&gt;?&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
👉 If the question is about &lt;strong&gt;storing mixed data → use &lt;code&gt;Object&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Understanding the difference between &lt;code&gt;List&amp;lt;Object&amp;gt;&lt;/code&gt; and &lt;code&gt;List&amp;lt;?&amp;gt;&lt;/code&gt; helps you write more flexible and type-safe Java code, especially when working with APIs and collections.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;No 1 Core JAVA Online Training in Hyderabad&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>object</category>
      <category>list</category>
      <category>java</category>
    </item>
    <item>
      <title>What Are Varargs in Java? A Complete Guide</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Mon, 23 Mar 2026 06:32:54 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/what-are-varargs-in-java-a-complete-guide-4pin</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/what-are-varargs-in-java-a-complete-guide-4pin</guid>
      <description>&lt;p&gt;In Java, there are situations where you don’t know how many arguments a method will receive. Instead of writing multiple overloaded methods, &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java &lt;/a&gt;provides a flexible feature called &lt;strong&gt;Varargs (Variable Arguments)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let’s understand how varargs work and why they are useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 What Are Varargs?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Varargs&lt;/strong&gt; allow a method to accept &lt;strong&gt;zero or more arguments&lt;/strong&gt; of the same type.&lt;/p&gt;

&lt;p&gt;👉 It is declared using three dots &lt;code&gt;...&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Syntax:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;methodName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datatype&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;variableName&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// method body&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 Simple Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Test&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;printNumbers&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printNumbers&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;printNumbers&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;printNumbers&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// no arguments&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 The method works with any number of arguments!&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 How Varargs Work Internally
&lt;/h2&gt;

&lt;p&gt;Behind the scenes, Java converts varargs into an &lt;strong&gt;array&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;method&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 is internally treated as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;method&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 Rules of Varargs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ 1. Only One Varargs Parameter Allowed
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="err"&gt;❌&lt;/span&gt; &lt;span class="c1"&gt;// not allowed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ✅ 2. Must Be the Last Parameter
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="err"&gt;✅&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="err"&gt;❌&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ✅ 3. Can Be Combined with Normal Parameters
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;display&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;marks&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;marks&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 Varargs vs Method Overloading
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Without Varargs:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  With Varargs:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Cleaner and reduces code duplication.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 Real-Time Use Cases
&lt;/h2&gt;

&lt;p&gt;Varargs are commonly used in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logging frameworks&lt;/li&gt;
&lt;li&gt;Utility methods&lt;/li&gt;
&lt;li&gt;Print and formatting functions&lt;/li&gt;
&lt;li&gt;APIs where input size is dynamic&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 Advantages of Varargs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Flexible number of arguments&lt;/li&gt;
&lt;li&gt;✅ Cleaner and shorter code&lt;/li&gt;
&lt;li&gt;✅ Reduces method overloading&lt;/li&gt;
&lt;li&gt;✅ Easy to use&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ Disadvantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;❌ Slight performance overhead (array creation)&lt;/li&gt;
&lt;li&gt;❌ Can cause ambiguity with method overloading&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Varargs make Java methods more flexible and developer-friendly. They are especially useful when dealing with dynamic input sizes and help keep your code clean and maintainable.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Learn More – Upgrade Your Java Skills
&lt;/h2&gt;

&lt;p&gt;Join the &lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Best Core JAVA Online Training in Hyderabad&lt;/a&gt;&lt;/strong&gt; and gain hands-on experience with real-time projects, expert mentorship, and interview preparation.&lt;/p&gt;

</description>
      <category>varargs</category>
      <category>java</category>
    </item>
    <item>
      <title>PermGen vs Metaspace in Java (Simple Explanation) |</title>
      <dc:creator>Aswin Arya</dc:creator>
      <pubDate>Sat, 21 Mar 2026 06:39:21 +0000</pubDate>
      <link>https://dev.to/aswin_arya_89918234fee18f/permgen-vs-metaspace-in-java-simple-explanation--4e80</link>
      <guid>https://dev.to/aswin_arya_89918234fee18f/permgen-vs-metaspace-in-java-simple-explanation--4e80</guid>
      <description>&lt;p&gt;If you're learning JVM internals through &lt;strong&gt;Top Core JAVA Online Training&lt;/strong&gt;, one of the most important concepts to understand is the difference between &lt;strong&gt;PermGen&lt;/strong&gt; and &lt;strong&gt;Metaspace&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This topic is frequently asked in interviews and is crucial for performance tuning.&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 What is PermGen (Permanent Generation)?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PermGen&lt;/strong&gt; is a special memory space in the JVM (before Java 8) used to store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Class metadata&lt;/li&gt;
&lt;li&gt;Method information&lt;/li&gt;
&lt;li&gt;Static variables&lt;/li&gt;
&lt;li&gt;String pool (in older versions)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Problem with PermGen
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fixed size (configured using &lt;code&gt;-XX:MaxPermSize&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Can easily cause:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;java.lang.OutOfMemoryError: PermGen space
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 This was a common issue in Java 6 &amp;amp; Java 7.&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 What is Metaspace?
&lt;/h2&gt;

&lt;p&gt;Starting from &lt;strong&gt;Java 8&lt;/strong&gt;, PermGen was completely removed and replaced with &lt;strong&gt;Metaspace&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Metaspace stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Class metadata&lt;/li&gt;
&lt;li&gt;Runtime constant pool&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Key Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;native memory (not heap)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Automatically resizes&lt;/li&gt;
&lt;li&gt;Reduces memory errors&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔍 Key Differences: PermGen vs Metaspace
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;PermGen (Java ≤7)&lt;/th&gt;
&lt;th&gt;Metaspace (Java 8+)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Memory Location&lt;/td&gt;
&lt;td&gt;JVM Heap&lt;/td&gt;
&lt;td&gt;Native Memory (OS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Size&lt;/td&gt;
&lt;td&gt;Fixed&lt;/td&gt;
&lt;td&gt;Dynamic (auto-expand)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tuning&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-XX:MaxPermSize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-XX:MaxMetaspaceSize&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Removal&lt;/td&gt;
&lt;td&gt;Present&lt;/td&gt;
&lt;td&gt;Replaced PermGen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Errors&lt;/td&gt;
&lt;td&gt;Frequent OOM&lt;/td&gt;
&lt;td&gt;Less frequent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  💡 Why Java Replaced PermGen?
&lt;/h2&gt;

&lt;p&gt;PermGen had major limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Difficult memory tuning&lt;/li&gt;
&lt;li&gt;Frequent OutOfMemory errors&lt;/li&gt;
&lt;li&gt;Poor scalability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Metaspace solved these problems&lt;/strong&gt; by using native memory and dynamic allocation.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Real-Time Scenario
&lt;/h2&gt;

&lt;p&gt;In applications like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spring Boot&lt;/li&gt;
&lt;li&gt;Microservices&lt;/li&gt;
&lt;li&gt;Dynamic class loading&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 PermGen issues were very common.&lt;/p&gt;

&lt;p&gt;With Metaspace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better memory handling&lt;/li&gt;
&lt;li&gt;Improved performance&lt;/li&gt;
&lt;li&gt;Fewer crashes&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ Useful JVM Options
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;-XX&lt;/span&gt;:MetaspaceSize&lt;span class="o"&gt;=&lt;/span&gt;128m
&lt;span class="nt"&gt;-XX&lt;/span&gt;:MaxMetaspaceSize&lt;span class="o"&gt;=&lt;/span&gt;512m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 These help control Metaspace usage in production.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Interview Tip
&lt;/h2&gt;

&lt;p&gt;👉 A common question:&lt;br&gt;
&lt;strong&gt;Why was PermGen removed in Java 8?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✔️ Answer:&lt;br&gt;
Because of memory limitations and frequent OutOfMemory errors — replaced by Metaspace which uses native memory and grows dynamically.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Learn More Java Internals
&lt;/h2&gt;

&lt;p&gt;If you want to master JVM concepts, memory management, and real-time Java development:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;https://ashokitech.com/core-java-online-training/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Understanding &lt;strong&gt;PermGen vs Metaspace&lt;/strong&gt; is essential for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JVM tuning&lt;/li&gt;
&lt;li&gt;Debugging memory issues&lt;/li&gt;
&lt;li&gt;Cracking Java interviews&lt;/li&gt;
&lt;/ul&gt;

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