<?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: Sharath Kumar</title>
    <description>The latest articles on DEV Community by Sharath Kumar (@sharath_kumar_ec951693318).</description>
    <link>https://dev.to/sharath_kumar_ec951693318</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%2F3766354%2F2b53230a-0652-48f7-ae01-454f237f457d.png</url>
      <title>DEV Community: Sharath Kumar</title>
      <link>https://dev.to/sharath_kumar_ec951693318</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sharath_kumar_ec951693318"/>
    <language>en</language>
    <item>
      <title>We Should Write Java Code Differently: A Frictionless Production Guide for Modern Developers</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Thu, 09 Apr 2026 12:07:38 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/we-should-write-java-code-differently-a-frictionless-production-guide-for-modern-developers-3bfa</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/we-should-write-java-code-differently-a-frictionless-production-guide-for-modern-developers-3bfa</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Most Java developers write code that &lt;em&gt;works&lt;/em&gt;—but not code that &lt;em&gt;lasts&lt;/em&gt;. The gap between writing code and delivering production-ready systems is where most careers stall.&lt;/p&gt;

&lt;p&gt;In my decade of teaching &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, I’ve seen this pattern repeatedly: developers struggle not because they lack syntax knowledge, but because they lack &lt;strong&gt;production thinking&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Our students in Hyderabad often face challenges like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code that breaks under load&lt;/li&gt;
&lt;li&gt;Poor readability and maintainability&lt;/li&gt;
&lt;li&gt;Lack of real-world design patterns&lt;/li&gt;
&lt;li&gt;Difficulty transitioning from learning to working&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s fix that.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Does “Frictionless Production Java” Really Mean?
&lt;/h1&gt;

&lt;p&gt;Frictionless Java code is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to read and maintain&lt;/li&gt;
&lt;li&gt;Resilient to edge cases&lt;/li&gt;
&lt;li&gt;Scalable under real-world load&lt;/li&gt;
&lt;li&gt;Testable and modular&lt;/li&gt;
&lt;li&gt;Optimized without premature complexity&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Problem: Why Most Java Code Fails in Production
&lt;/h1&gt;

&lt;p&gt;Even experienced developers make these mistakes:&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Pitfalls
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Writing monolithic methods&lt;/li&gt;
&lt;li&gt;Ignoring null safety&lt;/li&gt;
&lt;li&gt;Poor exception handling&lt;/li&gt;
&lt;li&gt;Tight coupling between classes&lt;/li&gt;
&lt;li&gt;Lack of logging and monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Real Impact
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bugs in production&lt;/li&gt;
&lt;li&gt;Slow performance&lt;/li&gt;
&lt;li&gt;Difficult debugging&lt;/li&gt;
&lt;li&gt;Failed deployments&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Solution: Write Java Like a Production Engineer
&lt;/h1&gt;

&lt;p&gt;Let’s break down &lt;strong&gt;5 key coding practices&lt;/strong&gt; with real examples.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Handle Nulls Like a Pro (Avoid NullPointerException)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bad Practice
&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="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getUserName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="n"&gt;user&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;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getName&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Production-Ready Approach
&lt;/h3&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.Optional&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getUserName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="n"&gt;user&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="nc"&gt;Optional&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofNullable&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                   &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;User:&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;getName&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                   &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;String:&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;toUpperCase&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                   &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;orElse&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"UNKNOWN"&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;
  
  
  Expert Insight
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Avoid direct null access&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;Optional&lt;/code&gt; for safe chaining&lt;/li&gt;
&lt;li&gt;Improves readability and avoids crashes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Overusing Optional in DTOs can reduce performance&lt;/li&gt;
&lt;li&gt;Avoid Optional in fields—use it in return types&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Write Small, Single-Responsibility Methods
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bad Practice
&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="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;processOrder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Order&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;saveToDatabase&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;sendEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;logOrder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&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;
  
  
  Better Design
&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="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;processOrder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Order&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;persist&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;notifyCustomer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Order&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/*...*/&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;persist&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Order&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/*...*/&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;notifyCustomer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Order&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/*...*/&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Expert Insight
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Each method should do one thing&lt;/li&gt;
&lt;li&gt;Improves testability and readability&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Too many small methods can cause over-fragmentation&lt;/li&gt;
&lt;li&gt;Balance abstraction with readability&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Use Streams Carefully (Not Everywhere)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Overused Streams
&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;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAge&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getName&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Collectors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toList&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Optimized Approach
&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;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;names&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="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;users&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;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAge&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;names&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="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getName&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;
  
  
  Expert Insight
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Streams are elegant but not always faster&lt;/li&gt;
&lt;li&gt;Use them for clarity, not complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Streams can cause performance issues in large datasets&lt;/li&gt;
&lt;li&gt;Debugging streams is harder than loops&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Exception Handling That Actually Helps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bad Practice
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// code&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="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printStackTrace&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;
  
  
  Production-Grade Handling
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;processPayment&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;PaymentException&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="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Payment failed for user: {}"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&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;BusinessException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Payment processing failed"&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;
  
  
  Expert Insight
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Never swallow exceptions&lt;/li&gt;
&lt;li&gt;Use custom exceptions for clarity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Overusing custom exceptions can complicate code&lt;/li&gt;
&lt;li&gt;Always log before rethrowing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Avoid Tight Coupling (Use Interfaces)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tightly Coupled 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;OrderService&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;MySQLDatabase&lt;/span&gt; &lt;span class="n"&gt;db&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;MySQLDatabase&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;
  
  
  Loosely Coupled Design
&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;OrderService&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Database&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;OrderService&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Database&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&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;
  
  
  Expert Insight
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enables dependency injection&lt;/li&gt;
&lt;li&gt;Improves testing and scalability&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Too many interfaces can increase complexity&lt;/li&gt;
&lt;li&gt;Use where abstraction is needed&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Comparison: Traditional vs Production-Ready Java
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Traditional Java Code&lt;/th&gt;
&lt;th&gt;Production-Ready Java Code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Null Handling&lt;/td&gt;
&lt;td&gt;Direct access&lt;/td&gt;
&lt;td&gt;Optional / validation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Method Design&lt;/td&gt;
&lt;td&gt;Large methods&lt;/td&gt;
&lt;td&gt;Small, modular methods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error Handling&lt;/td&gt;
&lt;td&gt;Generic exceptions&lt;/td&gt;
&lt;td&gt;Custom exceptions + logging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Unoptimized&lt;/td&gt;
&lt;td&gt;Balanced optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintainability&lt;/td&gt;
&lt;td&gt;Hard to modify&lt;/td&gt;
&lt;td&gt;Easy to extend&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  Advanced Tips Our Students in Hyderabad Learn
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Key Production Practices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Write unit tests for every module&lt;/li&gt;
&lt;li&gt;Use logging frameworks (not System.out)&lt;/li&gt;
&lt;li&gt;Apply SOLID principles&lt;/li&gt;
&lt;li&gt;Follow clean code conventions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools You Must Know
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;IntelliJ IDEA&lt;/li&gt;
&lt;li&gt;Maven / Gradle&lt;/li&gt;
&lt;li&gt;JUnit &amp;amp; Mockito&lt;/li&gt;
&lt;li&gt;Git &amp;amp; CI/CD pipelines&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Why AI is Changing How We Write Java
&lt;/h1&gt;

&lt;p&gt;Modern Java development is evolving with AI:&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Benefits in Java Development
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Auto code suggestions&lt;/li&gt;
&lt;li&gt;Bug detection&lt;/li&gt;
&lt;li&gt;Code optimization&lt;/li&gt;
&lt;li&gt;Faster learning&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Real-World Scenario: What Happens in Production
&lt;/h1&gt;

&lt;p&gt;Imagine this:&lt;/p&gt;

&lt;p&gt;You deploy a payment service:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It crashes due to null values&lt;/li&gt;
&lt;li&gt;Logs are missing&lt;/li&gt;
&lt;li&gt;Debugging takes hours&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now imagine the improved version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Null-safe code&lt;/li&gt;
&lt;li&gt;Structured logging&lt;/li&gt;
&lt;li&gt;Clear exceptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s the difference between &lt;strong&gt;learning Java&lt;/strong&gt; and &lt;strong&gt;engineering with Java&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  3 Must-Follow Rules for Every Java Developer
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Always code for failure (not success)&lt;/li&gt;
&lt;li&gt;Optimize only after measuring performance&lt;/li&gt;
&lt;li&gt;Write code for the next developer (not yourself)&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  FAQ
&lt;/h1&gt;

&lt;h3&gt;
  
  
  1. What is AI-powered Java training?
&lt;/h3&gt;

&lt;p&gt;AI-powered training integrates intelligent tools to help you learn faster, debug better, and write optimized code using modern techniques.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Is Core Java enough for getting a job?
&lt;/h3&gt;

&lt;p&gt;Core Java is the foundation, but you also need frameworks, real-time projects, and production knowledge to succeed.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. How long does it take to become job-ready in Java?
&lt;/h3&gt;

&lt;p&gt;With consistent learning and practical exposure, most students become job-ready in 3–6 months.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Why do developers struggle in real projects?
&lt;/h3&gt;

&lt;p&gt;Because most training focuses on theory rather than real-world scenarios like debugging, scalability, and system design.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Which is the best way to learn Java in Hyderabad?
&lt;/h3&gt;

&lt;p&gt;Choose a program that offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time projects&lt;/li&gt;
&lt;li&gt;Expert mentorship&lt;/li&gt;
&lt;li&gt;AI-powered learning tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can explore one such structured program here:&lt;br&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;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Writing Java code differently isn’t optional anymore—it’s essential.&lt;/p&gt;

&lt;p&gt;In my decade of teaching Java, the biggest transformation I’ve seen is when developers shift from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Does this code work?”&lt;br&gt;
to&lt;br&gt;
“Will this code survive production?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That mindset shift is what separates beginners from professionals.&lt;/p&gt;

&lt;p&gt;If you want to truly master &lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Top AI powered Core JAVA Online Training in Hyderabad&lt;/a&gt;&lt;/strong&gt;, focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean coding practices&lt;/li&gt;
&lt;li&gt;Real-world scenarios&lt;/li&gt;
&lt;li&gt;Continuous learning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your next level as a Java developer starts with how you write your next line of code.&lt;/p&gt;

</description>
      <category>modernjava</category>
      <category>cleancode</category>
      <category>architecture</category>
      <category>devrel</category>
    </item>
    <item>
      <title>LinkedIn REST API Integration in Java Using OAuth 2.0</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Tue, 07 Apr 2026 07:54:02 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/linkedin-rest-api-integration-in-java-using-oauth-20-2e8b</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/linkedin-rest-api-integration-in-java-using-oauth-20-2e8b</guid>
      <description>&lt;p&gt;Integrating the LinkedIn REST API in Java requires implementing &lt;strong&gt;OAuth 2.0 authorization flow&lt;/strong&gt; to securely access user data like profile info, posts, and connections. You obtain an access token via authorization code flow and then use it to call LinkedIn APIs—ensuring secure, scalable, and production-ready integrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Integrating third-party APIs like LinkedIn sounds simple—until authentication becomes the bottleneck. Developers often struggle with token handling, authorization flows, and API permissions.&lt;/p&gt;

&lt;p&gt;In my decade of teaching &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, I’ve seen developers get stuck not because of coding complexity, but due to misunderstanding OAuth flows. Our students in Hyderabad often face issues where APIs fail due to expired tokens or incorrect scopes.&lt;/p&gt;

&lt;p&gt;Let’s simplify &lt;a href="https://stackoverflow.com/questions/15458137/linkedin-api-call-using-oauth-in-java" rel="noopener noreferrer"&gt;LinkedIn API integration with OAuth 2.0&lt;/a&gt; step by step.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is OAuth 2.0?
&lt;/h1&gt;

&lt;p&gt;OAuth 2.0 is an &lt;strong&gt;authorization framework&lt;/strong&gt; that allows applications to access user data without exposing credentials.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Components:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Resource Owner (User)&lt;/li&gt;
&lt;li&gt;Client (Your Application)&lt;/li&gt;
&lt;li&gt;Authorization Server (LinkedIn)&lt;/li&gt;
&lt;li&gt;Access Token&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Why OAuth 2.0 is Required for LinkedIn API
&lt;/h1&gt;

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

&lt;ul&gt;
&lt;li&gt;Security risks&lt;/li&gt;
&lt;li&gt;Credential exposure&lt;/li&gt;
&lt;li&gt;No controlled access&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Secure access tokens&lt;/li&gt;
&lt;li&gt;Scoped permissions&lt;/li&gt;
&lt;li&gt;Token expiration control&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  OAuth 2.0 Authorization Flow (LinkedIn)
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Steps:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Redirect user to LinkedIn login&lt;/li&gt;
&lt;li&gt;User grants permission&lt;/li&gt;
&lt;li&gt;Receive authorization code&lt;/li&gt;
&lt;li&gt;Exchange code for access token&lt;/li&gt;
&lt;li&gt;Call LinkedIn APIs using token&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;

&lt;p&gt;Before coding, you need:&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn Developer Account&lt;/li&gt;
&lt;li&gt;Client ID &amp;amp; Client Secret&lt;/li&gt;
&lt;li&gt;Redirect URI configured&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Java Implementation (Step-by-Step)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Example 1: Generate Authorization URL
&lt;/h2&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;"5glv4o"&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.net.URLEncoder&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.nio.charset.StandardCharsets&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;LinkedInAuth&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;String&lt;/span&gt; &lt;span class="n"&gt;clientId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"YOUR_CLIENT_ID"&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;redirectUri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"http://localhost:8080/callback"&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;scope&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"r_liteprofile r_emailaddress"&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;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://www.linkedin.com/oauth/v2/authorization?"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                &lt;span class="s"&gt;"response_type=code"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                &lt;span class="s"&gt;"&amp;amp;client_id="&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;clientId&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                &lt;span class="s"&gt;"&amp;amp;redirect_uri="&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;URLEncoder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;encode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;redirectUri&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StandardCharsets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UTF_8&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                &lt;span class="s"&gt;"&amp;amp;scope="&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;URLEncoder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;encode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StandardCharsets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UTF_8&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;"Authorize URL: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;url&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;
  
  
  Explanation:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Redirects user to LinkedIn login page&lt;/li&gt;
&lt;li&gt;Requests permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Case:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Incorrect redirect URI → authorization failure&lt;/li&gt;
&lt;li&gt;Must exactly match LinkedIn app settings&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example 2: Exchange Code for Access Token
&lt;/h2&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;"u1d3pq"&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.io.OutputStream&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.net.HttpURLConnection&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.net.URL&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;TokenExchange&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="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;Exception&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;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"AUTH_CODE"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="no"&gt;URL&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="no"&gt;URL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://www.linkedin.com/oauth/v2/accessToken"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;HttpURLConnection&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpURLConnection&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;openConnection&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setRequestMethod&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDoOutput&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&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;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"grant_type=authorization_code"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                &lt;span class="s"&gt;"&amp;amp;code="&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                &lt;span class="s"&gt;"&amp;amp;redirect_uri=http://localhost:8080/callback"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                &lt;span class="s"&gt;"&amp;amp;client_id=YOUR_CLIENT_ID"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                &lt;span class="s"&gt;"&amp;amp;client_secret=YOUR_CLIENT_SECRET"&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;OutputStream&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getOutputStream&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&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;"Response Code: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResponseCode&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;
  
  
  Explanation:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Exchanges authorization code for access token&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Case:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Code expires quickly (~30 sec)&lt;/li&gt;
&lt;li&gt;Must exchange immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example 3: Calling LinkedIn Profile API
&lt;/h2&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;"apq4bb"&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.net.HttpURLConnection&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.net.URL&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;LinkedInProfile&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="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;Exception&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;accessToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"ACCESS_TOKEN"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="no"&gt;URL&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="no"&gt;URL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://api.linkedin.com/v2/me"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;HttpURLConnection&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpURLConnection&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;openConnection&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setRequestProperty&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Authorization"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Bearer "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;accessToken&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;"Response Code: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResponseCode&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;
  
  
  Explanation:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uses access token to fetch profile data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Case:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Expired token → 401 Unauthorized&lt;/li&gt;
&lt;li&gt;Implement token refresh strategy&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example 4: Handling Token Expiry
&lt;/h2&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;"c2l8xg"&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;TokenManager&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;accessToken&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;expiryTime&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;boolean&lt;/span&gt; &lt;span class="nf"&gt;isTokenExpired&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="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;currentTimeMillis&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;expiryTime&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="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;refreshToken&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;"Refreshing token..."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// Call LinkedIn API to refresh&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;
  
  
  Explanation:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tracks token expiry&lt;/li&gt;
&lt;li&gt;Ensures valid API calls&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Case:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn doesn’t always provide refresh tokens&lt;/li&gt;
&lt;li&gt;May require re-authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example 5: Spring Boot Integration
&lt;/h2&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;"92ijpd"&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.web.bind.annotation.GetMapping&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;org.springframework.web.bind.annotation.RestController&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@RestController&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;LinkedInController&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/linkedin/profile"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getProfile&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="s"&gt;"Fetch LinkedIn Profile using OAuth Token"&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;
  
  
  Explanation:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Integrates API into Spring Boot app&lt;/li&gt;
&lt;li&gt;Exposes endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Case:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Don’t store tokens in plain text&lt;/li&gt;
&lt;li&gt;Use secure storage (Vault, DB encryption)&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  OAuth 2.0 vs API Key Authentication
&lt;/h1&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;OAuth 2.0&lt;/th&gt;
&lt;th&gt;API Key&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Security&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;User Consent&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;Not required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token Expiry&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;Use Case&lt;/td&gt;
&lt;td&gt;User data access&lt;/td&gt;
&lt;td&gt;Simple APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complexity&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Best Practices for LinkedIn API Integration
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Always use HTTPS
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Store tokens securely
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Handle token expiration
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Use minimal scopes
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Log API failures
&lt;/h3&gt;

&lt;h1&gt;
  
  
  Common Mistakes Developers Make
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Incorrect redirect URI&lt;/li&gt;
&lt;li&gt;Not handling token expiry&lt;/li&gt;
&lt;li&gt;Over-requesting permissions&lt;/li&gt;
&lt;li&gt;Logging sensitive tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Real-Time Use Cases
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn login integration&lt;/li&gt;
&lt;li&gt;Profile data fetching&lt;/li&gt;
&lt;li&gt;Job posting automation&lt;/li&gt;
&lt;li&gt;Social media analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our students in Hyderabad often build &lt;strong&gt;real-time applications integrating LinkedIn APIs&lt;/strong&gt;, especially for HRTech and job portals.&lt;/p&gt;

&lt;h1&gt;
  
  
  When NOT to Use LinkedIn API
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;If you don’t need user data&lt;/li&gt;
&lt;li&gt;For static integrations&lt;/li&gt;
&lt;li&gt;When simpler APIs are sufficient&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Performance Considerations
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Optimize By:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Caching responses&lt;/li&gt;
&lt;li&gt;Minimizing API calls&lt;/li&gt;
&lt;li&gt;Using async processing&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Security Considerations
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Risks:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Token leakage&lt;/li&gt;
&lt;li&gt;Unauthorized access&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Solutions:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Encrypt tokens&lt;/li&gt;
&lt;li&gt;Use short-lived tokens&lt;/li&gt;
&lt;li&gt;Implement rate limiting&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  FAQ Section
&lt;/h1&gt;

&lt;h3&gt;
  
  
  1. What is OAuth 2.0 in LinkedIn API?
&lt;/h3&gt;

&lt;p&gt;It is a secure authorization method that allows applications to access user data without exposing credentials.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. How do I get LinkedIn access token?
&lt;/h3&gt;

&lt;p&gt;By exchanging the authorization code received after user login.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Why does my token expire?
&lt;/h3&gt;

&lt;p&gt;For security reasons, LinkedIn tokens have limited validity.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Can I use LinkedIn API without OAuth?
&lt;/h3&gt;

&lt;p&gt;No, OAuth is mandatory for accessing user data.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Is LinkedIn API free?
&lt;/h3&gt;

&lt;p&gt;Some features are free, but advanced APIs may require approval.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Integrating LinkedIn REST APIs using OAuth 2.0 is a &lt;strong&gt;must-have skill for modern Java developers&lt;/strong&gt;, especially those building social, HR, or analytics platforms.&lt;/p&gt;

&lt;p&gt;In my decade of teaching Java, I’ve seen developers struggle initially—but once they understand OAuth, it becomes a powerful tool.&lt;/p&gt;

&lt;p&gt;To stay ahead in 2026, mastering integrations like this through &lt;strong&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;AI powered Core JAVA Online Training in ameerpet&lt;/a&gt;&lt;/strong&gt; will give you a strong edge in the job market.&lt;/p&gt;

</description>
      <category>oauth</category>
      <category>linkedinapi</category>
      <category>java</category>
      <category>restapi</category>
    </item>
    <item>
      <title>What Happens If Exception Occurs in Finally Block?</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Sat, 04 Apr 2026 11:26:06 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/what-happens-if-exception-occurs-in-finally-block-4eg7</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/what-happens-if-exception-occurs-in-finally-block-4eg7</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In real-world Java applications, exception handling is critical for building robust systems. However, many developers misunderstand what happens when an &lt;a href="https://stackoverflow.com/questions/2911215/what-happens-if-a-finally-block-throws-an-exception" rel="noopener noreferrer"&gt;exception occurs&lt;/a&gt; inside the &lt;code&gt;finally&lt;/code&gt; block. This confusion can lead to lost exceptions, hidden bugs, and production issues.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Direct Answer:&lt;/strong&gt; If an exception occurs in the &lt;code&gt;finally&lt;/code&gt; block, it &lt;strong&gt;overrides any exception thrown in the &lt;code&gt;try&lt;/code&gt; or &lt;code&gt;catch&lt;/code&gt; block&lt;/strong&gt;, and only the &lt;code&gt;finally&lt;/code&gt; exception is propagated.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding &lt;code&gt;try-catch-finally&lt;/code&gt; Flow
&lt;/h2&gt;

&lt;p&gt;Before diving deeper, let’s understand the execution flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;try&lt;/code&gt; block executes first&lt;/li&gt;
&lt;li&gt;If an exception occurs → &lt;code&gt;catch&lt;/code&gt; executes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;finally&lt;/code&gt; block executes &lt;strong&gt;always&lt;/strong&gt; (except rare JVM shutdown cases)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Case 1: Exception Only in Finally Block
&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;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Test1&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;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;"Inside try block"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&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;result&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="c1"&gt;// ArithmeticException&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;
  
  
  Expert Annotation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;try&lt;/code&gt; executes normally&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;finally&lt;/code&gt; executes and throws exception&lt;/li&gt;
&lt;li&gt;Program terminates with &lt;code&gt;ArithmeticException&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Case
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Even if &lt;code&gt;try&lt;/code&gt; is successful, exception in &lt;code&gt;finally&lt;/code&gt; will &lt;strong&gt;crash the program&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Case 2: Exception in Both Try and Finally
&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;public&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="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="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="c1"&gt;// ArithmeticException&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&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;str&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="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// NullPointerException&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;
  
  
  Expert Annotation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;try&lt;/code&gt; throws → &lt;code&gt;ArithmeticException&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;finally&lt;/code&gt; throws → &lt;code&gt;NullPointerException&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; Output → Only &lt;code&gt;NullPointerException&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Case
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Original exception is &lt;strong&gt;completely lost&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Debugging becomes extremely difficult&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Case 3: Exception in Catch and Finally
&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;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Test3&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="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="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="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;RuntimeException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Exception in catch"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&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;RuntimeException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Exception in finally"&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;
  
  
  Expert Annotation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;try&lt;/code&gt; throws exception&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;catch&lt;/code&gt; handles and throws new exception&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;finally&lt;/code&gt; throws another exception&lt;/li&gt;
&lt;li&gt; Final Output → Exception from &lt;code&gt;finally&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Case
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Both &lt;code&gt;try&lt;/code&gt; and &lt;code&gt;catch&lt;/code&gt; exceptions are &lt;strong&gt;ignored&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Case 4: Return Statement with Finally Exception
&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;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Test4&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;int&lt;/span&gt; &lt;span class="nf"&gt;testMethod&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="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&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;RuntimeException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Exception in finally"&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="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;testMethod&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;
  
  
  Expert Annotation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;try&lt;/code&gt; attempts to return &lt;code&gt;10&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;finally&lt;/code&gt; executes before return&lt;/li&gt;
&lt;li&gt;Exception in &lt;code&gt;finally&lt;/code&gt; overrides return&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edge Case
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Return value is &lt;strong&gt;never returned&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Exception dominates execution&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Case 5: Safe Handling Inside Finally
&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;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Test5&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="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="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&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;String&lt;/span&gt; &lt;span class="n"&gt;s&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="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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;"Handled exception in finally"&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;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Expert Annotation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;try&lt;/code&gt; throws exception&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;finally&lt;/code&gt; handles its own exception&lt;/li&gt;
&lt;li&gt;Original exception is preserved&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✔ Edge Case
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Proper handling prevents loss of root cause&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why This Behavior is Dangerous
&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 many production issues due to this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Root cause of failure is lost&lt;/li&gt;
&lt;li&gt;Logs become misleading&lt;/li&gt;
&lt;li&gt;Debugging takes more time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our students in Hyderabad often face this in real-time projects, especially while handling database connections or file streams.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices to Follow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Always Follow These Rules:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Never throw exceptions directly in &lt;code&gt;finally&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Always wrap risky code inside &lt;code&gt;finally&lt;/code&gt; with &lt;code&gt;try-catch&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Prefer &lt;strong&gt;try-with-resources&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try-With-Resources (Modern Solution)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;BufferedReader&lt;/span&gt; &lt;span class="n"&gt;br&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;BufferedReader&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;"file.txt"&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;br&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readLine&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;
  
  
  ✔ Benefits:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Automatically closes resources&lt;/li&gt;
&lt;li&gt;Preserves original exception&lt;/li&gt;
&lt;li&gt;Adds suppressed exceptions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Comparison Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;Risk Level&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Exception only in try&lt;/td&gt;
&lt;td&gt;Propagated normally&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exception only in finally&lt;/td&gt;
&lt;td&gt;Finally exception propagated&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exception in try &amp;amp; finally&lt;/td&gt;
&lt;td&gt;Finally overrides try&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exception in catch &amp;amp; finally&lt;/td&gt;
&lt;td&gt;Finally overrides catch&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;try-with-resources&lt;/td&gt;
&lt;td&gt;Original + suppressed exceptions kept&lt;/td&gt;
&lt;td&gt;Safe&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;p&gt;This concept is critical in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database connection handling&lt;/li&gt;
&lt;li&gt;File I/O operations&lt;/li&gt;
&lt;li&gt;Logging systems&lt;/li&gt;
&lt;li&gt;Transaction management&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Common Mistakes Developers Make
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Writing cleanup logic without exception handling&lt;/li&gt;
&lt;li&gt;Ignoring suppressed exceptions&lt;/li&gt;
&lt;li&gt;Misusing return statements with finally&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  When Finally May Not Execute
&lt;/h2&gt;

&lt;p&gt;Although rare, finally may not execute if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;System.exit()&lt;/code&gt; is called&lt;/li&gt;
&lt;li&gt;JVM crashes&lt;/li&gt;
&lt;li&gt;Power failure&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Learn More (Recommended)
&lt;/h2&gt;

&lt;p&gt;If you want to deeply understand exception handling, multithreading, and real-time Java scenarios, I highly recommend:&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;h2&gt;
  
  
  Advanced Insights (From Experience)
&lt;/h2&gt;

&lt;p&gt;In enterprise systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exception handling is part of &lt;strong&gt;system design&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Losing exceptions can break monitoring systems&lt;/li&gt;
&lt;li&gt;Logging frameworks rely on correct exception flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Always think beyond syntax—focus on &lt;strong&gt;behavior and impact&lt;/strong&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  1. What happens if finally throws exception?
&lt;/h3&gt;

&lt;p&gt;It overrides all previous exceptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Does finally always execute?
&lt;/h3&gt;

&lt;p&gt;Yes, except in JVM shutdown scenarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Can finally override return statement?
&lt;/h3&gt;

&lt;p&gt;Yes, it executes before return and can override it.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. What is safer alternative?
&lt;/h3&gt;

&lt;p&gt;try-with-resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. How to avoid losing exceptions?
&lt;/h3&gt;

&lt;p&gt;Handle exceptions inside finally block.&lt;/p&gt;




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

&lt;p&gt;Understanding what happens when an exception occurs in the &lt;code&gt;finally&lt;/code&gt; block is crucial for writing reliable Java applications.&lt;/p&gt;

&lt;p&gt;Small mistakes here can lead to &lt;strong&gt;major production issues&lt;/strong&gt;, so always follow best practices and modern approaches.&lt;/p&gt;

&lt;p&gt;If you're serious about mastering such advanced Java concepts, explore:&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;It’s one of the &lt;strong&gt;&lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;Best AI powered Core JAVA Online Training in Hyderabad&lt;/a&gt;&lt;/strong&gt;, designed to help you crack real-time challenges and interviews with confidence.&lt;/p&gt;

</description>
      <category>exception</category>
      <category>finallyblock</category>
      <category>java</category>
    </item>
    <item>
      <title>What Are Different Garbage Collectors in JVM</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Thu, 02 Apr 2026 07:30:06 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/what-are-different-garbage-collectors-in-jvm-219h</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/what-are-different-garbage-collectors-in-jvm-219h</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;1. Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Garbage Collection in Java is an automatic memory management process that removes unused objects from memory. The JVM provides different types of Garbage Collectors, each designed for specific use cases and performance requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. What is Garbage Collection in JVM&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Garbage Collection is the process of identifying and removing objects that are no longer in use, freeing up memory and improving application efficiency.&lt;/p&gt;

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

&lt;p&gt;Automatically manages memory.&lt;br&gt;
Removes unused objects.&lt;br&gt;
Prevents memory leaks.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;3. Types of Garbage Collectors in JVM&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.1 Serial Garbage Collector&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Serial GC uses a single thread to perform all garbage collection tasks. It is suitable for small applications with low memory requirements.&lt;/p&gt;

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

&lt;p&gt;Single threaded.&lt;br&gt;
Simple and low overhead.&lt;br&gt;
Best for small applications.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;3.2 Parallel Garbage Collector Throughput Collector&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Parallel GC uses multiple threads to perform garbage collection, improving throughput and performance.&lt;/p&gt;

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

&lt;p&gt;Multi threaded.&lt;br&gt;
High throughput.&lt;br&gt;
Used in applications where performance is important.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;3.3 CMS Garbage Collector Concurrent Mark Sweep&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;CMS GC performs most of its work concurrently with the application, reducing pause times.&lt;/p&gt;

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

&lt;p&gt;Low pause time.&lt;br&gt;
Runs alongside application.&lt;br&gt;
May cause fragmentation.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;3.4 G1 Garbage Collector Garbage First&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;G1 GC divides heap into regions and prioritizes garbage collection in areas with the most garbage. It is designed for large applications.&lt;/p&gt;

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

&lt;p&gt;Region based.&lt;br&gt;
Low pause times.&lt;br&gt;
Best for large heaps.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;3.5 Z Garbage Collector ZGC&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;ZGC is a modern low latency garbage collector designed for very large applications. It minimizes pause times to a few milliseconds.&lt;/p&gt;

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

&lt;p&gt;Ultra low latency.&lt;br&gt;
Handles large heaps.&lt;br&gt;
Highly scalable.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;3.6 Shenandoah Garbage Collector&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Shenandoah GC focuses on reducing pause times by performing most of its work concurrently with the application.&lt;/p&gt;

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

&lt;p&gt;Low pause time.&lt;br&gt;
Concurrent processing.&lt;br&gt;
Improves responsiveness.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;4. Comparison of Garbage Collectors&lt;/strong&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Garbage Collector&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Key Feature&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Serial GC&lt;/td&gt;
&lt;td&gt;Small apps&lt;/td&gt;
&lt;td&gt;Single thread&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel GC&lt;/td&gt;
&lt;td&gt;High throughput apps&lt;/td&gt;
&lt;td&gt;Multi thread&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMS GC&lt;/td&gt;
&lt;td&gt;Low latency apps&lt;/td&gt;
&lt;td&gt;Concurrent execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G1 GC&lt;/td&gt;
&lt;td&gt;Large applications&lt;/td&gt;
&lt;td&gt;Region based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ZGC&lt;/td&gt;
&lt;td&gt;Very large apps&lt;/td&gt;
&lt;td&gt;Ultra low pause&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shenandoah&lt;/td&gt;
&lt;td&gt;Responsive apps&lt;/td&gt;
&lt;td&gt;Concurrent GC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;5. How to Choose the Right GC&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Use Serial GC for small applications.&lt;br&gt;
Use Parallel GC for high throughput.&lt;br&gt;
Use G1 GC for balanced performance.&lt;br&gt;
Use ZGC or Shenandoah for low latency systems.&lt;/p&gt;




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

&lt;p&gt;Choosing wrong GC for application type.&lt;br&gt;
Ignoring GC tuning.&lt;br&gt;
Not monitoring memory usage.&lt;/p&gt;




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

&lt;p&gt;JVM provides multiple Garbage Collectors.&lt;br&gt;
Each GC has its own use case.&lt;br&gt;
Choosing the right GC improves performance.&lt;br&gt;
Modern GCs focus on low latency.&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 What is Garbage Collection in &lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;Java&lt;/a&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Garbage Collection is the process of automatically removing unused objects from memory to free up space.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9.2 Which Garbage Collector is best in Java&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;G1 GC is commonly used as a default because it provides a good balance between performance and latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9.3 What is the difference between Serial and Parallel GC&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Serial GC uses a single thread, while Parallel GC uses multiple threads for better performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9.4 What is low latency Garbage Collector&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Low latency collectors like ZGC and Shenandoah minimize pause times to improve application responsiveness.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9.5 Can we change Garbage Collector in Java&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Yes, you can choose different Garbage Collectors using JVM options based on application needs.&lt;/p&gt;




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

&lt;p&gt;Understanding different Garbage Collectors in JVM helps you optimize memory management and application performance. By selecting the right GC, you can achieve better throughput and lower latency. &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>garbagecollectors</category>
      <category>jvm</category>
      <category>java</category>
      <category>programming</category>
    </item>
    <item>
      <title>What is Stream API</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Wed, 01 Apr 2026 07:35:44 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/what-is-stream-api-19o1</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/what-is-stream-api-19o1</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;1. Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Stream API is one of the most important features introduced in &lt;a href="https://www.ashokit.in/courses/core-java-online-training" rel="noopener noreferrer"&gt;Java &lt;/a&gt;8 that allows developers to process collections of data in a functional and efficient way. It helps in writing clean, readable, and concise code. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. What is Stream API in Java&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Stream API is used to process collections of objects such as lists, sets, and maps. It allows you to perform operations like filtering, mapping, and sorting data in a simple and efficient manner.&lt;/p&gt;

&lt;p&gt;A stream does not store data. It only processes data from a source like a collection.&lt;/p&gt;

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

&lt;p&gt;Used to process data from collections&lt;br&gt;
Does not store data&lt;br&gt;
Supports functional programming&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;3. Key Features of Stream API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Stream API provides several powerful features&lt;/p&gt;

&lt;p&gt;Processes data in a functional style&lt;br&gt;
Supports parallel processing&lt;br&gt;
Reduces code complexity&lt;br&gt;
Improves readability&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;4. Types of Stream Operations&lt;/strong&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;4.1 Intermediate Operations&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Intermediate operations transform a stream into another stream. These operations are lazy, meaning they are executed only when needed.&lt;/p&gt;

&lt;p&gt;Examples include filter, map, and sorted&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;4.2 Terminal Operations&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Terminal operations produce a result or a side effect and end the stream processing.&lt;/p&gt;

&lt;p&gt;Examples include forEach, collect, and count&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Intermediate operations prepare data&lt;br&gt;
Terminal operations produce results&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;5. Simple Example of Stream API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Filtering and printing elements using Stream API&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;"z7x4pm"&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;StreamExample&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;Integer&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="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="mi"&gt;40&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&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;stream&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;filter&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;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&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;-&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="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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Stream processes data step by step&lt;br&gt;
Filter selects required data&lt;br&gt;
forEach displays output&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6. Common Stream Methods&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;filter is used to select elements based on a condition&lt;br&gt;
map is used to transform data&lt;br&gt;
sorted is used to sort elements&lt;br&gt;
forEach is used to iterate through elements&lt;br&gt;
collect is used to gather results&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;7. Advantages of Stream API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Reduces boilerplate code&lt;br&gt;
Improves performance with parallel streams&lt;br&gt;
Makes code more readable&lt;br&gt;
Encourages functional programming&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;8. When to Use Stream API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Use Stream API when working with collections&lt;br&gt;
Use it for data processing like filtering and sorting&lt;br&gt;
Avoid using it for very simple operations where loops are clearer&lt;/p&gt;

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

&lt;p&gt;Using streams for very complex logic&lt;br&gt;
Not understanding lazy evaluation&lt;br&gt;
Overusing parallel streams without need&lt;/p&gt;

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

&lt;p&gt;Stream API simplifies data processing&lt;br&gt;
It works with collections&lt;br&gt;
It supports functional programming&lt;br&gt;
It improves code readability&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;11. 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;12. FAQ Section&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;12.1 What is Stream API in Java&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Stream API is used to process collections of data in a functional way, allowing operations like filtering, mapping, and sorting&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;12.2 Does Stream store data in Java&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;No, streams do not store data. They only process data from a source like a collection&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;12.3 What are intermediate operations in Stream API&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Intermediate operations transform one stream into another and are executed lazily&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;12.4 What are terminal operations in Stream API&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Terminal operations produce a result and end the stream processing&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;12.5 What is the advantage of Stream API&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It improves readability, reduces code length, and supports parallel processing&lt;/p&gt;

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

&lt;p&gt;Stream API is a powerful feature in Java that simplifies data processing and improves code quality. By learning how to use streams effectively, you can write cleaner and more efficient programs. To gain practical knowledge and real-time experience, consider joining the No 1 Core JAVA Online Training in ameerpet.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;14. 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>stream</category>
      <category>api</category>
    </item>
    <item>
      <title>Abstraction in Java with Real-Time Example</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Tue, 31 Mar 2026 06:51:37 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/abstraction-in-java-with-real-time-example-4noc</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/abstraction-in-java-with-real-time-example-4noc</guid>
      <description>&lt;h3&gt;
  
  
  1. Introduction
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Abstraction&lt;/strong&gt; is one of the core concepts of Object-Oriented Programming (OOP).&lt;/p&gt;

&lt;p&gt;👉 It means &lt;strong&gt;hiding internal implementation details&lt;/strong&gt; and showing only the &lt;strong&gt;essential features&lt;/strong&gt; to the user.&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;br&gt;
&lt;strong&gt;“What to do” is exposed, but “how it is done” is hidden.&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  2. Real-Time Analogy
&lt;/h3&gt;

&lt;p&gt;Think of an &lt;strong&gt;ATM Machine&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You insert a card and withdraw money&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You don’t know how:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bank server validates PIN&lt;/li&gt;
&lt;li&gt;Balance is checked&lt;/li&gt;
&lt;li&gt;Cash is processed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 You only see &lt;strong&gt;operations&lt;/strong&gt;, not internal logic → This is &lt;strong&gt;abstraction&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  3. How Abstraction is Achieved in &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Abstraction can be achieved using:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Abstract Class (0–100% abstraction)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interface (100% abstraction)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;h3&gt;
  
  
  4. Example Using Abstract Class
&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;// Abstract class&lt;/span&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="c1"&gt;// abstract method&lt;/span&gt;

    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;fuelType&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;"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="c1"&gt;// Concrete class&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 ignition"&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;class&lt;/span&gt; &lt;span class="nc"&gt;AbstractionExample&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;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;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fuelType&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;
  
  
  5. Explanation of Code
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Vehicle&lt;/code&gt; is an &lt;strong&gt;abstract class&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;start()&lt;/code&gt; is an abstract method → no implementation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Car&lt;/code&gt; provides the implementation of &lt;code&gt;start()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;User interacts with &lt;code&gt;Vehicle&lt;/code&gt; reference → doesn't know internal logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Car starts with key ignition
Petrol/Diesel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  6. Example Using 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;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;CreditCardPayment&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 Credit Card"&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;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;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InterfaceExample&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;Payment&lt;/span&gt; &lt;span class="n"&gt;p&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;UpiPayment&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pay&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;
  
  
  7. Explanation of Code
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Payment&lt;/code&gt; interface defines method &lt;code&gt;pay()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Different classes implement it differently&lt;/li&gt;
&lt;li&gt;User only calls &lt;code&gt;pay()&lt;/code&gt; → doesn't care about internal implementation&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  8. Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hides implementation details&lt;/li&gt;
&lt;li&gt;Shows only functionality&lt;/li&gt;
&lt;li&gt;Improves security and flexibility&lt;/li&gt;
&lt;li&gt;Helps in loose coupling&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  9. Advantages of Abstraction
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reduces complexity&lt;/li&gt;
&lt;li&gt;Improves maintainability&lt;/li&gt;
&lt;li&gt;Enhances reusability&lt;/li&gt;
&lt;li&gt;Allows changing implementation without affecting users&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;Abstraction = hiding internal details&lt;/li&gt;
&lt;li&gt;Achieved using &lt;strong&gt;abstract classes and interfaces&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Focuses on &lt;strong&gt;what to do, not how to do&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Widely used in real-time applications&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 abstraction, inheritance, and polymorphism:&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 Abstraction with real-time examples?&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>abstraction</category>
      <category>java</category>
    </item>
    <item>
      <title>Difference Between HashMap and ConcurrentHashMap in Java</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Mon, 30 Mar 2026 07:44:17 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/difference-between-hashmap-and-concurrenthashmap-in-java-4h9k</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/difference-between-hashmap-and-concurrenthashmap-in-java-4h9k</guid>
      <description>&lt;h3&gt;
  
  
  1. Introduction
&lt;/h3&gt;

&lt;p&gt;Both &lt;strong&gt;HashMap&lt;/strong&gt; and &lt;strong&gt;ConcurrentHashMap&lt;/strong&gt; are used to store &lt;strong&gt;key-value pairs&lt;/strong&gt;, but they differ mainly in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thread safety&lt;/li&gt;
&lt;li&gt;Performance in multi-threaded environments&lt;/li&gt;
&lt;li&gt;Internal working mechanism&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. HashMap
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;HashMap&lt;/code&gt; is &lt;strong&gt;not thread-safe&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Multiple threads accessing it simultaneously may lead to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data inconsistency&lt;/li&gt;
&lt;li&gt;Infinite loops (in older Java versions during resizing)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;It is best suited for &lt;strong&gt;single-threaded environments&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="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="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HashMapExample&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;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&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;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;map&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="n"&gt;map&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="mi"&gt;1&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;map&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="mi"&gt;2&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="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;map&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;Simple key-value storage&lt;/li&gt;
&lt;li&gt;No synchronization → faster but unsafe in multi-threading&lt;/li&gt;
&lt;/ul&gt;




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

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ConcurrentHashMap&lt;/code&gt; is &lt;strong&gt;thread-safe&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Designed for &lt;strong&gt;high concurrency&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Uses advanced techniques like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Segment locking (Java 7)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CAS (Compare-And-Swap) &amp;amp; synchronized blocks (Java 8+)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Allows multiple threads to read/write simultaneously.&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="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.concurrent.ConcurrentHashMap&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;ConcurrentMapExample&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;ConcurrentHashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&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;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;map&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;ConcurrentHashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
        &lt;span class="n"&gt;map&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="mi"&gt;1&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;map&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="mi"&gt;2&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="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;map&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;Thread-safe operations without locking entire map&lt;/li&gt;
&lt;li&gt;Better performance than Hashtable in multi-threading&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;HashMap&lt;/th&gt;
&lt;th&gt;ConcurrentHashMap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Thread Safety&lt;/td&gt;
&lt;td&gt;Not thread-safe&lt;/td&gt;
&lt;td&gt;Thread-safe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Faster (single thread)&lt;/td&gt;
&lt;td&gt;Optimized for multi-thread&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Locking Mechanism&lt;/td&gt;
&lt;td&gt;No locking&lt;/td&gt;
&lt;td&gt;Partial locking / CAS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Null Keys/Values&lt;/td&gt;
&lt;td&gt;Allows 1 null key&lt;/td&gt;
&lt;td&gt;Does NOT allow null key/value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fail-fast / Fail-safe&lt;/td&gt;
&lt;td&gt;Fail-fast iterator&lt;/td&gt;
&lt;td&gt;Fail-safe iterator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use Case&lt;/td&gt;
&lt;td&gt;Single-threaded apps&lt;/td&gt;
&lt;td&gt;Multi-threaded apps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  5. Internal Working Difference
&lt;/h3&gt;

&lt;h4&gt;
  
  
  HashMap
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Uses array + linked list / tree&lt;/li&gt;
&lt;li&gt;No synchronization&lt;/li&gt;
&lt;li&gt;Entire structure is unsafe in concurrent access&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ConcurrentHashMap
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Divides map into segments (&lt;a href="https://ashokitech.com/core-java-online-training" rel="noopener noreferrer"&gt;Java &lt;/a&gt;7) OR&lt;/li&gt;
&lt;li&gt;Uses bucket-level locking (Java 8+)&lt;/li&gt;
&lt;li&gt;Only a portion of the map is locked during updates&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  6. Multi-threading Example
&lt;/h3&gt;

&lt;h4&gt;
  
  
  HashMap (Problem)
&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.util.HashMap&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;HashMapThreadIssue&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;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&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;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;map&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="nc"&gt;Runnable&lt;/span&gt; &lt;span class="n"&gt;task&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="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;i&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="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;map&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="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Value"&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="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;start&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;Multiple threads modify map simultaneously&lt;/li&gt;
&lt;li&gt;May lead to inconsistent data&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  ConcurrentHashMap (Solution)
&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.util.concurrent.ConcurrentHashMap&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;ConcurrentHashMapSafe&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;ConcurrentHashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&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;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;map&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;ConcurrentHashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;

        &lt;span class="nc"&gt;Runnable&lt;/span&gt; &lt;span class="n"&gt;task&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="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;i&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="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;map&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="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Value"&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="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;start&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;Safe concurrent updates&lt;/li&gt;
&lt;li&gt;No data corruption&lt;/li&gt;
&lt;/ul&gt;




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

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

&lt;ul&gt;
&lt;li&gt;Application is single-threaded&lt;/li&gt;
&lt;li&gt;No concurrent modifications&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

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

&lt;ul&gt;
&lt;li&gt;Multiple threads access/modify data&lt;/li&gt;
&lt;li&gt;High performance is required&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HashMap&lt;/strong&gt; → Fast but not thread-safe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ConcurrentHashMap&lt;/strong&gt; → Thread-safe with high performance&lt;/li&gt;
&lt;li&gt;Choose based on concurrency needs&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;To master collections and multithreading 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 Collections and Multithreading concepts like HashMap and ConcurrentHashMap?&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>hashmap</category>
      <category>concurrenthashmap</category>
      <category>java</category>
    </item>
    <item>
      <title>How Do You Handle High Traffic APIs?</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Sat, 28 Mar 2026 07:37:24 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/how-do-you-handle-high-traffic-apis-lc6</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/how-do-you-handle-high-traffic-apis-lc6</guid>
      <description>&lt;p&gt;Handling high traffic APIs is a critical challenge in modern system design. As the number of users increases, APIs must efficiently process large volumes of requests without slowing down or failing. Proper strategies ensure high availability, low latency, and scalability.&lt;/p&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Challenges in High Traffic APIs&lt;/li&gt;
&lt;li&gt;Key Techniques to Handle High Traffic&lt;/li&gt;
&lt;li&gt;Backend Optimization Strategies&lt;/li&gt;
&lt;li&gt;Infrastructure-Level Solutions&lt;/li&gt;
&lt;li&gt;Real-Time Example&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions (FAQs)&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;APIs act as the backbone of modern applications. When traffic spikes (e.g., sales, events, or viral content), poorly designed APIs can crash or slow down. Handling high traffic requires a combination of architecture, optimization, and monitoring.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Challenges in High Traffic APIs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Server overload&lt;/li&gt;
&lt;li&gt; Increased response time&lt;/li&gt;
&lt;li&gt; Downtime and failures&lt;/li&gt;
&lt;li&gt; Poor user experience&lt;/li&gt;
&lt;li&gt; Database bottlenecks&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Key Techniques to Handle High Traffic
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Use caching (e.g., Redis) to store frequent responses&lt;/li&gt;
&lt;li&gt;Reduce database load significantly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Load Balancing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Distribute requests across multiple servers&lt;/li&gt;
&lt;li&gt;Prevent single server overload&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Rate Limiting
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Limit the number of requests per user/IP&lt;/li&gt;
&lt;li&gt;Prevent abuse and system overload&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Use queues for heavy tasks&lt;/li&gt;
&lt;li&gt;Respond quickly without blocking&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  API Gateway
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Centralized request handling&lt;/li&gt;
&lt;li&gt;Authentication, routing, throttling&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Horizontal Scaling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add more servers dynamically&lt;/li&gt;
&lt;li&gt;Handle increased traffic efficiently&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;connection pooling&lt;/strong&gt; for database efficiency&lt;/li&gt;
&lt;li&gt;Optimize queries and indexing&lt;/li&gt;
&lt;li&gt;Implement &lt;strong&gt;lazy loading&lt;/strong&gt; where needed&lt;/li&gt;
&lt;li&gt;Use efficient data structures and algorithms&lt;/li&gt;
&lt;li&gt;Enable response compression (GZIP)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Infrastructure-Level Solutions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Use CDN for static content delivery&lt;/li&gt;
&lt;li&gt; Deploy on cloud platforms with auto-scaling&lt;/li&gt;
&lt;li&gt; Monitor with tools (Prometheus, Grafana)&lt;/li&gt;
&lt;li&gt; Implement circuit breakers for fault tolerance&lt;/li&gt;
&lt;li&gt; Use replication and failover mechanisms&lt;/li&gt;
&lt;/ul&gt;




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

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

&lt;p&gt;An online ticket booking system faces heavy traffic during a movie release.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Implement caching → Reduce DB load&lt;/li&gt;
&lt;li&gt;Add load balancers → Distribute traffic&lt;/li&gt;
&lt;li&gt;Use rate limiting → Prevent abuse&lt;/li&gt;
&lt;li&gt;Enable auto-scaling → Handle spikes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Result:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Smooth booking experience&lt;/li&gt;
&lt;li&gt;High availability&lt;/li&gt;
&lt;li&gt;Reduced downtime&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Frequently Asked Questions (FAQs)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ❓ What is the best way to handle high traffic APIs?
&lt;/h3&gt;

&lt;p&gt;Using a combination of caching, load balancing, horizontal scaling, and rate limiting is the most effective approach.&lt;/p&gt;




&lt;h3&gt;
  
  
  ❓ How does caching improve API performance?
&lt;/h3&gt;

&lt;p&gt;Caching stores frequently requested data in memory, reducing database calls and improving response time.&lt;/p&gt;




&lt;h3&gt;
  
  
  ❓ What is rate limiting in APIs?
&lt;/h3&gt;

&lt;p&gt;Rate limiting restricts the number of API requests a user can make within a specific time period to prevent overload.&lt;/p&gt;




&lt;h3&gt;
  
  
  ❓ Why is load balancing important?
&lt;/h3&gt;

&lt;p&gt;Load balancing distributes incoming traffic across multiple servers, ensuring no single server gets overwhelmed.&lt;/p&gt;




&lt;h3&gt;
  
  
  ❓ What is horizontal scaling?
&lt;/h3&gt;

&lt;p&gt;Horizontal scaling means adding more servers to handle increased traffic instead of upgrading a single server.&lt;/p&gt;




&lt;h3&gt;
  
  
  ❓ How do microservices help in handling high traffic?
&lt;/h3&gt;

&lt;p&gt;Microservices allow independent scaling of components, making it easier to handle high load efficiently.&lt;/p&gt;




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

&lt;p&gt;Handling high traffic APIs requires a combination of efficient coding, smart architecture, and robust infrastructure. By implementing caching, load balancing, scaling, and monitoring, developers can build APIs that perform reliably under heavy load.&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;Implement load balancing and scaling&lt;/li&gt;
&lt;li&gt;Apply rate limiting for control&lt;/li&gt;
&lt;li&gt;Optimize backend and database&lt;/li&gt;
&lt;li&gt;Monitor continuously&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;If you want to master API design, high-traffic handling, and real-time backend development, this is the perfect opportunity.&lt;/p&gt;

&lt;h2&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;/h2&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>api</category>
      <category>traffic</category>
      <category>handle</category>
    </item>
    <item>
      <title>What is HTTP methods (GET, POST, PUT, DELETE)?</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Fri, 27 Mar 2026 07:05:39 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/what-is-http-methods-get-post-put-delete-1g24</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/what-is-http-methods-get-post-put-delete-1g24</guid>
      <description>&lt;p&gt;HTTP methods define &lt;strong&gt;what action you want to perform&lt;/strong&gt; on a resource in a web application. They are the foundation of &lt;strong&gt;REST APIs&lt;/strong&gt; and are widely used in &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java &lt;/a&gt;backend development.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 What is an HTTP Method?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;HTTP method&lt;/strong&gt; is a verb that tells the server:&lt;br&gt;
👉 &lt;em&gt;“What should I do with this data?”&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 1. GET – Retrieve Data
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GET&lt;/strong&gt; is used to &lt;strong&gt;fetch data from the server&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Read-only (no changes to data)&lt;/li&gt;
&lt;li&gt;Idempotent (same result every time)&lt;/li&gt;
&lt;li&gt;Safe operation&lt;/li&gt;
&lt;/ul&gt;

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



&lt;p&gt;```http id="g1"&lt;br&gt;
GET /users/101&lt;/p&gt;

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


👉 Fetch user with ID 101

---

## 📌 2. POST – Create Data

**POST** is used to **create a new resource**.

### ✅ Features:

* Adds new data
* Not idempotent
* Multiple requests create multiple records

### 🧪 Example:



```http id="p1"
POST /users
{
  "name": "Harish"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Creates a new user&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 3. PUT – Update/Replace Data
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PUT&lt;/strong&gt; is used to &lt;strong&gt;update or completely replace an existing resource&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Idempotent&lt;/li&gt;
&lt;li&gt;Replaces entire resource&lt;/li&gt;
&lt;/ul&gt;

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



&lt;p&gt;```http id="pu1"&lt;br&gt;
PUT /users/101&lt;br&gt;
{&lt;br&gt;
  "name": "Harish Kumar"&lt;br&gt;
}&lt;/p&gt;

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


👉 Updates user 101

---

## 📌 4. DELETE – Remove Data

**DELETE** is used to **remove a resource**.

### ✅ Features:

* Idempotent
* Removing again gives same result

### 🧪 Example:



```http id="d1"
DELETE /users/101
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Deletes user 101&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚔️ Quick Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Idempotent&lt;/th&gt;
&lt;th&gt;Safe&lt;/th&gt;
&lt;th&gt;Example Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;Read data&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;Fetch user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;Create data&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;Create user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;Update/Replace&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;Update user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;Remove data&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;Delete user&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  💡 Real-Time Flow
&lt;/h2&gt;

&lt;p&gt;In a typical application:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GET&lt;/strong&gt; → Load data on UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;POST&lt;/strong&gt; → Submit form&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PUT&lt;/strong&gt; → Edit/update data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DELETE&lt;/strong&gt; → Remove records&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🚀 Why Are HTTP Methods Important?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Standard way of communication in web apps&lt;/li&gt;
&lt;li&gt;Helps design clean REST APIs&lt;/li&gt;
&lt;li&gt;Improves scalability and maintainability&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Understanding HTTP methods is crucial for backend developers. Each method has a &lt;strong&gt;specific purpose&lt;/strong&gt; and using them correctly ensures your APIs are &lt;strong&gt;clean, predictable, and scalable&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;Want to master REST APIs, Spring Boot, and backend development?&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>http</category>
      <category>get</category>
      <category>post</category>
      <category>put</category>
    </item>
    <item>
      <title>What is dependency management?</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Thu, 26 Mar 2026 07:15:34 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/what-is-dependency-management-3n32</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/what-is-dependency-management-3n32</guid>
      <description>&lt;p&gt;In modern software development, applications rarely work in isolation. They rely on external libraries, frameworks, and tools to perform various tasks like database connectivity, logging, security, and more. Managing these external components efficiently is known as &lt;strong&gt;dependency management&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Dependency Management?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Dependency management&lt;/strong&gt; is the process of handling external libraries (dependencies) required by a project, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding required libraries&lt;/li&gt;
&lt;li&gt;Managing versions&lt;/li&gt;
&lt;li&gt;Handling updates&lt;/li&gt;
&lt;li&gt;Resolving conflicts between dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 In simple terms, it ensures your application has all the required components to run smoothly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is Dependency Management Important?
&lt;/h2&gt;

&lt;p&gt;Without proper dependency management:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers manually download JAR files&lt;/li&gt;
&lt;li&gt;Version conflicts may occur&lt;/li&gt;
&lt;li&gt;Projects become hard to maintain&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;📦 Automatic library management&lt;/li&gt;
&lt;li&gt;🔄 Easy version upgrades&lt;/li&gt;
&lt;li&gt;⚡ Faster development&lt;/li&gt;
&lt;li&gt;🧩 Avoids dependency conflicts&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;In &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, tools like &lt;strong&gt;Apache Maven&lt;/strong&gt; and &lt;strong&gt;Gradle&lt;/strong&gt; handle dependency management automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maven Example (pom.xml):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;xml id="8x2m1p"
&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-core&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;5.3.0&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;👉 Maven will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download the library&lt;/li&gt;
&lt;li&gt;Add it to your project&lt;/li&gt;
&lt;li&gt;Manage its transitive dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What are Transitive Dependencies?
&lt;/h2&gt;

&lt;p&gt;Sometimes, a library depends on other libraries.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;You add &lt;strong&gt;Spring Core&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;It internally requires other libraries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✔️ Maven/Gradle automatically downloads those too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dependency Conflict Example
&lt;/h2&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Library A needs version 1.0&lt;/li&gt;
&lt;li&gt;Library B needs version 2.0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 This creates a conflict.&lt;/p&gt;

&lt;p&gt;✔️ Dependency management tools resolve this using rules like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nearest definition&lt;/li&gt;
&lt;li&gt;Highest version priority&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Types of Dependencies
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direct Dependencies&lt;/strong&gt; → Added explicitly by you&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transitive Dependencies&lt;/strong&gt; → Added automatically by tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Use Tools for Dependency Management?
&lt;/h2&gt;

&lt;p&gt;Tools like Maven and Gradle help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📥 Automatically download dependencies&lt;/li&gt;
&lt;li&gt;📚 Maintain a central repository&lt;/li&gt;
&lt;li&gt;🔍 Resolve conflicts&lt;/li&gt;
&lt;li&gt;⚙️ Simplify project setup&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;ul&gt;
&lt;li&gt;You may need Spring, Hibernate, MySQL driver&lt;/li&gt;
&lt;li&gt;Instead of manually adding each JAR → just declare them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 The tool handles everything else.&lt;/p&gt;

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

&lt;p&gt;Dependency management is a critical concept in modern development that ensures your project runs smoothly with all required libraries. Using tools like Maven and Gradle makes this process automated, efficient, and error-free.&lt;/p&gt;

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

&lt;p&gt;Want to master concepts like dependency management, Maven, and real-time Java development?&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>dependency</category>
      <category>management</category>
      <category>transitive</category>
    </item>
    <item>
      <title>What is a REST Client in Java (RestTemplate / WebClient)?</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Wed, 25 Mar 2026 07:25:56 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/what-is-a-rest-client-in-java-resttemplate-webclient-4aaa</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/what-is-a-rest-client-in-java-resttemplate-webclient-4aaa</guid>
      <description>&lt;p&gt;A &lt;strong&gt;REST Client&lt;/strong&gt; in Java is used to communicate with RESTful web services (APIs) over HTTP. It allows your application to send requests (GET, POST, PUT, DELETE) and process responses, typically in JSON or XML format.&lt;/p&gt;

&lt;p&gt;In modern &lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java &lt;/a&gt;development, especially in Spring-based applications, two popular REST clients are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RestTemplate&lt;/strong&gt; (Traditional, synchronous)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebClient&lt;/strong&gt; (Modern, reactive)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;RestTemplate&lt;/strong&gt; is a synchronous (blocking) REST client provided by Spring.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Easy to use&lt;/li&gt;
&lt;li&gt;Blocking calls (waits for response)&lt;/li&gt;
&lt;li&gt;Widely used in older Spring applications&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;java id="rt123x"&lt;br&gt;
import org.springframework.web.client.RestTemplate;&lt;/p&gt;

&lt;p&gt;public class RestTemplateExample {&lt;br&gt;
    public static void main(String[] args) {&lt;br&gt;
        RestTemplate restTemplate = new RestTemplate();&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    String url = "https://jsonplaceholder.typicode.com/posts/1";
    String response = restTemplate.getForObject(url, String.class);

    System.out.println(response);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚠️ Note:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Now &lt;strong&gt;deprecated in favor of WebClient&lt;/strong&gt; for modern applications&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;WebClient&lt;/strong&gt; is a non-blocking, reactive REST client introduced in Spring WebFlux.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Asynchronous (non-blocking)&lt;/li&gt;
&lt;li&gt;Supports reactive programming&lt;/li&gt;
&lt;li&gt;Better performance for high-load systems&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;java id="wc456y"&lt;br&gt;
import org.springframework.web.reactive.function.client.WebClient;&lt;/p&gt;

&lt;p&gt;public class WebClientExample {&lt;br&gt;
    public static void main(String[] args) {&lt;br&gt;
        WebClient webClient = WebClient.create();&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    String response = webClient.get()
            .uri("https://jsonplaceholder.typicode.com/posts/1")
            .retrieve()
            .bodyToMono(String.class)
            .block(); // blocking here for simplicity

    System.out.println(response);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 RestTemplate vs WebClient
&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;RestTemplate&lt;/th&gt;
&lt;th&gt;WebClient&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;Synchronous&lt;/td&gt;
&lt;td&gt;Asynchronous (Reactive)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocking&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (Non-blocking)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Introduced In&lt;/td&gt;
&lt;td&gt;Spring MVC&lt;/td&gt;
&lt;td&gt;Spring WebFlux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Status&lt;/td&gt;
&lt;td&gt;Deprecated&lt;/td&gt;
&lt;td&gt;Recommended&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🔥 When to Use What?
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Working on legacy projects&lt;/li&gt;
&lt;li&gt;Simple, small applications&lt;/li&gt;
&lt;li&gt;No need for reactive programming&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Building microservices&lt;/li&gt;
&lt;li&gt;High-performance applications&lt;/li&gt;
&lt;li&gt;Need non-blocking I/O&lt;/li&gt;
&lt;li&gt;Working with reactive streams&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Calling external APIs 🌐&lt;/li&gt;
&lt;li&gt;Microservices communication 🔗&lt;/li&gt;
&lt;li&gt;Payment gateway integration 💳&lt;/li&gt;
&lt;li&gt;Fetching third-party data 📊&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚡ Simple Analogy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🧍 &lt;strong&gt;RestTemplate&lt;/strong&gt; → Like standing in a queue (wait until response comes)&lt;/li&gt;
&lt;li&gt;🏃 &lt;strong&gt;WebClient&lt;/strong&gt; → Like ordering online and doing other work while waiting&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;A &lt;strong&gt;REST Client&lt;/strong&gt; is essential for modern Java applications. While &lt;strong&gt;RestTemplate&lt;/strong&gt; is simple and widely used, &lt;strong&gt;WebClient&lt;/strong&gt; is the future with better scalability and performance.&lt;/p&gt;

&lt;p&gt;To become job-ready and work on real-time APIs, mastering these tools is crucial—especially through structured learning like &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>rest</category>
      <category>java</category>
      <category>resttemplate</category>
      <category>webclient</category>
    </item>
    <item>
      <title>What is File Handling in Java?</title>
      <dc:creator>Sharath Kumar</dc:creator>
      <pubDate>Tue, 24 Mar 2026 07:23:57 +0000</pubDate>
      <link>https://dev.to/sharath_kumar_ec951693318/what-is-file-handling-in-java-4hdk</link>
      <guid>https://dev.to/sharath_kumar_ec951693318/what-is-file-handling-in-java-4hdk</guid>
      <description>&lt;p&gt;&lt;strong&gt;File Handling in Java&lt;/strong&gt; refers to the process of &lt;strong&gt;creating, reading, writing, and deleting files&lt;/strong&gt; using Java programs. It allows applications to &lt;strong&gt;store and retrieve data permanently&lt;/strong&gt; from the file system instead of keeping it only in memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔹 Why File Handling is Important?
&lt;/h2&gt;

&lt;p&gt;In real-world applications, data must be saved for future use. File handling helps in:&lt;/p&gt;

&lt;p&gt;✔ Storing user data&lt;br&gt;
✔ Reading configuration files&lt;br&gt;
✔ Writing logs&lt;br&gt;
✔ Processing large datasets&lt;/p&gt;

&lt;h2&gt;
  
  
  🔹 Java Packages for File Handling
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ashokitech.com/core-java-online-training/" rel="noopener noreferrer"&gt;Java &lt;/a&gt;provides built-in support through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;java.io&lt;/code&gt; (Input/Output streams)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;java.nio.file&lt;/code&gt; (New I/O – more efficient and modern)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔹 1. Creating a File
&lt;/h2&gt;

&lt;p&gt;java id="5ajxb4"&lt;br&gt;
import java.io.File;&lt;br&gt;
import java.io.IOException;&lt;/p&gt;

&lt;p&gt;public class Test {&lt;br&gt;
    public static void main(String[] args) throws IOException {&lt;br&gt;
        File file = new File("example.txt");&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    if (file.createNewFile()) {
        System.out.println("File created");
    } else {
        System.out.println("File already exists");
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;h2&gt;
  
  
  🔹 2. Writing to a File
&lt;/h2&gt;



&lt;p&gt;```java id="40v5yg"&lt;br&gt;
import java.io.FileWriter;&lt;br&gt;
import java.io.IOException;&lt;/p&gt;

&lt;p&gt;FileWriter writer = new FileWriter("example.txt");&lt;br&gt;
writer.write("Hello Java File Handling");&lt;br&gt;
writer.close();&lt;/p&gt;

&lt;h2&gt;
  
  
  🔹 3. Reading from a File
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
java id="yh8e6y"
import java.io.File;
import java.util.Scanner;

File file = new File("example.txt");
Scanner sc = new Scanner(file);

while (sc.hasNextLine()) {
    System.out.println(sc.nextLine());
}
sc.close();


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

&lt;/div&gt;




&lt;h2&gt;
  
  
  🔹 4. Deleting a File
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
java id="vrg8ym"
File file = new File("example.txt");

if (file.delete()) {
    System.out.println("File deleted");
}


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

&lt;/div&gt;




&lt;h2&gt;
  
  
  🔹 Important Classes in File Handling
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Class&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;File&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Represents file/directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FileWriter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Writes data to file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FileReader&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reads data from file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BufferedReader&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Efficient reading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BufferedWriter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Efficient writing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Scanner&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reads data easily&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔹 Character vs Byte Streams
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Byte Streams&lt;/strong&gt; → &lt;code&gt;FileInputStream&lt;/code&gt;, &lt;code&gt;FileOutputStream&lt;/code&gt;&lt;br&gt;
👉 Used for binary data (images, videos)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Character Streams&lt;/strong&gt; → &lt;code&gt;FileReader&lt;/code&gt;, &lt;code&gt;FileWriter&lt;/code&gt;&lt;br&gt;
👉 Used for text data&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 Modern Approach (NIO)
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
java id="fgk2bm"
import java.nio.file.*;

Files.write(Paths.get("example.txt"), "Hello NIO".getBytes());


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

&lt;/div&gt;



&lt;p&gt;👉 Faster and more flexible than traditional I/O.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;Saving user details in applications&lt;/li&gt;
&lt;li&gt;Reading CSV/Excel files&lt;/li&gt;
&lt;li&gt;Writing logs in enterprise apps&lt;/li&gt;
&lt;li&gt;Uploading/downloading files&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;File Handling in Java is essential for building real-world applications where data persistence is required. Understanding both traditional I/O and modern NIO APIs will make you a strong Java developer.&lt;/p&gt;

&lt;p&gt;If you want to learn Core Java concepts like File Handling with real-time examples and projects, check out:&lt;br&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>file</category>
      <category>handling</category>
      <category>java</category>
    </item>
  </channel>
</rss>
