<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="/static/feed.xsl" type="text/xsl" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:quartz="https://quartz.jzhao.xyz/ns">
  <script xmlns="http://www.w3.org/1999/xhtml" src="/static/scripts/xslt-polyfill-214fd525.js"></script>
  <title>/wiki / java</title>
  <subtitle>Recent notes in /wiki / java on Animesh Mishra</subtitle>
  <link href="https://animishraa05.github.io/wiki/java" />
  <link rel="alternate" type="text/html" href="https://animishraa05.github.io/wiki/java" />
  <category term="wiki/java" />
  <id>https://animishraa05.github.io/wiki/java</id>
  <updated>2026-09-02T00:00:00.000Z</updated>
  <contributor>
    <name>Animesh Mishra</name>
    <email>animesh.mishra818@gmail.com</email>
  </contributor>
  <logo>https://animishraa05.github.io/icon.png</logo>
  <icon>https://animishraa05.github.io/icon.png</icon>
  <generator>Quartz v4.6.0 -- quartz.jzhao.xyz</generator>
  <rights type="html">&amp;amp;copy; 2026 Animesh Mishra</rights>
  
  <entry>
    <title>Java — Map of Content</title>
    <link href="https://animishraa05.github.io/wiki/java/java-moc" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-moc.md" />
    <summary> Map of Content for Java — 64 concepts. Start here to navigate java.</summary>
    <published>2026-09-02T00:00:00.000Z</published>
    <updated>2026-09-02T00:00:00.000Z</updated>
    <publishedTime>Sep 02, 2026</publishedTime>
    <updatedTime>Sep 02, 2026</updatedTime>
    <category term="meta" label="meta" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p dir=&quot;auto&quot;&gt;Map of Content for &lt;strong&gt;Java&lt;/strong&gt; — 64 concepts. Start here to navigate java.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;core-concepts&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Concepts&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-concepts&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../java-abstract-class-vs-interface&quot; class=&quot;internal&quot; data-slug=&quot;java-abstract-class-vs-interface&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;java-abstract-class-vs-interface&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-abstraction&quot; class=&quot;internal alias&quot; data-slug=&quot;java-abstraction&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Abstraction&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-access-modifiers&quot; class=&quot;internal alias&quot; data-slug=&quot;java-access-modifiers&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Access Modifiers&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-aggregation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-aggregation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Aggregation&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-aggregation-vs-composition&quot; class=&quot;internal&quot; data-slug=&quot;java-aggregation-vs-composition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;java-aggregation-vs-composition&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-arraylist&quot; class=&quot;internal alias&quot; data-slug=&quot;java-arraylist&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java ArrayList&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-arrays&quot; class=&quot;internal alias&quot; data-slug=&quot;java-arrays&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Arrays&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-association&quot; class=&quot;internal alias&quot; data-slug=&quot;java-association&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Association&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-checked-vs-unchecked&quot; class=&quot;internal&quot; data-slug=&quot;java-checked-vs-unchecked&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;java-checked-vs-unchecked&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-class&quot; class=&quot;internal alias&quot; data-slug=&quot;java-class&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Class&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Collections Framework&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-comparable-and-comparator&quot; class=&quot;internal alias&quot; data-slug=&quot;java-comparable-and-comparator&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Comparable and Comparator&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-compile-time-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-compile-time-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Compile-Time Polymorphism&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-composition&quot; class=&quot;internal alias&quot; data-slug=&quot;java-composition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Composition&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-constructors&quot; class=&quot;internal alias&quot; data-slug=&quot;java-constructors&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Constructors&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-control-flow&quot; class=&quot;internal alias&quot; data-slug=&quot;java-control-flow&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Control Flow&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-custom-exceptions&quot; class=&quot;internal alias&quot; data-slug=&quot;java-custom-exceptions&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Custom Exceptions&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-data-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-data-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Data Types&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-deadlock&quot; class=&quot;internal alias&quot; data-slug=&quot;java-deadlock&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Deadlock&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-encapsulation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-encapsulation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Encapsulation&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-exception-hierarchy&quot; class=&quot;internal alias&quot; data-slug=&quot;java-exception-hierarchy&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Exception Hierarchy&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-executor-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-executor-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Executor Framework&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-file-handling&quot; class=&quot;internal alias&quot; data-slug=&quot;java-file-handling&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java File Handling&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-garbage-collection&quot; class=&quot;internal alias&quot; data-slug=&quot;java-garbage-collection&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Garbage Collection&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-hashmap&quot; class=&quot;internal alias&quot; data-slug=&quot;java-hashmap&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java HashMap&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-hierarchical-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-hierarchical-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Hierarchical Inheritance&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-hybrid-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-hybrid-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Hybrid Inheritance&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-identifiers-and-keywords&quot; class=&quot;internal alias&quot; data-slug=&quot;java-identifiers-and-keywords&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Identifiers and Keywords&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-inheritance-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance Types&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-iterator&quot; class=&quot;internal alias&quot; data-slug=&quot;java-iterator&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Iterator&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-jdbc&quot; class=&quot;internal alias&quot; data-slug=&quot;java-jdbc&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java JDBC&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-lambda-and-streams&quot; class=&quot;internal alias&quot; data-slug=&quot;java-lambda-and-streams&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Lambda Expressions and Streams&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-loops&quot; class=&quot;internal alias&quot; data-slug=&quot;java-loops&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Loops&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-memory-management&quot; class=&quot;internal alias&quot; data-slug=&quot;java-memory-management&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Memory Management&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-methods&quot; class=&quot;internal alias&quot; data-slug=&quot;java-methods&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Methods&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-multilevel-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multilevel-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Multilevel Inheritance&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-multiple-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multiple-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Multiple Inheritance&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-multithreading&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multithreading&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Multithreading&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-object-class&quot; class=&quot;internal alias&quot; data-slug=&quot;java-object-class&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Object Class&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-object&quot; class=&quot;internal alias&quot; data-slug=&quot;java-object&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Object&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-oop-advantages&quot; class=&quot;internal alias&quot; data-slug=&quot;java-oop-advantages&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java OOP Advantages&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-oop-disadvantages&quot; class=&quot;internal alias&quot; data-slug=&quot;java-oop-disadvantages&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java OOP Disadvantages&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-oop-pillars&quot; class=&quot;internal&quot; data-slug=&quot;java-oop-pillars&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;java-oop-pillars&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-operators&quot; class=&quot;internal alias&quot; data-slug=&quot;java-operators&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Operators&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-overloading-vs-overriding&quot; class=&quot;internal&quot; data-slug=&quot;java-overloading-vs-overriding&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;java-overloading-vs-overriding&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-packages&quot; class=&quot;internal alias&quot; data-slug=&quot;java-packages&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Packages&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-platform-independence&quot; class=&quot;internal alias&quot; data-slug=&quot;java-platform-independence&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Platform Independence&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-program-structure&quot; class=&quot;internal alias&quot; data-slug=&quot;java-program-structure&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Program Structure&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-regex&quot; class=&quot;internal alias&quot; data-slug=&quot;java-regex&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Regular Expressions&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-runtime-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-runtime-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Runtime Polymorphism&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-single-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-single-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Single Inheritance&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-socket-programming&quot; class=&quot;internal alias&quot; data-slug=&quot;java-socket-programming&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Socket Programming&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-stringbuilder-stringbuffer&quot; class=&quot;internal alias&quot; data-slug=&quot;java-stringbuilder-stringbuffer&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;StringBuilder and StringBuffer&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-strings&quot; class=&quot;internal alias&quot; data-slug=&quot;java-strings&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Strings&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-string-types-compared&quot; class=&quot;internal&quot; data-slug=&quot;java-string-types-compared&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;java-string-types-compared&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-synchronization&quot; class=&quot;internal alias&quot; data-slug=&quot;java-synchronization&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Synchronization&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-throw-throws&quot; class=&quot;internal alias&quot; data-slug=&quot;java-throw-throws&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Throw and Throws&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-try-catch-finally&quot; class=&quot;internal alias&quot; data-slug=&quot;java-try-catch-finally&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Try-Catch-Finally&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-varargs&quot; class=&quot;internal alias&quot; data-slug=&quot;java-varargs&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Variable Arguments&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-variables&quot; class=&quot;internal alias&quot; data-slug=&quot;java-variables&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Variables&lt;/a&gt; — concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-wrapper-classes&quot; class=&quot;internal alias&quot; data-slug=&quot;java-wrapper-classes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Wrapper Classes&lt;/a&gt; — concept&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;mechanisms--how-things-work&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Mechanisms &amp;#x26; How Things Work&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#mechanisms--how-things-work&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;em&gt;Auto-generated — edit to curate. Pages that explain processes/flows.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;comparisons--tradeoffs&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Comparisons &amp;#x26; Tradeoffs&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#comparisons--tradeoffs&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;em&gt;(No synthesis yet — create via ingest or query —save)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;suggested-reading-order&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Suggested Reading Order&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#suggested-reading-order&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol dir=&quot;auto&quot;&gt;
&lt;li&gt;Browse Core Concepts above — start with most-linked page&lt;/li&gt;
&lt;li&gt;Follow Connections sections for dense graph traversal&lt;/li&gt;
&lt;/ol&gt;</content>
  </entry><entry>
    <title>Abstract Class vs Interface — Partial vs Full Abstraction</title>
    <link href="https://animishraa05.github.io/wiki/java/java-abstract-class-vs-interface" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-abstract-class-vs-interface.md" />
    <summary>What’s Being Compared Two mechanisms for achieving abstraction in Java: Abstract Classes and Interfaces.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;whats-being-compared&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;What’s Being Compared&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#whats-being-compared&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Two mechanisms for achieving abstraction in Java: &lt;strong&gt;Abstract Classes&lt;/strong&gt; and &lt;strong&gt;Interfaces&lt;/strong&gt;. Both prevent direct instantiation and define methods that subclasses must implement, but they serve fundamentally different design purposes. Understanding when to use each is a key design decision in Java.&lt;/p&gt;
&lt;h2 id=&quot;the-core-tension&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Core Tension&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-core-tension&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The choice comes down to &lt;strong&gt;state vs contract&lt;/strong&gt;: abstract classes can hold state (fields, constructors) and provide partial implementation, making them suitable for sharing common code in a hierarchy. Interfaces define pure contracts (pre-Java 8) without state, making them suitable for defining capabilities across unrelated classes.&lt;/p&gt;
&lt;h2 id=&quot;comparison&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Comparison&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#comparison&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;| Dimension            | &lt;a href=&quot;../../java-abstraction&quot; class=&quot;internal alias&quot; data-slug=&quot;java-abstraction&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt; Abstract Class&lt;/a&gt;                            | &lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt; Interface&lt;/a&gt; |
| -------------------- | ---------------------------- | ------------------------------------------- | ----------------- | ----------- |
| Abstraction level    | Partial (0-100%)             | Full (100%, pre-Java 8)                     |                   |             |
| Instantiation        | Cannot instantiate           | Cannot instantiate                          |                   |             |
| Fields               | Can have instance fields     | Only static final constants                 |                   |             |
| Constructors         | Can have constructors        | No constructors                             |                   |             |
| Access modifiers     | All access modifiers allowed | public only (pre-Java 9)                    |                   |             |
| Multiple inheritance | Single (extends one class)   | Multiple (implements many)                  |                   |             |
| Default methods      | Allowed (any method)         | Allowed (Java 8+, must use default keyword) |                   |             |
| Static methods       | Allowed                      | Allowed (Java 8+)                           |                   |             |
| Private methods      | Allowed                      | Allowed (Java 9+)                           |                   |             |
| Keyword              | abstract class               | interface                                   |                   |             |
| Inheritance keyword  | extends                      | implements                                  |                   |             |
| When to use          | Shared state + behavior      | Capability contractc                        |                   |             |&lt;/p&gt;
&lt;h2 id=&quot;when-to-choose-abstract-class&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;When to Choose Abstract Class&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#when-to-choose-abstract-class&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Subclasses share common state (fields) that should be inherited&lt;/li&gt;
&lt;li&gt;You need constructors to initialize shared state&lt;/li&gt;
&lt;li&gt;The classes form a clear “is-a” hierarchy&lt;/li&gt;
&lt;li&gt;You want to provide some default behavior but force subclasses to implement specific methods&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-to-choose-interface&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;When to Choose Interface&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#when-to-choose-interface&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Unrelated classes need a common capability (e.g., Serializable, Comparable)&lt;/li&gt;
&lt;li&gt;You need multiple inheritance of type&lt;/li&gt;
&lt;li&gt;You want to define a pure contract without dictating implementation&lt;/li&gt;
&lt;li&gt;The abstraction crosses hierarchy boundaries&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-insight&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Insight&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-insight&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The line between abstract classes and interfaces has blurred significantly since Java 8 introduced default and static methods in interfaces. However, the fundamental distinction remains: &lt;strong&gt;abstract classes carry state&lt;/strong&gt; (fields, constructors), making them about shared implementation within a hierarchy; &lt;strong&gt;interfaces carry behavior contracts&lt;/strong&gt;, making them about shared capability across hierarchies. If you need shared state, use an abstract class. If you need shared capability, use an interface.&lt;/p&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../java-abstraction&quot; class=&quot;internal alias&quot; data-slug=&quot;java-abstraction&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Abstraction&lt;/a&gt; — the parent concept&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — interface mechanism in detail&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — both depend on inheritance for implementation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — both enable polymorphic behavior&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-abstraction</title>
    <link href="https://animishraa05.github.io/wiki/java/java-abstraction" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-abstraction.md" />
    <summary>The Problem When designing class hierarchies, some behaviors should be defined at a general level without specifying implementation details.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When designing class hierarchies, some behaviors should be defined at a general level without specifying implementation details. Without abstraction, every base class must provide complete implementations for all methods, even when the implementation is unknown or varies dramatically across subclasses. Users are forced to understand complex internals to use simple functionality — like needing to know how an ATM’s cash dispenser mechanics work just to withdraw money.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Abstraction&lt;/strong&gt; hides implementation details and exposes only essential features. It helps users focus on &lt;strong&gt;what&lt;/strong&gt; an object does rather than &lt;strong&gt;how&lt;/strong&gt; it does it. In Java, abstraction is achieved through &lt;strong&gt;abstract classes&lt;/strong&gt; (partial abstraction — can have state and concrete methods) and &lt;strong&gt;interfaces&lt;/strong&gt; (full abstraction — pure contracts before Java 8).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;An abstract class is declared with the &lt;code class=&quot;notranslate&quot;&gt;abstract&lt;/code&gt; keyword. It may contain both abstract methods (no body) and concrete methods. Subclasses use &lt;code class=&quot;notranslate&quot;&gt;extends&lt;/code&gt; and must implement all abstract methods (or be declared abstract themselves). Interfaces use &lt;code class=&quot;notranslate&quot;&gt;implements&lt;/code&gt; and provide 100% abstraction — they define only method signatures (pre-Java 8). The key distinction: abstract classes can hold state and constructors; interfaces cannot.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot; tabindex=&quot;0&quot; data-language=&quot;dot&quot; data-theme=&quot;github-light github-dark&quot; class=&quot;notranslate&quot;&gt;&lt;span class=&quot;clipboard-button&quot; type=&quot;button&quot; aria-label=&quot;copy source&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 -8 24 24&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;copy-icon&quot;&gt;&lt;use href=&quot;#github-copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 -8 24 24&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;check-icon&quot;&gt;&lt;use href=&quot;#github-check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;code data-language=&quot;dot&quot; data-theme=&quot;github-light github-dark&quot; style=&quot;display: grid;&quot; class=&quot;notranslate&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;digraph java_abstraction {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  rankdir=TB&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  node [shape=box style=filled fillcolor=&quot;#f0f4ff&quot; fontname=&quot;Helvetica&quot; fontsize=12]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  edge [fontname=&quot;Helvetica&quot; fontsize=10]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Subgraph [label=&quot;Users see only:&quot; fillcolor=&quot;#e8f4f8&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  ATM [label=&quot;ATM Interface\ninsertCard()\nenterPIN()\nwithdraw()&quot; fillcolor=&quot;#ffe5cc&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Impl [label=&quot;Hidden Internals:\n- Bill dispenser logic\n- Account validation\n- Network calls\n- Receipt printing&quot; fillcolor=&quot;#d4edda&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  User [label=&quot;Bank Customer&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  ATM_Iface [label=&quot;Abstract Class: Account\ngetter: getBalance()\nabstract: void withdraw()&quot; fillcolor=&quot;#ffe5cc&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  AbsClass [label=&quot;Abstract Class: Shape\nfield: color\nconcrete: move()\nabstract: draw()&quot; fillcolor=&quot;#fff3cd&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Interface [label=&quot;Interface: Drawable\ndraw()\n(100% abstract)&quot; fillcolor=&quot;#cce5ff&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  User -&gt; ATM [label=&quot;uses&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  ATM -&gt; Impl [label=&quot;hides&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Interface -&gt; AbsClass [label=&quot;contrasts&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_abstraction Pages: 1 --&gt;
&lt;svg width=&quot;268pt&quot; height=&quot;194pt&quot; viewBox=&quot;0.00 0.00 268.00 194.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 189.56)&quot;&gt;
&lt;title&gt;semantic_abstraction&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-189.56 263.79,-189.56 263.79,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;131.35&quot; cy=&quot;-86.38&quot; rx=&quot;53.65&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;131.35&quot; y=&quot;-82.48&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Abstraction&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INTER --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INTER&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;183.21&quot; cy=&quot;-23.83&quot; rx=&quot;39.78&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;183.21&quot; y=&quot;-20.53&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Interfaces&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INTER --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INTER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M146.07,-68.62C153.26,-59.95 161.87,-49.57 168.99,-40.99&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;130.02&quot; y=&quot;-57.5&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;87.59&quot; cy=&quot;-18&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;87.59&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M119.85,-68.41C113.37,-58.28 105.3,-45.68 98.86,-35.61&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;90.85&quot; y=&quot;-43.91&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- POLY --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;POLY&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;53.01&quot; cy=&quot;-107.72&quot; rx=&quot;53.01&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;53.01&quot; y=&quot;-104.42&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Polymorphism&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;POLY --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--POLY&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M89.43,-97.8C89.28,-97.84 89.14,-97.88 88.99,-97.92&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;109.47&quot; y=&quot;-100.56&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ENCAP --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ENCAP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;207.14&quot; cy=&quot;-115.84&quot; rx=&quot;52.65&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;207.14&quot; y=&quot;-112.54&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Encapsulation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ENCAP --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ENCAP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M167.02,-100.25C168.71,-100.9 170.41,-101.56 172.1,-102.22&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;155.8&quot; y=&quot;-103.93&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ASSOC --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ASSOC&lt;/title&gt;
&lt;ellipse fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; cx=&quot;127.52&quot; cy=&quot;-167.56&quot; rx=&quot;44.7&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;127.52&quot; y=&quot;-164.26&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Association&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ASSOC --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ASSOC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M130.48,-104.8C129.85,-118.09 129.01,-135.95 128.38,-149.22&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;115.67&quot; y=&quot;-129.71&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Cannot instantiate&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;new Animal()&lt;/code&gt; is illegal for abstract classes and interfaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abstract methods&lt;/strong&gt;: Must be overridden in the first concrete subclass&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Can have constructors&lt;/strong&gt;: Abstract classes can have constructors called via &lt;code class=&quot;notranslate&quot;&gt;super()&lt;/code&gt;; interfaces cannot&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partial vs Full&lt;/strong&gt;: Abstract classes provide partial abstraction; interfaces provide 100% abstraction&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hides complexity&lt;/strong&gt;: Users interact with simple operations while internals remain hidden&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — abstract classes use the extends mechanism&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — abstract methods enable polymorphic behavior&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — interfaces are fully abstract (pre-Java 8); abstract classes can have state&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-encapsulation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-encapsulation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Encapsulation&lt;/a&gt; — both are OOP pillars working together&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-abstract-class-vs-interface&quot; class=&quot;internal alias&quot; data-slug=&quot;java-abstract-class-vs-interface&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Abstract Class vs Interface&lt;/a&gt; — synthesis comparing the two mechanisms&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Abstract class vs interface confusion&lt;/strong&gt;: Use abstract classes for “is-a” with shared state; interfaces for “can-do” with behavior contracts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abstract methods in enums&lt;/strong&gt;: Enum types can have abstract methods per-constant&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cannot be final&lt;/strong&gt;: An abstract class cannot be declared &lt;code class=&quot;notranslate&quot;&gt;final&lt;/code&gt; (contradictory — abstraction requires extension)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Virtual method dispatch for abstract methods has minimal overhead (single vtable lookup)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interfaces with default methods (Java 8+)&lt;/strong&gt;: Interfaces can now have default and static methods, blurring the line with abstract classes&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-access-modifiers</title>
    <link href="https://animishraa05.github.io/wiki/java/java-access-modifiers" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-access-modifiers.md" />
    <summary>The Problem As programs grow, developers need fine-grained control over which parts of the code can access which members.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;As programs grow, developers need fine-grained control over which parts of the code can access which members. Without access control, any class could read or modify any field of any other class, making encapsulation impossible and creating tight coupling that breaks with every change.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Java provides four access levels: &lt;strong&gt;private&lt;/strong&gt; (only within the class), &lt;strong&gt;default/package-private&lt;/strong&gt; (within the package), &lt;strong&gt;protected&lt;/strong&gt; (package + subclasses), and &lt;strong&gt;public&lt;/strong&gt; (everywhere). These modifiers can be applied to classes, methods, and fields to enforce encapsulation boundaries.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The compiler checks access rules at compile time. If a method in class A tries to access a &lt;code class=&quot;notranslate&quot;&gt;private&lt;/code&gt; field of class B, the compiler rejects it. Access modifiers do not affect runtime behavior — they are a compile-time enforcement mechanism. Protected access also grants access to subclasses in different packages.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_access_modifiers Pages: 1 --&gt;
&lt;svg width=&quot;335pt&quot; height=&quot;335pt&quot; viewBox=&quot;0.00 0.00 335.00 335.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 331.2)&quot;&gt;
&lt;title&gt;java_access_modifiers&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-331.2 331.37,-331.2 331.37,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Access --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Access&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;180.36,-327.2 121.01,-327.2 121.01,-291.2 180.36,-291.2 180.36,-327.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;150.68&quot; y=&quot;-305.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Visibility&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Private --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Private&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;103.37,-255.2 0,-255.2 0,-218.4 103.37,-218.4 103.37,-255.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;51.68&quot; y=&quot;-240.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;private&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;51.68&quot; y=&quot;-226&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Same class only&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Access&amp;#45;&amp;gt;Private --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Access-&gt;Private&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M126.21,-290.8C114.05,-282.15 99.15,-271.55 85.88,-262.11&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;87.97,-259.31 77.8,-256.37 83.92,-265.02 87.97,-259.31&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Default --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Default&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;142.05,-182.4 33.32,-182.4 33.32,-145.6 142.05,-145.6 142.05,-182.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;87.68&quot; y=&quot;-167.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;default (package)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;87.68&quot; y=&quot;-153.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Same package&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Access&amp;#45;&amp;gt;Default --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Access-&gt;Default&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M143.59,-290.9C136.1,-272.76 123.84,-243.45 112.68,-218.4 108.98,-210.08 104.83,-201.09 100.99,-192.9&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;104.26,-191.64 96.83,-184.09 97.93,-194.63 104.26,-191.64&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Protected --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Protected&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;179.55,-109.6 43.82,-109.6 43.82,-72.8 179.55,-72.8 179.55,-109.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;111.68&quot; y=&quot;-94.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;protected&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;111.68&quot; y=&quot;-80.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Package + subclasses&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Access&amp;#45;&amp;gt;Protected --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Access-&gt;Protected&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M154.09,-291.04C159.35,-260.78 167.23,-196.32 150.68,-145.6 147.56,-136.03 142,-126.75 136.04,-118.69&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;138.9,-116.65 129.93,-111.02 133.42,-121.02 138.9,-116.65&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Public --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Public&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;199.36,-36.8 120.01,-36.8 120.01,0 199.36,0 199.36,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;159.68&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;public&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;159.68&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Everywhere&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Access&amp;#45;&amp;gt;Public --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Access-&gt;Public&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M159.75,-291.02C164.68,-280.87 170.43,-267.62 173.68,-255.2 194.28,-176.51 208.71,-151.64 188.68,-72.8 186.45,-63.98 182.42,-55.05 178.08,-47.08&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;181.15,-45.39 173.06,-38.54 175.11,-48.94 181.15,-45.39&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Private&amp;#45;&amp;gt;Default --&gt;
&lt;!-- Default&amp;#45;&amp;gt;Protected --&gt;
&lt;!-- Protected&amp;#45;&amp;gt;Public --&gt;
&lt;!-- Note --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Note&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;none&quot; points=&quot;327.37,-327.2 198,-327.2 198,-291.2 327.37,-291.2 327.37,-327.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;262.68&quot; y=&quot;-305.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Increasing visibility →&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_access_modifiers Pages: 1 --&gt;
&lt;svg width=&quot;233pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 233.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_access_modifiers&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 229.34,-172.97 229.34,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;106&quot; cy=&quot;-84.66&quot; rx=&quot;75.65&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;106&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Access Modifiers&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ENCAP --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ENCAP&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;172.69&quot; cy=&quot;-41.42&quot; rx=&quot;52.65&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;172.69&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Encapsulation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ENCAP --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ENCAP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M132.36,-67.57C137.46,-64.26 142.78,-60.81 147.83,-57.54&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;121.59&quot; y=&quot;-54.45&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;62.84&quot; cy=&quot;-18&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;62.84&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M94.21,-66.44C88.02,-56.88 80.47,-45.22 74.32,-35.73&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;64&quot; y=&quot;-53.79&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- PKG --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PKG&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;39.78&quot; cy=&quot;-128.51&quot; rx=&quot;39.78&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;39.78&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Packages&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;PKG --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--PKG&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M79.83,-101.99C74.05,-105.82 67.97,-109.85 62.34,-113.57&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;91.35&quot; y=&quot;-110.48&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INTER --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INTER&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;149.85&quot; cy=&quot;-150.97&quot; rx=&quot;39.78&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;149.85&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Interfaces&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INTER --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INTER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M117.98,-102.78C124.27,-112.29 131.94,-123.89 138.18,-133.33&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;141.84&quot; y=&quot;-120.75&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Class-level access&lt;/strong&gt;: Only &lt;code class=&quot;notranslate&quot;&gt;public&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;default&lt;/code&gt; (no &lt;code class=&quot;notranslate&quot;&gt;private&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;protected&lt;/code&gt; for top-level classes)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interface members&lt;/strong&gt;: Methods in interfaces are implicitly &lt;code class=&quot;notranslate&quot;&gt;public&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constructors&lt;/strong&gt;: Can be private (singleton pattern), protecting instantiation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Override rules&lt;/strong&gt;: Cannot reduce visibility when overriding (child cannot be more restrictive than parent)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-encapsulation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-encapsulation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Encapsulation&lt;/a&gt; — access modifiers are the mechanism for data hiding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — override rules depend on access level of parent methods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-packages&quot; class=&quot;internal alias&quot; data-slug=&quot;java-packages&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Packages&lt;/a&gt; — default access is tied to package boundaries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-methods&quot; class=&quot;internal alias&quot; data-slug=&quot;java-methods&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Methods&lt;/a&gt; — every method has an access level&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Protected means access from subclasses, not by subclasses&lt;/strong&gt;: You can access a protected member only through an expression of the subclass type, not the parent type&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reflection bypasses access modifiers&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;setAccessible(true)&lt;/code&gt; breaks encapsulation at runtime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default is not “friendly”&lt;/strong&gt;: Officially called package-private — no keyword; absence of modifier means default&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nested classes&lt;/strong&gt;: Private members of outer class are accessible to inner classes&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Aggregation vs Composition — Weak vs Strong Association</title>
    <link href="https://animishraa05.github.io/wiki/java/java-aggregation-vs-composition" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-aggregation-vs-composition.md" />
    <summary>What’s Being Compared Two forms of association in Java: Aggregation (weak “has-a”) and Composition (strong “has-a”).</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;whats-being-compared&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;What’s Being Compared&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#whats-being-compared&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Two forms of association in Java: &lt;strong&gt;Aggregation&lt;/strong&gt; (weak “has-a”) and &lt;strong&gt;Composition&lt;/strong&gt; (strong “has-a”). Both represent whole-part relationships but differ fundamentally in lifecycle dependency and ownership semantics.&lt;/p&gt;
&lt;h2 id=&quot;the-core-tension&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Core Tension&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-core-tension&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The key question is: &lt;strong&gt;who owns the lifecycle?&lt;/strong&gt; In aggregation, parts can outlive the whole. In composition, the whole owns the parts completely — when the whole dies, the parts die with it. Choosing wrong creates either memory leaks (too strong) or premature destruction (too weak).&lt;/p&gt;
&lt;h2 id=&quot;comparison&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Comparison&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#comparison&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;../../java-aggregation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-aggregation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Aggregation&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;../../java-composition&quot; class=&quot;internal alias&quot; data-slug=&quot;java-composition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Composition&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Relationship strength&lt;/td&gt;
&lt;td&gt;Weak&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lifecycle dependency&lt;/td&gt;
&lt;td&gt;Independent&lt;/td&gt;
&lt;td&gt;Dependent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ownership&lt;/td&gt;
&lt;td&gt;Shared (multiple containers can share)&lt;/td&gt;
&lt;td&gt;Exclusive (one owner)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Object creation&lt;/td&gt;
&lt;td&gt;Created externally, passed in&lt;/td&gt;
&lt;td&gt;Created inside container constructor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UML notation&lt;/td&gt;
&lt;td&gt;Hollow diamond&lt;/td&gt;
&lt;td&gt;Filled diamond&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example&lt;/td&gt;
&lt;td&gt;Company has Employees&lt;/td&gt;
&lt;td&gt;House has Rooms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Part survival after container death&lt;/td&gt;
&lt;td&gt;Survives&lt;/td&gt;
&lt;td&gt;Dies with container&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory implication&lt;/td&gt;
&lt;td&gt;Part may remain reachable&lt;/td&gt;
&lt;td&gt;Part becomes unreachable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code pattern&lt;/td&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;class Company { List&amp;#x3C;Employee&gt; employees; }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code class=&quot;notranslate&quot;&gt;class House { List&amp;#x3C;Room&gt; rooms = new ArrayList&amp;#x3C;&gt;(); }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;when-to-choose-aggregation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;When to Choose Aggregation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#when-to-choose-aggregation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Parts have independent existence (Employees, Students, Customers)&lt;/li&gt;
&lt;li&gt;Parts are shared across multiple containers (a Student in multiple Courses)&lt;/li&gt;
&lt;li&gt;The container is a temporary grouping, not a parent&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-to-choose-composition&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;When to Choose Composition&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#when-to-choose-composition&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;Parts have no meaning outside the container (Rooms of a House, Pages of a Book)&lt;/li&gt;
&lt;li&gt;Exclusive ownership is required (a BankAccount’s TransactionHistory)&lt;/li&gt;
&lt;li&gt;Lifecycle management should be automatic (create part with container, destroy with container)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-insight&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Insight&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-insight&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The distinction is fundamentally about &lt;strong&gt;lifecycle responsibility&lt;/strong&gt;. Aggregation transfers the lifecycle burden to external code (someone else must create and destroy the parts). Composition internalizes it (the container manages everything). This has real consequences: aggregation is more flexible but can cause memory leaks if parts aren’t cleaned up; composition is safer but less reusable.&lt;/p&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../java-aggregation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-aggregation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Aggregation&lt;/a&gt; — weak association with independent lifecycles&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-composition&quot; class=&quot;internal alias&quot; data-slug=&quot;java-composition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Composition&lt;/a&gt; — strong association with dependent lifecycles&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-association&quot; class=&quot;internal alias&quot; data-slug=&quot;java-association&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Association&lt;/a&gt; — the parent concept of both&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-encapsulation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-encapsulation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Encapsulation&lt;/a&gt; — both rely on encapsulation to manage internal state&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-aggregation</title>
    <link href="https://animishraa05.github.io/wiki/java/java-aggregation" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-aggregation.md" />
    <summary>The Problem In some relationships, a class needs to contain or reference other objects, but the contained objects should remain independent — they have their own lifecycle and can exist without the container.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;In some relationships, a class needs to contain or reference other objects, but the contained objects should remain independent — they have their own lifecycle and can exist without the container. For example, a Company has Employees, but employees continue to exist even after the company is dissolved.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Aggregation&lt;/strong&gt; represents a &lt;strong&gt;“has-a” relationship&lt;/strong&gt; where one class contains a reference to another class, but both can exist independently. It is a weak form of association. The contained objects have independent lifecycles — they can exist with or without the container. Aggregation is often described as “Team has Players” where players exist even if the team disbands.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Aggregation is implemented as a field reference where the contained object is created externally and passed in (e.g., via constructor or setter). The container holds a reference but does not manage the lifecycle of the contained object. When the container is garbage collected, the contained object continues to exist if referenced elsewhere. In UML, aggregation is denoted by a hollow diamond on the container side.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_aggregation Pages: 1 --&gt;
&lt;svg width=&quot;616pt&quot; height=&quot;173pt&quot; viewBox=&quot;0.00 0.00 616.00 173.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 168.8)&quot;&gt;
&lt;title&gt;java_aggregation&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-168.8 611.74,-168.8 611.74,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Company --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Company&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;316.39,-164.8 149.65,-164.8 145.65,-160.8 145.65,-99.2 312.39,-99.2 316.39,-103.2 316.39,-164.8&quot;&gt;&lt;/polygon&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;312.39,-160.8 145.65,-160.8&quot;&gt;&lt;/polyline&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;312.39,-160.8 312.39,-99.2&quot;&gt;&lt;/polyline&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;312.39,-160.8 316.39,-164.8&quot;&gt;&lt;/polyline&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.02&quot; y=&quot;-150&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Company&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.02&quot; y=&quot;-135.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Container)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.02&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- String name&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.02&quot; y=&quot;-106.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- List&amp;#x3C;Employee&gt; employees&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Emp1 --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Emp1&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;102.04,-44 0,-44 0,-7.2 102.04,-7.2 102.04,-44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;51.02&quot; y=&quot;-29.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Employee: Alice&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;51.02&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Independent)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Company&amp;#45;&amp;gt;Emp1 --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Company-&gt;Emp1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M175.54,-98.82C148.88,-83.36 117.45,-65.13 92.84,-50.86&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;92.87,-50.87 85.67,-51.32 82.49,-44.85 89.68,-44.4 92.87,-50.87&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;149.08&quot; y=&quot;-72.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;has&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Emp2 --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Emp2&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;217.71,-44 120.33,-44 120.33,-7.2 217.71,-7.2 217.71,-44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.02&quot; y=&quot;-29.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Employee: Bob&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.02&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Independent)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Company&amp;#45;&amp;gt;Emp2 --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Company-&gt;Emp2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M211.91,-98.82C203.41,-84.5 193.49,-67.81 185.34,-54.08&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;188.39,-52.36 180.27,-45.55 182.37,-55.94 188.39,-52.36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;208.08&quot; y=&quot;-72.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;has&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Emp3 --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Emp3&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;350.04,-44 236,-44 236,-7.2 350.04,-7.2 350.04,-44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;293.02&quot; y=&quot;-29.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Employee: Charlie&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;293.02&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Independent)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Company&amp;#45;&amp;gt;Emp3 --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Company-&gt;Emp3&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M250.13,-98.82C258.63,-84.5 268.55,-67.81 276.7,-54.08&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;279.67,-55.94 281.77,-45.55 273.65,-52.36 279.67,-55.94&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;275.63&quot; y=&quot;-72.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;has&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Note --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Note&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;607.74,-51.2 368.3,-51.2 368.3,0 607.74,0 607.74,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;488.02&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Weak Relationship&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;488.02&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Employees exist independently&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;488.02&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Company destroyed → employees survive&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Company&amp;#45;&amp;gt;Note --&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_aggregation Pages: 1 --&gt;
&lt;svg width=&quot;234pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 234.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_aggregation&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 230.08,-172.97 230.08,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;114.7&quot; cy=&quot;-84.66&quot; rx=&quot;57.02&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.7&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Aggregation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ASSOC --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ASSOC&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;181.38&quot; cy=&quot;-41.42&quot; rx=&quot;44.7&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;181.38&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Association&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ASSOC --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ASSOC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M139.91,-68.31C145.66,-64.58 151.76,-60.63 157.46,-56.93&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;130.18&quot; y=&quot;-54.52&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COMP --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COMP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;71.53&quot; cy=&quot;-18&quot; rx=&quot;47.72&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.53&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Composition&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COMP --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COMP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M103.13,-66.79C96.94,-57.23 89.33,-45.48 83.13,-35.91&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;65.62&quot; y=&quot;-54.05&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;48.48&quot; cy=&quot;-128.51&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;48.48&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M89.66,-101.24C84.09,-104.92 78.2,-108.82 72.67,-112.49&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;94.92&quot; y=&quot;-109.56&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- CLASS --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;CLASS&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;158.54&quot; cy=&quot;-150.97&quot; rx=&quot;27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;158.54&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;CLASS --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--CLASS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M126.44,-102.43C133.04,-112.4 141.21,-124.76 147.66,-134.52&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;118.55&quot; y=&quot;-121.17&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Weak relationship&lt;/strong&gt;: The container does not own the contained objects&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Independent lifecycles&lt;/strong&gt;: Contained objects exist independently of the container&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shared ownership&lt;/strong&gt;: A contained object can belong to multiple containers simultaneously&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;External creation&lt;/strong&gt;: Contained objects are typically created outside and passed in&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UML notation&lt;/strong&gt;: Hollow diamond on the container side&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-association&quot; class=&quot;internal alias&quot; data-slug=&quot;java-association&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Association&lt;/a&gt; — aggregation is a specialized form of association&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-composition&quot; class=&quot;internal alias&quot; data-slug=&quot;java-composition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Composition&lt;/a&gt; — composition has dependent lifecycles; aggregation has independent lifecycles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-aggregation-vs-composition&quot; class=&quot;internal alias&quot; data-slug=&quot;java-aggregation-vs-composition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Aggregation vs Composition&lt;/a&gt; — synthesis comparing the two relationship types&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-encapsulation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-encapsulation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Encapsulation&lt;/a&gt; — encapsulation ensures that aggregated objects are accessed through controlled interfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Aggregation vs Association in practice&lt;/strong&gt;: The distinction is subtle — aggregation implies a “whole-part” semantic; plain association does not&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Null container&lt;/strong&gt;: If the container is destroyed, the aggregated objects may lose one reference but continue to exist via other references&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory leaks&lt;/strong&gt;: Holding references to aggregated objects longer than needed can prevent garbage collection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serialization complexity&lt;/strong&gt;: Aggregated objects may need special handling during serialization to avoid deep-copying independent objects&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-arraylist</title>
    <link href="https://animishraa05.github.io/wiki/java/java-arraylist" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-arraylist.md" />
    <summary>The Problem Arrays have a fixed size — once created, they cannot grow or shrink.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Arrays have a fixed size — once created, they cannot grow or shrink. For most applications, the number of elements is not known in advance. A data structure that can grow and shrink dynamically while providing array-like O(1) indexed access is essential.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;ArrayList&lt;/strong&gt; is a resizable array implementation of the &lt;code class=&quot;notranslate&quot;&gt;List&lt;/code&gt; interface. It maintains an internal &lt;code class=&quot;notranslate&quot;&gt;Object[]&lt;/code&gt; array that grows automatically as elements are added. It provides O(1) get/set by index, amortized O(1) add, and O(n) insert/remove in the middle.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When created, ArrayList allocates an internal array of default size 10 (Java 8+). When the array is full and a new element is added, a new array of size &lt;code class=&quot;notranslate&quot;&gt;(oldCapacity * 3/2) + 1&lt;/code&gt; is allocated, and all elements are copied to the new array. Removal at an arbitrary index shifts all subsequent elements left.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot; tabindex=&quot;0&quot; data-language=&quot;dot&quot; data-theme=&quot;github-light github-dark&quot; class=&quot;notranslate&quot;&gt;&lt;span class=&quot;clipboard-button&quot; type=&quot;button&quot; aria-label=&quot;copy source&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 -8 24 24&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;copy-icon&quot;&gt;&lt;use href=&quot;#github-copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 -8 24 24&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;check-icon&quot;&gt;&lt;use href=&quot;#github-check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;code data-language=&quot;dot&quot; data-theme=&quot;github-light github-dark&quot; style=&quot;display: grid;&quot; class=&quot;notranslate&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;digraph java_arraylist {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  rankdir=LR&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  node [shape=box style=filled fillcolor=&quot;#f0f4ff&quot; fontname=&quot;Helvetica&quot; fontsize=12]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  edge [fontname=&quot;Helvetica&quot; fontsize=10]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  AL [label=&quot;ArrayList&amp;#x3C;String&gt;\nsize=3, capacity=10&quot; fillcolor=&quot;#ffe5cc&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  E0 [label=&#039;[0]: &quot;A&quot;&#039;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  E1 [label=&#039;[1]: &quot;B&quot;&#039;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  E2 [label=&#039;[2]: &quot;C&quot;&#039;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  E3 [label=&quot;[3..9]: null&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Add [label=&#039;add(&quot;D&quot;) →\n[3] = &quot;D&quot;\nsize=4&#039; fillcolor=&quot;#d4edda&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Grow [label=&quot;add() when full→\ngrow array\nold*1.5+1&quot; fillcolor=&quot;#ffcccc&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  AL -&gt; E0&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  AL -&gt; E1&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  AL -&gt; E2&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  AL -&gt; E3&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  AL -&gt; Add&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  AL -&gt; Grow&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_arraylist Pages: 1 --&gt;
&lt;svg width=&quot;261pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 261.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_arraylist&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 256.55,-172.97 256.55,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;106.76&quot; cy=&quot;-84.66&quot; rx=&quot;44.55&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;106.76&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;ArrayList&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COLL --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COLL&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;173.45&quot; cy=&quot;-41.42&quot; rx=&quot;79.1&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;173.45&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Collections Framework&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COLL --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COLL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M130.84,-69.05C136.06,-65.66 141.61,-62.06 146.92,-58.62&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;157.38&quot; y=&quot;-66.53&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ARR --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ARR&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;63.6&quot; cy=&quot;-18&quot; rx=&quot;29.56&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;63.6&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Arrays&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ARR --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ARR&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M95.19,-66.79C88.8,-56.92 80.9,-44.72 74.6,-34.99&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;66.39&quot; y=&quot;-53.59&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LL --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LL&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;40.54&quot; cy=&quot;-128.51&quot; rx=&quot;40.54&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;40.54&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;LinkedList&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LL --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M83.23,-100.24C76.83,-104.48 69.92,-109.05 63.55,-113.27&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;100.9&quot; y=&quot;-109.46&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;!-- PERF --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PERF&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;150.6&quot; cy=&quot;-150.97&quot; rx=&quot;48.86&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;150.6&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Performance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;PERF --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--PERF&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M118.51,-102.43C124.8,-111.94 132.53,-123.63 138.82,-133.15&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.91&quot; y=&quot;-120.49&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;O(1) random access&lt;/strong&gt;: get(index) and set(index, value) are constant time&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O(n) insert/delete&lt;/strong&gt;: Inserting or removing in the middle requires shifting elements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Capacity management&lt;/strong&gt;: Initial capacity can be specified; grows automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fail-fast iterator&lt;/strong&gt;: Throws ConcurrentModificationException on concurrent modification&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Collections Framework&lt;/a&gt; — ArrayList implements the List interface&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-arrays&quot; class=&quot;internal alias&quot; data-slug=&quot;java-arrays&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Arrays&lt;/a&gt; — ArrayList is backed by an Object[] array&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Collections Framework&lt;/a&gt; — ArrayList is for random access; LinkedList is better for insert/delete at ends&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-hashmap&quot; class=&quot;internal alias&quot; data-slug=&quot;java-hashmap&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;HashMap&lt;/a&gt; — both are the most commonly used collection implementations&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Capacity not the same as size&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;size()&lt;/code&gt; returns actual element count, not array capacity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SubList is a view&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;subList()&lt;/code&gt; returns a view backed by the original list — modifying either affects both&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;trimToSize()&lt;/strong&gt;: Reduces capacity to current size to save memory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not synchronized&lt;/strong&gt;: Use &lt;code class=&quot;notranslate&quot;&gt;Collections.synchronizedList()&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;CopyOnWriteArrayList&lt;/code&gt; for thread safety&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-arrays</title>
    <link href="https://animishraa05.github.io/wiki/java/java-arrays" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-arrays.md" />
    <summary>The Problem Storing and managing multiple values of the same type is a fundamental programming need.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Storing and managing multiple values of the same type is a fundamental programming need. Without arrays, developers would need a separate variable for every data item — impractical for even a dozen values, impossible for thousands. Programs need a contiguous, indexable data structure for homogeneous collections.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;An &lt;strong&gt;array&lt;/strong&gt; in Java is a container object that holds a fixed number of values of a single type. Arrays are indexed starting at 0, have a fixed length set at creation, and provide O(1) access to any element by index. Java supports single-dimensional arrays, multi-dimensional arrays (arrays of arrays), and jagged arrays (sub-arrays of different lengths).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Arrays are objects on the heap. When created, a contiguous block of memory is allocated: for primitives, the actual values; for objects, references. The length is stored in a header field. Access is bounds-checked at runtime — accessing index &amp;#x3C; 0 or ≥ length throws &lt;code class=&quot;notranslate&quot;&gt;ArrayIndexOutOfBoundsException&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_arrays Pages: 1 --&gt;
&lt;svg width=&quot;541pt&quot; height=&quot;186pt&quot; viewBox=&quot;0.00 0.00 541.00 186.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 182)&quot;&gt;
&lt;title&gt;java_arrays&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-182 536.69,-182 536.69,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Arr --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Arr&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;82.69,-94.4 0,-94.4 0,-57.6 82.69,-57.6 82.69,-94.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;41.34&quot; y=&quot;-79.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Array Object&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;41.34&quot; y=&quot;-65.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;int[5]&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Elem0 --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Elem0&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;172.69,-178 118.69,-178 118.69,-142 172.69,-142 172.69,-178&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;145.69&quot; y=&quot;-156.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[0]: 10&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Arr&amp;#45;&amp;gt;Elem0 --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Arr-&gt;Elem0&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M70.46,-94.82C74.62,-97.81 78.81,-100.93 82.69,-104 94.4,-113.3 106.74,-124.19 117.3,-133.89&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;114.88,-136.41 124.59,-140.66 119.64,-131.29 114.88,-136.41&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Elem1 --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Elem1&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;262.69,-140 208.69,-140 208.69,-104 262.69,-104 262.69,-140&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;235.69&quot; y=&quot;-118.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[1]: 20&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Arr&amp;#45;&amp;gt;Elem1 --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Arr-&gt;Elem1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M83.13,-85.76C116.97,-93.85 164.68,-105.26 197.48,-113.1&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;196.4,-116.44 206.94,-115.36 198.03,-109.63 196.4,-116.44&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Elem2 --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Elem2&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;352.69,-102 298.69,-102 298.69,-66 352.69,-66 352.69,-102&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;325.69&quot; y=&quot;-80.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[2]: 30&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Arr&amp;#45;&amp;gt;Elem2 --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Arr-&gt;Elem2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M83.1,-77.15C137.76,-78.7 234.06,-81.43 287.07,-82.93&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;286.71,-86.43 296.81,-83.21 286.91,-79.43 286.71,-86.43&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Elem3 --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Elem3&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;442.69,-64 388.69,-64 388.69,-28 442.69,-28 442.69,-64&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;415.69&quot; y=&quot;-42.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[3]: 40&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Arr&amp;#45;&amp;gt;Elem3 --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Arr-&gt;Elem3&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M82.9,-72.73C155.42,-66.89 306.3,-54.73 376.82,-49.05&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;377.03,-52.55 386.72,-48.25 376.47,-45.57 377.03,-52.55&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Elem4 --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Elem4&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;532.69,-41 478.69,-41 478.69,-5 532.69,-5 532.69,-41&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;505.69&quot; y=&quot;-19.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[4]: 50&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Arr&amp;#45;&amp;gt;Elem4 --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Arr-&gt;Elem4&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M70.3,-57.21C106.57,-34.71 172.57,0 234.69,0 234.69,0 234.69,0 326.69,0 375.61,0 431.48,-8.65 467.37,-15.34&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;466.32,-18.7 476.8,-17.15 467.63,-11.83 466.32,-18.7&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Elem0&amp;#45;&amp;gt;Elem1 --&gt;
&lt;!-- Elem1&amp;#45;&amp;gt;Elem2 --&gt;
&lt;!-- Elem2&amp;#45;&amp;gt;Elem3 --&gt;
&lt;!-- Elem3&amp;#45;&amp;gt;Elem4 --&gt;
&lt;!-- Note --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Note&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;none&quot; points=&quot;79.7,-149.4 2.99,-149.4 2.99,-112.6 79.7,-112.6 79.7,-149.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;41.34&quot; y=&quot;-134.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Contiguous&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;41.34&quot; y=&quot;-120.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Memory&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_arrays Pages: 1 --&gt;
&lt;svg width=&quot;248pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 248.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_arrays&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 243.69,-172.97 243.69,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;128.31&quot; cy=&quot;-84.66&quot; rx=&quot;35.46&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;128.31&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Arrays&lt;/text&gt;
&lt;/g&gt;
&lt;!-- DT --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;DT&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;194.99&quot; cy=&quot;-41.42&quot; rx=&quot;44.69&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;194.99&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Data Types&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;DT --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--DT&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M150.51,-70.26C157.18,-65.94 164.52,-61.18 171.28,-56.79&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;179.4&quot; y=&quot;-66.23&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LOOP --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LOOP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;85.14&quot; cy=&quot;-18&quot; rx=&quot;28.44&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;85.14&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Loops&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LOOP --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LOOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M116.97,-67.14C110.47,-57.11 102.37,-44.6 95.96,-34.71&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;86.2&quot; y=&quot;-53.63&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- WRAP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;WRAP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;62.09&quot; cy=&quot;-128.51&quot; rx=&quot;62.09&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;62.09&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Wrapper Classes&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;WRAP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--WRAP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M106.26,-99.26C100.24,-103.25 93.67,-107.6 87.48,-111.7&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;83.11&quot; y=&quot;-97.38&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COLL --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COLL&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;172.15&quot; cy=&quot;-150.97&quot; rx=&quot;43.18&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;172.15&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Collections&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COLL --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COLL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M139.82,-102.08C146.22,-111.75 154.15,-123.74 160.55,-133.43&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;163.95&quot; y=&quot;-120.46&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Fixed length&lt;/strong&gt;: Cannot grow or shrink after creation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero-indexed&lt;/strong&gt;: First element at index 0, last at length-1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.length&lt;/strong&gt;: Array length is accessed via the &lt;code class=&quot;notranslate&quot;&gt;length&lt;/code&gt; field (not a method)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-dimensional&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;int[][] matrix = new int[3][4]&lt;/code&gt; — array of 3 arrays of 4 ints each&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-data-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-data-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Data Types&lt;/a&gt; — arrays hold elements of a declared type&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-loops&quot; class=&quot;internal alias&quot; data-slug=&quot;java-loops&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Loops&lt;/a&gt; — arrays are typically traversed with loops&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Collections Framework&lt;/a&gt; — Java’s collections provide dynamic alternatives to fixed-size arrays&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-arraylist&quot; class=&quot;internal alias&quot; data-slug=&quot;java-arraylist&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;ArrayList&lt;/a&gt; — arrays are fixed-size, ArrayList is dynamic&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Array covariance&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;String[]&lt;/code&gt; is a subtype of &lt;code class=&quot;notranslate&quot;&gt;Object[]&lt;/code&gt; — storing a non-String throws &lt;code class=&quot;notranslate&quot;&gt;ArrayStoreException&lt;/code&gt; at runtime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clone is shallow&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;array.clone()&lt;/code&gt; on an object array copies references, not objects&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jagged arrays are arrays of arrays&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;int[][]&lt;/code&gt; where each sub-array can have different lengths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero-length array is valid&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;new int[0]&lt;/code&gt; is useful for returning empty results&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-association</title>
    <link href="https://animishraa05.github.io/wiki/java/java-association" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-association.md" />
    <summary>The Problem Objects in a system rarely exist in isolation — they need to interact, communicate, and reference each other to accomplish tasks.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Objects in a system rarely exist in isolation — they need to interact, communicate, and reference each other to accomplish tasks. Without a formal way to define relationships between classes, the code would have no structure for how objects find and interact with each other, leading to tightly coupled spaghetti.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Association&lt;/strong&gt; is an OOP concept that defines a relationship between two or more classes that are connected to each other. It represents how objects interact with each other and communicate. In association, objects of one class are related to objects of another class, but they can exist independently. Association does not imply ownership — it simply means there is a structural or behavioral link between the classes.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Association is implemented as a field reference: one class holds a reference to another class. The referenced object is passed in (typically via constructor or method parameter) rather than created inside the class. Because the lifecycle is independent, either object can be garbage collected without affecting the other. Association is the most general form of relationship; aggregation and composition are specialized subtypes.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_association Pages: 1 --&gt;
&lt;svg width=&quot;428pt&quot; height=&quot;142pt&quot; viewBox=&quot;0.00 0.00 428.00 142.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 138.4)&quot;&gt;
&lt;title&gt;java_association&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-138.4 423.99,-138.4 423.99,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Teacher --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Teacher&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;146.08,-99.4 0,-99.4 0,-33.8 146.08,-33.8 146.08,-99.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;73.04&quot; y=&quot;-84.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Class: Teacher&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;73.04&quot; y=&quot;-70.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- String name&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;73.04&quot; y=&quot;-55.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- List&amp;#x3C;Student&gt; students&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;73.04&quot; y=&quot;-41.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;teach()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Student --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Student&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;396.31,-134.4 246.91,-134.4 246.91,-68.8 396.31,-68.8 396.31,-134.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;321.61&quot; y=&quot;-119.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Class: Student&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;321.61&quot; y=&quot;-105.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- String name&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;321.61&quot; y=&quot;-90.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- List&amp;#x3C;Teacher&gt; teachers&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;321.61&quot; y=&quot;-76.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;learn()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Teacher&amp;#45;&amp;gt;Student --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Teacher-&gt;Student&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M146.28,-77.05C152.3,-77.92 158.3,-78.78 164.08,-79.6 187.2,-82.89 212.24,-86.43 235.37,-89.68&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;234.66,-93.11 245.05,-91.04 235.64,-86.18 234.66,-93.11&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;184.66&quot; y=&quot;-88.08&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;teaches&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Independent --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Independent&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;419.99,-51.2 223.23,-51.2 223.23,0 419.99,0 419.99,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;321.61&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Both exist independently&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;321.61&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Teacher can exist without Student&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;321.61&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Student can exist without Teacher&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Teacher&amp;#45;&amp;gt;Independent --&gt;
&lt;!-- Student&amp;#45;&amp;gt;Teacher --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Student-&gt;Teacher&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M246.64,-74.16C233.04,-70.19 218.84,-66.73 205.23,-64.6 187.16,-61.77 182.37,-64.4 164.08,-64.6 162,-64.62 159.9,-64.65 157.77,-64.68&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;157.74,-61.18 147.8,-64.83 157.85,-68.18 157.74,-61.18&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;184.66&quot; y=&quot;-67.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;taught by&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_association Pages: 1 --&gt;
&lt;svg width=&quot;236pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 236.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_association&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 231.98,-172.97 231.98,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;114.7&quot; cy=&quot;-84.66&quot; rx=&quot;54.61&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.7&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Association&lt;/text&gt;
&lt;/g&gt;
&lt;!-- AGG --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;AGG&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;181.38&quot; cy=&quot;-41.42&quot; rx=&quot;46.6&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;181.38&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Aggregation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;AGG --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--AGG&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M139.91,-68.31C145.51,-64.68 151.45,-60.83 157.02,-57.22&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;128.2&quot; y=&quot;-54.66&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COMP --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COMP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;71.53&quot; cy=&quot;-18&quot; rx=&quot;47.72&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.53&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Composition&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COMP --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COMP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M103.13,-66.79C96.94,-57.23 89.33,-45.48 83.13,-35.91&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;72.87&quot; y=&quot;-54.05&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;48.48&quot; cy=&quot;-128.51&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;48.48&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M90.04,-100.99C84.3,-104.78 78.2,-108.82 72.49,-112.6&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;95.03&quot; y=&quot;-109.49&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- CLASS --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;CLASS&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;158.54&quot; cy=&quot;-150.97&quot; rx=&quot;27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;158.54&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;CLASS --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--CLASS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M126.44,-102.43C133.04,-112.4 141.21,-124.76 147.66,-134.52&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;118.55&quot; y=&quot;-121.17&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Bi-directional or uni-directional&lt;/strong&gt;: Both classes may know about each other, or only one may hold the reference&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Independent lifecycles&lt;/strong&gt;: Objects can exist without each other&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No ownership&lt;/strong&gt;: Neither class “owns” the other — it’s a peer relationship&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Most general form&lt;/strong&gt;: Association is the broadest type of class relationship&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiplicity&lt;/strong&gt;: Can be one-to-one, one-to-many, many-to-many&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-aggregation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-aggregation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Aggregation&lt;/a&gt; — a weaker form of association with “has-a” semantics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-composition&quot; class=&quot;internal alias&quot; data-slug=&quot;java-composition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Composition&lt;/a&gt; — a stronger form of association with ownership&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — association is a “uses-a” relationship; inheritance is an “is-a” relationship&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-encapsulation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-encapsulation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Encapsulation&lt;/a&gt; — well-encapsulated classes form clean associations&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Association vs Dependency&lt;/strong&gt;: Association is a structural relationship (field reference); dependency is a temporary relationship (method parameter)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Circular references&lt;/strong&gt;: Bidirectional associations can create circular references, complicating garbage collection and serialization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Navigability&lt;/strong&gt;: Not all associations need to be bidirectional — uni-directional reduces coupling&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Checked vs Unchecked Exceptions — Java Exception Type Tradeoffs</title>
    <link href="https://animishraa05.github.io/wiki/java/java-checked-vs-unchecked" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-checked-vs-unchecked.md" />
    <summary>What’s Being Compared Checked exceptions (subclasses of Exception but not RuntimeException) versus unchecked exceptions (RuntimeException and its subclasses).</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;whats-being-compared&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;What’s Being Compared&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#whats-being-compared&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Checked exceptions (subclasses of &lt;code class=&quot;notranslate&quot;&gt;Exception&lt;/code&gt; but not &lt;code class=&quot;notranslate&quot;&gt;RuntimeException&lt;/code&gt;) versus unchecked exceptions (&lt;code class=&quot;notranslate&quot;&gt;RuntimeException&lt;/code&gt; and its subclasses). The distinction determines whether the compiler enforces handling or not — and has been controversial since Java’s inception.&lt;/p&gt;
&lt;h2 id=&quot;the-core-tension&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Core Tension&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-core-tension&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Checked exceptions provide compile-time safety by forcing callers to handle predictable failures, but they create coupling — changing a method’s checked exceptions breaks all callers. Unchecked exceptions are flexible and don’t clutter signatures, but can be silently ignored until runtime.&lt;/p&gt;
&lt;h2 id=&quot;comparison&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Comparison&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#comparison&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;../../java-exception-hierarchy&quot; class=&quot;internal alias&quot; data-slug=&quot;java-exception-hierarchy&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Checked Exceptions&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;../../java-exception-hierarchy&quot; class=&quot;internal alias&quot; data-slug=&quot;java-exception-hierarchy&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Unchecked Exceptions&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Compiler enforcement&lt;/td&gt;
&lt;td&gt;Must be caught or declared&lt;/td&gt;
&lt;td&gt;No enforcement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When to use&lt;/td&gt;
&lt;td&gt;Recoverable external failures (file not found, network down)&lt;/td&gt;
&lt;td&gt;Programming mistakes (null pointer, illegal arg)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Impact on API&lt;/td&gt;
&lt;td&gt;Part of method signature — changes break clients&lt;/td&gt;
&lt;td&gt;Transparent — no signature impact&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Propagation&lt;/td&gt;
&lt;td&gt;Explicit via &lt;code class=&quot;notranslate&quot;&gt;throws&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Automatic up the call stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Examples&lt;/td&gt;
&lt;td&gt;IOException, SQLException, ClassNotFoundException&lt;/td&gt;
&lt;td&gt;NullPointerException, ArrayIndexOutOfBounds, IllegalArgumentException&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;when-to-use-checked-exceptions&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;When to Use Checked Exceptions&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#when-to-use-checked-exceptions&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;The failure is expected and the caller can reasonably recover&lt;/li&gt;
&lt;li&gt;The operation involves external resources (files, network, database)&lt;/li&gt;
&lt;li&gt;The caller MUST handle the failure (e.g., retry, fallback, notify user)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-to-use-unchecked-exceptions&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;When to Use Unchecked Exceptions&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#when-to-use-unchecked-exceptions&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;The error indicates a programming mistake (invalid argument, null reference)&lt;/li&gt;
&lt;li&gt;Recovery is impossible or impractical at the call site&lt;/li&gt;
&lt;li&gt;The failure should propagate to a higher-level error handler&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-insight&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Insight&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-insight&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The checked/unchecked divide mirrors the distinction between anticipated accidents (checked) and bugs (unchecked). Framework and library APIs trend toward unchecked — many modern Java libraries (Spring, Hibernate) wrap checked exceptions in runtime exceptions. The Java Language Specification authors themselves have expressed doubts about checked exceptions’ effectiveness.&lt;/p&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../java-exception-hierarchy&quot; class=&quot;internal alias&quot; data-slug=&quot;java-exception-hierarchy&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Exception Hierarchy&lt;/a&gt; — the structural foundation of this comparison&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-try-catch-finally&quot; class=&quot;internal alias&quot; data-slug=&quot;java-try-catch-finally&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Try-Catch-Finally&lt;/a&gt; — catching checked exceptions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-throw-throws&quot; class=&quot;internal alias&quot; data-slug=&quot;java-throw-throws&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Throw and Throws&lt;/a&gt; — declaring checked exceptions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-custom-exceptions&quot; class=&quot;internal alias&quot; data-slug=&quot;java-custom-exceptions&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Custom Exceptions&lt;/a&gt; — choosing checked vs unchecked when creating exceptions&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-class</title>
    <link href="https://animishraa05.github.io/wiki/java/java-class" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-class.md" />
    <summary>The Problem Without classes, each object would need to be defined individually, with its own set of properties and methods copied from scratch.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Without classes, each object would need to be defined individually, with its own set of properties and methods copied from scratch. Writing code for every object separately leads to massive duplication — every BMW, Mercedes, and Audi would need its own implementation of drive(), brake(), and honk() even though they share the same behavior.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A &lt;strong&gt;class&lt;/strong&gt; is a user-defined blueprint or prototype from which objects are created. It represents the set of properties (fields) and methods (behavior) that are common to all objects of one type. Using classes, you can create multiple objects with the same behavior instead of writing their code multiple times. A class bundles state and behavior into a single logical unit.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A class declaration includes three components in order: &lt;strong&gt;modifiers&lt;/strong&gt; (public, default access), &lt;strong&gt;class name&lt;/strong&gt; (convention: capitalized first letter), and &lt;strong&gt;body&lt;/strong&gt; (fields, methods, constructors surrounded by braces). When the JVM loads a class, it creates a &lt;code class=&quot;notranslate&quot;&gt;Class&lt;/code&gt; object in the method area that serves as the runtime type information. The &lt;code class=&quot;notranslate&quot;&gt;new&lt;/code&gt; keyword allocates heap memory based on the class blueprint, calling the constructor to initialize fields.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_class Pages: 1 --&gt;
&lt;svg width=&quot;745pt&quot; height=&quot;158pt&quot; viewBox=&quot;0.00 0.00 745.00 158.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 154.4)&quot;&gt;
&lt;title&gt;java_class&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-154.4 741.47,-154.4 741.47,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Blueprint --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Blueprint&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;438.69,-150.4 338,-150.4 334,-146.4 334,-113.6 434.69,-113.6 438.69,-117.6 438.69,-150.4&quot;&gt;&lt;/polygon&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;434.69,-146.4 334,-146.4&quot;&gt;&lt;/polyline&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;434.69,-146.4 434.69,-113.6&quot;&gt;&lt;/polyline&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;434.69,-146.4 438.69,-150.4&quot;&gt;&lt;/polyline&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;386.35&quot; y=&quot;-135.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Class (Blueprint)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;386.35&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Car&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Fields --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Fields&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;90.7,-65.6 0,-65.6 0,0 90.7,0 90.7,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;45.35&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Fields (State)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;45.35&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- String brand&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;45.35&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- String model&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;45.35&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- int year&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Blueprint&amp;#45;&amp;gt;Fields --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Blueprint-&gt;Fields&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M333.54,-123.78C277.4,-115.05 186.34,-97.84 101.62,-65.67&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;103.06,-62.47 92.47,-62.11 100.52,-68.99 103.06,-62.47&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Methods --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Methods&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;229.7,-65.6 108.99,-65.6 108.99,0 229.7,0 229.7,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.35&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Methods (Behavior)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.35&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- void drive()&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.35&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- void brake()&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.35&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- void honk()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Blueprint&amp;#45;&amp;gt;Methods --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Blueprint-&gt;Methods&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M345.44,-113.13C318.01,-101.1 280.82,-84.7 240.28,-66.45&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;241.84,-63.32 231.28,-62.4 238.96,-69.7 241.84,-63.32&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Constructor --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Constructor&lt;/title&gt;
&lt;polygon fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; points=&quot;391.04,-51.2 247.66,-51.2 247.66,-14.4 391.04,-14.4 391.04,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;319.35&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Constructor&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;319.35&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Car(brand, model, year)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Blueprint&amp;#45;&amp;gt;Constructor --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Blueprint-&gt;Constructor&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M374.06,-113.17C363.95,-98.51 349.47,-77.5 337.95,-60.78&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;340.97,-59.01 332.42,-52.76 335.21,-62.98 340.97,-59.01&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Instance1 --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Instance1&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;500.12,-65.6 408.58,-65.6 408.58,0 500.12,0 500.12,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;454.35&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Object: BMW&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;454.35&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;brand=&quot;BMW&quot;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;454.35&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;model=&quot;X5&quot;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;454.35&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;year=2024&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Blueprint&amp;#45;&amp;gt;Instance1 --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Blueprint-&gt;Instance1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M398.82,-113.17C406.22,-102.59 415.94,-88.7 425.18,-75.5&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;428.04,-77.51 430.91,-67.31 422.31,-73.49 428.04,-77.51&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;427.48&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;new&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Instance2 --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Instance2&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;632.8,-65.6 517.89,-65.6 517.89,0 632.8,0 632.8,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;575.35&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Object: Mercedes&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;575.35&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;brand=&quot;Mercedes&quot;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;575.35&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;model=&quot;C-Class&quot;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;575.35&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;year=2023&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Blueprint&amp;#45;&amp;gt;Instance2 --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Blueprint-&gt;Instance2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M421.01,-113.17C445.13,-100.77 478.08,-83.82 507.35,-68.77&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;508.88,-71.92 516.18,-64.23 505.68,-65.69 508.88,-71.92&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;484.35&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;new&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Instance3 --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Instance3&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;737.47,-65.6 651.23,-65.6 651.23,0 737.47,0 737.47,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;694.35&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Object: Audi&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;694.35&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;brand=&quot;Audi&quot;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;694.35&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;model=&quot;A4&quot;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;694.35&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;year=2024&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Blueprint&amp;#45;&amp;gt;Instance3 --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Blueprint-&gt;Instance3&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M439.06,-122.11C489.29,-112.62 566.74,-95.34 640.52,-65.49&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;641.6,-68.83 649.5,-61.77 638.93,-62.36 641.6,-68.83&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;596.46&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;new&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_class Pages: 1 --&gt;
&lt;svg width=&quot;214pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 214.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_class&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 210.28,-172.97 210.28,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;109.79&quot; cy=&quot;-84.66&quot; rx=&quot;32.12&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;109.79&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OBJ --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OBJ&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;176.47&quot; cy=&quot;-41.42&quot; rx=&quot;29.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;176.47&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Object&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OBJ --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OBJ&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M131.25,-70.74C139.17,-65.6 148.12,-59.8 155.96,-54.72&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;128.85&quot; y=&quot;-54.63&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;creates&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;66.63&quot; cy=&quot;-18&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;66.63&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M98.67,-67.49C92.38,-57.77 84.52,-45.63 78.16,-35.81&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;74.65&quot; y=&quot;-54.35&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;43.57&quot; cy=&quot;-128.51&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;43.57&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M88.84,-98.53C81.86,-103.15 74.06,-108.32 66.91,-113.05&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;57.61&quot; y=&quot;-97.69&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ENCAP --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ENCAP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;153.63&quot; cy=&quot;-150.97&quot; rx=&quot;52.65&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;153.63&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Encapsulation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ENCAP --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ENCAP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M121.08,-101.73C127.47,-111.4 135.46,-123.48 141.92,-133.26&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;111.24&quot; y=&quot;-120.19&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Blueprint&lt;/strong&gt;: Defines the structure and behavior of objects created from it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modular&lt;/strong&gt;: Groups related state and behavior into a single unit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reusable&lt;/strong&gt;: One class definition creates any number of unique object instances&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convention&lt;/strong&gt;: Class names begin with uppercase letter by convention (e.g., Car, Animal)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default constructor&lt;/strong&gt;: Java provides a no-arg constructor if none is defined explicitly&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-object&quot; class=&quot;internal alias&quot; data-slug=&quot;java-object&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Object&lt;/a&gt; — a class is instantiated to create objects&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-constructors&quot; class=&quot;internal alias&quot; data-slug=&quot;java-constructors&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Constructors&lt;/a&gt; — constructors initialize new class instances&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — subclasses extend a parent class&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-oop-pillars&quot; class=&quot;internal alias&quot; data-slug=&quot;java-oop-pillars&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;The Four OOP Pillars&lt;/a&gt; — classes are the foundation of all four OOP pillars&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;One public class per file&lt;/strong&gt;: A .java file can have at most one public top-level class&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nested classes&lt;/strong&gt;: Inner classes, static nested classes, local classes, and anonymous classes have different rules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default constructor disappears&lt;/strong&gt;: If you define any constructor, the default no-arg constructor is not provided&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class name vs filename&lt;/strong&gt;: The public class name must match the filename (case-sensitive on case-sensitive systems)&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-collections-framework</title>
    <link href="https://animishraa05.github.io/wiki/java/java-collections-framework" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-collections-framework.md" />
    <summary>The Problem Every application manages groups of objects — storing them, searching through them, sorting them, iterating over them.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Every application manages groups of objects — storing them, searching through them, sorting them, iterating over them. Without a standardized collection framework, every developer would reinvent data structures, leading to incompatible APIs, inconsistent behavior, and wasted effort.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The &lt;strong&gt;Java Collections Framework&lt;/strong&gt; is a unified architecture for representing and manipulating collections. It provides interfaces (&lt;code class=&quot;notranslate&quot;&gt;List&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Set&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Queue&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Deque&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Map&lt;/code&gt;), implementations (&lt;code class=&quot;notranslate&quot;&gt;ArrayList&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;HashSet&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;HashMap&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;LinkedList&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;TreeSet&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;PriorityQueue&lt;/code&gt;), and utility classes (&lt;code class=&quot;notranslate&quot;&gt;Collections&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Arrays&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The framework is interface-centric. Code written against interfaces (&lt;code class=&quot;notranslate&quot;&gt;List&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Set&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Map&lt;/code&gt;) works with any implementation. Each implementation has different performance characteristics. The &lt;code class=&quot;notranslate&quot;&gt;Collections&lt;/code&gt; utility class provides algorithms (sort, shuffle, reverse, binarySearch) that work on any appropriate collection type.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_collections Pages: 1 --&gt;
&lt;svg width=&quot;591pt&quot; height=&quot;261pt&quot; viewBox=&quot;0.00 0.00 591.00 261.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 256.8)&quot;&gt;
&lt;title&gt;java_collections&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-256.8 586.68,-256.8 586.68,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Collections --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Collections&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;392.69,-252.8 254.66,-252.8 254.66,-216.8 392.69,-216.8 392.69,-252.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;323.67&quot; y=&quot;-231.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Collections Framework&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Interfaces --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Interfaces&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;372.69,-180.8 274.65,-180.8 274.65,-144.8 372.69,-144.8 372.69,-180.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;323.67&quot; y=&quot;-159.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Core Interfaces&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Collections&amp;#45;&amp;gt;Interfaces --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Collections-&gt;Interfaces&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M323.67,-216.5C323.67,-209.21 323.67,-200.53 323.67,-192.34&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;327.17,-192.42 323.67,-182.42 320.17,-192.42 327.17,-192.42&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- ListI --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ListI&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;173.7,-108.8 59.64,-108.8 59.64,-72 173.7,-72 173.7,-108.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;116.67&quot; y=&quot;-94&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;List&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;116.67&quot; y=&quot;-79.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(ordered, indexed)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Interfaces&amp;#45;&amp;gt;ListI --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Interfaces-&gt;ListI&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M274.35,-145.03C246.13,-135.43 210.42,-123.28 180.12,-112.98&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;181.26,-109.67 170.66,-109.76 179,-116.3 181.26,-109.67&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- SetI --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;SetI&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;325.03,-108.8 230.32,-108.8 230.32,-72 325.03,-72 325.03,-108.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;277.67&quot; y=&quot;-94&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Set&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;277.67&quot; y=&quot;-79.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(no duplicates)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Interfaces&amp;#45;&amp;gt;SetI --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Interfaces-&gt;SetI&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M312.3,-144.4C307.2,-136.59 301.06,-127.19 295.37,-118.49&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;298.46,-116.81 290.06,-110.36 292.6,-120.64 298.46,-116.81&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- QueueI --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;QueueI&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;396.67,-108.8 342.67,-108.8 342.67,-72 396.67,-72 396.67,-108.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;369.67&quot; y=&quot;-94&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Queue&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;369.67&quot; y=&quot;-79.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(FIFO)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Interfaces&amp;#45;&amp;gt;QueueI --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Interfaces-&gt;QueueI&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M335.04,-144.4C340.15,-136.59 346.29,-127.19 351.97,-118.49&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;354.74,-120.64 357.28,-110.36 348.88,-116.81 354.74,-120.64&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- MapI --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;MapI&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;519.02,-108.8 414.33,-108.8 414.33,-72 519.02,-72 519.02,-108.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;466.67&quot; y=&quot;-94&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Map&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;466.67&quot; y=&quot;-79.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(key-value pairs)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Interfaces&amp;#45;&amp;gt;MapI --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Interfaces-&gt;MapI&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M359.02,-144.4C377.54,-135.28 400.46,-124 420.38,-114.19&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;421.7,-117.44 429.13,-109.88 418.61,-111.16 421.7,-117.44&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Impl --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Impl&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;577.04,-252.8 410.31,-252.8 410.31,-216.8 577.04,-216.8 577.04,-252.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;493.67&quot; y=&quot;-231.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Implementations (examples)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- AL --&gt;
&lt;g id=&quot;node8&quot; class=&quot;node&quot;&gt;
&lt;title&gt;AL&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;63.34,-36 0,-36 0,0 63.34,0 63.34,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;31.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;ArrayList&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ListI&amp;#45;&amp;gt;AL --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;ListI-&gt;AL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M95.22,-71.64C84.9,-63.09 72.36,-52.7 61.16,-43.42&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;63.63,-40.92 53.69,-37.24 59.16,-46.31 63.63,-40.92&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- LL --&gt;
&lt;g id=&quot;node9&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LL&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;151.69,-36 81.65,-36 81.65,0 151.69,0 151.69,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;116.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;LinkedList&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ListI&amp;#45;&amp;gt;LL --&gt;
&lt;g id=&quot;edge7&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;ListI-&gt;LL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M116.67,-71.64C116.67,-64.3 116.67,-55.61 116.67,-47.44&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;120.17,-47.54 116.67,-37.54 113.17,-47.54 120.17,-47.54&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- HS --&gt;
&lt;g id=&quot;node10&quot; class=&quot;node&quot;&gt;
&lt;title&gt;HS&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;231.68,-36 169.66,-36 169.66,0 231.68,0 231.68,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;200.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;HashSet&lt;/text&gt;
&lt;/g&gt;
&lt;!-- SetI&amp;#45;&amp;gt;HS --&gt;
&lt;g id=&quot;edge8&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;SetI-&gt;HS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M258.24,-71.64C249.08,-63.25 237.98,-53.11 227.99,-43.97&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;230.42,-41.46 220.68,-37.29 225.7,-46.62 230.42,-41.46&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- TS --&gt;
&lt;g id=&quot;node11&quot; class=&quot;node&quot;&gt;
&lt;title&gt;TS&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;308.01,-36 249.33,-36 249.33,0 308.01,0 308.01,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;278.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;TreeSet&lt;/text&gt;
&lt;/g&gt;
&lt;!-- SetI&amp;#45;&amp;gt;TS --&gt;
&lt;g id=&quot;edge9&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;SetI-&gt;TS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M277.92,-71.64C278.03,-64.3 278.15,-55.61 278.27,-47.44&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;281.77,-47.59 278.41,-37.54 274.77,-47.49 281.77,-47.59&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- PQ --&gt;
&lt;g id=&quot;node14&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PQ&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;415.35,-36 325.99,-36 325.99,0 415.35,0 415.35,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;370.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;PriorityQueue&lt;/text&gt;
&lt;/g&gt;
&lt;!-- QueueI&amp;#45;&amp;gt;PQ --&gt;
&lt;g id=&quot;edge12&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;QueueI-&gt;PQ&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M369.92,-71.64C370.03,-64.3 370.15,-55.61 370.27,-47.44&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;373.77,-47.59 370.41,-37.54 366.77,-47.49 373.77,-47.59&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- HM --&gt;
&lt;g id=&quot;node12&quot; class=&quot;node&quot;&gt;
&lt;title&gt;HM&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;500.35,-36 432.99,-36 432.99,0 500.35,0 500.35,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;466.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;HashMap&lt;/text&gt;
&lt;/g&gt;
&lt;!-- MapI&amp;#45;&amp;gt;HM --&gt;
&lt;g id=&quot;edge10&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;MapI-&gt;HM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M466.67,-71.64C466.67,-64.3 466.67,-55.61 466.67,-47.44&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;470.17,-47.54 466.67,-37.54 463.17,-47.54 470.17,-47.54&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- TM --&gt;
&lt;g id=&quot;node13&quot; class=&quot;node&quot;&gt;
&lt;title&gt;TM&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;582.68,-36 518.66,-36 518.66,0 582.68,0 582.68,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;550.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;TreeMap&lt;/text&gt;
&lt;/g&gt;
&lt;!-- MapI&amp;#45;&amp;gt;TM --&gt;
&lt;g id=&quot;edge11&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;MapI-&gt;TM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M487.87,-71.64C498.07,-63.09 510.46,-52.7 521.53,-43.42&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;523.49,-46.35 528.9,-37.24 518.99,-40.99 523.49,-46.35&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_collections Pages: 1 --&gt;
&lt;svg width=&quot;218pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 218.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_collections&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 214.12,-172.97 214.12,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;98.13&quot; cy=&quot;-84.66&quot; rx=&quot;98.13&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;98.13&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Collections Framework&lt;/text&gt;
&lt;/g&gt;
&lt;!-- AL --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;AL&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;164.81&quot; cy=&quot;-41.42&quot; rx=&quot;36.75&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;164.81&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;ArrayList&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;AL --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--AL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M125.25,-67.07C130.88,-63.42 136.75,-59.62 142.19,-56.09&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;113.46&quot; y=&quot;-53.48&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- HM --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;HM&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;54.97&quot; cy=&quot;-18&quot; rx=&quot;39.02&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;54.97&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;HashMap&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;HM --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--HM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M86.33,-66.44C80.04,-56.73 72.35,-44.84 66.15,-35.27&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;55.98&quot; y=&quot;-53.56&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- IT --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;IT&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;31.91&quot; cy=&quot;-128.51&quot; rx=&quot;31.46&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;31.91&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Iterator&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;IT --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--IT&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M71.58,-102.24C65.24,-106.43 58.58,-110.85 52.56,-114.84&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;82.33&quot; y=&quot;-111.24&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LAMB --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LAMB&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;141.97&quot; cy=&quot;-150.97&quot; rx=&quot;68.15&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;141.97&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Lambda &amp;#x26; Streams&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LAMB --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LAMB&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M110.11,-102.78C116.3,-112.13 123.82,-123.52 130.01,-132.87&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;140.32&quot; y=&quot;-120.52&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Interface-based design&lt;/strong&gt;: Code to interfaces, not implementations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autoboxing integration&lt;/strong&gt;: Collections work with wrapper classes, autoboxing handles primitives&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fail-fast iterators&lt;/strong&gt;: Detect concurrent modification and throw &lt;code class=&quot;notranslate&quot;&gt;ConcurrentModificationException&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Synchronized wrappers&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;Collections.synchronizedList()&lt;/code&gt; creates thread-safe wrappers&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-wrapper-classes&quot; class=&quot;internal alias&quot; data-slug=&quot;java-wrapper-classes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Wrapper Classes&lt;/a&gt; — collections store objects, wrappers bridge primitives&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — the framework is interface-driven&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-lambda-and-streams&quot; class=&quot;internal alias&quot; data-slug=&quot;java-lambda-and-streams&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Streams &amp;#x26; Lambdas&lt;/a&gt; — streams operate on collections&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-iterator&quot; class=&quot;internal alias&quot; data-slug=&quot;java-iterator&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Iterator&lt;/a&gt; — iterator is the fundamental traversal mechanism&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;ConcurrentModificationException&lt;/strong&gt;: Modifying a collection while iterating (except via iterator.remove())&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No primitive collections&lt;/strong&gt;: Each element requires a wrapper object — memory overhead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hash collision performance&lt;/strong&gt;: HashMap degrades to O(n) with bad hash codes or hash collisions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Null handling&lt;/strong&gt;: Some implementations (TreeSet, TreeMap) do not allow null elements&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-comparable-and-comparator</title>
    <link href="https://animishraa05.github.io/wiki/java/java-comparable-and-comparator" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-comparable-and-comparator.md" />
    <summary>The Problem Sorting and ordered collections (TreeSet, TreeMap) need to determine the relative order of objects.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Sorting and ordered collections (TreeSet, TreeMap) need to determine the relative order of objects. Without a standard way to compare objects, the JVM would have no idea how to sort a list of custom objects or maintain order in a sorted collection.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Comparable&lt;/strong&gt; defines a natural ordering for objects of a class — the class implements &lt;code class=&quot;notranslate&quot;&gt;Comparable&amp;#x3C;T&gt;&lt;/code&gt; and overrides &lt;code class=&quot;notranslate&quot;&gt;compareTo()&lt;/code&gt;. &lt;strong&gt;Comparator&lt;/strong&gt; is a separate interface for defining custom orderings — useful when you need multiple sorting strategies or cannot modify the class.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;code class=&quot;notranslate&quot;&gt;Comparable.compareTo(other)&lt;/code&gt; returns negative (this &amp;#x3C; other), zero (this  other), or positive (this &gt; other). Sorted collections (TreeSet, TreeMap) and utility methods (&lt;code class=&quot;notranslate&quot;&gt;Collections.sort()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Arrays.sort()&lt;/code&gt;) use compareTo() by default. A &lt;code class=&quot;notranslate&quot;&gt;Comparator&lt;/code&gt; can be passed to override the natural order.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_comparison Pages: 1 --&gt;
&lt;svg width=&quot;599pt&quot; height=&quot;218pt&quot; viewBox=&quot;0.00 0.00 599.00 218.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 214.4)&quot;&gt;
&lt;title&gt;java_comparison&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-214.4 595.43,-214.4 595.43,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Comparison --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Comparison&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;411.75,-210.4 282.37,-210.4 282.37,-174.4 411.75,-174.4 411.75,-210.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;347.06&quot; y=&quot;-188.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Java Object Ordering&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Comparable --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Comparable&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;341.41,-138.4 202.71,-138.4 202.71,-87.2 341.41,-87.2 341.41,-138.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;272.06&quot; y=&quot;-123.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Comparable&amp;#x3C;T&gt;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;272.06&quot; y=&quot;-109.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Natural Order&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;272.06&quot; y=&quot;-94.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;int compareTo(T other)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Comparison&amp;#45;&amp;gt;Comparable --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Comparison-&gt;Comparable&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M330.42,-174.18C322.61,-166.1 313.02,-156.18 303.9,-146.75&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;306.58,-144.48 297.11,-139.72 301.54,-149.34 306.58,-144.48&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Comparator --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Comparator&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;487.08,-138.4 359.04,-138.4 359.04,-87.2 487.08,-87.2 487.08,-138.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;423.06&quot; y=&quot;-123.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Comparator&amp;#x3C;T&gt;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;423.06&quot; y=&quot;-109.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Custom Order&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;423.06&quot; y=&quot;-94.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;int compare(T a, T b)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Comparison&amp;#45;&amp;gt;Comparator --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Comparison-&gt;Comparator&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M363.93,-174.18C371.84,-166.1 381.55,-156.18 390.79,-146.75&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;393.19,-149.3 397.68,-139.71 388.19,-144.41 393.19,-149.3&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Impl --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Impl&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;270.12,-44 0,-44 0,-7.2 270.12,-7.2 270.12,-44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;135.06&quot; y=&quot;-29.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;class Person implements Comparable&amp;#x3C;Person&gt;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;135.06&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;  compareTo(): compare by age&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Comparable&amp;#45;&amp;gt;Impl --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Comparable-&gt;Impl&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M232.07,-86.93C213.54,-75.41 191.63,-61.78 173.32,-50.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;175.19,-47.44 164.85,-45.13 171.5,-53.38 175.19,-47.44&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Uses --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Uses&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;408.41,-51.2 287.72,-51.2 287.72,0 408.41,0 408.41,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;348.06&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Collections.sort(list)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;348.06&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;TreeSet, TreeMap&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;348.06&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Arrays.sort()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Comparable&amp;#45;&amp;gt;Uses --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Comparable-&gt;Uses&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M294.04,-87.16C301.62,-78.67 310.23,-69.01 318.32,-59.94&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;320.81,-62.4 324.86,-52.61 315.59,-57.75 320.81,-62.4&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Custom --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Custom&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;591.43,-44 426.69,-44 426.69,-7.2 591.43,-7.2 591.43,-44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;509.06&quot; y=&quot;-29.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;new Comparator&amp;#x3C;Person&gt;()&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;509.06&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;  compare(): sort by name&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Comparator&amp;#45;&amp;gt;Custom --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Comparator-&gt;Custom&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M447.94,-87.16C458.92,-76.27 471.85,-63.47 482.97,-52.44&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;485.35,-55.01 489.99,-45.49 480.43,-50.04 485.35,-55.01&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Comparator&amp;#45;&amp;gt;Uses --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Comparator-&gt;Uses&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M401.37,-87.16C393.89,-78.67 385.39,-69.01 377.41,-59.94&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;380.2,-57.81 370.96,-52.62 374.95,-62.44 380.2,-57.81&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_comparison Pages: 1 --&gt;
&lt;svg width=&quot;272pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 272.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_comparison&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 268.1,-172.97 268.1,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;150.64&quot; cy=&quot;-84.66&quot; rx=&quot;113.45&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;150.64&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Comparable &amp;#x26; Comparator&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COLL --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COLL&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;217.33&quot; cy=&quot;-41.42&quot; rx=&quot;43.18&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;217.33&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Collections&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COLL --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COLL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M178.15,-66.82C183.32,-63.47 188.68,-60 193.71,-56.73&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;167.43&quot; y=&quot;-53.68&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- TREE --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;TREE&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;107.48&quot; cy=&quot;-18&quot; rx=&quot;67.01&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;107.48&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;TreeSet / TreeMap&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;TREE --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--TREE&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M138.85,-66.44C132.76,-57.04 125.35,-45.59 119.26,-36.19&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;108.79&quot; y=&quot;-54.02&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OBJ --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OBJ&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;84.43&quot; cy=&quot;-128.51&quot; rx=&quot;84.43&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;84.43&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Object.equals/hashCode&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OBJ --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OBJ&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M123.71,-102.49C119.41,-105.34 114.97,-108.28 110.69,-111.11&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;103.44&quot; y=&quot;-109.5&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- STREAM --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;STREAM&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;194.49&quot; cy=&quot;-150.97&quot; rx=&quot;57.17&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;194.49&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Stream.sorted()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;STREAM --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--STREAM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M162.63,-102.78C168.91,-112.29 176.59,-123.89 182.83,-133.33&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;192.99&quot; y=&quot;-120.75&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Consistent with equals&lt;/strong&gt;: Natural ordering should be consistent with equals (or document if not)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comparator methods&lt;/strong&gt; (Java 8+): &lt;code class=&quot;notranslate&quot;&gt;Comparator.comparing()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;thenComparing()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;reversed()&lt;/code&gt; for fluent construction&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;null handling&lt;/strong&gt;: Comparators can handle nulls via &lt;code class=&quot;notranslate&quot;&gt;nullsFirst()&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;nullsLast()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sorting stability&lt;/strong&gt;: Java’s sorting algorithms (TimSort, Dual-Pivot QuickSort) are stable&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Collections Framework&lt;/a&gt; — sorted collections require comparison&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Collections Framework&lt;/a&gt; — TreeSet and TreeMap use Comparable/Comparator for sorting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-iterator&quot; class=&quot;internal alias&quot; data-slug=&quot;java-iterator&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Iterator&lt;/a&gt; — Comparable defines ordering; Iterator defines traversal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;compareTo must be transitive&lt;/strong&gt;: If a &gt; b and b &gt; c, then a &gt; c must hold&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;compareTo must be reflexive&lt;/strong&gt;: a.compareTo(a) must return 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;compareTo consistency with equals&lt;/strong&gt;: Inconsistent classes break Set/Map contracts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;compare returns int&lt;/strong&gt;: Overflow risk when subtracting values — use &lt;code class=&quot;notranslate&quot;&gt;Integer.compare()&lt;/code&gt; instead&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-compile-time-polymorphism</title>
    <link href="https://animishraa05.github.io/wiki/java/java-compile-time-polymorphism" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-compile-time-polymorphism.md" />
    <summary>The Problem A class often needs multiple versions of the same operation that differ only in their inputs.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A class often needs multiple versions of the same operation that differ only in their inputs. A &lt;code class=&quot;notranslate&quot;&gt;print()&lt;/code&gt; method should work with integers, strings, and booleans. Without overloading, each variant would need a distinct method name (printInt, printString, printBool), making the API inconsistent and hard to remember.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Compile-time Polymorphism&lt;/strong&gt; (also called &lt;strong&gt;Method Overloading&lt;/strong&gt;) allows multiple methods in the same class to share the same name but have different parameter lists. The compiler determines which version to call based on the number, type, and order of arguments. This decision is made at compile time — hence the name. Overloading improves code readability by using consistent names for logically similar operations.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The compiler uses the method signature (name + parameter types) to select the correct overload. It applies widening conversions, autoboxing, and varargs in that order of preference. If no matching overload is found, a compile error occurs. Overloaded methods can differ in parameter count, parameter types, or both. Return type alone is NOT sufficient for overloading — the compiler needs parameter differences.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: compile_time_polymorphism Pages: 1 --&gt;
&lt;svg width=&quot;482pt&quot; height=&quot;155pt&quot; viewBox=&quot;0.00 0.00 482.00 155.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 150.8)&quot;&gt;
&lt;title&gt;compile_time_polymorphism&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-150.8 477.98,-150.8 477.98,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Call --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Call&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;84.04,-99 0,-99 0,-47.8 84.04,-47.8 84.04,-99&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;42.02&quot; y=&quot;-84.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;add(2, 3)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;42.02&quot; y=&quot;-69.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;add(2, 3, 4)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;42.02&quot; y=&quot;-55.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;add(2.5, 3.5)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Compiler --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Compiler&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;219.05,-91.8 121.04,-91.8 121.04,-55 219.05,-55 219.05,-91.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;170.05&quot; y=&quot;-77&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Compiler&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;170.05&quot; y=&quot;-62.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Compile Time)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Call&amp;#45;&amp;gt;Compiler --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Call-&gt;Compiler&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M84.29,-73.4C92.28,-73.4 100.81,-73.4 109.26,-73.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;109.17,-76.9 119.16,-73.4 109.16,-69.9 109.17,-76.9&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Resolved1 --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Resolved1&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;450.62,-146.8 354.57,-146.8 354.57,-110 450.62,-110 450.62,-146.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;402.59&quot; y=&quot;-132&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;add(int a, int b)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;402.59&quot; y=&quot;-117.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;→ returns 5&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Compiler&amp;#45;&amp;gt;Resolved1 --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Compiler-&gt;Resolved1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M219.35,-85.14C225.31,-86.58 231.32,-88.03 237.05,-89.4 272.27,-97.84 311.75,-107.2 343.21,-114.64&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;342.4,-118.04 352.94,-116.94 344.01,-111.23 342.4,-118.04&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;275.13&quot; y=&quot;-109.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;match: 2 ints&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Resolved2 --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Resolved2&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;464.95,-91.8 340.23,-91.8 340.23,-55 464.95,-55 464.95,-91.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;402.59&quot; y=&quot;-77&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;add(int a, int b, int c)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;402.59&quot; y=&quot;-62.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;→ returns 9&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Compiler&amp;#45;&amp;gt;Resolved2 --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Compiler-&gt;Resolved2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M219.38,-73.4C251.07,-73.4 293.09,-73.4 328.8,-73.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;328.63,-76.9 338.63,-73.4 328.63,-69.9 328.63,-76.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;275.13&quot; y=&quot;-76.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;match: 3 ints&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Resolved3 --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Resolved3&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;473.98,-36.8 331.21,-36.8 331.21,0 473.98,0 473.98,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;402.59&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;add(double a, double b)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;402.59&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;→ returns 6.0&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Compiler&amp;#45;&amp;gt;Resolved3 --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Compiler-&gt;Resolved3&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M219.35,-61.66C225.31,-60.22 231.32,-58.77 237.05,-57.4 264.03,-50.93 293.51,-43.93 319.97,-37.66&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;320.72,-41.08 329.64,-35.37 319.1,-34.27 320.72,-41.08&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;275.13&quot; y=&quot;-60.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;match: 2 doubles&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_compile_time_poly Pages: 1 --&gt;
&lt;svg width=&quot;235pt&quot; height=&quot;176pt&quot; viewBox=&quot;0.00 0.00 235.00 176.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 171.7)&quot;&gt;
&lt;title&gt;semantic_compile_time_poly&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-171.7 231.14,-171.7 231.14,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;98.25&quot; cy=&quot;-89.71&quot; rx=&quot;83.3&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;98.25&quot; y=&quot;-85.81&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Compile-Time Poly&lt;/text&gt;
&lt;/g&gt;
&lt;!-- POLY --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;POLY&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;174.13&quot; cy=&quot;-101.49&quot; rx=&quot;53.01&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;174.13&quot; y=&quot;-98.19&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Polymorphism&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;POLY --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--POLY&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M166.58,-100.32C166.72,-100.34 166.87,-100.36 167.01,-100.38&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;148.29&quot; y=&quot;-92.25&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- METHODS --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;METHODS&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;70.87&quot; cy=&quot;-18&quot; rx=&quot;36&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;70.87&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Methods&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;METHODS --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--METHODS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M91.34,-71.62C87.16,-60.66 81.85,-46.75 77.68,-35.84&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;64.25&quot; y=&quot;-56.43&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- RUNTIME --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;RUNTIME&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;50.37&quot; cy=&quot;-149.7&quot; rx=&quot;50.37&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.37&quot; y=&quot;-146.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Runtime Poly&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;RUNTIME --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--RUNTIME&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M83.88,-107.71C77.71,-115.44 70.53,-124.44 64.39,-132.13&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;46.63&quot; y=&quot;-122.62&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Same name, different parameters&lt;/strong&gt;: Number, type, or order of parameters must differ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compile-time resolution&lt;/strong&gt;: Which method to call is decided when code is compiled&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Return type alone is insufficient&lt;/strong&gt;: Methods differing only in return type cause compile error&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Widening preferred over boxing&lt;/strong&gt;: Java prefers widening (int → double) over autoboxing (int → Integer)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Varargs is last resort&lt;/strong&gt;: If no exact match is found, varargs is used as fallback&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — compile-time polymorphism is one of two polymorphism types&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-runtime-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-runtime-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Runtime Polymorphism&lt;/a&gt; — compile-time vs runtime resolution&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-methods&quot; class=&quot;internal alias&quot; data-slug=&quot;java-methods&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Methods&lt;/a&gt; — overloading is a method-level feature&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-overloading-vs-overriding&quot; class=&quot;internal alias&quot; data-slug=&quot;java-overloading-vs-overriding&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Overloading vs Overriding&lt;/a&gt; — synthesis comparing the two&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Ambiguous call&lt;/strong&gt;: If two overloads are equally applicable (e.g., &lt;code class=&quot;notranslate&quot;&gt;method(Integer)&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;method(String)&lt;/code&gt; with &lt;code class=&quot;notranslate&quot;&gt;null&lt;/code&gt;), the compiler reports ambiguity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Widening + boxing chain&lt;/strong&gt;: Widening followed by boxing is not supported — &lt;code class=&quot;notranslate&quot;&gt;int&lt;/code&gt; cannot widen then autobox to &lt;code class=&quot;notranslate&quot;&gt;Long&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Varargs ambiguity&lt;/strong&gt;: Overloading with varargs can create ambiguous calls — the compiler cannot distinguish &lt;code class=&quot;notranslate&quot;&gt;method(int...)&lt;/code&gt; from &lt;code class=&quot;notranslate&quot;&gt;method(Integer...)&lt;/code&gt; with &lt;code class=&quot;notranslate&quot;&gt;null&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-composition</title>
    <link href="https://animishraa05.github.io/wiki/java/java-composition" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-composition.md" />
    <summary>The Problem Some objects are inherently composed of parts that have no meaning outside the whole.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Some objects are inherently composed of parts that have no meaning outside the whole. A House is made of Rooms — if the house is destroyed, the rooms cease to exist as meaningful entities. Without composition, modeling these inseparable whole-part relationships would require manual lifecycle management across unrelated objects.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Composition&lt;/strong&gt; is a strong form of association where one class owns another class. If the parent object is destroyed, the child object also gets destroyed. It represents an &lt;strong&gt;“is-part-of”&lt;/strong&gt; relationship with dependent lifecycles — the child cannot exist independently of the parent. Composition is the strongest form of class relationship in Java.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Composition is implemented by creating the contained object inside the container’s constructor. The contained object is exclusively owned by the container — no external references to it exist. When the container is garbage collected, the contained object becomes unreachable and is also eligible for GC. In UML, composition is denoted by a filled diamond on the container side. The lifecycle is strictly bound: parent creates child, parent destroys child.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_composition Pages: 1 --&gt;
&lt;svg width=&quot;596pt&quot; height=&quot;202pt&quot; viewBox=&quot;0.00 0.00 596.00 202.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 197.6)&quot;&gt;
&lt;title&gt;java_composition&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-197.6 591.74,-197.6 591.74,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- House --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;House&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;355.23,-193.6 140.81,-193.6 136.81,-189.6 136.81,-113.6 351.23,-113.6 355.23,-117.6 355.23,-193.6&quot;&gt;&lt;/polygon&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;351.23,-189.6 136.81,-189.6&quot;&gt;&lt;/polyline&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;351.23,-189.6 351.23,-113.6&quot;&gt;&lt;/polyline&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;351.23,-189.6 355.23,-193.6&quot;&gt;&lt;/polyline&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;246.02&quot; y=&quot;-178.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;House&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;246.02&quot; y=&quot;-164.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Owner)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;246.02&quot; y=&quot;-150&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- List&amp;#x3C;Room&gt; rooms&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;246.02&quot; y=&quot;-135.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- Address address&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;246.02&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;House() { rooms = new ArrayList&amp;#x3C;&gt;() }&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Room1 --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Room1&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;118.04,-51.2 0,-51.2 0,-14.4 118.04,-14.4 118.04,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;59.02&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Room: LivingRoom&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;59.02&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Dependent)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- House&amp;#45;&amp;gt;Room1 --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;House-&gt;Room1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; d=&quot;M180.88,-113.17C171.41,-107.33 161.82,-101.35 152.76,-95.6 134,-83.69 113.35,-70.12 96.23,-58.75&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; points=&quot;97.02,-59.28 89.81,-59.28 87.03,-52.62 94.24,-52.62 97.02,-59.28&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;181.39&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;composed of&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Room2 --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Room2&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;239.71,-51.2 136.34,-51.2 136.34,-14.4 239.71,-14.4 239.71,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;188.02&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Room: Bedroom&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;188.02&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Dependent)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- House&amp;#45;&amp;gt;Room2 --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;House-&gt;Room2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; d=&quot;M226.87,-113.37C218.56,-96.35 209.02,-76.82 201.48,-61.37&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; points=&quot;205.47,-61.57 197.94,-54.12 199.18,-64.64 205.47,-61.57&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;245.65&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;composed of&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Room3 --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Room3&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;352.37,-51.2 257.67,-51.2 257.67,-14.4 352.37,-14.4 352.37,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;305.02&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Room: Kitchen&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;305.02&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Dependent)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- House&amp;#45;&amp;gt;Room3 --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;House-&gt;Room3&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; d=&quot;M268.74,-113.32C271.95,-107.43 275.14,-101.39 278.02,-95.6 283.4,-84.79 288.83,-72.65 293.39,-62.02&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; points=&quot;295.95,-64.96 296.62,-54.38 289.5,-62.23 295.95,-64.96&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;312.24&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;composed of&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Note --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Note&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;587.74,-65.6 370.3,-65.6 370.3,0 587.74,0 587.74,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;479.02&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Strong Relationship&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;479.02&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Rooms created inside House&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;479.02&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;House destroyed → Rooms destroyed&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;479.02&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Dependent lifecycle&lt;/text&gt;
&lt;/g&gt;
&lt;!-- House&amp;#45;&amp;gt;Note --&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_composition Pages: 1 --&gt;
&lt;svg width=&quot;234pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 234.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_composition&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 230.08,-172.97 230.08,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;114.7&quot; cy=&quot;-84.66&quot; rx=&quot;58.44&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.7&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Composition&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ASSOC --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ASSOC&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;181.38&quot; cy=&quot;-41.42&quot; rx=&quot;44.7&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;181.38&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Association&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ASSOC --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ASSOC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M140.29,-68.06C145.87,-64.44 151.76,-60.63 157.28,-57.04&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;130.28&quot; y=&quot;-54.45&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- AGG --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;AGG&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;71.53&quot; cy=&quot;-18&quot; rx=&quot;46.6&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.53&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Aggregation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;AGG --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--AGG&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M103.13,-66.79C96.94,-57.23 89.33,-45.48 83.13,-35.91&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;65.62&quot; y=&quot;-54.05&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;48.48&quot; cy=&quot;-128.51&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;48.48&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M89.66,-101.24C84.09,-104.92 78.2,-108.82 72.67,-112.49&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;94.92&quot; y=&quot;-109.56&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ENCAP --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ENCAP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;158.54&quot; cy=&quot;-150.97&quot; rx=&quot;52.65&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;158.54&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Encapsulation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ENCAP --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ENCAP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M126.44,-102.43C132.74,-111.94 140.46,-123.63 146.76,-133.15&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;122.84&quot; y=&quot;-120.49&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Strong relationship&lt;/strong&gt;: Parent owns child exclusively&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependent lifecycles&lt;/strong&gt;: Child cannot exist without parent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exclusive ownership&lt;/strong&gt;: Child object is owned by exactly one parent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Internal creation&lt;/strong&gt;: Child objects are typically created inside the parent’s constructor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UML notation&lt;/strong&gt;: Filled diamond on the container side&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-association&quot; class=&quot;internal alias&quot; data-slug=&quot;java-association&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Association&lt;/a&gt; — composition is the strongest form of association&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-aggregation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-aggregation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Aggregation&lt;/a&gt; — aggregation has independent lifecycles; composition has dependent lifecycles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-aggregation-vs-composition&quot; class=&quot;internal alias&quot; data-slug=&quot;java-aggregation-vs-composition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Aggregation vs Composition&lt;/a&gt; — synthesis comparing the two&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-encapsulation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-encapsulation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Encapsulation&lt;/a&gt; — composition relies on encapsulation to hide internal parts&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Cloning and copy&lt;/strong&gt;: Deep cloning a composed object means cloning all child parts — shallow copy shares references to children&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Circular composition&lt;/strong&gt;: A Room cannot contain a House that contains the same Room — this creates reference cycles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Composition vs Aggregation in code&lt;/strong&gt;: The difference is in object creation — if created externally and passed in, it’s aggregation; if created in the constructor, it’s composition&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serialization&lt;/strong&gt;: Serializing a composed object serializes all its parts; deserialization reconstructs the entire graph&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-constructors</title>
    <link href="https://animishraa05.github.io/wiki/java/java-constructors" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-constructors.md" />
    <summary>The Problem When an object is created, its fields need to be initialized to a valid state.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When an object is created, its fields need to be initialized to a valid state. Without constructors, developers would need to manually call an initialization method after every &lt;code class=&quot;notranslate&quot;&gt;new&lt;/code&gt; — an error-prone pattern that could be forgotten, leading to objects in invalid states.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A &lt;strong&gt;constructor&lt;/strong&gt; is a special method that initializes a newly created object. It has the same name as the class, has no return type, and is called automatically when &lt;code class=&quot;notranslate&quot;&gt;new&lt;/code&gt; is used. Java supports &lt;strong&gt;constructor overloading&lt;/strong&gt; (multiple constructors with different parameters), default constructors (compiler-generated if none are defined), and constructor chaining with &lt;code class=&quot;notranslate&quot;&gt;this()&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;super()&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When &lt;code class=&quot;notranslate&quot;&gt;new&lt;/code&gt; is executed, the JVM allocates memory for the object on the heap, initializes fields to defaults (0, null, false), then calls the constructor. The constructor can set fields, validate parameters, call other constructors via &lt;code class=&quot;notranslate&quot;&gt;this()&lt;/code&gt;, or call the parent constructor via &lt;code class=&quot;notranslate&quot;&gt;super()&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot; tabindex=&quot;0&quot; data-language=&quot;dot&quot; data-theme=&quot;github-light github-dark&quot; class=&quot;notranslate&quot;&gt;&lt;span class=&quot;clipboard-button&quot; type=&quot;button&quot; aria-label=&quot;copy source&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 -8 24 24&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;copy-icon&quot;&gt;&lt;use href=&quot;#github-copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 -8 24 24&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;check-icon&quot;&gt;&lt;use href=&quot;#github-check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;code data-language=&quot;dot&quot; data-theme=&quot;github-light github-dark&quot; style=&quot;display: grid;&quot; class=&quot;notranslate&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;digraph java_constructors {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  rankdir=TB&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  node [shape=box style=filled fillcolor=&quot;#f0f4ff&quot; fontname=&quot;Helvetica&quot; fontsize=12]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  edge [fontname=&quot;Helvetica&quot; fontsize=10]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  New [label=&#039;new Person(&quot;Alice&quot;, 30)&#039;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Alloc [label=&quot;JVM allocates\nheap memory&quot; fillcolor=&quot;#ffe5cc&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Init [label=&quot;Fields defaulted\nto 0 / null / false&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Constr [label=&quot;Constructor called\nPerson(String, int)&quot; fillcolor=&quot;#d4edda&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Object [label=&quot;Fully initialized\nPerson object&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  New -&gt; Alloc&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Alloc -&gt; Init&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Init -&gt; Constr&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Constr -&gt; Object&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_constructors Pages: 1 --&gt;
&lt;svg width=&quot;242pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 242.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_constructors&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 238.03,-172.97 238.03,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;114.7&quot; cy=&quot;-84.66&quot; rx=&quot;59.39&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.7&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Constructors&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ENCAP --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ENCAP&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;181.38&quot; cy=&quot;-41.42&quot; rx=&quot;52.65&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;181.38&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Encapsulation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ENCAP --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ENCAP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M140.29,-68.06C145.58,-64.63 151.14,-61.03 156.41,-57.61&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;129.84&quot; y=&quot;-54.74&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;71.53&quot; cy=&quot;-18&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.53&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M103.13,-66.79C96.84,-57.08 89.08,-45.1 82.83,-35.45&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;72.72&quot; y=&quot;-53.82&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;48.48&quot; cy=&quot;-128.51&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;48.48&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M89.66,-101.24C84.09,-104.92 78.2,-108.82 72.67,-112.49&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;101.43&quot; y=&quot;-109.56&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OBJ --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OBJ&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;158.54&quot; cy=&quot;-150.97&quot; rx=&quot;48.47&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;158.54&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Object Class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OBJ --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OBJ&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M126.68,-102.78C132.96,-112.29 140.64,-123.89 146.88,-133.33&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;123.02&quot; y=&quot;-120.75&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;No return type&lt;/strong&gt;: Not even &lt;code class=&quot;notranslate&quot;&gt;void&lt;/code&gt; — constructors are not methods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default constructor&lt;/strong&gt;: Automatic only if no constructor is defined&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chaining&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;this()&lt;/code&gt; calls another constructor in the same class; &lt;code class=&quot;notranslate&quot;&gt;super()&lt;/code&gt; calls the parent constructor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overloading&lt;/strong&gt;: Multiple constructors with different parameter lists&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — constructor chaining via super() enables parent initialization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-object-class&quot; class=&quot;internal alias&quot; data-slug=&quot;java-object-class&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Object Class&lt;/a&gt; — every constructor implicitly calls super()&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — constructor chaining with super() enables parent initialization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-methods&quot; class=&quot;internal alias&quot; data-slug=&quot;java-methods&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Methods&lt;/a&gt; — constructors have no return type and different invocation semantics&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Private constructor&lt;/strong&gt;: Prevents instantiation (utility classes, singletons)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constructor in enum&lt;/strong&gt;: Always private — cannot create enum instances externally&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default field values&lt;/strong&gt;: Instance fields initialize to defaults before constructor body runs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;final fields&lt;/strong&gt;: Must be assigned by the end of every constructor (or compile error)&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-control-flow</title>
    <link href="https://animishraa05.github.io/wiki/java/java-control-flow" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-control-flow.md" />
    <summary>The Problem Programs rarely execute in a straight line from start to finish.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Programs rarely execute in a straight line from start to finish. They need to make decisions based on conditions — handle different inputs, validate states, choose between algorithms. Without control flow constructs, every program would be a single fixed sequence of operations.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Java provides &lt;strong&gt;decision-making constructs&lt;/strong&gt; that allow the program to execute different code paths based on boolean conditions. The primary constructs are &lt;code class=&quot;notranslate&quot;&gt;if&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;if-else&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;if-else if-else&lt;/code&gt; chains, and &lt;code class=&quot;notranslate&quot;&gt;switch&lt;/code&gt; statements. These evaluate a condition and branch to the matching code block.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The &lt;code class=&quot;notranslate&quot;&gt;if&lt;/code&gt; statement evaluates a boolean expression. If true, the associated block executes; if false, execution moves to the &lt;code class=&quot;notranslate&quot;&gt;else&lt;/code&gt; block (if present) or continues after the &lt;code class=&quot;notranslate&quot;&gt;if&lt;/code&gt; construct. The &lt;code class=&quot;notranslate&quot;&gt;switch&lt;/code&gt; statement evaluates an expression and jumps to the matching &lt;code class=&quot;notranslate&quot;&gt;case&lt;/code&gt; label using a jump table (or lookup switch in the JVM). Each case must end with &lt;code class=&quot;notranslate&quot;&gt;break&lt;/code&gt; to prevent fall-through.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_control_flow Pages: 1 --&gt;
&lt;svg width=&quot;274pt&quot; height=&quot;203pt&quot; viewBox=&quot;0.00 0.00 274.00 203.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 198.6)&quot;&gt;
&lt;title&gt;java_control_flow&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-198.6 270.4,-198.6 270.4,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Start --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Start&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;164.38,-194.6 97.68,-194.6 97.68,-158.6 164.38,-158.6 164.38,-194.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;131.03&quot; y=&quot;-173&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Condition&lt;/text&gt;
&lt;/g&gt;
&lt;!-- IfTrue --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;IfTrue&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;122.07,-110.6 0,-110.6 0,-73.8 122.07,-73.8 122.07,-110.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;61.03&quot; y=&quot;-95.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;If Block&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;61.03&quot; y=&quot;-81.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Executed when true&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Start&amp;#45;&amp;gt;IfTrue --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Start-&gt;IfTrue&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M116.19,-158.13C106.69,-146.95 94.2,-132.24 83.5,-119.65&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;86.22,-117.44 77.08,-112.09 80.89,-121.97 86.22,-117.44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;108.84&quot; y=&quot;-131.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;true&lt;/text&gt;
&lt;/g&gt;
&lt;!-- IfFalse --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;IfFalse&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;266.4,-110.6 139.67,-110.6 139.67,-73.8 266.4,-73.8 266.4,-110.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;203.03&quot; y=&quot;-95.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Else Block&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;203.03&quot; y=&quot;-81.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Executed when false&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Start&amp;#45;&amp;gt;IfFalse --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Start-&gt;IfFalse&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M146.3,-158.13C156.16,-146.84 169.17,-131.95 180.24,-119.28&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;182.6,-121.91 186.54,-112.07 177.33,-117.3 182.6,-121.91&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;181.91&quot; y=&quot;-131.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;false&lt;/text&gt;
&lt;/g&gt;
&lt;!-- After --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;After&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;165.38,-36.8 96.68,-36.8 96.68,0 165.38,0 165.38,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;131.03&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Continue&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;131.03&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Execution&lt;/text&gt;
&lt;/g&gt;
&lt;!-- IfTrue&amp;#45;&amp;gt;After --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;IfTrue-&gt;After&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M78.34,-73.45C86.64,-64.93 96.76,-54.56 105.89,-45.19&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;108.4,-47.63 112.87,-38.03 103.39,-42.74 108.4,-47.63&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- IfFalse&amp;#45;&amp;gt;After --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;IfFalse-&gt;After&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M185.24,-73.45C176.67,-64.91 166.23,-54.5 156.82,-45.11&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;159.5,-42.84 149.95,-38.26 154.56,-47.8 159.5,-42.84&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_control_flow Pages: 1 --&gt;
&lt;svg width=&quot;244pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 244.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_control_flow&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 239.91,-172.97 239.91,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;129.07&quot; cy=&quot;-84.66&quot; rx=&quot;58.91&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;129.07&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Control Flow&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OP --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OP&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;195.76&quot; cy=&quot;-41.42&quot; rx=&quot;40.16&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;195.76&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Operators&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OP --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M154.66,-68.06C160.54,-64.25 166.76,-60.22 172.53,-56.48&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;145.09&quot; y=&quot;-54.17&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LOOP --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LOOP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;85.91&quot; cy=&quot;-18&quot; rx=&quot;28.44&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;85.91&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Loops&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LOOP --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LOOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M117.5,-66.79C111.11,-56.92 103.21,-44.72 96.91,-34.99&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;93.45&quot; y=&quot;-53.59&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JUMP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;JUMP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;62.85&quot; cy=&quot;-128.51&quot; rx=&quot;62.85&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;62.85&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Jump Statements&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;JUMP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--JUMP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M104.04,-101.24C98.91,-104.63 93.5,-108.21 88.36,-111.62&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;82.44&quot; y=&quot;-109.13&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- VAR --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;VAR&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;172.91&quot; cy=&quot;-150.97&quot; rx=&quot;38.27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;172.91&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Variables&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;VAR --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--VAR&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M140.82,-102.43C147.21,-112.09 155.09,-124.01 161.44,-133.61&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;164.89&quot; y=&quot;-120.72&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Boolean-only conditions&lt;/strong&gt;: Unlike C/C++, only boolean expressions are valid in conditions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Switch supports&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;int&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;char&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;String&lt;/code&gt; (Java 7+), and enums&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced switch&lt;/strong&gt; (Java 14+): Arrow syntax with no fall-through&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ternary operator&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;condition ? valueIfTrue : valueIfFalse&lt;/code&gt; as an expression&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-operators&quot; class=&quot;internal alias&quot; data-slug=&quot;java-operators&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Operators&lt;/a&gt; — relational and logical operators produce the boolean conditions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-loops&quot; class=&quot;internal alias&quot; data-slug=&quot;java-loops&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Loops&lt;/a&gt; — loops also use boolean conditions for termination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-loops&quot; class=&quot;internal alias&quot; data-slug=&quot;java-loops&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Loops&lt;/a&gt; — branching (if-else) vs repetition (loops) are complementary control structures&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-methods&quot; class=&quot;internal alias&quot; data-slug=&quot;java-methods&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Methods&lt;/a&gt; — methods encapsulate control flow into reusable units&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Dangling else&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;else&lt;/code&gt; binds to the nearest unmatched &lt;code class=&quot;notranslate&quot;&gt;if&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Switch fall-through&lt;/strong&gt;: Missing &lt;code class=&quot;notranslate&quot;&gt;break&lt;/code&gt; causes execution to continue into the next case&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;String switch compiles differently&lt;/strong&gt;: JVM uses hashCode + equals under the hood&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ternary nesting&lt;/strong&gt;: Nested ternaries reduce readability — prefer if-else for complex conditions&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-custom-exceptions</title>
    <link href="https://animishraa05.github.io/wiki/java/java-custom-exceptions" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-custom-exceptions.md" />
    <summary>The Problem Built-in exception types (IOException, NullPointerException) cover system-level and general errors but cannot capture domain-specific failures.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Built-in exception types (IOException, NullPointerException) cover system-level and general errors but cannot capture domain-specific failures. A banking application needs &lt;code class=&quot;notranslate&quot;&gt;InsufficientFundsException&lt;/code&gt;, not a generic &lt;code class=&quot;notranslate&quot;&gt;IllegalArgumentException&lt;/code&gt;. Without custom exceptions, error handling becomes vague and loses business context.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Custom exceptions&lt;/strong&gt; are user-defined classes that extend &lt;code class=&quot;notranslate&quot;&gt;Exception&lt;/code&gt; (for checked) or &lt;code class=&quot;notranslate&quot;&gt;RuntimeException&lt;/code&gt; (for unchecked). They carry domain-specific information — error codes, field names, additional context — enabling precise error handling and meaningful error messages.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A custom exception class extends &lt;code class=&quot;notranslate&quot;&gt;Exception&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;RuntimeException&lt;/code&gt;, provides constructors, and optionally adds custom fields and methods. When thrown, it behaves like any other exception — it can be caught by type, propagated via &lt;code class=&quot;notranslate&quot;&gt;throws&lt;/code&gt;, and chained to other exceptions.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot; tabindex=&quot;0&quot; data-language=&quot;dot&quot; data-theme=&quot;github-light github-dark&quot; class=&quot;notranslate&quot;&gt;&lt;span class=&quot;clipboard-button&quot; type=&quot;button&quot; aria-label=&quot;copy source&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 -8 24 24&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;copy-icon&quot;&gt;&lt;use href=&quot;#github-copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 -8 24 24&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;check-icon&quot;&gt;&lt;use href=&quot;#github-check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;code data-language=&quot;dot&quot; data-theme=&quot;github-light github-dark&quot; style=&quot;display: grid;&quot; class=&quot;notranslate&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;digraph java_custom_exceptions {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  rankdir=TB&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  node [shape=box style=filled fillcolor=&quot;#f0f4ff&quot; fontname=&quot;Helvetica&quot; fontsize=12]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  edge [fontname=&quot;Helvetica&quot; fontsize=10]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Base [label=&quot;Exception (or RuntimeException)&quot; fillcolor=&quot;#ffe5cc&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Custom [label=&quot;InsufficientFundsException\n- double balance\n- double requested\n- String accountId&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Throw [label=&#039;throw new\nInsufficientFundsException(bal, req)&#039;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Catch [label=&quot;catch (InsufficientFundsException e)\ne.getBalance()\ne.getRequested()&quot; fillcolor=&quot;#d4edda&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Custom -&gt; Base [label=&quot;extends&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Throw -&gt; Custom&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Catch -&gt; Throw [label=&quot;caught by type&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_custom_exceptions Pages: 1 --&gt;
&lt;svg width=&quot;273pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 273.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_custom_exceptions&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 269.4,-172.97 269.4,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;127.92&quot; cy=&quot;-84.66&quot; rx=&quot;84.75&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;127.92&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Custom Exceptions&lt;/text&gt;
&lt;/g&gt;
&lt;!-- HIER --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;HIER&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;194.6&quot; cy=&quot;-41.42&quot; rx=&quot;70.79&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;194.6&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Exception Hierarchy&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;HIER --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--HIER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M154.66,-67.32C159.15,-64.41 163.81,-61.39 168.29,-58.48&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;142.97&quot; y=&quot;-65.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- TT --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;TT&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;84.76&quot; cy=&quot;-18&quot; rx=&quot;59.43&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;84.76&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Throw &amp;#x26; Throws&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;TT --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--TT&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M116.12,-66.44C109.93,-56.88 102.38,-45.22 96.24,-35.73&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;85.92&quot; y=&quot;-53.79&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- TC --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;TC&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;61.7&quot; cy=&quot;-128.51&quot; rx=&quot;61.7&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;61.7&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Try-Catch-Finally&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;TC --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--TC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M101.75,-101.99C96.83,-105.24 91.7,-108.64 86.81,-111.88&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.54&quot; y=&quot;-109.63&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;171.76&quot; cy=&quot;-150.97&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;171.76&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M139.9,-102.78C146.19,-112.29 153.86,-123.89 160.1,-133.33&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;163.76&quot; y=&quot;-120.75&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Checked vs unchecked choice&lt;/strong&gt;: Extend &lt;code class=&quot;notranslate&quot;&gt;Exception&lt;/code&gt; for recoverable business errors; &lt;code class=&quot;notranslate&quot;&gt;RuntimeException&lt;/code&gt; for programming mistakes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constructors&lt;/strong&gt;: Typically provide no-arg, message, cause, and all-combined constructors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom fields&lt;/strong&gt;: Add domain data (error codes, entity IDs) for richer handling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serializable&lt;/strong&gt;: Exception implements Serializable — custom fields should be serializable too&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-exception-hierarchy&quot; class=&quot;internal alias&quot; data-slug=&quot;java-exception-hierarchy&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Exception Hierarchy&lt;/a&gt; — custom exceptions extend Exception or RuntimeException&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-throw-throws&quot; class=&quot;internal alias&quot; data-slug=&quot;java-throw-throws&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Throw and Throws&lt;/a&gt; — custom exceptions are thrown with &lt;code class=&quot;notranslate&quot;&gt;throw&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-jdbc&quot; class=&quot;internal alias&quot; data-slug=&quot;java-jdbc&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java JDBC&lt;/a&gt; — database layers define SQLException subtypes or wrap them in custom exceptions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-try-catch-finally&quot; class=&quot;internal alias&quot; data-slug=&quot;java-try-catch-finally&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Try-Catch-Finally&lt;/a&gt; — custom exceptions are caught like any other&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Serialization UID&lt;/strong&gt;: Always define &lt;code class=&quot;notranslate&quot;&gt;serialVersionUID&lt;/code&gt; to avoid InvalidClassException across versions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Too many exception types&lt;/strong&gt;: Proliferating custom exceptions creates maintenance burden&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrapper exceptions&lt;/strong&gt;: Throwing custom exception wrapping the original cause preserves the stack trace&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Checked exception fatigue&lt;/strong&gt;: Overusing checked custom exceptions makes APIs painful to use&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-data-types</title>
    <link href="https://animishraa05.github.io/wiki/java/java-data-types" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-data-types.md" />
    <summary>The Problem Every value in a program occupies memory, and the compiler needs to know how much space to allocate and how to interpret the bits.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Every value in a program occupies memory, and the compiler needs to know how much space to allocate and how to interpret the bits. Without a type system, the same 32 bits could represent an integer, a floating-point number, or four characters — leading to errors, portability issues, and unpredictable behavior across platforms.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Java has eight &lt;strong&gt;primitive data types&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;byte&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;short&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;int&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;long&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;float&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;double&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;boolean&lt;/code&gt;, and &lt;code class=&quot;notranslate&quot;&gt;char&lt;/code&gt;. Each has a fixed size and range that is platform-independent, guaranteeing the same behavior on any JVM. All other types are reference types (objects and arrays).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When a variable of a primitive type is declared, the JVM allocates exactly the specified number of bytes for it (e.g., 4 bytes for &lt;code class=&quot;notranslate&quot;&gt;int&lt;/code&gt;). Primitives are stored directly on the stack (for local variables) or inline in objects (for fields). They are passed by value — a copy is made. Operations on primitives map directly to CPU instructions, making them faster than objects.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_data_types Pages: 1 --&gt;
&lt;svg width=&quot;394pt&quot; height=&quot;158pt&quot; viewBox=&quot;0.00 0.00 394.00 158.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 153.6)&quot;&gt;
&lt;title&gt;java_data_types&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-153.6 389.69,-153.6 389.69,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Primitives --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Primitives&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;264.36,-149.6 137.66,-149.6 137.66,-113.6 264.36,-113.6 264.36,-149.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;201.01&quot; y=&quot;-128&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Java Primitive Types&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Int --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Int&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;84.02,-65.6 0,-65.6 0,0 84.02,0 84.02,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;42.01&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;byte (8-bit)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;42.01&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;short (16-bit)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;42.01&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;int (32-bit)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;42.01&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;long (64-bit)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Primitives&amp;#45;&amp;gt;Int --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Primitives-&gt;Int&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M141.37,-113.13C129.06,-108.34 116.52,-102.51 105.53,-95.6 95.86,-89.52 86.46,-81.76 77.98,-73.82&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;80.52,-71.41 70.92,-66.93 75.63,-76.42 80.52,-71.41&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;135.27&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;integral types&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Float --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Float&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;195.7,-51.2 102.32,-51.2 102.32,-14.4 195.7,-14.4 195.7,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;149.01&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;float (32-bit)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;149.01&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;double (64-bit)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Primitives&amp;#45;&amp;gt;Float --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Primitives-&gt;Float&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M187.1,-113.33C183.02,-107.84 178.74,-101.63 175.3,-95.6 169.3,-85.07 163.84,-72.91 159.47,-62.17&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;162.8,-61.07 155.89,-53.04 156.28,-63.63 162.8,-61.07&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;203.66&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;floating point&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Char --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Char&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;294.35,-51.2 213.67,-51.2 213.67,-14.4 294.35,-14.4 294.35,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;254.01&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;char (16-bit)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;254.01&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Unicode&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Primitives&amp;#45;&amp;gt;Char --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Primitives-&gt;Char&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M218.85,-113.11C223.58,-107.81 228.38,-101.75 232.01,-95.6 238.01,-85.45 242.75,-73.4 246.28,-62.64&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;249.62,-63.67 249.18,-53.09 242.93,-61.63 249.62,-63.67&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;245.85&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;text&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Bool --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Bool&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;385.69,-51.2 312.33,-51.2 312.33,-14.4 385.69,-14.4 385.69,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;349.01&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;boolean&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;349.01&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(true/false)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Primitives&amp;#45;&amp;gt;Bool --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Primitives-&gt;Bool&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M229.85,-113.18C238.91,-107.63 248.91,-101.42 258.01,-95.6 278.26,-82.64 283.12,-79.1 303.01,-65.6 306.7,-63.09 310.55,-60.46 314.38,-57.84&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;316.26,-60.79 322.51,-52.23 312.29,-55.02 316.26,-60.79&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;290.27&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;logical&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_java_types Pages: 1 --&gt;
&lt;svg width=&quot;243pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 243.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_java_types&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 239.15,-172.97 239.15,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;106.37&quot; cy=&quot;-84.66&quot; rx=&quot;54.61&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;106.37&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Data Types&lt;/text&gt;
&lt;/g&gt;
&lt;!-- WRAP --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;WRAP&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;173.06&quot; cy=&quot;-41.42&quot; rx=&quot;62.09&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;173.06&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Wrapper Classes&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;WRAP --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--WRAP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M131.59,-68.31C136.75,-64.96 142.19,-61.44 147.37,-58.08&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;159.74&quot; y=&quot;-65.89&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- VAR --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;VAR&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;63.21&quot; cy=&quot;-18&quot; rx=&quot;38.27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;63.21&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Variables&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;VAR --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--VAR&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M94.81,-66.79C88.52,-57.08 80.76,-45.1 74.51,-35.45&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;64.4&quot; y=&quot;-53.82&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;40.16&quot; cy=&quot;-128.51&quot; rx=&quot;40.16&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;40.16&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Operators&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M81.72,-100.99C75.54,-105.08 68.94,-109.45 62.86,-113.47&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;92.55&quot; y=&quot;-109.93&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- MEM --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;MEM&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;150.22&quot; cy=&quot;-150.97&quot; rx=&quot;76.09&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;150.22&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Memory Management&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;MEM --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--MEM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M118.12,-102.43C124.41,-111.94 132.14,-123.63 138.44,-133.15&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.52&quot; y=&quot;-120.49&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Fixed sizes across all platforms&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;int&lt;/code&gt; is always 32 bits, &lt;code class=&quot;notranslate&quot;&gt;long&lt;/code&gt; always 64 bits&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Signed integers&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;byte&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;short&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;int&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;long&lt;/code&gt; are all signed (no unsigned primitives until Java 8)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IEEE 754 floats&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;float&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;double&lt;/code&gt; follow the IEEE 754 standard&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;char is unsigned 16-bit&lt;/strong&gt;: Represents Unicode code units, not ASCII&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-platform-independence&quot; class=&quot;internal alias&quot; data-slug=&quot;java-platform-independence&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Platform Independence&lt;/a&gt; — fixed sizes across platforms are a key part of WORA&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-wrapper-classes&quot; class=&quot;internal alias&quot; data-slug=&quot;java-wrapper-classes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Wrapper Classes&lt;/a&gt; — each primitive has a corresponding wrapper type&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-variables&quot; class=&quot;internal alias&quot; data-slug=&quot;java-variables&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Variables&lt;/a&gt; — every variable has a declared type&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-memory-management&quot; class=&quot;internal alias&quot; data-slug=&quot;java-memory-management&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Memory Management&lt;/a&gt; — primitives vs objects have different memory layouts&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;No unsigned primitives&lt;/strong&gt; for &lt;code class=&quot;notranslate&quot;&gt;byte&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;short&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;int&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;long&lt;/code&gt; until Java 8 introduced unsigned API methods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;char != byte&lt;/strong&gt;: char is 16-bit Unicode, not a single byte&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Floating-point precision&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;float&lt;/code&gt; has ~7 decimal digits, &lt;code class=&quot;notranslate&quot;&gt;double&lt;/code&gt; has ~15 — rounding errors are common&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Division by zero&lt;/strong&gt;: Integer types throw &lt;code class=&quot;notranslate&quot;&gt;ArithmeticException&lt;/code&gt;; floating-point returns Infinity or NaN&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-deadlock</title>
    <link href="https://animishraa05.github.io/wiki/java/java-deadlock" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-deadlock.md" />
    <summary>The Problem When multiple threads need multiple locks, they can get stuck waiting for each other indefinitely.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When multiple threads need multiple locks, they can get stuck waiting for each other indefinitely. Thread A holds lock 1 and waits for lock 2, while Thread B holds lock 2 and waits for lock 1. Neither can proceed — they are permanently blocked.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Deadlock&lt;/strong&gt; occurs when two or more threads are each waiting for locks held by the others, and none can proceed. The four necessary conditions are: mutual exclusion, hold-and-wait, no preemption, and circular wait. Breaking any one condition prevents deadlock.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Deadlock detection tools (jstack, JVisualVM) dump thread stacks to identify blocked threads and their held locks. Prevention strategies include: locking in a consistent global order, using tryLock() with timeouts, reducing lock scope, and using higher-level concurrency utilities.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_deadlock Pages: 1 --&gt;
&lt;svg width=&quot;220pt&quot; height=&quot;129pt&quot; viewBox=&quot;0.00 0.00 220.00 129.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 124.8)&quot;&gt;
&lt;title&gt;java_deadlock&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-124.8 215.66,-124.8 215.66,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- T1 --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;T1&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;74.71,-120.8 10.68,-120.8 10.68,-84.8 74.71,-84.8 74.71,-120.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;42.69&quot; y=&quot;-99.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Thread 1&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LockA --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LockA&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;87.71,-36.8 7.68,-36.8 7.68,0 87.71,0 87.71,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;47.69&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Lock A&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;47.69&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(held by T1)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- T1&amp;#45;&amp;gt;LockA --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;T1-&gt;LockA&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M13.69,-84.45C3.83,-76.2 -3.48,-65.76 1.9,-54.8 3.63,-51.26 5.91,-47.98 8.52,-44.96&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;10.77,-47.65 15.51,-38.18 5.9,-42.63 10.77,-47.65&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;20.8&quot; y=&quot;-57.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;acquires&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LockB --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LockB&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;209.71,-36.8 129.68,-36.8 129.68,0 209.71,0 209.71,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.69&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Lock B&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.69&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(held by T2)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- T1&amp;#45;&amp;gt;LockB --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;T1-&gt;LockB&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;red&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M44.78,-84.55C46.84,-74.64 50.89,-62.64 58.92,-54.8 67.81,-46.11 93.78,-37.59 118.34,-31.09&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;red&quot; stroke=&quot;red&quot; points=&quot;119.17,-34.49 127.99,-28.62 117.44,-27.71 119.17,-34.49&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;80.31&quot; y=&quot;-57.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;WAITING&lt;/text&gt;
&lt;/g&gt;
&lt;!-- T2 --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;T2&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;178.71,-120.8 114.68,-120.8 114.68,-84.8 178.71,-84.8 178.71,-120.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;146.69&quot; y=&quot;-99.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Thread 2&lt;/text&gt;
&lt;/g&gt;
&lt;!-- T2&amp;#45;&amp;gt;LockA --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;T2-&gt;LockA&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;red&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M133.78,-84.55C126.22,-75.12 116.12,-63.6 105.69,-54.8 100.96,-50.81 95.73,-46.96 90.4,-43.37&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;red&quot; stroke=&quot;red&quot; points=&quot;92.38,-40.49 82.08,-38.03 88.6,-46.38 92.38,-40.49&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;139.48&quot; y=&quot;-57.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;WAITING&lt;/text&gt;
&lt;/g&gt;
&lt;!-- T2&amp;#45;&amp;gt;LockB --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;T2-&gt;LockB&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M162.27,-84.45C166.11,-79.15 169.69,-73.06 171.69,-66.8 173.56,-60.97 174.18,-54.53 174.11,-48.32&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;177.6,-48.13 173.39,-38.41 170.62,-48.64 177.6,-48.13&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;192.76&quot; y=&quot;-57.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;acquires&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_deadlock Pages: 1 --&gt;
&lt;svg width=&quot;272pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 272.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_deadlock&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 267.9,-172.97 267.9,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;138.89&quot; cy=&quot;-84.66&quot; rx=&quot;46.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;138.89&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Deadlock&lt;/text&gt;
&lt;/g&gt;
&lt;!-- SYNC --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;SYNC&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;205.58&quot; cy=&quot;-41.42&quot; rx=&quot;58.32&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;205.58&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Synchronization&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;SYNC --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--SYNC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M162.97,-69.05C168.49,-65.47 174.38,-61.65 179.96,-58.03&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;189.97&quot; y=&quot;-66.24&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THREAD --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THREAD&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;95.73&quot; cy=&quot;-18&quot; rx=&quot;52.64&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;95.73&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Multithreading&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;THREAD --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--THREAD&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M127.33,-66.79C121.13,-57.23 113.53,-45.48 107.33,-35.91&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;98.82&quot; y=&quot;-54.05&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- EXEC --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;EXEC&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;72.67&quot; cy=&quot;-128.51&quot; rx=&quot;72.67&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;72.67&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Executor Framework&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;EXEC --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--EXEC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M114.99,-100.49C109.65,-104.02 103.97,-107.78 98.56,-111.37&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;93.01&quot; y=&quot;-97.83&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LOCK --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LOCK&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;182.74&quot; cy=&quot;-150.97&quot; rx=&quot;54.16&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;182.74&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;ReentrantLock&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LOCK --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LOCK&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M150.64,-102.43C156.93,-111.94 164.66,-123.63 170.95,-133.15&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;174.56&quot; y=&quot;-120.49&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Four conditions&lt;/strong&gt;: All four must hold for deadlock to occur&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Circular wait&lt;/strong&gt;: The defining condition — a cycle of threads waiting for each other’s locks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detection&lt;/strong&gt;: jstack and thread dump analysis reveal deadlocked threads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prevention&lt;/strong&gt;: Consistent lock ordering is the simplest prevention strategy&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-synchronization&quot; class=&quot;internal alias&quot; data-slug=&quot;java-synchronization&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Synchronization&lt;/a&gt; — deadlock requires multiple synchronized resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-multithreading&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multithreading&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Multithreading&lt;/a&gt; — deadlock requires at least two threads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-executor-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-executor-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Executor Framework&lt;/a&gt; — executors can be designed to avoid deadlock&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-synchronization&quot; class=&quot;internal alias&quot; data-slug=&quot;java-synchronization&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Synchronization&lt;/a&gt; — thread safety and deadlock avoidance both require proper synchronization&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Livelock&lt;/strong&gt;: Threads are not blocked but keep retrying an operation that always fails&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource starvation&lt;/strong&gt;: A thread is perpetually denied access to a resource (not deadlock but equally bad)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nested monitors&lt;/strong&gt;: synchronized block inside another synchronized block on different locks creates deadlock risk&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deadlock recovery is impractical&lt;/strong&gt;: Prevention and avoidance are better than detection&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-encapsulation</title>
    <link href="https://animishraa05.github.io/wiki/java/java-encapsulation" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-encapsulation.md" />
    <summary>The Problem When an object’s internal data is directly exposed, any code can modify it to an invalid state — setting a person’s age to -5, changing an account balance without authorization, or breaking invariants that other methods depend on.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When an object’s internal data is directly exposed, any code can modify it to an invalid state — setting a person’s age to -5, changing an account balance without authorization, or breaking invariants that other methods depend on. Without encapsulation, debugging becomes impossible because any line of code could be responsible. The class has no control over its own data.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Encapsulation&lt;/strong&gt; is the process of wrapping data (fields) and the methods that operate on that data into a single unit (class), acting as a &lt;strong&gt;protective shield&lt;/strong&gt; that prevents data from being accessed directly from outside the class. Fields are declared &lt;code class=&quot;notranslate&quot;&gt;private&lt;/code&gt;, and access is provided through &lt;code class=&quot;notranslate&quot;&gt;public&lt;/code&gt; getter and setter methods. This improves data security, maintainability, and provides controlled access.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Fields are marked &lt;code class=&quot;notranslate&quot;&gt;private&lt;/code&gt; to prevent external access. Getter methods expose values; setter methods validate and update values before applying changes. This allows the class to maintain invariants — for example, a setAge() method can reject negative values. The internal representation can change without affecting external code because all access goes through the controlled interface.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_encapsulation Pages: 1 --&gt;
&lt;svg width=&quot;441pt&quot; height=&quot;197pt&quot; viewBox=&quot;0.00 0.00 441.00 197.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 193)&quot;&gt;
&lt;title&gt;java_encapsulation&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-193 437.27,-193 437.27,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- External --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;External&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;92.04,-142.4 0,-142.4 0,-106.4 92.04,-106.4 92.04,-142.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;46.02&quot; y=&quot;-120.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;External Code&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Getters --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Getters&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;276.55,-189 185.84,-189 185.84,-137.8 276.55,-137.8 276.55,-189&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.2&quot; y=&quot;-174.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;public getters:&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.2&quot; y=&quot;-159.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;getName()&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.2&quot; y=&quot;-145.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;getAge()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- External&amp;#45;&amp;gt;Getters --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;External-&gt;Getters&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M92.3,-134.04C117.14,-139.33 148.16,-145.93 174.48,-151.54&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;173.45,-154.9 183.96,-153.56 174.91,-148.05 173.45,-154.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;123.1&quot; y=&quot;-145.73&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;reads&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Setters --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Setters&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;282.88,-120.2 179.52,-120.2 179.52,-54.6 282.88,-54.6 282.88,-120.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.2&quot; y=&quot;-105.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;public setters:&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.2&quot; y=&quot;-91&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;setName(String)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.2&quot; y=&quot;-76.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;setAge(int)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.2&quot; y=&quot;-62.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(validates input)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- External&amp;#45;&amp;gt;Setters --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;External-&gt;Setters&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M92.3,-115.25C115.18,-110.63 143.28,-104.96 168.14,-99.93&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;168.71,-103.39 177.82,-97.98 167.33,-96.53 168.71,-103.39&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;123.1&quot; y=&quot;-114.38&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;writes&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Shield --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Shield&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;308.24,-36.8 158.16,-36.8 154.16,-32.8 154.16,0 304.24,0 308.24,-4 308.24,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;304.24,-32.8 154.16,-32.8&quot;&gt;&lt;/polyline&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;304.24,-32.8 304.24,0&quot;&gt;&lt;/polyline&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;304.24,-32.8 308.24,-36.8&quot;&gt;&lt;/polyline&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.2&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Protective Shield&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.2&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Encapsulation Boundary)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Fields --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Fields&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;433.27,-113 345.24,-113 345.24,-61.8 433.27,-61.8 433.27,-113&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;389.25&quot; y=&quot;-98.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;private fields:&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;389.25&quot; y=&quot;-83.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- String name&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;389.25&quot; y=&quot;-69.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- int age&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Shield&amp;#45;&amp;gt;Fields --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Shield-&gt;Fields&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M288.2,-37.26C295.01,-39.85 301.82,-42.59 308.24,-45.4 316.92,-49.2 325.95,-53.54 334.69,-57.96&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;332.94,-60.99 343.44,-62.46 336.15,-54.77 332.94,-60.99&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Getters&amp;#45;&amp;gt;Fields --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Getters-&gt;Fields&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M277.05,-143.91C287.35,-139.28 298.22,-134.26 308.24,-129.4 316.86,-125.21 325.93,-120.63 334.73,-116.09&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;336.31,-119.21 343.56,-111.49 333.07,-113 336.31,-119.21&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Setters&amp;#45;&amp;gt;Fields --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Setters-&gt;Fields&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M283.3,-87.4C299.47,-87.4 317.41,-87.4 333.82,-87.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;333.37,-90.9 343.37,-87.4 333.37,-83.9 333.37,-90.9&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_encapsulation Pages: 1 --&gt;
&lt;svg width=&quot;250pt&quot; height=&quot;194pt&quot; viewBox=&quot;0.00 0.00 250.00 194.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 189.56)&quot;&gt;
&lt;title&gt;semantic_encapsulation&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-189.56 246.39,-189.56 246.39,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;118.12&quot; cy=&quot;-86.38&quot; rx=&quot;64.67&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;118.12&quot; y=&quot;-82.48&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Encapsulation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ACCESS --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ACCESS&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;169.99&quot; cy=&quot;-23.83&quot; rx=&quot;61.33&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.99&quot; y=&quot;-20.53&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Access Modifiers&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ACCESS --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ACCESS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M132.85,-68.62C139.91,-60.1 148.36,-49.92 155.41,-41.42&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;125.62&quot; y=&quot;-57.72&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;74.37&quot; cy=&quot;-18&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;74.37&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M106.63,-68.41C100.14,-58.28 92.08,-45.68 85.63,-35.61&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;75.87&quot; y=&quot;-54.71&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- PKG --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PKG&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;39.78&quot; cy=&quot;-107.72&quot; rx=&quot;39.78&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;39.78&quot; y=&quot;-104.42&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Packages&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;PKG --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--PKG&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M71.2,-99.16C71.07,-99.2 70.94,-99.24 70.81,-99.27&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;91.26&quot; y=&quot;-101.92&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;193.91&quot; cy=&quot;-115.84&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.91&quot; y=&quot;-112.54&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M156.46,-101.28C157.64,-101.74 158.81,-102.19 159.98,-102.65&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;144.46&quot; y=&quot;-104.66&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ABSTRACT --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ABSTRACT&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;114.29&quot; cy=&quot;-167.56&quot; rx=&quot;43.94&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.29&quot; y=&quot;-164.26&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Abstraction&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ABSTRACT --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ABSTRACT&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M117.25,-104.8C116.63,-118.09 115.78,-135.95 115.16,-149.22&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;102.45&quot; y=&quot;-129.71&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Private fields&lt;/strong&gt;: Fields are not directly accessible from outside the class&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controlled access&lt;/strong&gt;: Getters/setters can include validation, logging, or computed values&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decoupling&lt;/strong&gt;: Internal implementation can change without breaking clients&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintainability&lt;/strong&gt;: Bugs are localized — state changes only happen through known paths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data security&lt;/strong&gt;: Acts as a protective shield against unauthorized or invalid modification&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-access-modifiers&quot; class=&quot;internal alias&quot; data-slug=&quot;java-access-modifiers&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Access Modifiers&lt;/a&gt; — private is the key mechanism for data hiding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — protected access gives controlled exposure to subclasses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-packages&quot; class=&quot;internal alias&quot; data-slug=&quot;java-packages&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Packages&lt;/a&gt; — package-private access controls visibility within a package&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-abstraction&quot; class=&quot;internal alias&quot; data-slug=&quot;java-abstraction&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Abstraction&lt;/a&gt; — encapsulation hides data; abstraction hides implementation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-composition&quot; class=&quot;internal alias&quot; data-slug=&quot;java-composition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Composition&lt;/a&gt; — encapsulation is essential for safe composition&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Reflection breaks encapsulation&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;Field.setAccessible(true)&lt;/code&gt; allows bypassing private&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mutable objects in getters&lt;/strong&gt;: Returning a reference to a mutable internal object exposes state — return a defensive copy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anemic domain model&lt;/strong&gt;: Too many getters/setters without behavior is not true encapsulation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Over-encapsulation&lt;/strong&gt;: Making everything private without reason increases code complexity&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-exception-hierarchy</title>
    <link href="https://animishraa05.github.io/wiki/java/java-exception-hierarchy" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-exception-hierarchy.md" />
    <summary>The Problem Programs encounter unexpected situations — file not found, network down, invalid input, out of memory.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Programs encounter unexpected situations — file not found, network down, invalid input, out of memory. Without a structured error handling mechanism, every method would need to check and propagate error codes manually, cluttering business logic and making error paths inconsistent and incomplete.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Java’s exception hierarchy is rooted in &lt;code class=&quot;notranslate&quot;&gt;Throwable&lt;/code&gt;, with two main branches: &lt;strong&gt;Exception&lt;/strong&gt; (recoverable conditions) and &lt;strong&gt;Error&lt;/strong&gt; (serious JVM problems). Exceptions are further divided into &lt;strong&gt;checked&lt;/strong&gt; (must be handled or declared) and &lt;strong&gt;unchecked&lt;/strong&gt; (&lt;code class=&quot;notranslate&quot;&gt;RuntimeException&lt;/code&gt;, may occur anywhere).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When an exceptional condition occurs, the JVM (or user code) creates an exception object and “throws” it. The runtime searches the call stack for a matching &lt;code class=&quot;notranslate&quot;&gt;catch&lt;/code&gt; block. If none is found, the thread terminates. Checked exceptions are enforced at compile time — the compiler verifies they are handled or declared.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_exceptions Pages: 1 --&gt;
&lt;svg width=&quot;362pt&quot; height=&quot;262pt&quot; viewBox=&quot;0.00 0.00 362.00 262.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 257.6)&quot;&gt;
&lt;title&gt;java_exceptions&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-257.6 357.72,-257.6 357.72,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Throwable --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Throwable&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;190.38,-253.6 66.98,-253.6 66.98,-217.6 190.38,-217.6 190.38,-253.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;128.68&quot; y=&quot;-232&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;java.lang.Throwable&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Error --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Error&lt;/title&gt;
&lt;polygon fill=&quot;#ffcccc&quot; stroke=&quot;black&quot; points=&quot;129.36,-181.6 0,-181.6 0,-116 129.36,-116 129.36,-181.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;64.68&quot; y=&quot;-166.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Error&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;64.68&quot; y=&quot;-152.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Serious JVM issues)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;64.68&quot; y=&quot;-138&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;OutOfMemoryError&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;64.68&quot; y=&quot;-123.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;StackOverflowError&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Throwable&amp;#45;&amp;gt;Error --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Throwable-&gt;Error&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M115.73,-217.44C109.98,-209.82 102.93,-200.48 95.94,-191.21&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;98.73,-189.11 89.92,-183.24 93.15,-193.33 98.73,-189.11&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Exception --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Exception&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;238.36,-167.2 147,-167.2 147,-130.4 238.36,-130.4 238.36,-167.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;192.68&quot; y=&quot;-152.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Exception&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;192.68&quot; y=&quot;-138&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Recoverable)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Throwable&amp;#45;&amp;gt;Exception --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Throwable-&gt;Exception&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M141.63,-217.44C150.54,-205.64 162.53,-189.75 172.66,-176.33&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;175.17,-178.82 178.4,-168.73 169.58,-174.6 175.17,-178.82&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Checked --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Checked&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;183.38,-72.8 31.98,-72.8 31.98,-7.2 183.38,-7.2 183.38,-72.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;107.68&quot; y=&quot;-58&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Checked Exception&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;107.68&quot; y=&quot;-43.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;IOException&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;107.68&quot; y=&quot;-29.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;SQLException&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;107.68&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;ClassNotFoundException&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Exception&amp;#45;&amp;gt;Checked --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Exception-&gt;Checked&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M178.64,-130.16C168.12,-116.95 153.3,-98.32 139.92,-81.5&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;142.99,-79.74 134.02,-74.1 137.51,-84.1 142.99,-79.74&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Runtime --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Runtime&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;353.72,-80 201.64,-80 201.64,0 353.72,0 353.72,-80&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;277.68&quot; y=&quot;-65.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;RuntimeException&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;277.68&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Unchecked)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;277.68&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;NullPointerException&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;277.68&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;ArrayIndexOutOfBounds&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;277.68&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;IllegalArgumentException&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Exception&amp;#45;&amp;gt;Runtime --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Exception-&gt;Runtime&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M206.72,-130.16C215.62,-118.98 227.61,-103.92 239.19,-89.36&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;241.89,-91.59 245.38,-81.58 236.42,-87.23 241.89,-91.59&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_exception_hierarchy Pages: 1 --&gt;
&lt;svg width=&quot;271pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 271.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_exception_hierarchy&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 267.13,-172.97 267.13,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;134.74&quot; cy=&quot;-84.66&quot; rx=&quot;87.62&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;134.74&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Exception Hierarchy&lt;/text&gt;
&lt;/g&gt;
&lt;!-- TC --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;TC&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;201.43&quot; cy=&quot;-41.42&quot; rx=&quot;61.7&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;201.43&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Try-Catch-Finally&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;TC --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--TC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M161.87,-67.07C166.48,-64.08 171.26,-60.98 175.84,-58.01&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;148.59&quot; y=&quot;-54.44&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- TT --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;TT&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;91.58&quot; cy=&quot;-18&quot; rx=&quot;66.25&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;91.58&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Throw and Throws&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;TT --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--TT&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M122.95,-66.44C116.86,-57.04 109.45,-45.59 103.36,-36.19&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;92.89&quot; y=&quot;-54.02&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- CUST --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;CUST&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;68.52&quot; cy=&quot;-128.51&quot; rx=&quot;68.52&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;68.52&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Custom Exceptions&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;CUST --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--CUST&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M108.19,-102.24C103.58,-105.29 98.8,-108.46 94.22,-111.49&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;121.47&quot; y=&quot;-109.57&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- NPE --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;NPE&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;178.59&quot; cy=&quot;-150.97&quot; rx=&quot;73.07&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;178.59&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;NullPointerException&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;NPE --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--NPE&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M146.72,-102.78C152.91,-112.13 160.44,-123.52 166.62,-132.87&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;170.43&quot; y=&quot;-120.52&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Throwable root&lt;/strong&gt;: Only Throwable subclasses can be thrown and caught&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Checked exceptions&lt;/strong&gt;: Must be caught or declared in the method signature (&lt;code class=&quot;notranslate&quot;&gt;throws&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RuntimeException&lt;/strong&gt;: Not checked — can be ignored (programmer error: null checks, bounds checks)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error&lt;/strong&gt;: Not meant to be caught (JVM in trouble)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-try-catch-finally&quot; class=&quot;internal alias&quot; data-slug=&quot;java-try-catch-finally&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Try-Catch-Finally&lt;/a&gt; — catching exceptions is the handling mechanism&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-throw-throws&quot; class=&quot;internal alias&quot; data-slug=&quot;java-throw-throws&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Throw and Throws&lt;/a&gt; — declaring and propagating exceptions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-custom-exceptions&quot; class=&quot;internal alias&quot; data-slug=&quot;java-custom-exceptions&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Custom Exceptions&lt;/a&gt; — user-defined exceptions extend the hierarchy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-object-class&quot; class=&quot;internal alias&quot; data-slug=&quot;java-object-class&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Object Class&lt;/a&gt; — Throwable inherits from Object and overrides toString()&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Checked exception abuse&lt;/strong&gt;: Over-declaring checked exceptions couples callers to implementation details&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Catching Exception&lt;/strong&gt;: Catches RuntimeException too — can hide bugs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exception swallowing&lt;/strong&gt;: Empty catch blocks silently discard errors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finally vs return&lt;/strong&gt;: finally block executes even if try has a return statement&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-executor-framework</title>
    <link href="https://animishraa05.github.io/wiki/java/java-executor-framework" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-executor-framework.md" />
    <summary>The Problem Creating a new thread for every task is expensive and unscalable — thread creation has overhead, too many threads cause contention and memory pressure, and managing thread lifecycles manually is error-prone.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Creating a new thread for every task is expensive and unscalable — thread creation has overhead, too many threads cause contention and memory pressure, and managing thread lifecycles manually is error-prone. A better abstraction is needed for task execution.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The &lt;strong&gt;Executor framework&lt;/strong&gt; decouples task submission from task execution. The core interfaces are &lt;code class=&quot;notranslate&quot;&gt;Executor&lt;/code&gt; (single task execution), &lt;code class=&quot;notranslate&quot;&gt;ExecutorService&lt;/code&gt; (lifecycle management), and &lt;code class=&quot;notranslate&quot;&gt;ScheduledExecutorService&lt;/code&gt; (delayed/periodic tasks). Common implementations include &lt;code class=&quot;notranslate&quot;&gt;ThreadPoolExecutor&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Executors.newFixedThreadPool()&lt;/code&gt;, and &lt;code class=&quot;notranslate&quot;&gt;Executors.newCachedThreadPool()&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Tasks (Runnable or Callable) are submitted to an ExecutorService. The framework maintains a pool of worker threads and a task queue. When a task is submitted, it’s either assigned to an available thread or queued. Callable tasks return a &lt;code class=&quot;notranslate&quot;&gt;Future&lt;/code&gt; that can be queried for the result once computation completes.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_executor Pages: 1 --&gt;
&lt;svg width=&quot;311pt&quot; height=&quot;350pt&quot; viewBox=&quot;0.00 0.00 311.00 350.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 346.2)&quot;&gt;
&lt;title&gt;java_executor&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-346.2 307.36,-346.2 307.36,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Tasks --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Tasks&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;210.03,-342.2 93.33,-342.2 93.33,-305.4 210.03,-305.4 210.03,-342.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;151.68&quot; y=&quot;-327.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Submitted Tasks&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;151.68&quot; y=&quot;-313&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;T1 T2 T3 T4 T5 T6&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Queue --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Queue&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;216.71,-257.4 86.65,-257.4 86.65,-220.6 216.71,-220.6 216.71,-257.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;151.68&quot; y=&quot;-242.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Blocking Queue&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;151.68&quot; y=&quot;-228.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(holds pending tasks)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Tasks&amp;#45;&amp;gt;Queue --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Tasks-&gt;Queue&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M151.68,-305.24C151.68,-294.77 151.68,-281.22 151.68,-269.18&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;155.18,-269.33 151.68,-259.33 148.18,-269.33 155.18,-269.33&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.74&quot; y=&quot;-278.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;submit()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Pool --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Pool&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;203.36,-183.6 100,-183.6 100,-146.8 203.36,-146.8 203.36,-183.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;151.68&quot; y=&quot;-168.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Thread Pool&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;151.68&quot; y=&quot;-154.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(worker threads)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Queue&amp;#45;&amp;gt;Pool --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Queue-&gt;Pool&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M151.68,-220.25C151.68,-212.69 151.68,-203.66 151.68,-195.18&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;155.18,-195.26 151.68,-185.26 148.18,-195.26 155.18,-195.26&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- W1 --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;W1&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;89.36,-109.8 0,-109.8 0,-73 89.36,-73 89.36,-109.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;44.68&quot; y=&quot;-95&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Worker 1&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;44.68&quot; y=&quot;-80.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(executes T1)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Pool&amp;#45;&amp;gt;W1 --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Pool-&gt;W1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M125.23,-146.45C111.73,-137.39 95.1,-126.24 80.47,-116.42&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;82.71,-113.7 72.45,-111.04 78.81,-119.51 82.71,-113.7&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- W2 --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;W2&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;196.36,-109.8 107,-109.8 107,-73 196.36,-73 196.36,-109.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;151.68&quot; y=&quot;-95&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Worker 2&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;151.68&quot; y=&quot;-80.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(executes T2)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Pool&amp;#45;&amp;gt;W2 --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Pool-&gt;W2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M151.68,-146.45C151.68,-138.89 151.68,-129.86 151.68,-121.38&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;155.18,-121.46 151.68,-111.46 148.18,-121.46 155.18,-121.46&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- W3 --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;W3&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;303.36,-109.8 214,-109.8 214,-73 303.36,-73 303.36,-109.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;258.68&quot; y=&quot;-95&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Worker 3&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;258.68&quot; y=&quot;-80.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(executes T3)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Pool&amp;#45;&amp;gt;W3 --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Pool-&gt;W3&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M178.13,-146.45C191.63,-137.39 208.26,-126.24 222.89,-116.42&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;224.55,-119.51 230.91,-111.04 220.65,-113.7 224.55,-119.51&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Result1 --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Result1&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;84.03,-36 5.33,-36 5.33,0 84.03,0 84.03,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;44.68&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Future&amp;#x3C;T1&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;!-- W1&amp;#45;&amp;gt;Result1 --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;W1-&gt;Result1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M44.68,-72.75C44.68,-65.23 44.68,-56.25 44.68,-47.82&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;48.18,-47.96 44.68,-37.96 41.18,-47.96 48.18,-47.96&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Result2 --&gt;
&lt;g id=&quot;node8&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Result2&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;191.03,-36 112.33,-36 112.33,0 191.03,0 191.03,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;151.68&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Future&amp;#x3C;T2&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;!-- W2&amp;#45;&amp;gt;Result2 --&gt;
&lt;g id=&quot;edge7&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;W2-&gt;Result2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M151.68,-72.75C151.68,-65.23 151.68,-56.25 151.68,-47.82&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;155.18,-47.96 151.68,-37.96 148.18,-47.96 155.18,-47.96&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_executor Pages: 1 --&gt;
&lt;svg width=&quot;253pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 253.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_executor&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 249.37,-172.97 249.37,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;126.04&quot; cy=&quot;-84.66&quot; rx=&quot;90&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;126.04&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Executor Framework&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THREAD --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THREAD&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;192.73&quot; cy=&quot;-41.42&quot; rx=&quot;52.64&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;192.73&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Multithreading&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;THREAD --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--THREAD&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M153.16,-67.07C158.07,-63.89 163.16,-60.59 167.99,-57.46&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;142.07&quot; y=&quot;-54.16&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- SYNC --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;SYNC&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;82.88&quot; cy=&quot;-18&quot; rx=&quot;58.32&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;82.88&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Synchronization&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;SYNC --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--SYNC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M114.25,-66.44C108.06,-56.88 100.5,-45.22 94.36,-35.73&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;85.8&quot; y=&quot;-53.79&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LAMB --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LAMB&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;59.82&quot; cy=&quot;-128.51&quot; rx=&quot;59.82&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;59.82&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Parallel Streams&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LAMB --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LAMB&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M99.49,-102.24C94.74,-105.39 89.8,-108.66 85.09,-111.78&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;78.53&quot; y=&quot;-109.71&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- PERF --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PERF&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;169.88&quot; cy=&quot;-150.97&quot; rx=&quot;48.86&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.88&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Performance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;PERF --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--PERF&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M138.02,-102.78C144.31,-112.29 151.98,-123.89 158.22,-133.33&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;134.36&quot; y=&quot;-120.75&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Thread reuse&lt;/strong&gt;: Worker threads are recycled, avoiding creation overhead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bounded queues&lt;/strong&gt;: Prevents unbounded memory growth from pending tasks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rejection policy&lt;/strong&gt;: What happens when the queue is full (abort, discard, caller-runs)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle control&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;shutdown()&lt;/code&gt; (no new tasks) and &lt;code class=&quot;notranslate&quot;&gt;shutdownNow()&lt;/code&gt; (force stop)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-multithreading&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multithreading&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Multithreading&lt;/a&gt; — the framework manages threads internally&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-synchronization&quot; class=&quot;internal alias&quot; data-slug=&quot;java-synchronization&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Synchronization&lt;/a&gt; — internal task queues are synchronized&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-lambda-and-streams&quot; class=&quot;internal alias&quot; data-slug=&quot;java-lambda-and-streams&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Streams &amp;#x26; Lambdas&lt;/a&gt; — parallelStream() uses the common ForkJoinPool&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-deadlock&quot; class=&quot;internal alias&quot; data-slug=&quot;java-deadlock&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Deadlock&lt;/a&gt; — thread pools can deadlock if tasks depend on each other&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Hidden thread leak&lt;/strong&gt;: Not shutting down an executor prevents JVM exit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Task submission inside tasks&lt;/strong&gt;: Tasks submitted from within running tasks can cause thread pool deadlock&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CachedThreadPool unbounded&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;newCachedThreadPool()&lt;/code&gt; creates threads without bound under load&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ForkJoinPool work stealing&lt;/strong&gt;: Each worker has its own deque — steals from others when idle&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-file-handling</title>
    <link href="https://animishraa05.github.io/wiki/java/java-file-handling" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-file-handling.md" />
    <summary>The Problem Applications need to read and write data from persistent storage — configuration files, user data, logs, documents.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Applications need to read and write data from persistent storage — configuration files, user data, logs, documents. Without a standardized file I/O system, each platform would have different APIs, and developers would need to handle raw bytes, character encoding, and buffering manually.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Java provides file I/O through the &lt;code class=&quot;notranslate&quot;&gt;java.io&lt;/code&gt; package (stream-based) and &lt;code class=&quot;notranslate&quot;&gt;java.nio.file&lt;/code&gt; package (channel-based). The I/O model uses &lt;strong&gt;streams&lt;/strong&gt; — sequences of data flowing from source to destination. Key classes include &lt;code class=&quot;notranslate&quot;&gt;FileInputStream&lt;/code&gt;/&lt;code class=&quot;notranslate&quot;&gt;FileOutputStream&lt;/code&gt; (binary), &lt;code class=&quot;notranslate&quot;&gt;FileReader&lt;/code&gt;/&lt;code class=&quot;notranslate&quot;&gt;FileWriter&lt;/code&gt; (text), &lt;code class=&quot;notranslate&quot;&gt;BufferedReader&lt;/code&gt;/&lt;code class=&quot;notranslate&quot;&gt;BufferedWriter&lt;/code&gt; (buffered), and the modern &lt;code class=&quot;notranslate&quot;&gt;Files&lt;/code&gt;/&lt;code class=&quot;notranslate&quot;&gt;Paths&lt;/code&gt; utility classes.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A program opens a stream to a file: an input stream reads bytes from the file into memory; an output stream writes bytes to the file. Readers/Writers handle character encoding (converting between bytes and characters). Buffered streams wrap other streams to reduce disk access by reading/writing chunks.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_file_io Pages: 1 --&gt;
&lt;svg width=&quot;601pt&quot; height=&quot;100pt&quot; viewBox=&quot;0.00 0.00 601.00 100.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 95.8)&quot;&gt;
&lt;title&gt;java_file_io&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-95.8 597.4,-95.8 597.4,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- File --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;File&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;78.68,-36.8 0,-36.8 0,0 78.68,0 78.68,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;39.34&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;File on Disk&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;39.34&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;data.txt&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Stream --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Stream&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;242.63,-36.8 141.93,-36.8 141.93,0 242.63,0 242.63,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;192.28&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;FileInputStream&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;192.28&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;or FileReader&lt;/text&gt;
&lt;/g&gt;
&lt;!-- File&amp;#45;&amp;gt;Stream --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;File-&gt;Stream&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M78.82,-18.4C94.44,-18.4 112.87,-18.4 130.24,-18.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;129.94,-21.9 139.94,-18.4 129.94,-14.9 129.94,-21.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;110.31&quot; y=&quot;-21.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;opens&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Buffer --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Buffer&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;410.69,-36.8 309.97,-36.8 309.97,0 410.69,0 410.69,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;360.33&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;BufferedReader&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;360.33&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(internal buffer)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Stream&amp;#45;&amp;gt;Buffer --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Stream-&gt;Buffer&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M243.1,-18.4C260.42,-18.4 280.05,-18.4 298.18,-18.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;298.03,-21.9 308.03,-18.4 298.03,-14.9 298.03,-21.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;273.97&quot; y=&quot;-21.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;wraps&lt;/text&gt;
&lt;/g&gt;
&lt;!-- App --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;App&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;593.4,-36.8 514.71,-36.8 514.71,0 593.4,0 593.4,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;554.05&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Application&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;554.05&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(readLine())&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Buffer&amp;#45;&amp;gt;App --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Buffer-&gt;App&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M410.7,-18.4C439.08,-18.4 474.63,-18.4 503.1,-18.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;502.92,-21.9 512.92,-18.4 502.92,-14.9 502.92,-21.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;465.03&quot; y=&quot;-21.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;reads lines&lt;/text&gt;
&lt;/g&gt;
&lt;!-- AppW --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;AppW&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;76.69,-91.8 1.99,-91.8 1.99,-55 76.69,-55 76.69,-91.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;39.34&quot; y=&quot;-77&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Application&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;39.34&quot; y=&quot;-62.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(write())&lt;/text&gt;
&lt;/g&gt;
&lt;!-- BufferW --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;BufferW&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;238.96,-91.4 145.6,-91.4 145.6,-55.4 238.96,-55.4 238.96,-91.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;192.28&quot; y=&quot;-69.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;BufferedWriter&lt;/text&gt;
&lt;/g&gt;
&lt;!-- AppW&amp;#45;&amp;gt;BufferW --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;AppW-&gt;BufferW&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M76.88,-73.4C94.01,-73.4 114.83,-73.4 133.99,-73.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;133.83,-76.9 143.83,-73.4 133.83,-69.9 133.83,-76.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;110.31&quot; y=&quot;-76.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;wraps&lt;/text&gt;
&lt;/g&gt;
&lt;!-- StreamW --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;StreamW&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;415.34,-91.8 305.31,-91.8 305.31,-55 415.34,-55 415.34,-91.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;360.33&quot; y=&quot;-77&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;FileOutputStream&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;360.33&quot; y=&quot;-62.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;or FileWriter&lt;/text&gt;
&lt;/g&gt;
&lt;!-- BufferW&amp;#45;&amp;gt;StreamW --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;BufferW-&gt;StreamW&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M239.09,-73.4C255.87,-73.4 275.19,-73.4 293.38,-73.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;293.31,-76.9 303.31,-73.4 293.31,-69.9 293.31,-76.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;273.97&quot; y=&quot;-76.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;writes&lt;/text&gt;
&lt;/g&gt;
&lt;!-- FileW --&gt;
&lt;g id=&quot;node8&quot; class=&quot;node&quot;&gt;
&lt;title&gt;FileW&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;593.4,-91.8 514.71,-91.8 514.71,-55 593.4,-55 593.4,-91.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;554.05&quot; y=&quot;-77&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;File on Disk&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;554.05&quot; y=&quot;-62.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;output.txt&lt;/text&gt;
&lt;/g&gt;
&lt;!-- StreamW&amp;#45;&amp;gt;FileW --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;StreamW-&gt;FileW&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M415.75,-73.4C443.14,-73.4 476.12,-73.4 502.89,-73.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;502.81,-76.9 512.81,-73.4 502.81,-69.9 502.81,-76.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;465.03&quot; y=&quot;-76.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;flushes to disk&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_file_io Pages: 1 --&gt;
&lt;svg width=&quot;262pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 262.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_file_io&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 258.44,-172.97 258.44,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;119.22&quot; cy=&quot;-84.66&quot; rx=&quot;60.83&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;119.22&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;File Handling&lt;/text&gt;
&lt;/g&gt;
&lt;!-- EXC --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;EXC&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;185.9&quot; cy=&quot;-41.42&quot; rx=&quot;68.54&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;185.9&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Exception Handling&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;EXC --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--EXC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M144.81,-68.06C149.66,-64.92 154.74,-61.63 159.61,-58.47&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;170.71&quot; y=&quot;-65.97&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- STR --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;STR&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;76.06&quot; cy=&quot;-18&quot; rx=&quot;31.08&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;76.06&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Strings&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;STR --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--STR&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M107.65,-66.79C101.26,-56.92 93.36,-44.72 87.06,-34.99&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;78.85&quot; y=&quot;-53.59&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- NIO --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;NIO&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;53&quot; cy=&quot;-128.51&quot; rx=&quot;53&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;53&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;NIO (New I/O)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;NIO --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--NIO&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M93.8,-101.49C88.41,-105.06 82.72,-108.83 77.36,-112.37&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;99.34&quot; y=&quot;-109.63&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- NET --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;NET&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;163.06&quot; cy=&quot;-150.97&quot; rx=&quot;43.94&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;163.06&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Networking&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;NET --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--NET&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M131.2,-102.78C137.49,-112.29 145.16,-123.89 151.4,-133.33&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;127.54&quot; y=&quot;-120.75&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Stream types&lt;/strong&gt;: Byte streams (&lt;code class=&quot;notranslate&quot;&gt;InputStream&lt;/code&gt;/&lt;code class=&quot;notranslate&quot;&gt;OutputStream&lt;/code&gt;) and character streams (&lt;code class=&quot;notranslate&quot;&gt;Reader&lt;/code&gt;/&lt;code class=&quot;notranslate&quot;&gt;Writer&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Buffered I/O&lt;/strong&gt;: Wrapping streams in buffers drastically improves performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Try-with-resources&lt;/strong&gt;: Auto-closes streams that implement &lt;code class=&quot;notranslate&quot;&gt;AutoCloseable&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NIO.2&lt;/strong&gt; (Java 7+): &lt;code class=&quot;notranslate&quot;&gt;Files&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Paths&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Path&lt;/code&gt; with symbolic link support, file watching, and metadata access&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-try-catch-finally&quot; class=&quot;internal alias&quot; data-slug=&quot;java-try-catch-finally&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Try-Catch-Finally&lt;/a&gt; — file I/O operations always need exception handling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-strings&quot; class=&quot;internal alias&quot; data-slug=&quot;java-strings&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Strings&lt;/a&gt; — text I/O reads/writes String data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-socket-programming&quot; class=&quot;internal alias&quot; data-slug=&quot;java-socket-programming&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Socket Programming&lt;/a&gt; — socket I/O uses InputStream/OutputStream patterns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-memory-management&quot; class=&quot;internal alias&quot; data-slug=&quot;java-memory-management&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Memory Management&lt;/a&gt; — buffered I/O uses heap memory for buffers&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Encoding issues&lt;/strong&gt;: Always specify charset (UTF-8) explicitly — platform default varies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File not closed&lt;/strong&gt;: Resource leak — always use try-with-resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File.separator&lt;/strong&gt;: Use &lt;code class=&quot;notranslate&quot;&gt;File.separator&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;Paths.get()&lt;/code&gt; for cross-platform paths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Large files&lt;/strong&gt;: Reading entire files into memory causes OOM — use streaming&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-garbage-collection</title>
    <link href="https://animishraa05.github.io/wiki/java/java-garbage-collection" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-garbage-collection.md" />
    <summary>The Problem Manual memory management (like C’s malloc/free) is error-prone — forgetting to free causes memory leaks, freeing too early causes dangling pointers, and double-freeing causes crashes.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Manual memory management (like C’s &lt;code class=&quot;notranslate&quot;&gt;malloc&lt;/code&gt;/&lt;code class=&quot;notranslate&quot;&gt;free&lt;/code&gt;) is error-prone — forgetting to free causes memory leaks, freeing too early causes dangling pointers, and double-freeing causes crashes. In large applications, tracking object lifetimes manually is nearly impossible.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Garbage Collection (GC)&lt;/strong&gt; automatically reclaims memory occupied by objects that are no longer reachable. The JVM identifies unused objects, reclaims their memory, and compacts the heap to prevent fragmentation. Developers are freed from manual memory management, at the cost of occasional GC pauses.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The heap is divided into generations: &lt;strong&gt;Young&lt;/strong&gt; (Eden + Survivor spaces) and &lt;strong&gt;Old&lt;/strong&gt; (Tenured). New objects are allocated in Eden. Minor GC collects the young generation — live objects are copied to Survivor, then eventually promoted to Old. Major GC collects the entire heap. Different collectors (Serial, Parallel, G1, ZGC) use different algorithms (mark-sweep, mark-compact, concurrent).&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_gc Pages: 1 --&gt;
&lt;svg width=&quot;359pt&quot; height=&quot;360pt&quot; viewBox=&quot;0.00 0.00 359.00 360.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 356.4)&quot;&gt;
&lt;title&gt;java_gc&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-356.4 355.36,-356.4 355.36,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Heap --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Heap&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;246.01,-352.4 192.01,-352.4 192.01,-316.4 246.01,-316.4 246.01,-352.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;219.01&quot; y=&quot;-330.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Heap&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Young --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Young&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;156.71,-279 43.31,-279 43.31,-243 156.71,-243 156.71,-279&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;100.01&quot; y=&quot;-257.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Young Generation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Heap&amp;#45;&amp;gt;Young --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Heap-&gt;Young&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M191.71,-317.02C175.99,-307.59 155.98,-295.59 138.67,-285.2&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;140.52,-282.22 130.14,-280.08 136.91,-288.23 140.52,-282.22&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Old --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Old&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;233.03,-36.8 126.99,-36.8 126.99,0 233.03,0 233.03,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;180.01&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Old Generation&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;180.01&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(tenured objects)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Heap&amp;#45;&amp;gt;Old --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Heap-&gt;Old&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M219.01,-316.09C219.01,-301.63 219.01,-280.47 219.01,-262 219.01,-262 219.01,-262 219.01,-101.8 219.01,-82.07 209.76,-62.01 200.27,-46.62&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;203.34,-44.93 194.92,-38.5 197.49,-48.78 203.34,-44.93&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Meta --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Meta&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;351.36,-279.4 246.66,-279.4 246.66,-242.6 351.36,-242.6 351.36,-279.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;299.01&quot; y=&quot;-264.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Metaspace&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;299.01&quot; y=&quot;-250.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(class metadata)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Heap&amp;#45;&amp;gt;Meta --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Heap-&gt;Meta&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M238.37,-316.12C247.98,-307.54 259.78,-297.01 270.41,-287.53&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;272.73,-290.15 277.86,-280.88 268.07,-284.93 272.73,-290.15&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Eden --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Eden&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;182.69,-205.6 95.33,-205.6 95.33,-168.8 182.69,-168.8 182.69,-205.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;139.01&quot; y=&quot;-190.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Eden&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;139.01&quot; y=&quot;-176.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(new objects)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Young&amp;#45;&amp;gt;Eden --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Young-&gt;Eden&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M109.45,-242.62C113.79,-234.62 119.05,-224.94 123.92,-215.98&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;126.96,-217.71 128.66,-207.25 120.81,-214.37 126.96,-217.71&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- S0 --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;S0&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;129.02,-120.8 59,-120.8 59,-84.8 129.02,-84.8 129.02,-120.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;94.01&quot; y=&quot;-99.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Survivor 0&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Young&amp;#45;&amp;gt;S0 --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Young-&gt;S0&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M94.33,-242.58C91.19,-232.01 87.6,-218.18 86.01,-205.6 82.9,-181.02 85.57,-152.93 88.63,-132.49&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;92.09,-133.07 90.25,-122.64 85.18,-131.94 92.09,-133.07&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- S1 --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;S1&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;70.02,-36.4 0,-36.4 0,-0.4 70.02,-0.4 70.02,-36.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;35.01&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Survivor 1&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Young&amp;#45;&amp;gt;S1 --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Young-&gt;S1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M92.42,-242.82C89.96,-237.07 87.28,-230.59 85.01,-224.6 67.72,-179.09 61.4,-168.13 50.01,-120.8 44.33,-97.21 45.56,-90.8 42.01,-66.8 41.1,-60.68 40.13,-54.12 39.21,-47.89&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;42.68,-47.39 37.76,-38.01 35.75,-48.41 42.68,-47.39&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Eden&amp;#45;&amp;gt;S0 --&gt;
&lt;g id=&quot;edge7&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Eden-&gt;S0&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M129.24,-168.32C123.27,-157.37 115.5,-143.15 108.78,-130.85&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;112.04,-129.51 104.17,-122.41 105.89,-132.86 112.04,-129.51&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;160.05&quot; y=&quot;-141.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;minor GC (copied)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- S0&amp;#45;&amp;gt;S1 --&gt;
&lt;g id=&quot;edge8&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;S0-&gt;S1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M69.25,-84.39C63.22,-79.25 57.21,-73.26 52.66,-66.8 48.59,-61 45.33,-54.15 42.77,-47.48&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;46.12,-46.44 39.61,-38.09 39.49,-48.68 46.12,-46.44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;64.34&quot; y=&quot;-57.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;swap&lt;/text&gt;
&lt;/g&gt;
&lt;!-- S0&amp;#45;&amp;gt;Old --&gt;
&lt;g id=&quot;edge9&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;S0-&gt;Old&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M92.03,-84.64C91.82,-75.01 93.17,-63.26 99.41,-54.8 104.15,-48.37 110.32,-43.1 117.12,-38.77&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;118.37,-42.08 125.41,-34.17 114.97,-35.96 118.37,-42.08&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;152.21&quot; y=&quot;-57.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;promoted after N cycles&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_gc Pages: 1 --&gt;
&lt;svg width=&quot;283pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 283.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_gc&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 279.25,-172.97 279.25,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;132.48&quot; cy=&quot;-84.66&quot; rx=&quot;84.28&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;132.48&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Garbage Collection&lt;/text&gt;
&lt;/g&gt;
&lt;!-- MEM --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;MEM&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;199.16&quot; cy=&quot;-41.42&quot; rx=&quot;76.09&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;199.16&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Memory Management&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;MEM --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--MEM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M159.22,-67.32C163.71,-64.41 168.37,-61.39 172.85,-58.48&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;147.53&quot; y=&quot;-65.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- PERF --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PERF&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;89.31&quot; cy=&quot;-18&quot; rx=&quot;71.55&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;89.31&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Performance Tuning&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;PERF --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--PERF&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M120.68,-66.44C114.59,-57.04 107.18,-45.59 101.09,-36.19&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;90.62&quot; y=&quot;-54.02&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;66.26&quot; cy=&quot;-128.51&quot; rx=&quot;66.26&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;66.26&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Object References&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M106.3,-101.99C101.53,-105.15 96.56,-108.44 91.81,-111.59&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;85.3&quot; y=&quot;-109.49&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LEAK --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LEAK&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;176.32&quot; cy=&quot;-150.97&quot; rx=&quot;54.52&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;176.32&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Memory Leaks&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LEAK --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LEAK&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M144.46,-102.78C150.74,-112.29 158.42,-123.89 164.66,-133.33&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;168.32&quot; y=&quot;-120.75&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Generational hypothesis&lt;/strong&gt;: Most objects die young — optimizing for this yields performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GC pause&lt;/strong&gt;: “Stop-the-world” events freeze application threads (duration varies by collector)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent collectors&lt;/strong&gt;: ZGC, Shenandoah, G1 aim for sub-millisecond pause times&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GC tuning&lt;/strong&gt;: JVM flags control heap sizes, collector selection, and GC behavior&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-memory-management&quot; class=&quot;internal alias&quot; data-slug=&quot;java-memory-management&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Memory Management&lt;/a&gt; — GC manages the heap portion of JVM memory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-memory-management&quot; class=&quot;internal alias&quot; data-slug=&quot;java-memory-management&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Memory Management&lt;/a&gt; — GC tuning is critical for application throughput&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-multithreading&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multithreading&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Multithreading&lt;/a&gt; — GC pauses affect all threads (stop-the-world)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-object-class&quot; class=&quot;internal alias&quot; data-slug=&quot;java-object-class&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Object Class&lt;/a&gt; — finalize() is called by GC before reclaiming (deprecated)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;System.gc()&lt;/strong&gt;: Suggests GC but does not guarantee it runs — ignore this call in production&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finalization&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;finalize()&lt;/code&gt; is deprecated (Java 9+) — use Cleaner or try-with-resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GC logs&lt;/strong&gt;: Enable with &lt;code class=&quot;notranslate&quot;&gt;-Xlog:gc*&lt;/code&gt; for tuning — critical for diagnosing memory issues&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Object resurrection&lt;/strong&gt;: In finalize(), an object can make itself reachable again (avoid this pattern)&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-hashmap</title>
    <link href="https://animishraa05.github.io/wiki/java/java-hashmap" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-hashmap.md" />
    <summary>The Problem Storing and looking up data by a key (not an index) is a fundamental need — finding a user by ID, looking up a configuration value by name, caching computed results.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Storing and looking up data by a key (not an index) is a fundamental need — finding a user by ID, looking up a configuration value by name, caching computed results. Without a hash-based map, these lookups would require scanning a list, which is O(n) and scales poorly.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;HashMap&lt;/strong&gt; implements the &lt;code class=&quot;notranslate&quot;&gt;Map&lt;/code&gt; interface using a hash table. It stores key-value pairs, computes a hash code of the key to determine an index, and provides O(1) average-time performance for put, get, and remove operations. Keys must have properly implemented &lt;code class=&quot;notranslate&quot;&gt;hashCode()&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;equals()&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The internal structure is an array of “buckets” (nodes). When &lt;code class=&quot;notranslate&quot;&gt;put(key, value)&lt;/code&gt; is called, &lt;code class=&quot;notranslate&quot;&gt;key.hashCode()&lt;/code&gt; is computed and transformed into a bucket index. If the bucket is empty, a new node is placed. If occupied, &lt;code class=&quot;notranslate&quot;&gt;equals()&lt;/code&gt; is used to check for key equality — if the same key exists, the value is replaced; otherwise, a collision is resolved by chaining (linked list or tree).&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_hashmap Pages: 1 --&gt;
&lt;svg width=&quot;440pt&quot; height=&quot;245pt&quot; viewBox=&quot;0.00 0.00 440.00 245.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 240.6)&quot;&gt;
&lt;title&gt;java_hashmap&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-240.6 435.51,-240.6 435.51,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Map --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Map&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;100.71,-112.6 0,-112.6 0,-76.6 100.71,-76.6 100.71,-112.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-91&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;HashMap&amp;#x3C;K,V&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Buckets --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Buckets&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;241.44,-175 145.39,-175 145.39,-138.2 241.44,-138.2 241.44,-175&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.42&quot; y=&quot;-160.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Bucket Array&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.42&quot; y=&quot;-145.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[0] [1] [2] ...[15]&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Map&amp;#45;&amp;gt;Buckets --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Map-&gt;Buckets&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M93.3,-113.03C107.81,-119.41 124.28,-126.65 139.55,-133.37&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;137.96,-136.49 148.52,-137.31 140.77,-130.08 137.96,-136.49&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Get --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Get&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;250.12,-120.2 136.71,-120.2 136.71,-69 250.12,-69 250.12,-120.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.42&quot; y=&quot;-105.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;get(key=A)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.42&quot; y=&quot;-91&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;hash→index=1&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.42&quot; y=&quot;-76.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;scan chain→found&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Map&amp;#45;&amp;gt;Get --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Map-&gt;Get&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M101.09,-94.6C108.85,-94.6 116.98,-94.6 125.06,-94.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;124.89,-98.1 134.89,-94.6 124.89,-91.1 124.89,-98.1&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Put --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Put&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;247.1,-51.2 139.73,-51.2 139.73,0 247.1,0 247.1,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.42&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;put(key=D,val=4)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.42&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;hash→index=2&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.42&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;collision→chain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Map&amp;#45;&amp;gt;Put --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Map-&gt;Put&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M89.16,-76.11C101.45,-70.1 115.44,-63.25 129.08,-56.58&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;130.59,-59.74 138.04,-52.2 127.52,-53.45 130.59,-59.74&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Bucket0 --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Bucket0&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;386.16,-236.6 331.47,-236.6 331.47,-200.6 386.16,-200.6 386.16,-236.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;358.81&quot; y=&quot;-215&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[0]: null&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Buckets&amp;#45;&amp;gt;Bucket0 --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Buckets-&gt;Bucket0&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M241.52,-174.63C255.84,-180.09 271.62,-186.1 286.12,-191.6 297.31,-195.84 309.49,-200.44 320.59,-204.62&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;319.23,-207.85 329.83,-208.09 321.7,-201.3 319.23,-207.85&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Bucket1 --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Bucket1&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;431.51,-182.2 286.12,-182.2 286.12,-131 431.51,-131 431.51,-182.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;358.81&quot; y=&quot;-167.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[1]: Node(key=A, val=1)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;358.81&quot; y=&quot;-153&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;           ↓&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;358.81&quot; y=&quot;-138.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;       Node(key=B, val=2)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Buckets&amp;#45;&amp;gt;Bucket1 --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Buckets-&gt;Bucket1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M241.68,-156.6C252,-156.6 263.21,-156.6 274.47,-156.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;274.2,-160.1 284.2,-156.6 274.2,-153.1 274.2,-160.1&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Bucket2 --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Bucket2&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;430.17,-112.6 287.45,-112.6 287.45,-76.6 430.17,-76.6 430.17,-112.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;358.81&quot; y=&quot;-91&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[2]: Node(key=C, val=3)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Buckets&amp;#45;&amp;gt;Bucket2 --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Buckets-&gt;Bucket2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M241.52,-138.57C255.84,-133.11 271.62,-127.1 286.12,-121.6 290.01,-120.12 294.03,-118.6 298.08,-117.07&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;299.29,-120.36 307.4,-113.55 296.81,-113.81 299.29,-120.36&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_hashmap Pages: 1 --&gt;
&lt;svg width=&quot;221pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 221.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_hashmap&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 216.83,-172.97 216.83,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;102.97&quot; cy=&quot;-84.66&quot; rx=&quot;47.43&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;102.97&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;HashMap&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COLL --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COLL&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;169.65&quot; cy=&quot;-41.42&quot; rx=&quot;43.18&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.65&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Collections&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COLL --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COLL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M127.42,-68.8C133.51,-64.85 140.04,-60.62 146.09,-56.7&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;118.25&quot; y=&quot;-54.65&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OBJ --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OBJ&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;59.8&quot; cy=&quot;-18&quot; rx=&quot;48.47&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;59.8&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Object Class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OBJ --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OBJ&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M91.4,-66.79C85.21,-57.23 77.6,-45.48 71.4,-35.91&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;62.9&quot; y=&quot;-54.05&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- AL --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;AL&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;36.75&quot; cy=&quot;-128.51&quot; rx=&quot;36.75&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;36.75&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;ArrayList&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;AL --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--AL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M79.06,-100.49C72.54,-104.81 65.5,-109.47 59.07,-113.72&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;82.83&quot; y=&quot;-109.81&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- TREEM --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;TREEM&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;146.81&quot; cy=&quot;-150.97&quot; rx=&quot;37.13&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;146.81&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;TreeMap&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;TREEM --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--TREEM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M114.72,-102.43C121.11,-112.09 128.98,-124.01 135.33,-133.61&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;152.53&quot; y=&quot;-120.72&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;O(1) average time&lt;/strong&gt;: For get, put, remove with good hash distribution&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O(n) worst case&lt;/strong&gt;: When all keys hash to the same bucket (Java 8+ converts long chains to trees)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Load factor&lt;/strong&gt;: Default 0.75 — when 75% full, capacity doubles (rehashing)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Null keys&lt;/strong&gt;: HashMap allows one null key (stored in bucket [0])&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-object-class&quot; class=&quot;internal alias&quot; data-slug=&quot;java-object-class&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Object Class&lt;/a&gt; — relies on hashCode() and equals() for correct operation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Collections Framework&lt;/a&gt; — implements the Map interface&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-comparable-and-comparator&quot; class=&quot;internal alias&quot; data-slug=&quot;java-comparable-and-comparator&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Comparable &amp;#x26; Comparator&lt;/a&gt; — HashMap uses hash codes; TreeMap uses comparison for ordering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Collections Framework&lt;/a&gt; — HashSet is internally backed by a HashMap&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Mutable keys&lt;/strong&gt;: Changing fields used in hashCode() after insertion makes the key “lost” in the map&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hash collision performance&lt;/strong&gt;: Bad hashCode() implementation degrades performance to O(n)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rehashing cost&lt;/strong&gt;: When the map resizes, all entries are rehashed — an O(n) operation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not thread-safe&lt;/strong&gt;: Use &lt;code class=&quot;notranslate&quot;&gt;ConcurrentHashMap&lt;/code&gt; for concurrent access&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-hierarchical-inheritance</title>
    <link href="https://animishraa05.github.io/wiki/java/java-hierarchical-inheritance" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-hierarchical-inheritance.md" />
    <summary>The Problem A base class often defines common functionality shared by many specialized types.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A base class often defines common functionality shared by many specialized types. Animal defines eat() and sleep(), while Dog, Cat, and Cow each add their own sound(). Without hierarchical inheritance, each subclass would reimplement the shared base behavior.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Hierarchical Inheritance&lt;/strong&gt; occurs when multiple subclasses inherit from a single superclass. One parent serves as the base for many children. This is the most common real-world inheritance pattern — the superclass defines shared behavior and each subclass specializes it.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;All subclasses use &lt;code class=&quot;notranslate&quot;&gt;extends ParentClass&lt;/code&gt;. Each subclass independently inherits the parent’s fields and methods. Changes to the parent propagate to all subclasses automatically. Each subclass can override methods independently without affecting siblings. If &lt;code class=&quot;notranslate&quot;&gt;Animal&lt;/code&gt; changes &lt;code class=&quot;notranslate&quot;&gt;eat()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Dog&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Cat&lt;/code&gt;, and &lt;code class=&quot;notranslate&quot;&gt;Cow&lt;/code&gt; all get the update.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: hierarchical_inheritance Pages: 1 --&gt;
&lt;svg width=&quot;338pt&quot; height=&quot;173pt&quot; viewBox=&quot;0.00 0.00 338.00 173.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 168.8)&quot;&gt;
&lt;title&gt;hierarchical_inheritance&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-168.8 334.04,-168.8 334.04,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Parent --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Parent&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;195.03,-164.8 135.02,-164.8 135.02,-99.2 195.03,-99.2 195.03,-164.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;165.02&quot; y=&quot;-150&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Parent&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;165.02&quot; y=&quot;-135.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Animal&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;165.02&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- eat()&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;165.02&quot; y=&quot;-106.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- sleep()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Dog --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Dog&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;98.04,-51.2 0,-51.2 0,0 98.04,0 98.04,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;49.02&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Dog&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;49.02&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;extends Animal&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;49.02&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- bark()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Parent&amp;#45;&amp;gt;Dog --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Parent-&gt;Dog&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M134.54,-103.57C119.36,-89.91 100.91,-73.3 85.04,-59.01&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;87.42,-56.45 77.65,-52.36 82.74,-61.65 87.42,-56.45&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;124.53&quot; y=&quot;-72.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Cat --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Cat&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;214.04,-51.2 116,-51.2 116,0 214.04,0 214.04,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;165.02&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Cat&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;165.02&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;extends Animal&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;165.02&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- meow()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Parent&amp;#45;&amp;gt;Cat --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Parent-&gt;Cat&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M165.02,-98.82C165.02,-87.41 165.02,-74.49 165.02,-62.77&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;168.52,-63.06 165.02,-53.06 161.52,-63.06 168.52,-63.06&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;182.53&quot; y=&quot;-72.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Cow --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Cow&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;330.04,-51.2 232,-51.2 232,0 330.04,0 330.04,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.02&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Cow&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.02&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;extends Animal&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.02&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- moo()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Parent&amp;#45;&amp;gt;Cow --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Parent-&gt;Cow&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M195.5,-103.57C210.68,-89.91 229.13,-73.3 245.01,-59.01&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;247.31,-61.65 252.4,-52.36 242.62,-56.45 247.31,-61.65&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;250.92&quot; y=&quot;-72.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_hierarchical_inheritance Pages: 1 --&gt;
&lt;svg width=&quot;229pt&quot; height=&quot;176pt&quot; viewBox=&quot;0.00 0.00 229.00 176.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 171.7)&quot;&gt;
&lt;title&gt;semantic_hierarchical_inheritance&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-171.7 224.65,-171.7 224.65,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;101.2&quot; cy=&quot;-89.71&quot; rx=&quot;101.02&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;101.2&quot; y=&quot;-85.81&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Hierarchical Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;177.08&quot; cy=&quot;-101.49&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;177.08&quot; y=&quot;-98.19&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M177.03,-101.48C177.04,-101.48 177.06,-101.49 177.07,-101.49&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;158.54&quot; y=&quot;-93.38&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- MULTI --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;MULTI&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;73.82&quot; cy=&quot;-18&quot; rx=&quot;73.82&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;73.82&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Multilevel Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;MULTI --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--MULTI&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M94.29,-71.62C90.17,-60.83 84.96,-47.17 80.82,-36.34&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;60.05&quot; y=&quot;-56.68&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;!-- POLY --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;POLY&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;53.32&quot; cy=&quot;-149.7&quot; rx=&quot;53.01&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;53.32&quot; y=&quot;-146.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Polymorphism&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;POLY --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--POLY&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M86.83,-107.71C80.66,-115.44 73.48,-124.44 67.34,-132.13&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;56.83&quot; y=&quot;-122.62&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;One parent, many children&lt;/strong&gt;: Single superclass with multiple direct subclasses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Independent siblings&lt;/strong&gt;: Children do not share a direct relationship with each other&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shared behavior propagation&lt;/strong&gt;: Parent changes automatically affect all children&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Most common pattern&lt;/strong&gt;: Hierarchical inheritance is the most frequently used inheritance type&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Polymorphism friendly&lt;/strong&gt;: Enables polymorphic substitution — treat any child as the parent type&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — the extends mechanism&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-multilevel-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multilevel-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Multilevel Inheritance&lt;/a&gt; — fan-out vs chain&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-single-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-single-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Single Inheritance&lt;/a&gt; — multiple children vs one child from a single parent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Inheritance Types&lt;/a&gt; — hierarchical is one of the five inheritance types&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — hierarchical inheritance naturally enables polymorphic substitution&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Sibling coupling&lt;/strong&gt;: Siblings should not depend on each other’s behavior — if they do, the hierarchy is wrong&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refactoring difficulty&lt;/strong&gt;: Changing the parent interface affects all children simultaneously&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-hybrid-inheritance</title>
    <link href="https://animishraa05.github.io/wiki/java/java-hybrid-inheritance" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-hybrid-inheritance.md" />
    <summary>The Problem Complex class hierarchies often need to combine multiple inheritance patterns — both hierarchical and multiple inheritance simultaneously.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Complex class hierarchies often need to combine multiple inheritance patterns — both hierarchical and multiple inheritance simultaneously. A class might extend a parent class while implementing multiple interfaces, creating a hybrid structure. Without a safe way to do this, complex type hierarchies would be impossible.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Hybrid Inheritance&lt;/strong&gt; is a combination of two or more types of inheritance. In Java, this is achievable only through interfaces. For example, a class may implement two interfaces that themselves extend a base interface, while the class also extends a parent class. The diamond problem is avoided because interfaces provide no conflicting state resolution — the class always wins over interface defaults.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;In hybrid inheritance: &lt;code class=&quot;notranslate&quot;&gt;Interface1&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;Interface2&lt;/code&gt; extend &lt;code class=&quot;notranslate&quot;&gt;BaseInterface&lt;/code&gt;. A class &lt;code class=&quot;notranslate&quot;&gt;C&lt;/code&gt; extends &lt;code class=&quot;notranslate&quot;&gt;ParentClass&lt;/code&gt; and implements &lt;code class=&quot;notranslate&quot;&gt;Interface1&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Interface2&lt;/code&gt;. The class inherits behavior from both the class hierarchy (via extends) and the interface hierarchy (via implements). Java’s rule is: class implementation always takes priority over interface default methods, preventing ambiguity. The result is a combination of multilevel (via the class chain) and multiple (via interfaces) inheritance.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: hybrid_inheritance Pages: 1 --&gt;
&lt;svg width=&quot;276pt&quot; height=&quot;227pt&quot; viewBox=&quot;0.00 0.00 276.00 227.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 223.2)&quot;&gt;
&lt;title&gt;hybrid_inheritance&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-223.2 272.36,-223.2 272.36,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- BaseI --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;BaseI&lt;/title&gt;
&lt;polygon fill=&quot;#fff3cd&quot; stroke=&quot;black&quot; points=&quot;129.71,-36 36.33,-36 36.33,0 129.71,0 129.71,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;83.02&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Base Interface&lt;/text&gt;
&lt;/g&gt;
&lt;!-- I1 --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;I1&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;74.03,-120 0,-120 0,-84 74.03,-84 74.03,-120&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;37.02&quot; y=&quot;-98.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Interface A&lt;/text&gt;
&lt;/g&gt;
&lt;!-- I1&amp;#45;&amp;gt;BaseI --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;I1-&gt;BaseI&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M46.58,-83.56C51.46,-74.69 57.51,-63.75 62.99,-54 64.4,-51.49 65.88,-48.88 67.36,-46.28&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;70.32,-48.15 72.23,-37.73 64.24,-44.68 70.32,-48.15&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;80.5&quot; y=&quot;-57&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;!-- I2 --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;I2&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;166.03,-120 92,-120 92,-84 166.03,-84 166.03,-120&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;129.02&quot; y=&quot;-98.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Interface B&lt;/text&gt;
&lt;/g&gt;
&lt;!-- I2&amp;#45;&amp;gt;BaseI --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;I2-&gt;BaseI&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M119.26,-83.61C113.16,-72.74 105.18,-58.51 98.26,-46.17&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;101.44,-44.69 93.5,-37.69 95.34,-48.12 101.44,-44.69&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;126.28&quot; y=&quot;-57&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Parent --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Parent&lt;/title&gt;
&lt;polygon fill=&quot;#fff3cd&quot; stroke=&quot;black&quot; points=&quot;268.36,-120 183.67,-120 183.67,-84 268.36,-84 268.36,-120&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;226.02&quot; y=&quot;-98.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Parent Class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Child --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Child&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;180.7,-219.2 77.33,-219.2 77.33,-168 180.7,-168 180.7,-219.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;129.02&quot; y=&quot;-204.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Class C&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;129.02&quot; y=&quot;-190&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;extends Parent&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;129.02&quot; y=&quot;-175.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;implements A, B&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Child&amp;#45;&amp;gt;I1 --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Child-&gt;I1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M94.1,-167.72C87.13,-162.19 80.07,-156.14 73.89,-150 67.61,-143.77 61.43,-136.48 55.97,-129.52&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;58.78,-127.44 49.95,-121.58 53.2,-131.66 58.78,-127.44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;99.45&quot; y=&quot;-141&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;implements&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Child&amp;#45;&amp;gt;I2 --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Child-&gt;I2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M129.02,-167.64C129.02,-156.5 129.02,-143.3 129.02,-131.74&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;132.52,-131.96 129.02,-121.96 125.52,-131.96 132.52,-131.96&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;154.58&quot; y=&quot;-141&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;implements&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Child&amp;#45;&amp;gt;Parent --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Child-&gt;Parent&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M163.26,-167.63C170.32,-162.06 177.57,-156.01 184.02,-150 190.99,-143.49 198.09,-135.97 204.42,-128.87&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;207.03,-131.2 210.95,-121.36 201.75,-126.61 207.03,-131.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;212.56&quot; y=&quot;-141&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_hybrid_inheritance Pages: 1 --&gt;
&lt;svg width=&quot;244pt&quot; height=&quot;176pt&quot; viewBox=&quot;0.00 0.00 244.00 176.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 171.7)&quot;&gt;
&lt;title&gt;semantic_hybrid_inheritance&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-171.7 240.24,-171.7 240.24,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;91.45&quot; cy=&quot;-89.71&quot; rx=&quot;80.45&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;91.45&quot; y=&quot;-85.81&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Hybrid Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- MULTI --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;MULTI&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;167.33&quot; cy=&quot;-101.49&quot; rx=&quot;68.91&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;167.33&quot; y=&quot;-98.19&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Multiple Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;MULTI --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--MULTI&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M158.33,-100.09C158.5,-100.12 158.67,-100.15 158.84,-100.17&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;140.08&quot; y=&quot;-102.83&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INTER --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INTER&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;64.07&quot; cy=&quot;-18&quot; rx=&quot;39.78&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;64.07&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Interfaces&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INTER --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INTER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M84.54,-71.62C80.36,-60.66 75.05,-46.75 70.88,-35.84&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;59.21&quot; y=&quot;-56.43&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;43.57&quot; cy=&quot;-149.7&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;43.57&quot; y=&quot;-146.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M77.08,-107.71C70.8,-115.58 63.47,-124.77 57.27,-132.54&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;53.42&quot; y=&quot;-122.82&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Combination of types&lt;/strong&gt;: Merges two or more inheritance types (e.g., multilevel + multiple)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interface-only in Java&lt;/strong&gt;: Like multiple inheritance, hybrid is achievable only through interfaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class-before-interface rule&lt;/strong&gt;: Concrete class implementation always beats interface default methods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Most complex form&lt;/strong&gt;: Overuse leads to unmaintainable class hierarchies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No state diamond problem&lt;/strong&gt;: Since only interfaces provide the multiple aspect, state conflicts are impossible&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-multiple-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multiple-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Multiple Inheritance&lt;/a&gt; — hybrid combines multiple with other types&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — the interface mechanism enables hybrid structures&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Inheritance Types&lt;/a&gt; — hybrid is the most complex inheritance type&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — every hybrid structure starts with extends&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Complexity&lt;/strong&gt;: Hybrid inheritance is the most complex form — overuse leads to unmaintainable hierarchies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Method resolution order&lt;/strong&gt;: Java uses class-before-interface rule: the concrete class’s implementation beats any default method&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-identifiers-and-keywords</title>
    <link href="https://animishraa05.github.io/wiki/java/java-identifiers-and-keywords" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-identifiers-and-keywords.md" />
    <summary>The Problem Programming languages need a way to name elements — variables, methods, classes — while reserving certain words for the language’s own syntax.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Programming languages need a way to name elements — variables, methods, classes — while reserving certain words for the language’s own syntax. Without clear rules for what constitutes a valid name and what words are reserved, developers could write ambiguous or illegal code that confuses both the compiler and other programmers.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Identifiers&lt;/strong&gt; are names given to program elements (classes, methods, variables). &lt;strong&gt;Keywords&lt;/strong&gt; are predefined, reserved words in Java that cannot be used as identifiers. Java has strict naming rules: identifiers must start with a letter, underscore, or dollar sign, and can contain letters, digits, underscores, and dollar signs.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;During lexical analysis, the Java compiler tokenizes the source code. It distinguishes between keywords (like &lt;code class=&quot;notranslate&quot;&gt;if&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;class&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;public&lt;/code&gt;) which trigger specific parsing rules, and identifiers (like &lt;code class=&quot;notranslate&quot;&gt;myVariable&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;calculateTotal&lt;/code&gt;) which refer to user-defined entities. Keywords are always lowercase and have fixed meanings in the language specification.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_identifiers Pages: 1 --&gt;
&lt;svg width=&quot;553pt&quot; height=&quot;183pt&quot; viewBox=&quot;0.00 0.00 553.00 183.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 178.6)&quot;&gt;
&lt;title&gt;java_identifiers&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-178.6 549.27,-178.6 549.27,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Source --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Source&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;157.42,-98 0,-98 0,-62 157.42,-62 157.42,-98&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;78.71&quot; y=&quot;-76.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Source Code Tokenization&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Lexer --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Lexer&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;269.12,-98 194.42,-98 194.42,-62 269.12,-62 269.12,-98&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.77&quot; y=&quot;-76.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Java Lexer&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Source&amp;#45;&amp;gt;Lexer --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Source-&gt;Lexer&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M157.89,-80C166.4,-80 174.87,-80 182.86,-80&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;182.66,-83.5 192.66,-80 182.66,-76.5 182.66,-83.5&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Key --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Key&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;532.94,-174.6 406.89,-174.6 406.89,-123.4 532.94,-123.4 532.94,-174.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;469.91&quot; y=&quot;-159.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Keywords&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;469.91&quot; y=&quot;-145.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;if, else, class, public,&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;469.91&quot; y=&quot;-131&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;static, void, return...&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Lexer&amp;#45;&amp;gt;Key --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Lexer-&gt;Key&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M269.4,-94.79C275.29,-96.98 281.34,-99.13 287.12,-101 322.41,-112.44 362.2,-123.18 395.53,-131.59&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;394.55,-134.96 405.1,-133.99 396.25,-128.16 394.55,-134.96&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;331.84&quot; y=&quot;-130.78&quot; font-family=&quot;Times,serif&quot; font-size=&quot;14.00&quot;&gt;reserved words&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Ident --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Ident&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;545.27,-105.6 394.56,-105.6 394.56,-54.4 545.27,-54.4 545.27,-105.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;469.91&quot; y=&quot;-90.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Identifiers&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;469.91&quot; y=&quot;-76.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;myVar, calculateSum,&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;469.91&quot; y=&quot;-62&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;UserAccount, MAX_SIZE&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Lexer&amp;#45;&amp;gt;Ident --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Lexer-&gt;Ident&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M269.4,-80C299.71,-80 343.96,-80 383.1,-80&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;383.01,-83.5 393.01,-80 383.01,-76.5 383.01,-83.5&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;331.84&quot; y=&quot;-84.2&quot; font-family=&quot;Times,serif&quot; font-size=&quot;14.00&quot;&gt;user names&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Other --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Other&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;531.27,-36 408.56,-36 408.56,0 531.27,0 531.27,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;469.91&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Literals &amp;#x26; Operators&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Lexer&amp;#45;&amp;gt;Other --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Lexer-&gt;Other&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M269.36,-65.18C275.25,-63.03 281.31,-60.96 287.12,-59.2 322.87,-48.37 363.35,-38.93 397.02,-31.82&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;397.6,-35.28 406.68,-29.81 396.18,-28.42 397.6,-35.28&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;331.84&quot; y=&quot;-63.4&quot; font-family=&quot;Times,serif&quot; font-size=&quot;14.00&quot;&gt;values, symbols&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_java_ids Pages: 1 --&gt;
&lt;svg width=&quot;234pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 234.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_java_ids&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 229.69,-172.97 229.69,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;114.31&quot; cy=&quot;-84.66&quot; rx=&quot;96.23&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.31&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Identifiers &amp;#x26; Keywords&lt;/text&gt;
&lt;/g&gt;
&lt;!-- DT --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;DT&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;181&quot; cy=&quot;-41.42&quot; rx=&quot;44.69&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;181&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Data Types&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;DT --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--DT&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M141.44,-67.07C146.63,-63.7 152.03,-60.2 157.11,-56.91&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;130.77&quot; y=&quot;-53.89&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- VAR --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;VAR&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;71.15&quot; cy=&quot;-18&quot; rx=&quot;38.27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.15&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Variables&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;VAR --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--VAR&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M102.52,-66.44C96.23,-56.73 88.53,-44.84 82.34,-35.27&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;72.16&quot; y=&quot;-53.56&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- CTRL --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;CTRL&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;48.09&quot; cy=&quot;-128.51&quot; rx=&quot;48.09&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;48.09&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Control Flow&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;CTRL --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--CTRL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M87.76,-102.24C82.58,-105.67 77.17,-109.25 72.08,-112.62&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;100.18&quot; y=&quot;-110.13&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LEX --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LEX&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;158.16&quot; cy=&quot;-150.97&quot; rx=&quot;58.31&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;158.16&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Lexical Analysis&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LEX --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LEX&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M126.29,-102.78C132.48,-112.13 140.01,-123.52 146.19,-132.87&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;122.48&quot; y=&quot;-120.52&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;67 keywords&lt;/strong&gt; in Java 17 (including &lt;code class=&quot;notranslate&quot;&gt;var&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;record&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;sealed&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;yield&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Case-sensitive&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;Class&lt;/code&gt; is an identifier, &lt;code class=&quot;notranslate&quot;&gt;class&lt;/code&gt; is a keyword&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unicode support&lt;/strong&gt;: Identifiers can use Unicode characters (e.g., π, 中国)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CamelCase convention&lt;/strong&gt;: Classes use PascalCase, variables use camelCase, constants use UPPER_SNAKE_CASE&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-data-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-data-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Data Types&lt;/a&gt; — identifiers are typed when declared&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-variables&quot; class=&quot;internal alias&quot; data-slug=&quot;java-variables&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Variables&lt;/a&gt; — variables are the primary use of identifiers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-methods&quot; class=&quot;internal alias&quot; data-slug=&quot;java-methods&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Methods&lt;/a&gt; — method names follow identifier rules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-operators&quot; class=&quot;internal alias&quot; data-slug=&quot;java-operators&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Operators&lt;/a&gt; — operators are symbols, not keywords/identifiers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-control-flow&quot; class=&quot;internal alias&quot; data-slug=&quot;java-control-flow&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Control Flow&lt;/a&gt; — keywords like if, else, switch, case enable branching&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;&lt;code class=&quot;notranslate&quot;&gt;const&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;goto&lt;/code&gt; are reserved but unused&lt;/strong&gt; — you cannot use them as identifiers, but they do nothing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code class=&quot;notranslate&quot;&gt;true&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;false&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;null&lt;/code&gt; are literals, not keywords&lt;/strong&gt; — but still cannot be used as identifiers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code class=&quot;notranslate&quot;&gt;var&lt;/code&gt; is not a keyword&lt;/strong&gt; — it is a “reserved type name” with special inference behavior&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dollar signs in identifiers&lt;/strong&gt; are legal but strongly discouraged (used by compiler-generated code)&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-inheritance-types</title>
    <link href="https://animishraa05.github.io/wiki/java/java-inheritance-types" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-inheritance-types.md" />
    <summary>The Problem Inheritance in Java is not a single mechanism — there are different ways a class can inherit from another, each serving different design needs.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Inheritance in Java is not a single mechanism — there are different ways a class can inherit from another, each serving different design needs. Understanding which type to use is critical: choosing the wrong inheritance structure can lead to deep, fragile hierarchies or the infamous diamond problem.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Java supports five types of inheritance through a combination of class and interface mechanisms: &lt;strong&gt;single&lt;/strong&gt; (one subclass, one superclass), &lt;strong&gt;multilevel&lt;/strong&gt; (chain of inheritance), &lt;strong&gt;hierarchical&lt;/strong&gt; (multiple subclasses from one superclass), &lt;strong&gt;multiple&lt;/strong&gt; (through interfaces — a class implements multiple interfaces), and &lt;strong&gt;hybrid&lt;/strong&gt; (combination of types, achievable only through interfaces).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Java strictly forbids multiple inheritance of classes to avoid the diamond problem (ambiguity when two parent classes define the same method). Single, multilevel, and hierarchical inheritance are achieved via the &lt;code class=&quot;notranslate&quot;&gt;extends&lt;/code&gt; keyword on classes. Multiple and hybrid inheritance are achieved via &lt;code class=&quot;notranslate&quot;&gt;implements&lt;/code&gt; on interfaces. A class can extend at most one class but implement multiple interfaces.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot; tabindex=&quot;0&quot; data-language=&quot;dot&quot; data-theme=&quot;github-light github-dark&quot; class=&quot;notranslate&quot;&gt;&lt;span class=&quot;clipboard-button&quot; type=&quot;button&quot; aria-label=&quot;copy source&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 -8 24 24&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;copy-icon&quot;&gt;&lt;use href=&quot;#github-copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 -8 24 24&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;check-icon&quot;&gt;&lt;use href=&quot;#github-check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;code data-language=&quot;dot&quot; data-theme=&quot;github-light github-dark&quot; style=&quot;display: grid;&quot; class=&quot;notranslate&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;digraph java_inheritance_types {&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  rankdir=TB&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  node [shape=box style=filled fillcolor=&quot;#f0f4ff&quot; fontname=&quot;Helvetica&quot; fontsize=11]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  edge [fontname=&quot;Helvetica&quot; fontsize=10]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Single [label=&quot;Single\nA → B&quot; fillcolor=&quot;#ffe5cc&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  MultiLevel [label=&quot;Multilevel\nA → B → C&quot; fillcolor=&quot;#ffe5cc&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Hierarchical [label=&quot;Hierarchical\nA → B, A → C&quot; fillcolor=&quot;#ffe5cc&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Multiple [label=&quot;Multiple (Interface)\nI1, I2 → C&quot; fillcolor=&quot;#d4edda&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  Hybrid [label=&quot;Hybrid (Interface)\nI1, I2 → B → C&quot; fillcolor=&quot;#d4edda&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  A1 [label=&quot;Parent&quot;] -&gt; B1 [label=&quot;Child&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  A2 [label=&quot;Grandparent&quot;] -&gt; B2 [label=&quot;Parent&quot;] -&gt; C2 [label=&quot;Child&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  A3 [label=&quot;Parent&quot;] -&gt; B3 [label=&quot;Child1&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  A3 -&gt; C3 [label=&quot;Child2&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  I1 [label=&quot;Interface1&quot;] -&gt; C4 [label=&quot;Class&quot; style=dashed]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  I2 [label=&quot;Interface2&quot;] -&gt; C4 [style=dashed]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  I3 [label=&quot;Interface1&quot;] -&gt; B5 [label=&quot;Base&quot; style=dashed]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  I4 [label=&quot;Interface2&quot;] -&gt; B5 [style=dashed]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  B5 -&gt; C5 [label=&quot;Derived&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  {rank=same A1 B1}&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  {rank=same A2 B2 C2}&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  {rank=same A3 B3 C3}&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  {rank=same I1 I2 C4}&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  {rank=same I3 I4 B5 C5}&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_inheritance_types Pages: 1 --&gt;
&lt;svg width=&quot;237pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 237.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_inheritance_types&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 233.48,-172.97 233.48,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;119.23&quot; cy=&quot;-84.66&quot; rx=&quot;79.01&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;119.23&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Inheritance Types&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;185.91&quot; cy=&quot;-41.42&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;185.91&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M145.97,-67.32C151.33,-63.84 156.93,-60.21 162.18,-56.81&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;135.57&quot; y=&quot;-53.96&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INTER --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INTER&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;76.07&quot; cy=&quot;-18&quot; rx=&quot;39.78&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;76.07&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Interfaces&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INTER --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INTER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M107.43,-66.44C101.24,-56.88 93.69,-45.22 87.55,-35.73&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;77.23&quot; y=&quot;-53.79&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- POLY --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;POLY&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;53.01&quot; cy=&quot;-128.51&quot; rx=&quot;53.01&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;53.01&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Polymorphism&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;POLY --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--POLY&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M93.06,-101.99C87.99,-105.34 82.71,-108.84 77.7,-112.16&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;99.14&quot; y=&quot;-109.77&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- DIAMOND --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;DIAMOND&lt;/title&gt;
&lt;ellipse fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; cx=&quot;163.07&quot; cy=&quot;-150.97&quot; rx=&quot;64.36&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;163.07&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Diamond Problem&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;DIAMOND --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--DIAMOND&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M131.21,-102.78C137.39,-112.13 144.92,-123.52 151.11,-132.87&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;123.9&quot; y=&quot;-120.52&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;prevents&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Single&lt;/strong&gt;: One subclass inherits from one superclass — the simplest form&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multilevel&lt;/strong&gt;: A chain of inheritance where a class is derived from another derived class&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hierarchical&lt;/strong&gt;: Multiple subclasses inherit from a single superclass&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple (interface only)&lt;/strong&gt;: A class implements multiple interfaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hybrid (interface only)&lt;/strong&gt;: A combination of inheritance types, achievable only through interfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — all inheritance types are specializations of the basic extends mechanism&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-single-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-single-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Single Inheritance&lt;/a&gt; — the simplest form, one parent one child&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-multilevel-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multilevel-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Multilevel Inheritance&lt;/a&gt; — chain of derived classes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-hierarchical-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-hierarchical-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Hierarchical Inheritance&lt;/a&gt; — one parent, multiple children&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-multiple-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multiple-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Multiple Inheritance&lt;/a&gt; — through interfaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-hybrid-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-hybrid-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Hybrid Inheritance&lt;/a&gt; — combination through interfaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — interfaces enable multiple and hybrid inheritance&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Diamond problem&lt;/strong&gt;: If classes A and B both define the same method, and C extends both, which does C use? Java avoids this by forbidding multiple class inheritance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interface default methods (Java 8+)&lt;/strong&gt;: If two interfaces define the same default method, the implementing class must override it to resolve ambiguity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cyclic inheritance&lt;/strong&gt;: Java does not allow a class to extend itself, directly or indirectly&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-inheritance</title>
    <link href="https://animishraa05.github.io/wiki/java/java-inheritance" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-inheritance.md" />
    <summary>The Problem Without inheritance, every class would need to reimplement shared behavior from scratch, leading to massive code duplication.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Without inheritance, every class would need to reimplement shared behavior from scratch, leading to massive code duplication. When a base behavior needs to change, every duplicate implementation must be updated individually — a maintenance nightmare in any non-trivial system. For example, without inheritance, Dog, Cat, and Cow would each need their own eat() and sleep() implementations even though they share those behaviors.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Inheritance&lt;/strong&gt; allows a class (subclass/child) to acquire the fields and methods of another class (superclass/parent). It represents an &lt;strong&gt;“is-a” relationship&lt;/strong&gt; — a Dog IS-A Animal, a Car IS-A Vehicle. The subclass uses the &lt;code class=&quot;notranslate&quot;&gt;extends&lt;/code&gt; keyword and inherits all accessible members. It can add new members, override methods, and access parent members using &lt;code class=&quot;notranslate&quot;&gt;super&lt;/code&gt;. Inheritance promotes code reusability and reduces redundancy.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When a subclass is loaded, its class file contains a reference to its parent class. Method dispatch uses the vtable — each class has a virtual method table that maps method names to actual implementations. &lt;code class=&quot;notranslate&quot;&gt;super.method()&lt;/code&gt; bypasses the subclass override and calls the parent’s version. Constructor chaining ensures parent initialization happens first. Java supports five types of inheritance, but only through careful restrictions: single, multilevel, hierarchical (via classes), and multiple and hybrid (via interfaces only).&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_inheritance Pages: 1 --&gt;
&lt;svg width=&quot;350pt&quot; height=&quot;173pt&quot; viewBox=&quot;0.00 0.00 350.00 173.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 168.8)&quot;&gt;
&lt;title&gt;java_inheritance&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-168.8 346.22,-168.8 346.22,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Animal --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Animal&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;239.63,-65.6 104.25,-65.6 104.25,0 239.63,0 239.63,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;171.94&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Class: Animal&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;171.94&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- void eat()&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;171.94&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- void sleep()&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;171.94&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- abstract void sound()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Dog --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Dog&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;99.88,-164.8 0,-164.8 0,-113.6 99.88,-113.6 99.88,-164.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;49.94&quot; y=&quot;-150&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Dog&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;49.94&quot; y=&quot;-135.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;extends Animal&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;49.94&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;sound()→&quot;Bark&quot;&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Dog&amp;#45;&amp;gt;Animal --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Dog-&gt;Animal&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M79.16,-113.19C93.2,-101.18 110.35,-86.5 126.07,-73.05&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;128.16,-75.87 133.48,-66.71 123.61,-70.56 128.16,-75.87&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;128.45&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Cat --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Cat&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;225.55,-164.8 118.33,-164.8 118.33,-113.6 225.55,-113.6 225.55,-164.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;171.94&quot; y=&quot;-150&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Cat&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;171.94&quot; y=&quot;-135.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;extends Animal&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;171.94&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;sound()→&quot;Meow&quot;&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Cat&amp;#45;&amp;gt;Animal --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Cat-&gt;Animal&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M171.94,-113.19C171.94,-102.41 171.94,-89.47 171.94,-77.2&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;175.44,-77.24 171.94,-67.24 168.44,-77.24 175.44,-77.24&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;189.45&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Cow --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Cow&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;342.22,-164.8 243.67,-164.8 243.67,-113.6 342.22,-113.6 342.22,-164.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;292.94&quot; y=&quot;-150&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Cow&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;292.94&quot; y=&quot;-135.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;extends Animal&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;292.94&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;sound()→&quot;Moo&quot;&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Cow&amp;#45;&amp;gt;Animal --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Cow-&gt;Animal&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M263.96,-113.19C250.04,-101.18 233.03,-86.5 217.43,-73.05&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;219.95,-70.6 210.09,-66.72 215.38,-75.9 219.95,-70.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;260.79&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_inheritance Pages: 1 --&gt;
&lt;svg width=&quot;267pt&quot; height=&quot;194pt&quot; viewBox=&quot;0.00 0.00 267.00 194.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 189.56)&quot;&gt;
&lt;title&gt;semantic_inheritance&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-189.56 263.4,-189.56 263.4,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;122.28&quot; cy=&quot;-86.38&quot; rx=&quot;53.18&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;122.28&quot; y=&quot;-82.48&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OBJ --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OBJ&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;174.14&quot; cy=&quot;-23.83&quot; rx=&quot;48.47&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;174.14&quot; y=&quot;-20.53&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Object Class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OBJ --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OBJ&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M137,-68.62C144.07,-60.1 152.51,-49.92 159.56,-41.42&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;129.78&quot; y=&quot;-57.72&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- POLY --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;POLY&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;78.52&quot; cy=&quot;-18&quot; rx=&quot;53.01&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;78.52&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Polymorphism&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;POLY --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--POLY&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M110.78,-68.41C104.3,-58.28 96.24,-45.68 89.79,-35.61&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;80.02&quot; y=&quot;-54.71&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ABS --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ABS&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;43.94&quot; cy=&quot;-107.72&quot; rx=&quot;43.94&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;43.94&quot; y=&quot;-104.42&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Abstraction&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ABS --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ABS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M80.36,-97.8C80.21,-97.84 80.07,-97.88 79.92,-97.92&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;100.4&quot; y=&quot;-100.56&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ACC --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ACC&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;198.07&quot; cy=&quot;-115.84&quot; rx=&quot;61.33&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;198.07&quot; y=&quot;-112.54&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Access Modifiers&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ACC --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ACC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M157.51,-100.07C158.59,-100.49 159.68,-100.92 160.76,-101.34&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;172.9&quot; y=&quot;-92.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHTYPES --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHTYPES&lt;/title&gt;
&lt;ellipse fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; cx=&quot;118.45&quot; cy=&quot;-167.56&quot; rx=&quot;63.99&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;118.45&quot; y=&quot;-164.26&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance Types&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHTYPES --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHTYPES&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M121.41,-104.8C120.78,-118.09 119.94,-135.95 119.31,-149.22&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;106.6&quot; y=&quot;-129.71&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Single inheritance&lt;/strong&gt;: A class can extend only one parent (no multiple inheritance of classes)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Method overriding&lt;/strong&gt;: Subclass redefines a method with the same signature&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;super keyword&lt;/strong&gt;: Accesses parent members and calls parent constructor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;final classes/methods&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;final&lt;/code&gt; classes cannot be extended; &lt;code class=&quot;notranslate&quot;&gt;final&lt;/code&gt; methods cannot be overridden&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code reuse&lt;/strong&gt;: Common functionality written once in superclass, reused across subclasses&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-object-class&quot; class=&quot;internal alias&quot; data-slug=&quot;java-object-class&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Object Class&lt;/a&gt; — all classes ultimately inherit from Object&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — inheritance enables runtime polymorphism through method overriding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-abstraction&quot; class=&quot;internal alias&quot; data-slug=&quot;java-abstraction&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Abstraction&lt;/a&gt; — abstract classes depend on inheritance for implementation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — interfaces provide a contract; classes provide implementation + state&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Inheritance Types&lt;/a&gt; — explores the five inheritance variants in Java&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Fragile base class problem&lt;/strong&gt;: Changes to parent can break subclasses in unexpected ways&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overriding vs hiding&lt;/strong&gt;: Static methods are hidden, not overridden — dispatch on reference type, not object type&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Covariant return types&lt;/strong&gt;: Overriding methods can return a subtype of the original return type&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constructor order&lt;/strong&gt;: Parent constructor runs before child constructor body&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple inheritance of classes&lt;/strong&gt;: Java explicitly forbids this to avoid the diamond problem; use interfaces instead&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-interfaces</title>
    <link href="https://animishraa05.github.io/wiki/java/java-interfaces" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-interfaces.md" />
    <summary>The Problem Classes need a way to define behavioral contracts without dictating implementation.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Classes need a way to define behavioral contracts without dictating implementation. Without interfaces, achieving polymorphism across unrelated class hierarchies would require a common abstract superclass — forcing artificial inheritance relationships and preventing multiple type identities.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;An &lt;strong&gt;interface&lt;/strong&gt; in Java is a reference type that defines a set of abstract method signatures (a contract) that implementing classes must fulfill. Unlike classes, interfaces support &lt;strong&gt;multiple inheritance&lt;/strong&gt; — a class can implement multiple interfaces. Java 8+ added &lt;code class=&quot;notranslate&quot;&gt;default&lt;/code&gt; methods (with body) and &lt;code class=&quot;notranslate&quot;&gt;static&lt;/code&gt; methods in interfaces.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When a class declares &lt;code class=&quot;notranslate&quot;&gt;implements InterfaceName&lt;/code&gt;, the compiler checks that the class provides implementations for all abstract interface methods. At runtime, interface method dispatch uses the &lt;code class=&quot;notranslate&quot;&gt;itable&lt;/code&gt; (interface method table), which is resolved differently from the vtable. A class can implement multiple interfaces, each defining a distinct role.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_interfaces Pages: 1 --&gt;
&lt;svg width=&quot;258pt&quot; height=&quot;158pt&quot; viewBox=&quot;0.00 0.00 258.00 158.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 154.4)&quot;&gt;
&lt;title&gt;java_interfaces&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-154.4 253.71,-154.4 253.71,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Flyable --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Flyable&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;104.04,-36.8 0,-36.8 0,0 104.04,0 104.04,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;52.02&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;interface Flyable&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;52.02&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;void fly()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Swimmable --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Swimmable&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;249.71,-36.8 122.33,-36.8 122.33,0 249.71,0 249.71,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;186.02&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;interface Swimmable&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;186.02&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;void swim()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Duck --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Duck&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;213.05,-150.4 24.99,-150.4 24.99,-84.8 213.05,-84.8 213.05,-150.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;119.02&quot; y=&quot;-135.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;class Duck&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;119.02&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;implements Flyable, Swimmable&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;119.02&quot; y=&quot;-106.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;fly() { ... }&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;119.02&quot; y=&quot;-92.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;swim() { ... }&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Duck&amp;#45;&amp;gt;Flyable --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Duck-&gt;Flyable&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M96.9,-84.5C88.44,-72.23 78.89,-58.37 70.77,-46.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;73.77,-44.78 65.21,-38.54 68.01,-48.76 73.77,-44.78&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;109.08&quot; y=&quot;-57.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;implements&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Duck&amp;#45;&amp;gt;Swimmable --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Duck-&gt;Swimmable&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M141.15,-84.5C149.6,-72.23 159.16,-58.37 167.27,-46.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;170.04,-48.76 172.83,-38.54 164.27,-44.78 170.04,-48.76&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;186.06&quot; y=&quot;-57.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;implements&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_interfaces Pages: 1 --&gt;
&lt;svg width=&quot;267pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 267.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_interfaces&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 263.36,-172.97 263.36,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;139.67&quot; cy=&quot;-84.66&quot; rx=&quot;48.39&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;139.67&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Interfaces&lt;/text&gt;
&lt;/g&gt;
&lt;!-- POLY --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;POLY&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;206.35&quot; cy=&quot;-41.42&quot; rx=&quot;53.01&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;206.35&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Polymorphism&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;POLY --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--POLY&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M164.12,-68.8C169.77,-65.14 175.79,-61.24 181.46,-57.56&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.05&quot; y=&quot;-65.88&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ABS --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ABS&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;96.5&quot; cy=&quot;-18&quot; rx=&quot;43.94&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;96.5&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Abstraction&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ABS --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ABS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M128.1,-66.79C121.81,-57.08 114.05,-45.1 107.8,-35.45&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;104.19&quot; y=&quot;-53.82&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LAMB --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LAMB&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;73.45&quot; cy=&quot;-128.51&quot; rx=&quot;73.45&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;73.45&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Lambda Expressions&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LAMB --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LAMB&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M115.76,-100.49C110.42,-104.02 104.74,-107.78 99.33,-111.37&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;87.28&quot; y=&quot;-97.83&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;183.51&quot; cy=&quot;-150.97&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;183.51&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M151.42,-102.43C157.71,-111.94 165.43,-123.63 171.73,-133.15&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;189.08&quot; y=&quot;-120.49&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Multiple inheritance&lt;/strong&gt;: A class can implement many interfaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;All methods are public&lt;/strong&gt;: Interface methods are implicitly &lt;code class=&quot;notranslate&quot;&gt;public abstract&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default methods&lt;/strong&gt; (Java 8+): Methods with a body in interfaces, enabling backward-compatible evolution&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functional interfaces&lt;/strong&gt;: Interfaces with exactly one abstract method — target for lambda expressions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-abstraction&quot; class=&quot;internal alias&quot; data-slug=&quot;java-abstraction&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Abstraction&lt;/a&gt; — interfaces are a form of full abstraction&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — interfaces enable polymorphic behavior across unrelated hierarchies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-lambda-and-streams&quot; class=&quot;internal alias&quot; data-slug=&quot;java-lambda-and-streams&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Lambda Expressions &amp;#x26; Streams&lt;/a&gt; — functional interfaces are the target type for lambdas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — single vs multiple inheritance; interface vs class&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Default method diamond problem&lt;/strong&gt;: If two interfaces define the same default method, the class must override&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interface constants&lt;/strong&gt;: Fields in interfaces are implicitly &lt;code class=&quot;notranslate&quot;&gt;public static final&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FunctionalInterface annotation&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;@FunctionalInterface&lt;/code&gt; is a documentation aid — the compiler validates single abstract method&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sealed interfaces&lt;/strong&gt; (Java 17+): Restrict which classes can implement an interface&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-iterator</title>
    <link href="https://animishraa05.github.io/wiki/java/java-iterator" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-iterator.md" />
    <summary>The Problem Every collection needs a way to traverse its elements, but different data structures store elements differently — arrays store contiguously, linked lists store with pointers, trees store with child references.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Every collection needs a way to traverse its elements, but different data structures store elements differently — arrays store contiguously, linked lists store with pointers, trees store with child references. A uniform traversal interface is needed that works regardless of internal structure.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The &lt;strong&gt;Iterator&lt;/strong&gt; interface provides a standard way to traverse a collection: &lt;code class=&quot;notranslate&quot;&gt;hasNext()&lt;/code&gt; checks for remaining elements, &lt;code class=&quot;notranslate&quot;&gt;next()&lt;/code&gt; returns the next element, and &lt;code class=&quot;notranslate&quot;&gt;remove()&lt;/code&gt; (optional) removes the last returned element. The &lt;code class=&quot;notranslate&quot;&gt;Iterable&lt;/code&gt; interface enables the enhanced for-each loop, which uses an iterator under the hood.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When &lt;code class=&quot;notranslate&quot;&gt;iterator()&lt;/code&gt; is called on a collection, a concrete iterator instance is returned. For ArrayList, this is a cursor that walks the backing array. For LinkedList, it follows node pointers. The iterator tracks its position and detects structural modification to the collection (fail-fast behavior).&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_iterator Pages: 1 --&gt;
&lt;svg width=&quot;726pt&quot; height=&quot;59pt&quot; viewBox=&quot;0.00 0.00 726.00 59.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 55.2)&quot;&gt;
&lt;title&gt;java_iterator&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-55.2 722.48,-55.2 722.48,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- List --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;List&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;76.01,-44 0,-44 0,-7.2 76.01,-7.2 76.01,-44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;38.01&quot; y=&quot;-29.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;ArrayList&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;38.01&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[A, B, C, D]&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Iter --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Iter&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;175.03,-44 112.01,-44 112.01,-7.2 175.03,-7.2 175.03,-44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;143.52&quot; y=&quot;-29.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Iterator&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;143.52&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;cursor=0&lt;/text&gt;
&lt;/g&gt;
&lt;!-- List&amp;#45;&amp;gt;Iter --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;List-&gt;Iter&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M76.38,-25.6C84.16,-25.6 92.41,-25.6 100.35,-25.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;100.16,-29.1 110.16,-25.6 100.16,-22.1 100.16,-29.1&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Step1 --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Step1&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;309.73,-51.2 211.03,-51.2 211.03,0 309.73,0 309.73,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;260.38&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;hasNext()→true&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;260.38&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;next()→A&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;260.38&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;cursor→1&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Iter&amp;#45;&amp;gt;Step1 --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Iter-&gt;Step1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M175.3,-25.6C182.79,-25.6 191.06,-25.6 199.41,-25.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;199.24,-29.1 209.24,-25.6 199.24,-22.1 199.24,-29.1&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Step2 --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Step2&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;444.42,-51.2 345.73,-51.2 345.73,0 444.42,0 444.42,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;395.07&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;hasNext()→true&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;395.07&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;next()→B&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;395.07&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;cursor→2&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Step1&amp;#45;&amp;gt;Step2 --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Step1-&gt;Step2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M310.04,-25.6C317.88,-25.6 326.08,-25.6 334.15,-25.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;333.91,-29.1 343.91,-25.6 333.91,-22.1 333.91,-29.1&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Step3 --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Step3&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;579.11,-51.2 480.42,-51.2 480.42,0 579.11,0 579.11,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;529.77&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;hasNext()→true&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;529.77&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;next()→C&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;529.77&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;cursor→3&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Step2&amp;#45;&amp;gt;Step3 --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Step2-&gt;Step3&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M444.73,-25.6C452.57,-25.6 460.77,-25.6 468.84,-25.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;468.6,-29.1 478.6,-25.6 468.6,-22.1 468.6,-29.1&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Done --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Done&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;718.48,-44 615.11,-44 615.11,-7.2 718.48,-7.2 718.48,-44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;666.79&quot; y=&quot;-29.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;hasNext()→false&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;666.79&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;end&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Step3&amp;#45;&amp;gt;Done --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Step3-&gt;Done&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M579.51,-25.6C587.32,-25.6 595.49,-25.6 603.55,-25.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;603.33,-29.1 613.33,-25.6 603.33,-22.1 603.33,-29.1&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_iterator Pages: 1 --&gt;
&lt;svg width=&quot;219pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 219.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_iterator&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 215.32,-172.97 215.32,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;101.45&quot; cy=&quot;-84.66&quot; rx=&quot;37.86&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;101.45&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Iterator&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COLL --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COLL&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;168.14&quot; cy=&quot;-41.42&quot; rx=&quot;43.18&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;168.14&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Collections&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COLL --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COLL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M124.03,-70.02C130.68,-65.71 137.97,-60.98 144.68,-56.63&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;152.86&quot; y=&quot;-66.03&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LOOP --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LOOP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;58.29&quot; cy=&quot;-18&quot; rx=&quot;54.91&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;58.29&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;For-Each Loop&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LOOP --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LOOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M90.11,-67.14C83.82,-57.42 76.01,-45.37 69.71,-35.63&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;59.65&quot; y=&quot;-54.09&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- STREAM --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;STREAM&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;35.23&quot; cy=&quot;-128.51&quot; rx=&quot;35.23&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;35.23&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Streams&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;STREAM --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--STREAM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M79.04,-99.5C71.98,-104.17 64.2,-109.33 57.18,-113.98&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;81.87&quot; y=&quot;-109.44&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- FAIL --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;FAIL&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;145.3&quot; cy=&quot;-150.97&quot; rx=&quot;65.11&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;145.3&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Fail-Fast Behavior&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;FAIL --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--FAIL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M112.97,-102.08C119.27,-111.6 127.05,-123.36 133.4,-132.97&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;102.92&quot; y=&quot;-120.22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Fail-fast&lt;/strong&gt;: Throws ConcurrentModificationException if the collection is modified during iteration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;for-each sugar&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;for (T item : collection)&lt;/code&gt; compiles to iterator-based loop&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;remove() is safe&lt;/strong&gt;: Iterator.remove() modifies the collection without throwing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ListIterator&lt;/strong&gt;: Extended interface for bidirectional traversal and index access&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Collections Framework&lt;/a&gt; — every Collection provides an iterator()&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-lambda-and-streams&quot; class=&quot;internal alias&quot; data-slug=&quot;java-lambda-and-streams&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Streams &amp;#x26; Lambdas&lt;/a&gt; — streams provide an alternative functional iteration model&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-loops&quot; class=&quot;internal alias&quot; data-slug=&quot;java-loops&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Loops&lt;/a&gt; — for-each loop uses iterator behind the scenes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-comparable-and-comparator&quot; class=&quot;internal alias&quot; data-slug=&quot;java-comparable-and-comparator&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Comparable and Comparator&lt;/a&gt; — used with iterators for sorted traversal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;No reset&lt;/strong&gt;: An iterator is single-use — create a new one to traverse again&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;remove() before next()&lt;/strong&gt;: IllegalStateException if next() hasn’t been called&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fail-fast is not guaranteed&lt;/strong&gt;: It’s a best-effort detection mechanism, not a guarantee&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LegacyEnumeration&lt;/strong&gt;: Older collections (Vector, Hashtable) use Enumeration, not Iterator&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-jdbc</title>
    <link href="https://animishraa05.github.io/wiki/java/java-jdbc" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-jdbc.md" />
    <summary>The Problem Applications need to store and retrieve data from databases, but each database vendor has its own protocol and API.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Applications need to store and retrieve data from databases, but each database vendor has its own protocol and API. Without a standard abstraction, switching databases or supporting multiple databases would require rewriting all data access code.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Java Database Connectivity (JDBC)&lt;/strong&gt; is a standard API that allows Java applications to interact with any relational database through a common interface. Database vendors provide &lt;strong&gt;JDBC drivers&lt;/strong&gt; that implement the API. The core workflow is: connect → create statement → execute query → process results → close.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The application loads a JDBC driver (e.g., &lt;code class=&quot;notranslate&quot;&gt;com.mysql.cj.jdbc.Driver&lt;/code&gt;), gets a &lt;code class=&quot;notranslate&quot;&gt;Connection&lt;/code&gt; via &lt;code class=&quot;notranslate&quot;&gt;DriverManager.getConnection()&lt;/code&gt;, creates a &lt;code class=&quot;notranslate&quot;&gt;Statement&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;PreparedStatement&lt;/code&gt;, executes SQL, and processes the &lt;code class=&quot;notranslate&quot;&gt;ResultSet&lt;/code&gt;. &lt;code class=&quot;notranslate&quot;&gt;PreparedStatement&lt;/code&gt; prevents SQL injection by pre-compiling queries with parameter placeholders.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_jdbc Pages: 1 --&gt;
&lt;svg width=&quot;314pt&quot; height=&quot;478pt&quot; viewBox=&quot;0.00 0.00 314.00 478.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 474.4)&quot;&gt;
&lt;title&gt;java_jdbc&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-474.4 310.05,-474.4 310.05,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- App --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;App&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;132.72,-470.4 29.33,-470.4 29.33,-434.4 132.72,-434.4 132.72,-470.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;81.02&quot; y=&quot;-448.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Java Application&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JDBC --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;JDBC&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;117.36,-398.4 44.68,-398.4 44.68,-361.6 117.36,-361.6 117.36,-398.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;81.02&quot; y=&quot;-383.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;JDBC API&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;81.02&quot; y=&quot;-369.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(java.sql.*)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- App&amp;#45;&amp;gt;JDBC --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;App-&gt;JDBC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M81.02,-434C81.02,-426.78 81.02,-418.2 81.02,-410.07&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;84.52,-410.2 81.02,-400.2 77.52,-410.2 84.52,-410.2&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Driver --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Driver&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;160.38,-325.6 1.66,-325.6 1.66,-288.8 160.38,-288.8 160.38,-325.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;81.02&quot; y=&quot;-310.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;JDBC Driver&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;81.02&quot; y=&quot;-296.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(e.g., MySQL Connector/J)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JDBC&amp;#45;&amp;gt;Driver --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;JDBC-&gt;Driver&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M81.02,-361.13C81.02,-353.87 81.02,-345.28 81.02,-337.17&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;84.52,-337.33 81.02,-327.33 77.52,-337.33 84.52,-337.33&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- DB --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;DB&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;162.04,-252.8 0,-252.8 0,-216 162.04,-216 162.04,-252.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;81.02&quot; y=&quot;-238&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Database&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;81.02&quot; y=&quot;-223.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(MySQL, PostgreSQL, etc.)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Driver&amp;#45;&amp;gt;DB --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Driver-&gt;DB&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M81.02,-288.33C81.02,-281.07 81.02,-272.48 81.02,-264.37&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;84.52,-264.53 81.02,-254.53 77.52,-264.53 84.52,-264.53&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Steps --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Steps&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;none&quot; points=&quot;292.03,-470.4 192.02,-470.4 192.02,-434.4 292.03,-434.4 292.03,-470.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;242.02&quot; y=&quot;-448.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;JDBC Workflow&lt;/text&gt;
&lt;/g&gt;
&lt;!-- S1 --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;S1&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;286.71,-398 197.33,-398 197.33,-362 286.71,-362 286.71,-398&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;242.02&quot; y=&quot;-376.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;1. Load driver&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Steps&amp;#45;&amp;gt;S1 --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Steps-&gt;S1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M242.02,-434.72C242.02,-427.2 242.02,-418.11 242.02,-409.56&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;245.52,-409.57 242.02,-399.57 238.52,-409.57 245.52,-409.57&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- S2 --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;S2&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;298.39,-325.2 185.66,-325.2 185.66,-289.2 298.39,-289.2 298.39,-325.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;242.02&quot; y=&quot;-303.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;2. Get Connection&lt;/text&gt;
&lt;/g&gt;
&lt;!-- S1&amp;#45;&amp;gt;S2 --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;S1-&gt;S2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M242.02,-361.86C242.02,-354.41 242.02,-345.46 242.02,-337.04&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;245.52,-337.19 242.02,-327.19 238.52,-337.19 245.52,-337.19&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- S3 --&gt;
&lt;g id=&quot;node8&quot; class=&quot;node&quot;&gt;
&lt;title&gt;S3&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;303.72,-252.4 180.33,-252.4 180.33,-216.4 303.72,-216.4 303.72,-252.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;242.02&quot; y=&quot;-230.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;3. Create Statement&lt;/text&gt;
&lt;/g&gt;
&lt;!-- S2&amp;#45;&amp;gt;S3 --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;S2-&gt;S3&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M242.02,-289.06C242.02,-281.61 242.02,-272.66 242.02,-264.24&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;245.52,-264.39 242.02,-254.39 238.52,-264.39 245.52,-264.39&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- S4 --&gt;
&lt;g id=&quot;node9&quot; class=&quot;node&quot;&gt;
&lt;title&gt;S4&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;296.38,-180 187.67,-180 187.67,-144 296.38,-144 296.38,-180&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;242.02&quot; y=&quot;-158.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;4. Execute Query&lt;/text&gt;
&lt;/g&gt;
&lt;!-- S3&amp;#45;&amp;gt;S4 --&gt;
&lt;g id=&quot;edge7&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;S3-&gt;S4&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M242.02,-216C242.02,-208.67 242.02,-199.94 242.02,-191.7&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;245.52,-191.72 242.02,-181.72 238.52,-191.72 245.52,-191.72&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- S5 --&gt;
&lt;g id=&quot;node10&quot; class=&quot;node&quot;&gt;
&lt;title&gt;S5&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;306.05,-108 178,-108 178,-72 306.05,-72 306.05,-108&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;242.02&quot; y=&quot;-86.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;5. Process ResultSet&lt;/text&gt;
&lt;/g&gt;
&lt;!-- S4&amp;#45;&amp;gt;S5 --&gt;
&lt;g id=&quot;edge8&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;S4-&gt;S5&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M242.02,-143.7C242.02,-136.41 242.02,-127.73 242.02,-119.54&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;245.52,-119.62 242.02,-109.62 238.52,-119.62 245.52,-119.62&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- S6 --&gt;
&lt;g id=&quot;node11&quot; class=&quot;node&quot;&gt;
&lt;title&gt;S6&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;300.04,-36 184,-36 184,0 300.04,0 300.04,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;242.02&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;6. Close resources&lt;/text&gt;
&lt;/g&gt;
&lt;!-- S5&amp;#45;&amp;gt;S6 --&gt;
&lt;g id=&quot;edge9&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;S5-&gt;S6&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M242.02,-71.7C242.02,-64.41 242.02,-55.73 242.02,-47.54&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;245.52,-47.62 242.02,-37.62 238.52,-47.62 245.52,-47.62&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_jdbc Pages: 1 --&gt;
&lt;svg width=&quot;218pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 218.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_jdbc&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 214.21,-172.97 214.21,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;111.7&quot; cy=&quot;-84.66&quot; rx=&quot;33.07&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;111.7&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;JDBC&lt;/text&gt;
&lt;/g&gt;
&lt;!-- IO --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;IO&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;178.38&quot; cy=&quot;-41.42&quot; rx=&quot;31.83&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;178.38&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;File I/O&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;IO --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--IO&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M133.16,-70.74C140.93,-65.7 149.69,-60.02 157.41,-55.02&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;131.53&quot; y=&quot;-54.78&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- EXC --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;EXC&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;68.54&quot; cy=&quot;-18&quot; rx=&quot;68.54&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;68.54&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Exception Handling&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;EXC --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--EXC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M100.58,-67.49C94.29,-57.77 86.43,-45.63 80.07,-35.81&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.82&quot; y=&quot;-54.35&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- SQL --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;SQL&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;45.48&quot; cy=&quot;-128.51&quot; rx=&quot;27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;45.48&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;SQL&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;SQL --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--SQL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M90.38,-98.77C82.21,-104.18 72.95,-110.32 64.96,-115.61&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;57.41&quot; y=&quot;-99.09&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;155.54&quot; cy=&quot;-150.97&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;155.54&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M122.99,-101.73C129.38,-111.4 137.37,-123.48 143.83,-133.26&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;119.65&quot; y=&quot;-120.19&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Driver types&lt;/strong&gt;: Type 1 (JDBC-ODBC bridge), Type 2 (native API), Type 3 (network protocol), Type 4 (pure Java, most common)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Statement types&lt;/strong&gt;: Statement (static SQL), PreparedStatement (pre-compiled, prevents SQL injection), CallableStatement (stored procedures)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CRUD operations&lt;/strong&gt;: Create (INSERT), Read (SELECT), Update (UPDATE), Delete (DELETE) via executeQuery() / executeUpdate()&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection pooling&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;DataSource&lt;/code&gt; with connection pooling avoids expensive connection creation per request&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transaction management&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;Connection.setAutoCommit(false)&lt;/code&gt; enables manual transaction control with commit() and rollback()&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-try-catch-finally&quot; class=&quot;internal alias&quot; data-slug=&quot;java-try-catch-finally&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Try-Catch-Finally&lt;/a&gt; — JDBC resources (Connection, Statement, ResultSet) must be closed in finally blocks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-exception-hierarchy&quot; class=&quot;internal alias&quot; data-slug=&quot;java-exception-hierarchy&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Exception Hierarchy&lt;/a&gt; — JDBC methods throw SQLException (checked)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-socket-programming&quot; class=&quot;internal alias&quot; data-slug=&quot;java-socket-programming&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Socket Programming&lt;/a&gt; — JDBC drivers communicate with databases over network sockets&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-socket-programming&quot; class=&quot;internal alias&quot; data-slug=&quot;java-socket-programming&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Socket Programming&lt;/a&gt; — JDBC drivers communicate with databases over network sockets&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Resource leaks&lt;/strong&gt;: Never forget to close Connection, Statement, and ResultSet — use try-with-resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL injection&lt;/strong&gt;: Never concatenate user input into SQL — always use PreparedStatement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection pool exhaustion&lt;/strong&gt;: Long-running transactions or missing close() calls exhaust the pool&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Driver class loading&lt;/strong&gt;: In modern JDBC 4+, drivers auto-register via ServiceLoader (no Class.forName() needed)&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-lambda-and-streams</title>
    <link href="https://animishraa05.github.io/wiki/java/java-lambda-and-streams" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-lambda-and-streams.md" />
    <summary>The Problem Traditional iteration with loops is imperative and verbose — you tell the computer how to iterate (index variables, loop conditions) rather than what to compute.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Traditional iteration with loops is imperative and verbose — you tell the computer &lt;em&gt;how&lt;/em&gt; to iterate (index variables, loop conditions) rather than &lt;em&gt;what&lt;/em&gt; to compute. This leads to boilerplate code and makes parallel processing difficult. Collections needed a declarative, functional approach.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Lambda expressions&lt;/strong&gt; provide concise syntax for anonymous functions: &lt;code class=&quot;notranslate&quot;&gt;(parameters) -&gt; expression&lt;/code&gt;. &lt;strong&gt;The Stream API&lt;/strong&gt; processes collections in a functional pipeline: source → intermediate operations (filter, map, sorted) → terminal operation (collect, forEach, reduce). &lt;strong&gt;Method references&lt;/strong&gt; (&lt;code class=&quot;notranslate&quot;&gt;Class::method&lt;/code&gt;) provide even shorter syntax for simple lambdas.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A stream represents a sequence of elements supporting sequential and parallel aggregate operations. Streams are lazy — intermediate operations are not executed until a terminal operation is invoked. The pipeline can be parallelized by calling &lt;code class=&quot;notranslate&quot;&gt;.parallelStream()&lt;/code&gt; instead of &lt;code class=&quot;notranslate&quot;&gt;.stream()&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_streams Pages: 1 --&gt;
&lt;svg width=&quot;813pt&quot; height=&quot;45pt&quot; viewBox=&quot;0.00 0.00 813.00 45.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 40.8)&quot;&gt;
&lt;title&gt;java_streams&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-40.8 809.48,-40.8 809.48,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Source --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Source&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;96.05,-36.8 0,-36.8 0,0 96.05,0 96.05,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;48.03&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Collection&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;48.03&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[1, 2, 3, 4, 5, 6]&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Stream --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Stream&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;233.76,-36.4 133.05,-36.4 133.05,-0.4 233.76,-0.4 233.76,-36.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;183.41&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Stream Pipeline&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Source&amp;#45;&amp;gt;Stream --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Source-&gt;Stream&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M96.43,-18.4C104.56,-18.4 113.11,-18.4 121.54,-18.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;121.39,-21.9 131.39,-18.4 121.39,-14.9 121.39,-21.9&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Filter --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Filter&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;452.84,-36.8 324.79,-36.8 324.79,0 452.84,0 452.84,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;388.81&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;filter(n → n % 2 == 0)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;388.81&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[2, 4, 6]&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Stream&amp;#45;&amp;gt;Filter --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Stream-&gt;Filter&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M234.16,-18.4C257.83,-18.4 286.63,-18.4 312.87,-18.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;312.81,-21.9 322.81,-18.4 312.81,-14.9 312.81,-21.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;279.27&quot; y=&quot;-21.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;intermediate&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Map --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Map&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;639.23,-36.8 543.87,-36.8 543.87,0 639.23,0 639.23,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;591.55&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;map(n → n * n)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;591.55&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[4, 16, 36]&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Filter&amp;#45;&amp;gt;Map --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Filter-&gt;Map&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M453.33,-18.4C478.61,-18.4 507.52,-18.4 532.27,-18.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;532.16,-21.9 542.16,-18.4 532.16,-14.9 532.16,-21.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;498.35&quot; y=&quot;-21.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;intermediate&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Collect --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Collect&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;805.48,-36.8 710.8,-36.8 710.8,0 805.48,0 805.48,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;758.14&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;collect(toList())&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;758.14&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;[4, 16, 36]&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Map&amp;#45;&amp;gt;Collect --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Map-&gt;Collect&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M639.71,-18.4C658.21,-18.4 679.62,-18.4 699.05,-18.4&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;699.02,-21.9 709.02,-18.4 699.02,-14.9 699.02,-21.9&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;675.02&quot; y=&quot;-21.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;terminal&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_lambdas Pages: 1 --&gt;
&lt;svg width=&quot;267pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 267.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_lambdas&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 262.62,-172.97 262.62,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;118.86&quot; cy=&quot;-84.66&quot; rx=&quot;88.58&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;118.86&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Lambdas &amp;#x26; Streams&lt;/text&gt;
&lt;/g&gt;
&lt;!-- FI --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;FI&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;185.55&quot; cy=&quot;-41.42&quot; rx=&quot;73.07&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;185.55&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Functional Interfaces&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;FI --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--FI&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M145.99,-67.07C150.31,-64.27 154.79,-61.37 159.1,-58.57&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;134.04&quot; y=&quot;-65.52&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COLL --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COLL&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;75.7&quot; cy=&quot;-18&quot; rx=&quot;43.18&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;75.7&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Collections&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COLL --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COLL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M107.07,-66.44C100.88,-56.88 93.33,-45.22 87.18,-35.73&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;78.62&quot; y=&quot;-53.79&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THREAD --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THREAD&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;52.64&quot; cy=&quot;-128.51&quot; rx=&quot;52.64&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;52.64&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Multithreading&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;THREAD --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--THREAD&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M92.31,-102.24C87.27,-105.58 82.02,-109.05 77.06,-112.34&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;104.95&quot; y=&quot;-109.99&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- PERF --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PERF&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;162.71&quot; cy=&quot;-150.97&quot; rx=&quot;48.86&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;162.71&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Performance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;PERF --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--PERF&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M130.84,-102.78C137.13,-112.29 144.8,-123.89 151.04,-133.33&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;127.18&quot; y=&quot;-120.75&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Declarative&lt;/strong&gt;: Focus on &lt;em&gt;what&lt;/em&gt;, not &lt;em&gt;how&lt;/em&gt; — express intent directly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lazy evaluation&lt;/strong&gt;: Intermediate operations execute only when a terminal operation is invoked&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parallelism&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;parallelStream()&lt;/code&gt; splits work across multiple threads automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Immutability&lt;/strong&gt;: Streams do not modify the source collection&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — lambdas target functional interfaces (Runnable, Comparator, custom)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Collections Framework&lt;/a&gt; — streams originate from collections&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-multithreading&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multithreading&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Multithreading&lt;/a&gt; — parallelStream() enables easy parallel processing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-loops&quot; class=&quot;internal alias&quot; data-slug=&quot;java-loops&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Loops&lt;/a&gt; — declarative vs imperative iteration&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Stream reuse&lt;/strong&gt;: A stream cannot be reused after a terminal operation — create a new one&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stateful lambdas&lt;/strong&gt;: Avoid mutable state in lambda bodies (not thread-safe)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Streams have overhead vs loops for simple operations — use for complex pipelines&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;parallelStream() pitfalls&lt;/strong&gt;: Shared mutable state in parallel streams causes data races&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-loops</title>
    <link href="https://animishraa05.github.io/wiki/java/java-loops" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-loops.md" />
    <summary>The Problem Many programming tasks require executing the same block of code repeatedly — processing each element of an array, reading lines from a file, or retrying an operation until it succeeds.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Many programming tasks require executing the same block of code repeatedly — processing each element of an array, reading lines from a file, or retrying an operation until it succeeds. Without loops, every repetition would require manual code duplication, leading to bloated, error-prone programs.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Java provides three loop constructs: &lt;code class=&quot;notranslate&quot;&gt;for&lt;/code&gt; (when the number of iterations is known), &lt;code class=&quot;notranslate&quot;&gt;while&lt;/code&gt; (when iteration continues as long as a condition is true), and &lt;code class=&quot;notranslate&quot;&gt;do-while&lt;/code&gt; (same as &lt;code class=&quot;notranslate&quot;&gt;while&lt;/code&gt; but guarantees at least one execution). The enhanced &lt;code class=&quot;notranslate&quot;&gt;for-each&lt;/code&gt; loop simplifies iteration over arrays and collections.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A loop consists of an initialization, a termination condition, an update expression (for &lt;code class=&quot;notranslate&quot;&gt;for&lt;/code&gt; loops), and a body. The JVM evaluates the condition before (or after, for &lt;code class=&quot;notranslate&quot;&gt;do-while&lt;/code&gt;) each iteration. If true, the body executes; if false, execution jumps past the loop. The &lt;code class=&quot;notranslate&quot;&gt;for-each&lt;/code&gt; loop uses an iterator under the hood for collections.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_loops Pages: 1 --&gt;
&lt;svg width=&quot;252pt&quot; height=&quot;277pt&quot; viewBox=&quot;0.00 0.00 252.00 277.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 273.2)&quot;&gt;
&lt;title&gt;java_loops&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-273.2 248.49,-273.2 248.49,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Init --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Init&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;224.04,-269.2 145.34,-269.2 145.34,-232.4 224.04,-232.4 224.04,-269.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;184.69&quot; y=&quot;-254.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Initialization&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;184.69&quot; y=&quot;-240&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;int i = 0&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Cond --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Cond&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;236.72,-195.4 132.67,-195.4 132.67,-158.6 236.72,-158.6 236.72,-195.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;184.69&quot; y=&quot;-180.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Condition Check&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;184.69&quot; y=&quot;-166.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;i &amp;#x3C; 5&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Init&amp;#45;&amp;gt;Cond --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Init-&gt;Cond&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M184.69,-232.05C184.69,-224.49 184.69,-215.46 184.69,-206.98&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;188.19,-207.06 184.69,-197.06 181.19,-207.06 188.19,-207.06&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Body --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Body&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;121.39,-110.6 0,-110.6 0,-73.8 121.39,-73.8 121.39,-110.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;60.69&quot; y=&quot;-95.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Loop Body&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;60.69&quot; y=&quot;-81.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Execute statements&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Cond&amp;#45;&amp;gt;Body --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Cond-&gt;Body&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M158.09,-158.24C140.19,-146.29 116.38,-130.38 96.78,-117.29&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;98.77,-114.42 88.51,-111.77 94.88,-120.24 98.77,-114.42&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;138.73&quot; y=&quot;-131.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;true&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Exit --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Exit&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;230.38,-110.6 139,-110.6 139,-73.8 230.38,-73.8 230.38,-110.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;184.69&quot; y=&quot;-95.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Exit Loop&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;184.69&quot; y=&quot;-81.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Continue after&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Cond&amp;#45;&amp;gt;Exit --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Cond-&gt;Exit&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M184.69,-158.44C184.69,-147.97 184.69,-134.42 184.69,-122.38&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;188.19,-122.53 184.69,-112.53 181.19,-122.53 188.19,-122.53&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;195.25&quot; y=&quot;-131.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;false&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Update --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Update&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;187.04,-36.8 132.35,-36.8 132.35,0 187.04,0 187.04,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;159.69&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Update&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;159.69&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;i++&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Body&amp;#45;&amp;gt;Update --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Body-&gt;Update&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M85.17,-73.45C97.54,-64.48 112.75,-53.45 126.19,-43.7&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;127.89,-46.79 133.93,-38.08 123.78,-41.12 127.89,-46.79&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Update&amp;#45;&amp;gt;Cond --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Update-&gt;Cond&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M187.31,-29.98C205.8,-38.7 228.69,-53.02 239.69,-73.8 253.53,-99.94 233.42,-129.7 213.74,-150.34&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;211.42,-147.71 206.79,-157.25 216.35,-152.68 211.42,-147.71&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_loops Pages: 1 --&gt;
&lt;svg width=&quot;229pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 229.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_loops&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 224.79,-172.97 224.79,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;106.01&quot; cy=&quot;-84.66&quot; rx=&quot;34.05&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;106.01&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Loops&lt;/text&gt;
&lt;/g&gt;
&lt;!-- CTRL --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;CTRL&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;172.7&quot; cy=&quot;-41.42&quot; rx=&quot;48.09&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;172.7&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Control Flow&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;CTRL --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--CTRL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M127.85,-70.5C134.38,-66.26 141.59,-61.59 148.28,-57.26&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;156.57&quot; y=&quot;-66.58&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JUMP --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;JUMP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;62.85&quot; cy=&quot;-18&quot; rx=&quot;62.85&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;62.85&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Jump Statements&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;JUMP --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--JUMP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M94.9,-67.49C88.6,-57.77 80.74,-45.63 74.38,-35.81&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;64.38&quot; y=&quot;-54.35&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ARR --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ARR&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;39.79&quot; cy=&quot;-128.51&quot; rx=&quot;29.56&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;39.79&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Arrays&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ARR --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ARR&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M84.33,-99.02C76.48,-104.21 67.66,-110.05 59.95,-115.16&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;51.88&quot; y=&quot;-98.99&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COLL --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COLL&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;149.86&quot; cy=&quot;-150.97&quot; rx=&quot;43.18&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;149.86&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Collections&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COLL --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COLL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M117.53,-102.08C123.93,-111.75 131.86,-123.74 138.26,-133.43&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;107.63&quot; y=&quot;-120.46&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;For-each syntax&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;for (Type var : iterable)&lt;/code&gt; — cleaner, no index variable&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;While&lt;/strong&gt;: Zero or more iterations (condition checked first)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Do-while&lt;/strong&gt;: One or more iterations (condition checked after first run)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nested loops&lt;/strong&gt;: Loops inside loops for multi-dimensional traversal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-control-flow&quot; class=&quot;internal alias&quot; data-slug=&quot;java-control-flow&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Control Flow&lt;/a&gt; — loops use boolean conditions like if-statements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-operators&quot; class=&quot;internal alias&quot; data-slug=&quot;java-operators&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Operators&lt;/a&gt; — relational and arithmetic operators control iteration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-arrays&quot; class=&quot;internal alias&quot; data-slug=&quot;java-arrays&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Arrays&lt;/a&gt; — loops are the primary way to traverse arrays&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Collections Framework&lt;/a&gt; — iteration over collections&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Infinite loops&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;while(true)&lt;/code&gt; or &lt;code class=&quot;notranslate&quot;&gt;for(;;)&lt;/code&gt; without break conditions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Off-by-one errors&lt;/strong&gt;: Using &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;=&lt;/code&gt; instead of &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;&lt;/code&gt; in loop conditions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent modification&lt;/strong&gt;: Modifying a collection while iterating with for-each throws &lt;code class=&quot;notranslate&quot;&gt;ConcurrentModificationException&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Enhanced for-each on arrays is identical to index-based loops after compilation&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-memory-management</title>
    <link href="https://animishraa05.github.io/wiki/java/java-memory-management" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-memory-management.md" />
    <summary>The Problem Every running Java program needs memory for code, objects, method calls, and metadata.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Every running Java program needs memory for code, objects, method calls, and metadata. Without a well-defined memory model, different JVM implementations would allocate and organize memory differently, breaking the platform independence promise and making performance unpredictable.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The JVM divides memory into several runtime areas: &lt;strong&gt;Heap&lt;/strong&gt; (all objects and arrays), &lt;strong&gt;Stack&lt;/strong&gt; (each thread has its own stack for method calls and local variables), &lt;strong&gt;Method Area&lt;/strong&gt; (class metadata, static variables, constant pool), and native areas (program counter register, native method stacks).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When a method is called, a stack frame is pushed onto the thread’s stack containing local variables, operand stack, and frame data. New objects are allocated on the heap (Eden space in young generation). Class structures are stored in the method area (meta space in Java 8+). The JVM’s memory manager coordinates allocation and garbage collection.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_memory Pages: 1 --&gt;
&lt;svg width=&quot;609pt&quot; height=&quot;146pt&quot; viewBox=&quot;0.00 0.00 609.00 146.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 141.6)&quot;&gt;
&lt;title&gt;java_memory&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-141.6 605.05,-141.6 605.05,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- JVM --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;JVM&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;398.04,-137.6 276.69,-137.6 276.69,-101.6 398.04,-101.6 398.04,-137.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;337.37&quot; y=&quot;-116&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;JVM Memory Areas&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Heap --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Heap&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;136.73,-65.6 0,-65.6 0,0 136.73,0 136.73,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;68.37&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Heap&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;68.37&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- Objects&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;68.37&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- Arrays&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;68.37&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- Shared by all threads&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JVM&amp;#45;&amp;gt;Heap --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;JVM-&gt;Heap&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M276.25,-103.77C240.91,-94.72 195.47,-82.31 147.88,-66.34&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;149.08,-63.05 138.49,-63.14 146.83,-69.68 149.08,-63.05&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Stack --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Stack&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;266.39,-65.6 154.35,-65.6 154.35,0 266.39,0 266.39,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;210.37&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Stack (per thread)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;210.37&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- Local variables&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;210.37&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- Method calls&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;210.37&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- Operand stacks&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JVM&amp;#45;&amp;gt;Stack --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;JVM-&gt;Stack&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M311.36,-101.23C298.8,-92.85 283.19,-82.43 268.03,-72.3&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;270.2,-69.54 259.94,-66.9 266.31,-75.36 270.2,-69.54&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- MethodArea --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;MethodArea&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;390.72,-65.6 284.01,-65.6 284.01,0 390.72,0 390.72,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;337.37&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Method Area&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;337.37&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- Class metadata&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;337.37&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- Static variables&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;337.37&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- Constant pool&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JVM&amp;#45;&amp;gt;MethodArea --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;JVM-&gt;MethodArea&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M337.37,-101.44C337.37,-94.45 337.37,-86.03 337.37,-77.53&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;340.87,-77.54 337.37,-67.54 333.87,-77.54 340.87,-77.54&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- PC --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PC&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;489.71,-51.2 409.02,-51.2 409.02,-14.4 489.71,-14.4 489.71,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;449.37&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;PC Register&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;449.37&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(per thread)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JVM&amp;#45;&amp;gt;PC --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;JVM-&gt;PC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M360.3,-101.23C376.65,-88.86 398.86,-72.04 417.01,-58.3&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;419.01,-61.17 424.87,-52.35 414.78,-55.59 419.01,-61.17&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Native --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Native&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;601.05,-51.2 507.68,-51.2 507.68,-14.4 601.05,-14.4 601.05,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;554.37&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Native Method&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;554.37&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Stack&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JVM&amp;#45;&amp;gt;Native --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;JVM-&gt;Native&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M398.45,-101.62C429,-92.35 466.22,-79.85 498.37,-65.6 504.05,-63.08 509.91,-60.15 515.6,-57.12&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;517.2,-60.23 524.25,-52.33 513.81,-54.11 517.2,-60.23&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_memory Pages: 1 --&gt;
&lt;svg width=&quot;262pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 262.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_memory&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 257.7,-172.97 257.7,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;118.86&quot; cy=&quot;-84.66&quot; rx=&quot;94.31&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;118.86&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Memory Management&lt;/text&gt;
&lt;/g&gt;
&lt;!-- GC --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;GC&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;185.55&quot; cy=&quot;-41.42&quot; rx=&quot;68.15&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;185.55&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Garbage Collection&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;GC --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--GC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M145.99,-67.07C150.46,-64.17 155.08,-61.17 159.53,-58.29&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;173.02&quot; y=&quot;-65.38&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OBJ --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OBJ&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;75.7&quot; cy=&quot;-18&quot; rx=&quot;60.96&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;75.7&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Object Allocation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OBJ --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OBJ&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M107.07,-66.44C100.88,-56.88 93.33,-45.22 87.18,-35.73&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;76.86&quot; y=&quot;-53.79&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THREAD --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THREAD&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;52.64&quot; cy=&quot;-128.51&quot; rx=&quot;52.64&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;52.64&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Multithreading&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;THREAD --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--THREAD&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M92.31,-102.24C87.27,-105.58 82.02,-109.05 77.06,-112.34&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;98.44&quot; y=&quot;-109.99&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- PERF --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PERF&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;162.71&quot; cy=&quot;-150.97&quot; rx=&quot;48.86&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;162.71&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Performance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;PERF --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--PERF&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M130.84,-102.78C137.13,-112.29 144.8,-123.89 151.04,-133.33&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;127.18&quot; y=&quot;-120.75&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Heap shared&lt;/strong&gt;: All threads share the same heap; objects are visible across threads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stack is thread-private&lt;/strong&gt;: Each thread has its own stack, isolated from others&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic management&lt;/strong&gt;: The JVM handles allocation and garbage collection — no manual free()&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configurable sizes&lt;/strong&gt;: Heap and stack sizes are set via JVM flags (-Xmx, -Xms, -Xss)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-platform-independence&quot; class=&quot;internal alias&quot; data-slug=&quot;java-platform-independence&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Platform Independence&lt;/a&gt; — the JVM’s memory model is part of its portable runtime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-garbage-collection&quot; class=&quot;internal alias&quot; data-slug=&quot;java-garbage-collection&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Garbage Collection&lt;/a&gt; — GC reclaims heap memory automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-multithreading&quot; class=&quot;internal alias&quot; data-slug=&quot;java-multithreading&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Multithreading&lt;/a&gt; — each thread has its own stack, but shared heap requires synchronization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-wrapper-classes&quot; class=&quot;internal alias&quot; data-slug=&quot;java-wrapper-classes&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Wrapper Classes&lt;/a&gt; — wrappers live on the heap; primitives can live on stack&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;StackOverflowError&lt;/strong&gt;: Infinite recursion or deep call chains exhaust the stack&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OutOfMemoryError&lt;/strong&gt;: Heap is full and GC cannot reclaim enough space&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metaspace&lt;/strong&gt; (Java 8+): Replaces PermGen — grows dynamically by default, but can still exhaust native memory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory leak&lt;/strong&gt;: Objects held by unintended references prevent GC — common with collections, listeners, caches&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-methods</title>
    <link href="https://animishraa05.github.io/wiki/java/java-methods" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-methods.md" />
    <summary>The Problem Without reusable code blocks, programs would be long, repetitive, and impossible to maintain at scale.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Without reusable code blocks, programs would be long, repetitive, and impossible to maintain at scale. Every operation — from calculating a value to processing input — would need to be written inline wherever it’s needed, leading to massive code duplication and scattered logic.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A &lt;strong&gt;method&lt;/strong&gt; in Java is a named block of code that performs a specific task. Methods accept parameters, may return a value, and can be called from other parts of the program. They enable code reuse, modularity, and the DRY (Don’t Repeat Yourself) principle. Java supports &lt;strong&gt;method overloading&lt;/strong&gt; — multiple methods with the same name but different parameter lists.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When a method is called, the JVM creates a new stack frame with space for parameters and local variables. Arguments are evaluated and assigned to parameters (pass-by-value). The method body executes, and control returns to the caller with (or without) a return value. Overloaded methods are resolved at compile time based on the argument types.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_methods Pages: 1 --&gt;
&lt;svg width=&quot;147pt&quot; height=&quot;480pt&quot; viewBox=&quot;0.00 0.00 147.00 480.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 476)&quot;&gt;
&lt;title&gt;java_methods&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-476 143.4,-476 143.4,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Caller --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Caller&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;115.05,-472 24.35,-472 24.35,-436 115.05,-436 115.05,-472&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-450.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Caller Method&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Call --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Call&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;109.72,-400 29.69,-400 29.69,-363.2 109.72,-363.2 109.72,-400&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-385.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Method Call&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-370.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;add(5, 3)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Caller&amp;#45;&amp;gt;Call --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Caller-&gt;Call&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M69.7,-435.6C69.7,-428.38 69.7,-419.8 69.7,-411.67&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;73.2,-411.8 69.7,-401.8 66.2,-411.8 73.2,-411.8&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Stack --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Stack&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;129.4,-327.2 10.01,-327.2 10.01,-290.4 129.4,-290.4 129.4,-327.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-312.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Stack Frame&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-298&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Created for Method&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Call&amp;#45;&amp;gt;Stack --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Call-&gt;Stack&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M69.7,-362.73C69.7,-355.47 69.7,-346.88 69.7,-338.77&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;73.2,-338.93 69.7,-328.93 66.2,-338.93 73.2,-338.93&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Params --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Params&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;124.07,-254.4 15.34,-254.4 15.34,-217.6 124.07,-217.6 124.07,-254.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-239.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Parameters&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-225.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;int a = 5, int b = 3&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Stack&amp;#45;&amp;gt;Params --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Stack-&gt;Params&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M69.7,-289.93C69.7,-282.67 69.7,-274.08 69.7,-265.97&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;73.2,-266.13 69.7,-256.13 66.2,-266.13 73.2,-266.13&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Body --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Body&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;139.4,-181.6 0,-181.6 0,-144.8 139.4,-144.8 139.4,-181.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-166.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Method Body Executes&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-152.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;int sum = a + b;&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Params&amp;#45;&amp;gt;Body --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Params-&gt;Body&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M69.7,-217.13C69.7,-209.87 69.7,-201.28 69.7,-193.17&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;73.2,-193.33 69.7,-183.33 66.2,-193.33 73.2,-193.33&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Return --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Return&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;112.72,-108.8 26.68,-108.8 26.68,-72 112.72,-72 112.72,-108.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-94&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Return Value&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-79.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;8&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Body&amp;#45;&amp;gt;Return --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Body-&gt;Return&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M69.7,-144.33C69.7,-137.07 69.7,-128.48 69.7,-120.37&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;73.2,-120.53 69.7,-110.53 66.2,-120.53 73.2,-120.53&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Back --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Back&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;122.06,-36 17.35,-36 17.35,0 122.06,0 122.06,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;69.7&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Caller Continues&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Return&amp;#45;&amp;gt;Back --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Return-&gt;Back&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M69.7,-71.64C69.7,-64.3 69.7,-55.61 69.7,-47.44&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;73.2,-47.54 69.7,-37.54 66.2,-47.54 73.2,-47.54&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_methods Pages: 1 --&gt;
&lt;svg width=&quot;238pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 238.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_methods&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 233.72,-172.97 233.72,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;114.7&quot; cy=&quot;-84.66&quot; rx=&quot;43.61&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.7&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Methods&lt;/text&gt;
&lt;/g&gt;
&lt;!-- VAR --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;VAR&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;181.38&quot; cy=&quot;-41.42&quot; rx=&quot;38.27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;181.38&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Variables&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;VAR --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--VAR&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M138.39,-69.29C144.98,-65.02 152.12,-60.39 158.65,-56.16&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;130.02&quot; y=&quot;-54.62&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ACCESS --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ACCESS&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;71.53&quot; cy=&quot;-18&quot; rx=&quot;61.33&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.53&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Access Modifiers&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ACCESS --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ACCESS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M103.36,-67.14C97.16,-57.58 89.5,-45.75 83.25,-36.09&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;74.8&quot; y=&quot;-54.32&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;48.48&quot; cy=&quot;-128.51&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;48.48&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M91.16,-100.24C85.07,-104.28 78.5,-108.63 72.38,-112.68&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;61.51&quot; y=&quot;-98.36&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OVER --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OVER&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;158.54&quot; cy=&quot;-150.97&quot; rx=&quot;71.18&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;158.54&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Method Overloading&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OVER --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OVER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M126.44,-102.43C132.74,-111.94 140.46,-123.63 146.76,-133.15&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;122.84&quot; y=&quot;-120.49&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Method signature&lt;/strong&gt;: Method name + parameter types (not return type)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overloading&lt;/strong&gt;: Same name, different parameters (compile-time polymorphism)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pass-by-value&lt;/strong&gt;: All arguments are copied; primitives are safe, object references point to same object&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Return type&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;void&lt;/code&gt; for no return, or any valid type; must use &lt;code class=&quot;notranslate&quot;&gt;return&lt;/code&gt; with a matching value&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-variables&quot; class=&quot;internal alias&quot; data-slug=&quot;java-variables&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Variables&lt;/a&gt; — methods use local variables and parameters&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-access-modifiers&quot; class=&quot;internal alias&quot; data-slug=&quot;java-access-modifiers&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Access Modifiers&lt;/a&gt; — methods have visibility controls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-constructors&quot; class=&quot;internal alias&quot; data-slug=&quot;java-constructors&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Constructors&lt;/a&gt; — constructors are special methods that initialize objects&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — method overriding is runtime polymorphism&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Pass-by-value confusion&lt;/strong&gt;: Object references are passed by value — you can modify the object’s state but not reassign the reference&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Varargs overloading&lt;/strong&gt;: Calling &lt;code class=&quot;notranslate&quot;&gt;method(null)&lt;/code&gt; with a varargs parameter is ambiguous&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Return after finally&lt;/strong&gt;: A &lt;code class=&quot;notranslate&quot;&gt;return&lt;/code&gt; in &lt;code class=&quot;notranslate&quot;&gt;finally&lt;/code&gt; overrides any previous return&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recursive depth&lt;/strong&gt;: Deep recursion causes &lt;code class=&quot;notranslate&quot;&gt;StackOverflowError&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-multilevel-inheritance</title>
    <link href="https://animishraa05.github.io/wiki/java/java-multilevel-inheritance" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-multilevel-inheritance.md" />
    <summary>The Problem Sometimes functionality needs to be layered across multiple levels of abstraction.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Sometimes functionality needs to be layered across multiple levels of abstraction. A Vehicle defines basic movement, a Car adds four-wheel behavior, and an ElectricCar adds battery management. Each level builds on the previous one. Without multilevel inheritance, each new level would need to duplicate features from all ancestors.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Multilevel Inheritance&lt;/strong&gt; occurs when a class is derived from another derived class, forming a chain. For example: &lt;code class=&quot;notranslate&quot;&gt;Grandparent → Parent → Child&lt;/code&gt;. Each class in the chain inherits from its immediate predecessor and transitively inherits from all ancestors. This creates a layered hierarchy where each level adds specialized behavior.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Each link in the chain uses the standard &lt;code class=&quot;notranslate&quot;&gt;extends&lt;/code&gt; keyword. When &lt;code class=&quot;notranslate&quot;&gt;Child&lt;/code&gt; is instantiated, constructors fire in order: &lt;code class=&quot;notranslate&quot;&gt;Grandparent()&lt;/code&gt; → &lt;code class=&quot;notranslate&quot;&gt;Parent()&lt;/code&gt; → &lt;code class=&quot;notranslate&quot;&gt;Child()&lt;/code&gt;. Method resolution walks up the chain: if &lt;code class=&quot;notranslate&quot;&gt;Child&lt;/code&gt; doesn’t override a method, the JVM checks &lt;code class=&quot;notranslate&quot;&gt;Parent&lt;/code&gt;, then &lt;code class=&quot;notranslate&quot;&gt;Grandparent&lt;/code&gt;. The chain can be arbitrarily deep, but deep hierarchies are fragile and should be avoided.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: multilevel_inheritance Pages: 1 --&gt;
&lt;svg width=&quot;109pt&quot; height=&quot;286pt&quot; viewBox=&quot;0.00 0.00 109.00 286.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 282.4)&quot;&gt;
&lt;title&gt;multilevel_inheritance&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-282.4 104.72,-282.4 104.72,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Grandparent --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Grandparent&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;92.05,-278.4 8.67,-278.4 8.67,-227.2 92.05,-227.2 92.05,-278.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-263.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Grandparent&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-249.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Vehicle&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-234.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- move()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Parent --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Parent&lt;/title&gt;
&lt;polygon fill=&quot;#fff3cd&quot; stroke=&quot;black&quot; points=&quot;100.72,-179.2 0,-179.2 0,-113.6 100.72,-113.6 100.72,-179.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-164.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Parent&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-150&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Car&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-135.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;extends Vehicle&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- honk()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Grandparent&amp;#45;&amp;gt;Parent --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Grandparent-&gt;Parent&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M50.36,-226.79C50.36,-216.01 50.36,-203.07 50.36,-190.8&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;53.86,-190.84 50.36,-180.84 46.86,-190.84 53.86,-190.84&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;67.87&quot; y=&quot;-200.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Child --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Child&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;90.71,-65.6 10.01,-65.6 10.01,0 90.71,0 90.71,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Child&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;ElectricCar&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;extends Car&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;50.36&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;- charge()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Parent&amp;#45;&amp;gt;Child --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Parent-&gt;Child&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M50.36,-113.12C50.36,-101.9 50.36,-89.13 50.36,-77.16&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;53.86,-77.52 50.36,-67.52 46.86,-77.52 53.86,-77.52&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;67.87&quot; y=&quot;-86.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;extends&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_multilevel_inheritance Pages: 1 --&gt;
&lt;svg width=&quot;278pt&quot; height=&quot;176pt&quot; viewBox=&quot;0.00 0.00 278.00 176.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 171.7)&quot;&gt;
&lt;title&gt;semantic_multilevel_inheritance&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-171.7 273.52,-171.7 273.52,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;129.27&quot; cy=&quot;-89.71&quot; rx=&quot;91.45&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;129.27&quot; y=&quot;-85.81&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Multilevel Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- SINGLE --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;SINGLE&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;205.15&quot; cy=&quot;-101.49&quot; rx=&quot;64.38&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;205.15&quot; y=&quot;-98.19&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Single Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;SINGLE --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--SINGLE&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M201.89,-100.98C202.02,-101 202.14,-101.02 202.27,-101.04&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;183.57&quot; y=&quot;-103.71&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;101.89&quot; cy=&quot;-18&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;101.89&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M122.36,-71.62C118.18,-60.66 112.87,-46.75 108.7,-35.84&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;97.02&quot; y=&quot;-56.43&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- HIER --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;HIER&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;81.39&quot; cy=&quot;-149.7&quot; rx=&quot;81.39&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;81.39&quot; y=&quot;-146.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Hierarchical Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;HIER --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--HIER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M114.9,-107.71C108.84,-115.3 101.8,-124.12 95.74,-131.71&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;77.81&quot; y=&quot;-122.41&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Layered abstraction&lt;/strong&gt;: Each level adds specialized behavior on top of the previous&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constructor chain&lt;/strong&gt;: Constructors fire from topmost ancestor to most derived&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transitive inheritance&lt;/strong&gt;: Child inherits from ALL ancestors, not just the immediate parent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Method resolution walks up&lt;/strong&gt;: JVM checks child, then parent, then grandparent, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deep hierarchy is a smell&lt;/strong&gt;: 3+ levels often indicates over-engineering; favor composition&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-single-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-single-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Single Inheritance&lt;/a&gt; — each link is a single inheritance relationship&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — extends mechanism drives the chain&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-hierarchical-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-hierarchical-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Hierarchical Inheritance&lt;/a&gt; — chain vs fan-out&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Inheritance Types&lt;/a&gt; — multilevel is one of the five inheritance types&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Deep hierarchy&lt;/strong&gt;: 3+ levels of inheritance is often a design smell — favor composition over deep inheritance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fragile base class problem&lt;/strong&gt;: Changes at the top of the chain can break classes multiple levels down&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-multiple-inheritance</title>
    <link href="https://animishraa05.github.io/wiki/java/java-multiple-inheritance" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-multiple-inheritance.md" />
    <summary>The Problem Some classes need to fulfill multiple contracts simultaneously — a class might need to be both Comparable (for sorting) and Runnable (for threading).</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Some classes need to fulfill multiple contracts simultaneously — a class might need to be both &lt;code class=&quot;notranslate&quot;&gt;Comparable&lt;/code&gt; (for sorting) and &lt;code class=&quot;notranslate&quot;&gt;Runnable&lt;/code&gt; (for threading). Single class inheritance would force a choice between the two, or require a deep hierarchy to combine them.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Multiple Inheritance&lt;/strong&gt; in Java is the ability of a class to inherit from multiple types. Java supports this &lt;strong&gt;only through interfaces&lt;/strong&gt;, not classes. A class can &lt;code class=&quot;notranslate&quot;&gt;implement&lt;/code&gt; multiple interfaces, thereby inheriting method contracts from all of them. This avoids the diamond problem because interfaces provide no state (pre-Java 8) and default methods have resolution rules.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A class declares &lt;code class=&quot;notranslate&quot;&gt;class C implements I1, I2&lt;/code&gt;. The class must provide implementations for all abstract methods from both interfaces. If two interfaces define default methods with the same signature, the class must override the method to resolve ambiguity. The class IS-A &lt;code class=&quot;notranslate&quot;&gt;I1&lt;/code&gt; and IS-A &lt;code class=&quot;notranslate&quot;&gt;I2&lt;/code&gt; simultaneously, enabling polymorphic assignment to either interface type. Interface method dispatch uses the &lt;code class=&quot;notranslate&quot;&gt;itable&lt;/code&gt; (interface method table), resolved differently from class vtables.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: multiple_inheritance Pages: 1 --&gt;
&lt;svg width=&quot;361pt&quot; height=&quot;128pt&quot; viewBox=&quot;0.00 0.00 361.00 128.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 124.2)&quot;&gt;
&lt;title&gt;multiple_inheritance&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-124.2 357.2,-124.2 357.2,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- I1 --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;I1&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;345.54,-120.2 282.84,-120.2 282.84,-69 345.54,-69 345.54,-120.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;314.19&quot; y=&quot;-105.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Interface&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;314.19&quot; y=&quot;-91&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Flyable&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;314.19&quot; y=&quot;-76.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;void fly()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- I2 --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;I2&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;353.2,-51.2 275.18,-51.2 275.18,0 353.2,0 353.2,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;314.19&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Interface&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;314.19&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Swimmable&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;314.19&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;void swim()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Class --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Class&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;188.05,-92.4 0,-92.4 0,-26.8 188.05,-26.8 188.05,-92.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;94.03&quot; y=&quot;-77.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Class Duck&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;94.03&quot; y=&quot;-63.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;implements Flyable, Swimmable&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;94.03&quot; y=&quot;-48.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;fly() { ... }&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;94.03&quot; y=&quot;-34.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;swim() { ... }&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Class&amp;#45;&amp;gt;I1 --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Class-&gt;I1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M188.5,-74.6C217.29,-79.21 247.56,-84.07 271.07,-87.84&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;270.44,-91.29 280.87,-89.41 271.55,-84.37 270.44,-91.29&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.62&quot; y=&quot;-88.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;implements&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Class&amp;#45;&amp;gt;I2 --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Class-&gt;I2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; stroke-dasharray=&quot;5 2&quot; d=&quot;M188.5,-45.03C214.3,-41.01 241.29,-36.8 263.54,-33.34&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;263.87,-36.83 273.21,-31.83 262.79,-29.91 263.87,-36.83&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.62&quot; y=&quot;-44.58&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;implements&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_multiple_inheritance Pages: 1 --&gt;
&lt;svg width=&quot;237pt&quot; height=&quot;176pt&quot; viewBox=&quot;0.00 0.00 237.00 176.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 171.7)&quot;&gt;
&lt;title&gt;semantic_multiple_inheritance&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-171.7 232.67,-171.7 232.67,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;113.01&quot; cy=&quot;-89.71&quot; rx=&quot;85.23&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;113.01&quot; y=&quot;-85.81&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Multiple Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INTER --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INTER&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;188.89&quot; cy=&quot;-101.49&quot; rx=&quot;39.78&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;188.89&quot; y=&quot;-98.19&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Interfaces&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INTER --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INTER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M182.42,-100.49C182.54,-100.5 182.67,-100.52 182.79,-100.54&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;164.1&quot; y=&quot;-103.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;85.63&quot; cy=&quot;-18&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;85.63&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M106.1,-71.62C101.92,-60.66 96.6,-46.75 92.44,-35.84&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.76&quot; y=&quot;-56.43&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;!-- HYBRID --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;HYBRID&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;65.12&quot; cy=&quot;-149.7&quot; rx=&quot;65.12&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;65.12&quot; y=&quot;-146.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Hybrid Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;HYBRID --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--HYBRID&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M98.64,-107.71C92.58,-115.3 85.54,-124.12 79.48,-131.71&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;68.8&quot; y=&quot;-122.41&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Interface-only in Java&lt;/strong&gt;: Java does not support multiple inheritance of classes — only interfaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple contracts&lt;/strong&gt;: A class can implement any number of interfaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diamond problem avoided&lt;/strong&gt;: Since interfaces have no state (pre-Java 8), there is no state ambiguity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default method rules&lt;/strong&gt;: If two interfaces define the same default method, the class must override&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IS-A multiple types&lt;/strong&gt;: A class implementing I1 and I2 is both an I1 and an I2&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — interfaces enable multiple type inheritance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Inheritance Types&lt;/a&gt; — multiple inheritance through interfaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — class inheritance is single; interface inheritance is multiple&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-hybrid-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-hybrid-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Hybrid Inheritance&lt;/a&gt; — multiple is a building block for hybrid&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Default method conflict&lt;/strong&gt;: If two interfaces define the same default method, the class must override it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static methods in interfaces&lt;/strong&gt;: Interface static methods are not inherited, avoiding ambiguity&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-multithreading</title>
    <link href="https://animishraa05.github.io/wiki/java/java-multithreading" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-multithreading.md" />
    <summary>The Problem Modern CPUs have multiple cores, but traditional single-threaded programs use only one.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Modern CPUs have multiple cores, but traditional single-threaded programs use only one. Without concurrent execution, applications cannot utilize available hardware, respond to user input while processing data, or handle multiple network connections simultaneously.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;strong&gt;Multithreading&lt;/strong&gt; allows concurrent execution of two or more threads within the same program. Each thread has its own stack and program counter but shares the heap. Java provides two ways to create threads: extending the &lt;code class=&quot;notranslate&quot;&gt;Thread&lt;/code&gt; class or implementing the &lt;code class=&quot;notranslate&quot;&gt;Runnable&lt;/code&gt; interface. Java also provides &lt;code class=&quot;notranslate&quot;&gt;Callable&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;Future&lt;/code&gt;, and the Executor framework for advanced concurrency.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When a Java program starts, the JVM creates the main thread. Additional threads can be created and started. The operating system’s thread scheduler allocates CPU time to threads (preemptive multitasking). Threads can be in various states: NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_threads Pages: 1 --&gt;
&lt;svg width=&quot;334pt&quot; height=&quot;203pt&quot; viewBox=&quot;0.00 0.00 334.00 203.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 198.6)&quot;&gt;
&lt;title&gt;java_threads&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-198.6 329.7,-198.6 329.7,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Main --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Main&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;221.37,-194.6 138,-194.6 138,-158.6 221.37,-158.6 221.37,-194.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;179.69&quot; y=&quot;-173&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Main Thread&lt;/text&gt;
&lt;/g&gt;
&lt;!-- T1 --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;T1&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;111.37,-110.6 0,-110.6 0,-73.8 111.37,-73.8 111.37,-110.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;55.69&quot; y=&quot;-95.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Thread 1&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;55.69&quot; y=&quot;-81.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Database Query)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Main&amp;#45;&amp;gt;T1 --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Main-&gt;T1&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M147.44,-158.19C137.95,-152.8 127.65,-146.67 118.45,-140.6 107.91,-133.65 96.8,-125.54 86.9,-118.01&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;89.1,-115.28 79.04,-111.95 84.82,-120.83 89.1,-115.28&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;147.07&quot; y=&quot;-131.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;thread.start()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- T2 --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;T2&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;325.7,-110.6 247.68,-110.6 247.68,-73.8 325.7,-73.8 325.7,-110.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;286.69&quot; y=&quot;-95.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Thread 2&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;286.69&quot; y=&quot;-81.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(UI Update)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Main&amp;#45;&amp;gt;T2 --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Main-&gt;T2&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M202.38,-158.13C217.6,-146.41 237.86,-130.8 254.7,-117.83&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;256.67,-120.73 262.46,-111.86 252.4,-115.19 256.67,-120.73&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- T3 --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;T3&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;229.7,-110.6 129.67,-110.6 129.67,-73.8 229.7,-73.8 229.7,-110.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;179.69&quot; y=&quot;-95.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Thread 3&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;179.69&quot; y=&quot;-81.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(File Download)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Main&amp;#45;&amp;gt;T3 --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Main-&gt;T3&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M179.69,-158.13C179.69,-147.71 179.69,-134.22 179.69,-122.24&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;183.19,-122.45 179.69,-112.45 176.19,-122.45 183.19,-122.45&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- CPU --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;CPU&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;230.03,-36.4 153.35,-36.4 153.35,-0.4 230.03,-0.4 230.03,-36.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;191.69&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;CPU Cores&lt;/text&gt;
&lt;/g&gt;
&lt;!-- T1&amp;#45;&amp;gt;CPU --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;T1-&gt;CPU&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M89.3,-73.45C107.31,-63.95 129.67,-52.14 148.9,-41.99&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;150.38,-45.17 157.59,-37.4 147.11,-38.98 150.38,-45.17&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Share --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Share&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;135.03,-36.8 38.34,-36.8 38.34,0 135.03,0 135.03,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;86.69&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Shared Heap&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;86.69&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Objects, Data)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- T1&amp;#45;&amp;gt;Share --&gt;
&lt;g id=&quot;edge7&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;T1-&gt;Share&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M63.35,-73.45C66.73,-65.63 70.78,-56.24 74.55,-47.5&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;77.76,-48.9 78.51,-38.33 71.33,-46.13 77.76,-48.9&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- T2&amp;#45;&amp;gt;CPU --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;T2-&gt;CPU&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M272.59,-73.45C267.09,-67.13 260.47,-60.25 253.69,-54.8 248.3,-50.47 242.31,-46.35 236.25,-42.55&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;238.4,-39.76 228.02,-37.63 234.81,-45.77 238.4,-39.76&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- T2&amp;#45;&amp;gt;Share --&gt;
&lt;g id=&quot;edge8&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;T2-&gt;Share&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M247.4,-76.94C244.45,-75.88 241.52,-74.82 238.69,-73.8 208.06,-62.77 173.93,-50.55 145.78,-40.49&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;147.33,-37.32 136.73,-37.25 144.97,-43.91 147.33,-37.32&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- T3&amp;#45;&amp;gt;CPU --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;T3-&gt;CPU&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M182.65,-73.45C183.95,-65.69 185.51,-56.38 186.96,-47.7&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;190.39,-48.38 188.59,-37.94 183.49,-47.23 190.39,-48.38&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- T3&amp;#45;&amp;gt;Share --&gt;
&lt;g id=&quot;edge9&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;T3-&gt;Share&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M156.7,-73.45C145.18,-64.56 131.06,-53.66 118.52,-43.98&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;120.99,-41.46 110.93,-38.12 116.71,-47 120.99,-41.46&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_multithreading Pages: 1 --&gt;
&lt;svg width=&quot;259pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 259.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_multithreading&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 255.04,-172.97 255.04,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;126.04&quot; cy=&quot;-84.66&quot; rx=&quot;64.66&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;126.04&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Multithreading&lt;/text&gt;
&lt;/g&gt;
&lt;!-- SYNC --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;SYNC&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;192.73&quot; cy=&quot;-41.42&quot; rx=&quot;58.32&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;192.73&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Synchronization&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;SYNC --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--SYNC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M152.01,-67.82C156.99,-64.59 162.19,-61.22 167.15,-58&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;139.32&quot; y=&quot;-54.81&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- EXEC --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;EXEC&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;82.88&quot; cy=&quot;-18&quot; rx=&quot;72.67&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;82.88&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Executor Framework&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;EXEC --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--EXEC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M114.47,-66.79C108.28,-57.23 100.67,-45.48 94.48,-35.91&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;84.21&quot; y=&quot;-54.05&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- LAMB --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LAMB&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;59.82&quot; cy=&quot;-128.51&quot; rx=&quot;59.82&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;59.82&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Parallel Streams&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;LAMB --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--LAMB&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M100.63,-101.49C95.52,-104.87 90.16,-108.42 85.06,-111.8&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;113.1&quot; y=&quot;-109.34&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- MEM --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;MEM&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;169.88&quot; cy=&quot;-150.97&quot; rx=&quot;76.09&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.88&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Memory Management&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;MEM --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--MEM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M138.02,-102.78C144.21,-112.13 151.73,-123.52 157.92,-132.87&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;134.21&quot; y=&quot;-120.52&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Thread creation&lt;/strong&gt;: Extend &lt;code class=&quot;notranslate&quot;&gt;Thread&lt;/code&gt; (override run()) or implement &lt;code class=&quot;notranslate&quot;&gt;Runnable&lt;/code&gt; (pass to Thread)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daemon threads&lt;/strong&gt;: Low-priority background threads that don’t prevent JVM exit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thread priority&lt;/strong&gt;: 1 (MIN_PRIORITY) to 10 (MAX_PRIORITY) — hints to the scheduler&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thread.sleep()&lt;/strong&gt;: Pauses the current thread without releasing locks&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-synchronization&quot; class=&quot;internal alias&quot; data-slug=&quot;java-synchronization&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Synchronization&lt;/a&gt; — threads sharing data need coordination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-executor-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-executor-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Executor Framework&lt;/a&gt; — thread pools manage thread lifecycle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-deadlock&quot; class=&quot;internal alias&quot; data-slug=&quot;java-deadlock&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Deadlock&lt;/a&gt; — incorrect synchronization can cause deadlock&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-lambda-and-streams&quot; class=&quot;internal alias&quot; data-slug=&quot;java-lambda-and-streams&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Streams &amp;#x26; Lambdas&lt;/a&gt; — parallelStream() uses the common ForkJoinPool&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Thread.start() vs run()&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;start()&lt;/code&gt; creates a new thread; &lt;code class=&quot;notranslate&quot;&gt;run()&lt;/code&gt; executes in the current thread&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race conditions&lt;/strong&gt;: Multiple threads reading/writing shared data without synchronization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visibility issues&lt;/strong&gt;: Changes by one thread may not be visible to others without happens-before guarantees&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daemon threads terminated abruptly&lt;/strong&gt;: Daemon threads are killed when no user threads remain&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-object-class</title>
    <link href="https://animishraa05.github.io/wiki/java/java-object-class" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-object-class.md" />
    <summary>The Problem Every object in Java needs a basic set of operations — comparing with other objects, generating a hash code, producing a string representation, and being cloneable.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Every object in Java needs a basic set of operations — comparing with other objects, generating a hash code, producing a string representation, and being cloneable. Without a common base class, each class would redefine these fundamental behaviors inconsistently.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;&lt;code class=&quot;notranslate&quot;&gt;java.lang.Object&lt;/code&gt; is the root of the Java class hierarchy. Every class implicitly extends &lt;code class=&quot;notranslate&quot;&gt;Object&lt;/code&gt;. It provides a set of core methods that all objects inherit: &lt;code class=&quot;notranslate&quot;&gt;equals()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;hashCode()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;toString()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;clone()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;finalize()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;getClass()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;notify()&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;wait()&lt;/code&gt;, and &lt;code class=&quot;notranslate&quot;&gt;notifyAll()&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When a class is defined without an explicit &lt;code class=&quot;notranslate&quot;&gt;extends&lt;/code&gt; clause, the compiler adds &lt;code class=&quot;notranslate&quot;&gt;extends Object&lt;/code&gt;. All inherited methods can be overridden. The default &lt;code class=&quot;notranslate&quot;&gt;equals()&lt;/code&gt; uses reference equality (&lt;code class=&quot;notranslate&quot;&gt;==&lt;/code&gt;); &lt;code class=&quot;notranslate&quot;&gt;hashCode()&lt;/code&gt; returns the memory address (typically); &lt;code class=&quot;notranslate&quot;&gt;toString()&lt;/code&gt; returns &lt;code class=&quot;notranslate&quot;&gt;ClassName@hashCode&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_object_class Pages: 1 --&gt;
&lt;svg width=&quot;574pt&quot; height=&quot;117pt&quot; viewBox=&quot;0.00 0.00 574.00 117.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 112.8)&quot;&gt;
&lt;title&gt;java_object_class&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-112.8 570.01,-112.8 570.01,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Object --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Object&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;364.35,-108.8 246.99,-108.8 246.99,-72 364.35,-72 364.35,-108.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;305.67&quot; y=&quot;-94&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;java.lang.Object&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;305.67&quot; y=&quot;-79.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Root of Hierarchy)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Str --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Str&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;65.35,-36 0,-36 0,0 65.35,0 65.35,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;32.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;toString()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Object&amp;#45;&amp;gt;Str --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Object-&gt;Str&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M246.6,-78.42C202.09,-69.54 139.48,-55.77 76.45,-36.3&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;77.54,-32.97 66.95,-33.31 75.45,-39.65 77.54,-32.97&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Eq --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Eq&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;215.7,-36 83.65,-36 83.65,0 215.7,0 215.7,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;149.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;equals() / hashCode()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Object&amp;#45;&amp;gt;Eq --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Object-&gt;Eq&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M266.31,-71.64C245.75,-62.36 220.41,-50.92 198.6,-41.08&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;200.15,-37.94 189.6,-37.02 197.27,-44.32 200.15,-37.94&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Clone --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Clone&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;287.67,-36 233.67,-36 233.67,0 287.67,0 287.67,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;260.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;clone()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Object&amp;#45;&amp;gt;Clone --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Object-&gt;Clone&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M294.32,-71.64C289.25,-63.7 283.17,-54.19 277.58,-45.45&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;280.71,-43.85 272.38,-37.31 274.81,-47.62 280.71,-43.85&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Thread --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Thread&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;397.68,-36 305.67,-36 305.67,0 397.68,0 397.68,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;351.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;wait() / notify()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Object&amp;#45;&amp;gt;Thread --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Object-&gt;Thread&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M317.28,-71.64C322.46,-63.7 328.68,-54.19 334.39,-45.45&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;337.18,-47.58 339.72,-37.3 331.32,-43.75 337.18,-47.58&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Final --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Final&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;477.35,-36 416,-36 416,0 477.35,0 477.35,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;446.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;finalize()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Object&amp;#45;&amp;gt;Final --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Object-&gt;Final&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M341.25,-71.64C360.85,-61.85 385.25,-49.67 405.64,-39.49&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;407.16,-42.64 414.54,-35.04 404.03,-36.38 407.16,-42.64&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Class --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Class&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;566.01,-36 495.33,-36 495.33,0 566.01,0 566.01,-36&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;530.67&quot; y=&quot;-14.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;getClass()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Object&amp;#45;&amp;gt;Class --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Object-&gt;Class&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M364.75,-73.29C397.67,-64.01 439.57,-51.71 484.39,-36.66&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;485.44,-39.99 493.79,-33.47 483.2,-33.37 485.44,-39.99&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_object_class Pages: 1 --&gt;
&lt;svg width=&quot;228pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 228.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_object_class&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 223.66,-172.97 223.66,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;109.4&quot; cy=&quot;-84.66&quot; rx=&quot;59.39&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;109.4&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Object Class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- INHER --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;INHER&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;176.09&quot; cy=&quot;-41.42&quot; rx=&quot;43.57&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;176.09&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Inheritance&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;INHER --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--INHER&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M134.99,-68.06C140.72,-64.35 146.78,-60.42 152.42,-56.76&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;125.2&quot; y=&quot;-54.31&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- STR --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;STR&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;66.24&quot; cy=&quot;-18&quot; rx=&quot;31.08&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;66.24&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Strings&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;STR --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--STR&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M97.84,-66.79C91.44,-56.92 83.54,-44.72 77.24,-34.99&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;67.28&quot; y=&quot;-53.59&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COLL --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COLL&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;43.18&quot; cy=&quot;-128.51&quot; rx=&quot;43.18&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;43.18&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Collections&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COLL --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COLL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M84.37,-101.24C78.51,-105.12 72.29,-109.23 66.51,-113.06&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;95.7&quot; y=&quot;-109.85&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THREAD --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THREAD&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;153.25&quot; cy=&quot;-150.97&quot; rx=&quot;52.64&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;153.25&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Multithreading&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;THREAD --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--THREAD&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M121.38,-102.78C127.67,-112.29 135.34,-123.89 141.58,-133.33&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;111.22&quot; y=&quot;-120.75&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;equals/hashCode contract&lt;/strong&gt;: If two objects are equal, they must have the same hash code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thread methods&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;wait()&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;notify()&lt;/code&gt; are defined here, making every object a monitor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;getClass()&lt;/strong&gt;: Returns the runtime class — final, cannot be overridden&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;finalize()&lt;/strong&gt;: Called by GC before reclaiming memory (deprecated in Java 9+)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — Object is the ultimate parent of all classes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-strings&quot; class=&quot;internal alias&quot; data-slug=&quot;java-strings&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Strings&lt;/a&gt; — String overrides equals() and hashCode() for value comparison&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Collections Framework&lt;/a&gt; — hashCode() is used by HashMap, HashSet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — Object reference can hold any type (polymorphism)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;equals() without hashCode()&lt;/strong&gt;: Breaking the contract causes HashMap/HashSet to malfunction&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;clone() is tricky&lt;/strong&gt;: It performs a shallow copy; overriding requires implementing &lt;code class=&quot;notranslate&quot;&gt;Cloneable&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;finalize() is unreliable&lt;/strong&gt;: Not guaranteed to run; use try-with-resources or Cleaner instead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;toString() default&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;ClassName@1a2b3c4d&lt;/code&gt; is usually not human-readable&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-object</title>
    <link href="https://animishraa05.github.io/wiki/java/java-object" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-object.md" />
    <summary>The Problem A class is just a blueprint — it defines what an entity looks like but has no concrete existence.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A class is just a blueprint — it defines what an entity looks like but has no concrete existence. To actually execute behavior and hold data, the program needs live instances that exist at runtime, each with its own unique state. Without objects, the program would be a collection of static methods with no persistent data.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;An &lt;strong&gt;object&lt;/strong&gt; is a basic unit of Object-Oriented Programming that represents real-life entities. It is a runtime instance of a class. An object mainly consists of three things: &lt;strong&gt;state&lt;/strong&gt; (attributes/fields representing properties), &lt;strong&gt;behavior&lt;/strong&gt; (methods defining what the object can do), and &lt;strong&gt;identity&lt;/strong&gt; (a unique name or reference that enables interaction with other objects).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;When &lt;code class=&quot;notranslate&quot;&gt;new ClassName()&lt;/code&gt; executes, the JVM allocates memory on the heap for the object’s fields (with default values), then calls the constructor to initialize them. A reference to this memory location is returned as the object’s identity. Multiple reference variables can point to the same object. Objects interact by invoking methods on each other’s references — this is how a Java program performs its work.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_object Pages: 1 --&gt;
&lt;svg width=&quot;518pt&quot; height=&quot;226pt&quot; viewBox=&quot;0.00 0.00 518.00 226.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 222.4)&quot;&gt;
&lt;title&gt;java_object&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-222.4 514.1,-222.4 514.1,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- ClassDef --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ClassDef&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;111.71,-82 0,-82 0,-45.2 111.71,-45.2 111.71,-82&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;55.85&quot; y=&quot;-67.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Class: Dog&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;55.85&quot; y=&quot;-52.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(fields + methods)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Object --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Object&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;333.01,-120 228.97,-120 224.97,-116 224.97,-83.2 329.01,-83.2 333.01,-87.2 333.01,-120&quot;&gt;&lt;/polygon&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;329.01,-116 224.97,-116&quot;&gt;&lt;/polyline&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;329.01,-116 329.01,-83.2&quot;&gt;&lt;/polyline&gt;
&lt;polyline fill=&quot;none&quot; stroke=&quot;black&quot; points=&quot;329.01,-116 333.01,-120&quot;&gt;&lt;/polyline&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;278.99&quot; y=&quot;-105.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Object: Tommy&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;278.99&quot; y=&quot;-90.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Instance of Dog)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ClassDef&amp;#45;&amp;gt;Object --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;ClassDef-&gt;Object&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M112.09,-73.09C142.87,-78.38 181.36,-85 213.52,-90.52&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;212.67,-93.93 223.12,-92.17 213.85,-87.03 212.67,-93.93&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;166.67&quot; y=&quot;-91.22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;instantiated from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- AnotherObj --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;AnotherObj&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;336.35,-65 221.63,-65 221.63,-28.2 336.35,-28.2 336.35,-65&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;278.99&quot; y=&quot;-50.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Object: Max&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;278.99&quot; y=&quot;-35.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;(Another Instance)&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ClassDef&amp;#45;&amp;gt;AnotherObj --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;ClassDef-&gt;AnotherObj&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M112.14,-59C118.07,-58.52 124.01,-58.05 129.71,-57.6 155.93,-55.55 184.77,-53.39 209.99,-51.53&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;210.07,-55.03 219.79,-50.81 209.56,-48.05 210.07,-55.03&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;166.67&quot; y=&quot;-60.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;instantiated from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- State --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;State&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;500.18,-218.4 383.26,-218.4 383.26,-152.8 500.18,-152.8 500.18,-218.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-203.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;State (Attributes)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-189.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;name = &quot;Tommy&quot;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-174.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;breed = &quot;Labrador&quot;&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-160.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;age = 3&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Object&amp;#45;&amp;gt;State --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Object-&gt;State&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M316.06,-120.45C332.85,-129.22 353.39,-139.96 372.91,-150.16&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;371.18,-153.21 381.67,-154.74 374.42,-147 371.18,-153.21&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Behavior --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Behavior&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;502.08,-134.4 381.37,-134.4 381.37,-68.8 502.08,-68.8 502.08,-134.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-119.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Behavior (Methods)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-105.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;bark()&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-90.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;eat()&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-76.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;sleep()&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Object&amp;#45;&amp;gt;Behavior --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Object-&gt;Behavior&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M333.51,-101.6C345.07,-101.6 357.46,-101.6 369.58,-101.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;369.55,-105.1 379.55,-101.6 369.55,-98.1 369.55,-105.1&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Identity --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Identity&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;510.1,-51.2 373.35,-51.2 373.35,0 510.1,0 510.1,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Identity (Reference)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;heap address: 0x4F2A&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;441.72&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;variable: Dog tommy&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Object&amp;#45;&amp;gt;Identity --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Object-&gt;Identity&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M319.72,-82.81C336.51,-74.88 356.5,-65.42 375.36,-56.51&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;376.77,-59.71 384.32,-52.27 373.78,-53.38 376.77,-59.71&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_object Pages: 1 --&gt;
&lt;svg width=&quot;216pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 216.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_object&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 212.38,-172.97 212.38,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;114.7&quot; cy=&quot;-84.66&quot; rx=&quot;35.47&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.7&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Object&lt;/text&gt;
&lt;/g&gt;
&lt;!-- CLASS --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;CLASS&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;181.38&quot; cy=&quot;-41.42&quot; rx=&quot;27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;181.38&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;CLASS --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--CLASS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M136.9,-70.26C144.93,-65.05 153.94,-59.21 161.74,-54.16&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;130.81&quot; y=&quot;-54.11&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OBJCLASS --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OBJCLASS&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;71.53&quot; cy=&quot;-18&quot; rx=&quot;48.47&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.53&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Object Class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OBJCLASS --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OBJCLASS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M103.36,-67.14C97.06,-57.42 89.25,-45.37 82.95,-35.63&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;79.39&quot; y=&quot;-54.09&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;48.48&quot; cy=&quot;-128.51&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;48.48&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M92.65,-99.26C86.17,-103.54 79.07,-108.25 72.48,-112.61&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;68.8&quot; y=&quot;-97.84&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- METHODS --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;METHODS&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;158.54&quot; cy=&quot;-150.97&quot; rx=&quot;36&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;158.54&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Methods&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;METHODS --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--METHODS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M126.21,-102.08C132.61,-111.75 140.54,-123.74 146.94,-133.43&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;156.84&quot; y=&quot;-120.46&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;State&lt;/strong&gt;: The fields/attributes that hold the object’s data (what it knows)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Behavior&lt;/strong&gt;: The methods that operate on the object’s data (what it does)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt;: The unique reference that distinguishes this object from others&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heap allocation&lt;/strong&gt;: All objects live on the heap, managed by the garbage collector&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reference semantics&lt;/strong&gt;: Variables hold references (pointers) to objects, not the objects themselves&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-class&quot; class=&quot;internal alias&quot; data-slug=&quot;java-class&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Class&lt;/a&gt; — objects are runtime instances of a class blueprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-methods&quot; class=&quot;internal alias&quot; data-slug=&quot;java-methods&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Methods&lt;/a&gt; — objects interact by invoking methods on each other&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-object-class&quot; class=&quot;internal alias&quot; data-slug=&quot;java-object-class&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Object Class&lt;/a&gt; — every object inherits from java.lang.Object&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-primitive-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-primitive-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Data Types&lt;/a&gt; — primitives store values directly; objects use reference semantics&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;null reference&lt;/strong&gt;: An object variable set to null points to no object — calling methods on it throws NullPointerException&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Object identity vs equality&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;==&lt;/code&gt; compares references (identity); &lt;code class=&quot;notranslate&quot;&gt;.equals()&lt;/code&gt; compares content (equality by default uses == unless overridden)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mutable vs immutable objects&lt;/strong&gt;: Object state can be mutable (changeable) or immutable (unchangeable after construction)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Object lifespan&lt;/strong&gt;: Objects become eligible for garbage collection when no reachable references point to them&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-oop-advantages</title>
    <link href="https://animishraa05.github.io/wiki/java/java-oop-advantages" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-oop-advantages.md" />
    <summary>The Problem Procedural programming organizes code as a sequence of instructions operating on global data.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Procedural programming organizes code as a sequence of instructions operating on global data. As programs grow, this approach leads to scattered, interdependent code that is hard to maintain, test, and reuse. A change in one function can break others, and there is no natural way to model real-world entities.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Object-Oriented Programming offers several key advantages over procedural programming: &lt;strong&gt;code reusability&lt;/strong&gt; (classes and objects allow reuse of existing code, reducing duplication), &lt;strong&gt;better structure and maintainability&lt;/strong&gt; (programs are organized into logical units), &lt;strong&gt;supports the DRY principle&lt;/strong&gt; (common functionality is written once), and &lt;strong&gt;faster development&lt;/strong&gt; (modular components enable quicker and scalable application development).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Reusability works through inheritance (subclasses reuse parent code) and composition (objects contain and delegate to other objects). Structure comes from classes grouping related state and behavior into single units. The DRY principle is enforced through class hierarchies — write common code in the base class, specialize in subclasses. Faster development results because well-designed classes become reusable components that can be composed like building blocks.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: oop_advantages Pages: 1 --&gt;
&lt;svg width=&quot;568pt&quot; height=&quot;333pt&quot; viewBox=&quot;0.00 0.00 568.00 333.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 329)&quot;&gt;
&lt;title&gt;oop_advantages&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-329 563.73,-329 563.73,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Procedural --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Procedural&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;354.74,-325 207.98,-325 207.98,-230.6 354.74,-230.6 354.74,-325&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-310.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Procedural&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-295.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;---&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-281.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Functions on global data&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-267&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Duplicated logic&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-252.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Hard to maintain&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-238.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;No real-world mapping&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;353.4,-182.6 209.32,-182.6 209.32,-88.2 353.4,-88.2 353.4,-182.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-167.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Object-Oriented&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-153.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;---&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-139&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Classes + Objects&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-124.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Inheritance reuses code&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-110.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Encapsulated state&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;281.36&quot; y=&quot;-95.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Models real entities&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Procedural&amp;#45;&amp;gt;OOP --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Procedural-&gt;OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M281.36,-230.44C281.36,-218.82 281.36,-206.21 281.36,-194.11&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;284.86,-194.23 281.36,-184.23 277.86,-194.23 284.86,-194.23&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;286.36&quot; y=&quot;-203.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;vs&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Reuse --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Reuse&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;146.72,-51.2 0,-51.2 0,0 146.72,0 146.72,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;73.36&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Code Reusability&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;73.36&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;One class, many objects&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;73.36&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Inherit, don&#039;t rewrite&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP&amp;#45;&amp;gt;Reuse --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;OOP-&gt;Reuse&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M208.91,-96.85C183.67,-83.77 155.69,-69.27 131.75,-56.86&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;133.58,-53.87 123.09,-52.37 130.36,-60.08 133.58,-53.87&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Structure --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Structure&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;274.06,-51.2 164.66,-51.2 164.66,0 274.06,0 274.06,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;219.36&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Better Structure&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;219.36&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Logical units&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;219.36&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Easier debugging&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP&amp;#45;&amp;gt;Structure --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;OOP-&gt;Structure&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M254.53,-87.74C249.46,-78.93 244.23,-69.84 239.41,-61.46&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;242.55,-59.89 234.53,-52.97 236.48,-63.38 242.55,-59.89&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- DRY --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;DRY&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;394.71,-51.2 292.01,-51.2 292.01,0 394.71,0 394.71,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;343.36&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;DRY Principle&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;343.36&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Write once&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;343.36&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Use everywhere&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP&amp;#45;&amp;gt;DRY --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;OOP-&gt;DRY&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M308.19,-87.74C313.27,-78.93 318.49,-69.84 323.31,-61.46&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;326.24,-63.38 328.19,-52.97 320.17,-59.89 326.24,-63.38&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Speed --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Speed&lt;/title&gt;
&lt;polygon fill=&quot;#e8f4f8&quot; stroke=&quot;black&quot; points=&quot;559.73,-51.2 412.99,-51.2 412.99,0 559.73,0 559.73,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;486.36&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Faster Development&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;486.36&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Build on existing classes&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;486.36&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Modular composition&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP&amp;#45;&amp;gt;Speed --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;OOP-&gt;Speed&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M353.64,-96.39C378.24,-83.46 405.39,-69.18 428.69,-56.92&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;430.2,-60.08 437.43,-52.33 426.95,-53.89 430.2,-60.08&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_oop_advantages Pages: 1 --&gt;
&lt;svg width=&quot;232pt&quot; height=&quot;176pt&quot; viewBox=&quot;0.00 0.00 232.00 176.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 171.7)&quot;&gt;
&lt;title&gt;semantic_oop_advantages&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-171.7 228.49,-171.7 228.49,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;100.14&quot; cy=&quot;-89.71&quot; rx=&quot;77.58&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;100.14&quot; y=&quot;-85.81&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;OOP Advantages&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;176.02&quot; cy=&quot;-101.49&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;176.02&quot; y=&quot;-98.19&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M165.15,-99.8C165.25,-99.82 165.35,-99.83 165.45,-99.85&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;140.29&quot; y=&quot;-102.53&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;derived from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- CODE --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;CODE&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;72.76&quot; cy=&quot;-18&quot; rx=&quot;61.34&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;72.76&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Code Reusability&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;CODE --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--CODE&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M93.23,-71.62C89.11,-60.83 83.9,-47.17 79.76,-36.34&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;72.73&quot; y=&quot;-56.68&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- DRY --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;DRY&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;52.25&quot; cy=&quot;-149.7&quot; rx=&quot;52.25&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;52.25&quot; y=&quot;-146.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;DRY Principle&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;DRY --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--DRY&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M85.77,-107.71C79.6,-115.44 72.41,-124.44 66.28,-132.13&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;62.27&quot; y=&quot;-122.62&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Code reusability&lt;/strong&gt;: Inheritance and composition enable reuse across the codebase&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better structure&lt;/strong&gt;: Logical units (classes) with clear responsibilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DRY principle&lt;/strong&gt;: Common functionality centralized in one place&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faster development&lt;/strong&gt;: Pre-built components accelerate new feature creation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Modular design makes it easier to add features without breaking existing code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintainability&lt;/strong&gt;: Changes are localized to specific classes, reducing side effects&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — inheritance is the primary mechanism for code reuse&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-composition&quot; class=&quot;internal alias&quot; data-slug=&quot;java-composition&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Composition&lt;/a&gt; — composition enables flexible reuse without inheritance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-oop-disadvantages&quot; class=&quot;internal alias&quot; data-slug=&quot;java-oop-disadvantages&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;OOP Disadvantages&lt;/a&gt; — the tradeoffs of the paradigm&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-oop-pillars&quot; class=&quot;internal alias&quot; data-slug=&quot;java-oop-pillars&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;The Four OOP Pillars&lt;/a&gt; — the four pillars enable these advantages&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Over-engineering&lt;/strong&gt;: The structure and abstraction that make OOP powerful for large systems add unnecessary complexity to small programs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reuse isn’t free&lt;/strong&gt;: Inheritance creates coupling between parent and child — changes to parent can break children&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-oop-disadvantages</title>
    <link href="https://animishraa05.github.io/wiki/java/java-oop-disadvantages" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-oop-disadvantages.md" />
    <summary>The Problem Object-Oriented Programming is not a universal solution — it comes with significant tradeoffs.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Object-Oriented Programming is not a universal solution — it comes with significant tradeoffs. For small programs, the overhead of class hierarchies, interfaces, and design patterns can far exceed the benefits. Understanding these drawbacks helps developers choose when OOP is appropriate and when simpler paradigms suffice.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;OOP has several disadvantages: &lt;strong&gt;steep learning curve&lt;/strong&gt; (concepts like classes, objects, inheritance, and polymorphism can be difficult for beginners), &lt;strong&gt;overhead for small programs&lt;/strong&gt; (OOP may require more code and structure than necessary for simple applications), &lt;strong&gt;debugging complexity&lt;/strong&gt; (code spread across multiple classes and layers makes debugging more time-consuming), and &lt;strong&gt;higher memory usage&lt;/strong&gt; (creating many objects can consume more memory compared to procedural programs).&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The learning curve is steep because OOP introduces conceptual overhead — understanding polymorphism requires grasping inheritance, dynamic dispatch, and vtables. Small programs pay a fixed cost: every class needs a separate file, constructors, and accessor methods. Debugging complexity grows because execution flow jumps across classes through method calls and inheritance chains. Memory overhead comes from per-object headers, vtables pointers, and dynamic dispatch structures.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: oop_disadvantages Pages: 1 --&gt;
&lt;svg width=&quot;800pt&quot; height=&quot;146pt&quot; viewBox=&quot;0.00 0.00 800.00 146.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 141.6)&quot;&gt;
&lt;title&gt;oop_disadvantages&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-141.6 796.24,-141.6 796.24,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;467.4,-137.6 342.01,-137.6 342.01,-101.6 467.4,-101.6 467.4,-137.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;404.7&quot; y=&quot;-116&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;OOP Disadvantages&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Learning --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Learning&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;207.41,-65.6 0,-65.6 0,0 207.41,0 207.41,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;103.7&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Steep Learning Curve&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;103.7&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Classes, Inheritance, Polymorphism&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;103.7&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Abstract Classes, Interfaces&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;103.7&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Hard for beginners&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP&amp;#45;&amp;gt;Learning --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;OOP-&gt;Learning&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M342.7,-101.13C306.92,-91.05 260.79,-78.06 218.62,-66.17&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;219.74,-62.85 209.16,-63.51 217.84,-69.59 219.74,-62.85&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Overhead --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Overhead&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;400.07,-65.6 225.34,-65.6 225.34,0 400.07,0 400.07,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;312.7&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Overhead for Small Programs&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;312.7&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;10+ files for a simple app&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;312.7&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;More boilerplate than logic&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;312.7&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Unnecessary abstraction&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP&amp;#45;&amp;gt;Overhead --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;OOP-&gt;Overhead&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M386.09,-101.44C377.39,-93.42 366.63,-83.51 356.06,-73.77&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;358.51,-71.26 348.78,-67.06 353.76,-76.41 358.51,-71.26&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Debugging --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Debugging&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;577.07,-65.6 418.34,-65.6 418.34,0 577.07,0 577.07,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;497.7&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Debugging Complexity&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;497.7&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Code spread across layers&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;497.7&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Inheritance chains&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;497.7&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Hard to trace flow&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP&amp;#45;&amp;gt;Debugging --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;OOP-&gt;Debugging&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M423.52,-101.44C432.32,-93.42 443.19,-83.51 453.87,-73.77&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;456.21,-76.37 461.24,-67.05 451.49,-71.2 456.21,-76.37&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Memory --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Memory&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;792.24,-65.6 595.17,-65.6 595.17,0 792.24,0 792.24,-65.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;693.7&quot; y=&quot;-50.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Higher Memory Usage&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;693.7&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Object headers (8-16 bytes)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;693.7&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;VTable pointers&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;693.7&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;More objects = more GC pressure&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP&amp;#45;&amp;gt;Memory --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;OOP-&gt;Memory&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M464.22,-101.2C496.91,-91.63 538.46,-79.47 583.84,-66.15&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;584.77,-69.52 593.38,-63.35 582.8,-62.8 584.77,-69.52&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_oop_disadvantages Pages: 1 --&gt;
&lt;svg width=&quot;245pt&quot; height=&quot;176pt&quot; viewBox=&quot;0.00 0.00 245.00 176.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 171.7)&quot;&gt;
&lt;title&gt;semantic_oop_disadvantages&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-171.7 241.28,-171.7 241.28,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;112.92&quot; cy=&quot;-89.71&quot; rx=&quot;89.06&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;112.92&quot; y=&quot;-85.81&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;OOP Disadvantages&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;188.8&quot; cy=&quot;-101.49&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;188.8&quot; y=&quot;-98.19&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M184.28,-100.79C184.46,-100.82 184.63,-100.84 184.8,-100.87&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;159.53&quot; y=&quot;-103.53&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;derived from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- PROC --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PROC&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;85.54&quot; cy=&quot;-18&quot; rx=&quot;85.54&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;85.54&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Procedural Programming&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;PROC --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--PROC&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M106.01,-71.62C101.89,-60.83 96.68,-47.17 92.54,-36.34&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.77&quot; y=&quot;-56.68&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ADV --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ADV&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;65.04&quot; cy=&quot;-149.7&quot; rx=&quot;62.86&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;65.04&quot; y=&quot;-146.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP Advantages&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ADV --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ADV&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M98.55,-107.71C92.49,-115.3 85.45,-124.12 79.39,-131.71&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;61.46&quot; y=&quot;-122.41&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;contrasts with&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Steep learning curve&lt;/strong&gt;: Multiple interconnected concepts create a high barrier to entry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overhead for small programs&lt;/strong&gt;: Boilerplate and structure exceed logic for simple tasks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debugging complexity&lt;/strong&gt;: Scattered state across objects makes tracing bugs harder&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Higher memory usage&lt;/strong&gt;: Per-object metadata overhead adds up at scale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not always appropriate&lt;/strong&gt;: Scripting and data-processing tasks often work better procedurally&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — deep inheritance hierarchies contribute to debugging complexity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrasts with:&lt;/strong&gt; &lt;a href=&quot;../../java-oop-advantages&quot; class=&quot;internal alias&quot; data-slug=&quot;java-oop-advantages&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;OOP Advantages&lt;/a&gt; — the same features that help at scale hurt for small programs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-class&quot; class=&quot;internal alias&quot; data-slug=&quot;java-class&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Class&lt;/a&gt; — each class adds its own overhead; many classes = more memory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-memory-management&quot; class=&quot;internal alias&quot; data-slug=&quot;java-memory-management&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Memory Management&lt;/a&gt; — object allocation and GC pressure are higher in OOP designs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Not anti-OOP&lt;/strong&gt;: These are tradeoffs, not dealbreakers — OOP is usually the right choice for large, evolving systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Premature abstraction&lt;/strong&gt;: Creating deep class hierarchies for future needs that never materialize is the biggest source of OOP overhead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance vs productivity tradeoff&lt;/strong&gt;: OOP’s memory and CPU overhead is usually dwarfed by developer productivity gains&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>The Four OOP Pillars — Encapsulation, Inheritance, Polymorphism, Abstraction</title>
    <link href="https://animishraa05.github.io/wiki/java/java-oop-pillars" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-oop-pillars.md" />
    <summary>What’s Being Compared The four fundamental principles of object-oriented programming in Java: encapsulation, inheritance, polymorphism, and abstraction.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;whats-being-compared&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;What’s Being Compared&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#whats-being-compared&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The four fundamental principles of object-oriented programming in Java: encapsulation, inheritance, polymorphism, and abstraction. Each addresses a distinct concern in software design, but together they form a cohesive paradigm.&lt;/p&gt;
&lt;h2 id=&quot;the-core-tension&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Core Tension&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-core-tension&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The four pillars balance competing goals: encapsulation hides state (safety), inheritance shares code (reuse), polymorphism enables flexibility (adaptability), and abstraction reduces complexity (clarity). Over-emphasizing any one pillar leads to design problems — rigid hierarchies from overusing inheritance, or anemic models from over-encapsulation.&lt;/p&gt;
&lt;h2 id=&quot;comparison&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Comparison&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#comparison&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;../../java-encapsulation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-encapsulation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Encapsulation&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Inheritance&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Polymorphism&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;../../java-abstraction&quot; class=&quot;internal alias&quot; data-slug=&quot;java-abstraction&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Abstraction&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Purpose&lt;/td&gt;
&lt;td&gt;Data hiding&lt;/td&gt;
&lt;td&gt;Code reuse&lt;/td&gt;
&lt;td&gt;Runtime flexibility&lt;/td&gt;
&lt;td&gt;Complexity reduction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mechanism&lt;/td&gt;
&lt;td&gt;Access modifiers, getters/setters&lt;/td&gt;
&lt;td&gt;extends, super&lt;/td&gt;
&lt;td&gt;Method overriding, overloading&lt;/td&gt;
&lt;td&gt;Abstract classes, interfaces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java keyword&lt;/td&gt;
&lt;td&gt;private, protected&lt;/td&gt;
&lt;td&gt;extends&lt;/td&gt;
&lt;td&gt;@Override, overloaded names&lt;/td&gt;
&lt;td&gt;abstract, interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anti-pattern&lt;/td&gt;
&lt;td&gt;Anemic domain model&lt;/td&gt;
&lt;td&gt;Deep hierarchy, fragile base class&lt;/td&gt;
&lt;td&gt;Type-checking with instanceof&lt;/td&gt;
&lt;td&gt;Leaky abstraction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;the-insight&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Insight&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-insight&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The four pillars are not independent — they reinforce each other. Encapsulation protects the internal state that inheritance extends. Polymorphism enables the runtime dispatch that abstraction promises. A well-designed Java class system uses all four in concert: encapsulation hides data, inheritance shares behavior, abstraction defines contracts, and polymorphism enables substitution.&lt;/p&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../java-encapsulation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-encapsulation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Encapsulation&lt;/a&gt; — data hiding and access control&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-inheritance&quot; class=&quot;internal alias&quot; data-slug=&quot;java-inheritance&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Inheritance&lt;/a&gt; — code reuse and hierarchy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — dynamic dispatch and flexibility&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-abstraction&quot; class=&quot;internal alias&quot; data-slug=&quot;java-abstraction&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Abstraction&lt;/a&gt; — complexity management&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — abstraction through contracts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-access-modifiers&quot; class=&quot;internal alias&quot; data-slug=&quot;java-access-modifiers&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Access Modifiers&lt;/a&gt; — the mechanism for encapsulation&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-operators</title>
    <link href="https://animishraa05.github.io/wiki/java/java-operators" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-operators.md" />
    <summary>The Problem Programs need to perform operations on data — arithmetic calculations, comparisons, logical decisions, and value assignments.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Programs need to perform operations on data — arithmetic calculations, comparisons, logical decisions, and value assignments. Without a well-defined operator system, every operation would require verbose method calls, making code harder to read, write, and maintain.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Java provides a rich set of &lt;strong&gt;operators&lt;/strong&gt; that perform specific operations on one, two, or three operands. These include arithmetic (&lt;code class=&quot;notranslate&quot;&gt;+&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;-&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;*&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;/&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;%&lt;/code&gt;), relational (&lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;&gt;&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;==&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;!=&lt;/code&gt;), logical (&lt;code class=&quot;notranslate&quot;&gt;&amp;#x26;&amp;#x26;&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;||&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;!&lt;/code&gt;), bitwise (&lt;code class=&quot;notranslate&quot;&gt;&amp;#x26;&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;|&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;^&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;~&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;&amp;#x3C;&amp;#x3C;&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;&gt;&gt;&lt;/code&gt;), assignment (&lt;code class=&quot;notranslate&quot;&gt;=&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;+=&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;-=&lt;/code&gt;), and ternary (&lt;code class=&quot;notranslate&quot;&gt;?:&lt;/code&gt;). Each operator has a fixed precedence and associativity.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The compiler parses expressions according to operator precedence and associativity rules. Operators are syntactic sugar — the compiler translates &lt;code class=&quot;notranslate&quot;&gt;a + b&lt;/code&gt; into the appropriate bytecode instructions (like &lt;code class=&quot;notranslate&quot;&gt;iadd&lt;/code&gt; for int addition). Short-circuit operators (&lt;code class=&quot;notranslate&quot;&gt;&amp;#x26;&amp;#x26;&lt;/code&gt;, &lt;code class=&quot;notranslate&quot;&gt;||&lt;/code&gt;) evaluate the right operand only when needed.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_operators Pages: 1 --&gt;
&lt;svg width=&quot;645pt&quot; height=&quot;117pt&quot; viewBox=&quot;0.00 0.00 645.00 117.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 112.8)&quot;&gt;
&lt;title&gt;java_operators&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-112.8 640.68,-112.8 640.68,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Ops --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Ops&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;367.69,-108.8 269.65,-108.8 269.65,-72.8 367.69,-72.8 367.69,-108.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;318.67&quot; y=&quot;-87.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Java Operators&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Arithmetic --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Arithmetic&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;69.34,-36.8 0,-36.8 0,0 69.34,0 69.34,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;34.67&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Arithmetic&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;34.67&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;+ - * / %&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Ops&amp;#45;&amp;gt;Arithmetic --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Ops-&gt;Arithmetic&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M269.58,-81.51C222.83,-73.06 150.44,-58.53 80.45,-37.43&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;81.73,-34.16 71.14,-34.58 79.68,-40.86 81.73,-34.16&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Relational --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Relational&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;186.21,-36.8 87.13,-36.8 87.13,0 186.21,0 186.21,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;136.67&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Relational&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;136.67&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;&amp;#x3C; &gt; &amp;#x3C;= &gt;= == !=&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Ops&amp;#45;&amp;gt;Relational --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Ops-&gt;Relational&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M273.68,-72.4C249.35,-62.99 219.06,-51.27 193.16,-41.25&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;194.73,-38.1 184.14,-37.76 192.2,-44.63 194.73,-38.1&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Logical --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Logical&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;258.69,-36.8 204.66,-36.8 204.66,0 258.69,0 258.69,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.67&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Logical&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;231.67&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;&amp;#x26;&amp;#x26; || !&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Ops&amp;#45;&amp;gt;Logical --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Ops-&gt;Logical&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M297.17,-72.4C286.68,-63.92 273.89,-53.56 262.4,-44.27&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;264.69,-41.61 254.71,-38.04 260.28,-47.05 264.69,-41.61&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Assignment --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Assignment&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;360.36,-36.8 276.98,-36.8 276.98,0 360.36,0 360.36,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;318.67&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Assignment&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;318.67&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;= += -= *= /=&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Ops&amp;#45;&amp;gt;Assignment --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Ops-&gt;Assignment&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M318.67,-72.4C318.67,-65.18 318.67,-56.6 318.67,-48.47&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;322.17,-48.6 318.67,-38.6 315.17,-48.6 322.17,-48.6&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Bitwise --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Bitwise&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;462.9,-36.8 378.44,-36.8 378.44,0 462.9,0 462.9,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;420.67&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Bitwise&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;420.67&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;&amp;#x26; | ^ ~ &amp;#x3C;&amp;#x3C; &gt;&gt;&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Ops&amp;#45;&amp;gt;Bitwise --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Ops-&gt;Bitwise&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M343.89,-72.4C356.54,-63.66 372.07,-52.95 385.84,-43.44&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;387.55,-46.51 393.79,-37.95 383.58,-40.75 387.55,-46.51&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Ternary --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Ternary&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;538.34,-36.8 481,-36.8 481,0 538.34,0 538.34,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;509.67&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Ternary&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;509.67&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;? :&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Ops&amp;#45;&amp;gt;Ternary --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Ops-&gt;Ternary&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M368.04,-74.04C395.75,-64.88 431.11,-52.71 470.19,-37.22&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;471.36,-40.52 479.35,-33.55 468.76,-34.02 471.36,-40.52&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Instance --&gt;
&lt;g id=&quot;node8&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Instance&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;636.68,-36.8 556.66,-36.8 556.66,0 636.68,0 636.68,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;596.67&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Type Check&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;596.67&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;instanceof&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Ops&amp;#45;&amp;gt;Instance --&gt;
&lt;g id=&quot;edge7&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Ops-&gt;Instance&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M367.78,-80.12C412.07,-71.02 479.13,-56.31 545.73,-37.21&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;546.33,-40.68 554.96,-34.53 544.38,-33.96 546.33,-40.68&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_operators Pages: 1 --&gt;
&lt;svg width=&quot;240pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 240.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_operators&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 235.61,-172.97 235.61,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;114.31&quot; cy=&quot;-84.66&quot; rx=&quot;48.87&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.31&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Operators&lt;/text&gt;
&lt;/g&gt;
&lt;!-- DT --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;DT&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;181&quot; cy=&quot;-41.42&quot; rx=&quot;44.69&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;181&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Data Types&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;DT --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--DT&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M138.77,-68.8C144.71,-64.95 151.07,-60.83 156.99,-56.98&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;129.37&quot; y=&quot;-54.79&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- VAR --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;VAR&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;71.15&quot; cy=&quot;-18&quot; rx=&quot;38.27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;71.15&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Variables&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;VAR --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--VAR&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M102.75,-66.79C96.45,-57.08 88.7,-45.1 82.45,-35.45&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;72.34&quot; y=&quot;-53.82&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- CTRL --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;CTRL&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;48.09&quot; cy=&quot;-128.51&quot; rx=&quot;48.09&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;48.09&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Control Flow&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;CTRL --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--CTRL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M90.03,-100.74C84.13,-104.65 77.82,-108.83 71.93,-112.72&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;101.24&quot; y=&quot;-109.43&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- STR --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;STR&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;158.16&quot; cy=&quot;-150.97&quot; rx=&quot;73.45&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;158.16&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;String Concatenation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;STR --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--STR&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M126.06,-102.43C132.35,-111.94 140.08,-123.63 146.38,-133.15&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;122.46&quot; y=&quot;-120.49&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Operator precedence&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;*&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;/&lt;/code&gt; before &lt;code class=&quot;notranslate&quot;&gt;+&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;-&lt;/code&gt; (standard math precedence)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Short-circuit evaluation&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;&amp;#x26;&amp;#x26;&lt;/code&gt; stops if left is false; &lt;code class=&quot;notranslate&quot;&gt;||&lt;/code&gt; stops if left is true&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type promotion&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;int + double&lt;/code&gt; promotes to &lt;code class=&quot;notranslate&quot;&gt;double&lt;/code&gt; automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;String concatenation&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;+&lt;/code&gt; is overloaded for string concatenation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-data-types&quot; class=&quot;internal alias&quot; data-slug=&quot;java-data-types&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Data Types&lt;/a&gt; — operators behave differently on different types&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-control-flow&quot; class=&quot;internal alias&quot; data-slug=&quot;java-control-flow&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Control Flow&lt;/a&gt; — relational and logical operators drive conditionals&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-loops&quot; class=&quot;internal alias&quot; data-slug=&quot;java-loops&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Loops&lt;/a&gt; — comparison operators control loop termination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-variables&quot; class=&quot;internal alias&quot; data-slug=&quot;java-variables&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Variables&lt;/a&gt; — assignment operators modify variable values&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Integer division truncates&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;5 / 2&lt;/code&gt; = 2 (not 2.5); use &lt;code class=&quot;notranslate&quot;&gt;5 / 2.0&lt;/code&gt; for floating-point&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;String + int concatenates&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;&quot;Result: &quot; + 42&lt;/code&gt; = “Result: 42” (not “Result: 0”)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;== compares references for objects&lt;/strong&gt;: Use &lt;code class=&quot;notranslate&quot;&gt;.equals()&lt;/code&gt; for value comparison&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bitwise vs logical&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;&amp;#x26;&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;|&lt;/code&gt; do not short-circuit; &lt;code class=&quot;notranslate&quot;&gt;&amp;#x26;&amp;#x26;&lt;/code&gt; and &lt;code class=&quot;notranslate&quot;&gt;||&lt;/code&gt; do&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>Overloading vs Overriding — Compile-Time vs Runtime Polymorphism</title>
    <link href="https://animishraa05.github.io/wiki/java/java-overloading-vs-overriding" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-overloading-vs-overriding.md" />
    <summary>What’s Being Compared Two forms of polymorphism in Java: Method Overloading (compile-time polymorphism) and Method Overriding (runtime polymorphism).</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;whats-being-compared&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;What’s Being Compared&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#whats-being-compared&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Two forms of polymorphism in Java: &lt;strong&gt;Method Overloading&lt;/strong&gt; (compile-time polymorphism) and &lt;strong&gt;Method Overriding&lt;/strong&gt; (runtime polymorphism). Both allow multiple methods with the same name, but their mechanisms, purposes, and resolution times are fundamentally different.&lt;/p&gt;
&lt;h2 id=&quot;the-core-tension&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Core Tension&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-core-tension&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The distinction is &lt;strong&gt;when&lt;/strong&gt; the method call is resolved: overloading at compile time (compiler picks the version based on static types), overriding at runtime (JVM picks the version based on the actual object type). This affects everything from performance (compile-time is faster) to flexibility (runtime enables polymorphic behavior).&lt;/p&gt;
&lt;h2 id=&quot;comparison&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Comparison&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#comparison&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;../../java-compile-time-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-compile-time-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Overloading (Compile-Time)&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;../../java-runtime-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-runtime-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Overriding (Runtime)&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Resolution time&lt;/td&gt;
&lt;td&gt;Compile time&lt;/td&gt;
&lt;td&gt;Runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alternative name&lt;/td&gt;
&lt;td&gt;Static polymorphism, early binding&lt;/td&gt;
&lt;td&gt;Dynamic polymorphism, late binding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parameter requirement&lt;/td&gt;
&lt;td&gt;Must differ (different type/count)&lt;/td&gt;
&lt;td&gt;Must be identical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Return type&lt;/td&gt;
&lt;td&gt;Can differ freely&lt;/td&gt;
&lt;td&gt;Must be same or covariant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class requirement&lt;/td&gt;
&lt;td&gt;Same class&lt;/td&gt;
&lt;td&gt;Different classes (inheritance)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keyword&lt;/td&gt;
&lt;td&gt;None (automatic)&lt;/td&gt;
&lt;td&gt;@Override (optional, recommended)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can be static?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (static methods are hidden, not overridden)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can be private?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (private methods are not inherited)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can be final?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (final methods cannot be overridden)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Faster (resolved at compile time)&lt;/td&gt;
&lt;td&gt;Slightly slower (vtable lookup)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use case&lt;/td&gt;
&lt;td&gt;API convenience, type flexibility&lt;/td&gt;
&lt;td&gt;Polymorphic behavior, substitution&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;when-to-choose-overloading&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;When to Choose Overloading&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#when-to-choose-overloading&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;You want a convenient API where similar operations accept different types (print(int), print(String), print(boolean))&lt;/li&gt;
&lt;li&gt;The behavior variation is based on input types, not object type&lt;/li&gt;
&lt;li&gt;Performance matters and the variation is known at compile time&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;when-to-choose-overriding&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;When to Choose Overriding&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#when-to-choose-overriding&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;You need polymorphic behavior — code written against a base type should work with any subtype&lt;/li&gt;
&lt;li&gt;Different subclasses need different implementations of the same contract&lt;/li&gt;
&lt;li&gt;You’re designing an interface or abstract class that subclasses will implement&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-insight&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Insight&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-insight&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Overloading and overriding serve completely different purposes despite both involving “same method name.” Overloading is about &lt;strong&gt;API convenience&lt;/strong&gt; — giving the developer a clean API that works with multiple input types. Overriding is about &lt;strong&gt;behavioral substitution&lt;/strong&gt; — enabling the Liskov Substitution Principle where subtypes can replace their parent types. The only thing they share is the method name reuse, and they can coexist: a method can be both overloaded (in its class) and overridden (by subclasses).&lt;/p&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../../java-compile-time-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-compile-time-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Compile-Time Polymorphism&lt;/a&gt; — overloading mechanism&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-runtime-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-runtime-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Runtime Polymorphism&lt;/a&gt; — overriding mechanism&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-polymorphism&quot; class=&quot;internal alias&quot; data-slug=&quot;java-polymorphism&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Polymorphism&lt;/a&gt; — the parent concept of both&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../../java-methods&quot; class=&quot;internal alias&quot; data-slug=&quot;java-methods&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Methods&lt;/a&gt; — the method declaration is the common foundation&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-packages</title>
    <link href="https://animishraa05.github.io/wiki/java/java-packages" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-packages.md" />
    <summary>The Problem As projects grow, name collisions become inevitable — two developers may independently create a Customer class.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;As projects grow, name collisions become inevitable — two developers may independently create a &lt;code class=&quot;notranslate&quot;&gt;Customer&lt;/code&gt; class. Without a namespace system, large applications become unmanageable, with naming conflicts and no logical organization of related classes.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;A &lt;strong&gt;package&lt;/strong&gt; is a named namespace that organizes related classes and interfaces. The &lt;code class=&quot;notranslate&quot;&gt;package&lt;/code&gt; declaration at the top of a file specifies which package the class belongs to. The &lt;code class=&quot;notranslate&quot;&gt;import&lt;/code&gt; statement allows referencing classes from other packages without fully qualifying their names.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Packages map to directory structure: &lt;code class=&quot;notranslate&quot;&gt;com.example.myapp&lt;/code&gt; corresponds to &lt;code class=&quot;notranslate&quot;&gt;com/example/myapp/&lt;/code&gt;. The fully qualified class name (e.g., &lt;code class=&quot;notranslate&quot;&gt;java.util.ArrayList&lt;/code&gt;) uniquely identifies every class. The compiler and JVM use the package name to locate &lt;code class=&quot;notranslate&quot;&gt;.class&lt;/code&gt; files. Package-private (default) access restricts visibility to classes within the same package.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_packages Pages: 1 --&gt;
&lt;svg width=&quot;279pt&quot; height=&quot;217pt&quot; viewBox=&quot;0.00 0.00 279.00 217.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 213)&quot;&gt;
&lt;title&gt;java_packages&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-213 274.7,-213 274.7,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- App --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;App&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;185.71,-209 59,-209 59,-173 185.71,-173 185.71,-209&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;122.35&quot; y=&quot;-187.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;com.example.myapp&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Model --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Model&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;82.7,-51.2 0,-51.2 0,0 82.7,0 82.7,-51.2&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;41.35&quot; y=&quot;-36.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;model&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;41.35&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;User.java&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;41.35&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Product.java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- App&amp;#45;&amp;gt;Model --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;App-&gt;Model&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M94.93,-172.64C82.44,-163.29 68.62,-150.67 60.35,-136 47.84,-113.79 43.18,-85.34 41.61,-63.01&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;45.11,-62.96 41.1,-53.16 38.12,-63.32 45.11,-62.96&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Service --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Service&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;175.7,-136 69,-136 69,-99.2 175.7,-99.2 175.7,-136&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;122.35&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;service&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;122.35&quot; y=&quot;-106.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;UserService.java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- App&amp;#45;&amp;gt;Service --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;App-&gt;Service&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M122.35,-172.72C122.35,-165.25 122.35,-156.31 122.35,-147.87&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;125.85,-147.98 122.35,-137.98 118.85,-147.98 125.85,-147.98&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Util --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Util&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;270.7,-136 194,-136 194,-99.2 270.7,-99.2 270.7,-136&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;232.35&quot; y=&quot;-121.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;util&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;232.35&quot; y=&quot;-106.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Helper.java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- App&amp;#45;&amp;gt;Util --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;App-&gt;Util&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M149.26,-172.53C163.14,-163.53 180.28,-152.4 195.38,-142.6&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;197.2,-145.59 203.69,-137.21 193.39,-139.71 197.2,-145.59&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Service&amp;#45;&amp;gt;Model --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Service-&gt;Model&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M106.35,-98.82C96.36,-87.72 83.2,-73.1 71.33,-59.91&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;74.06,-57.71 64.77,-52.62 68.86,-62.4 74.06,-57.71&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;105.5&quot; y=&quot;-72.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;imports&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JavaUtil --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;JavaUtil&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;222.04,-44 100.67,-44 100.67,-7.2 222.04,-7.2 222.04,-44&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;161.35&quot; y=&quot;-29.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;java.util (external)&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;161.35&quot; y=&quot;-14.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;ArrayList, HashMap&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Service&amp;#45;&amp;gt;JavaUtil --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Service-&gt;JavaUtil&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M130.06,-98.82C135.51,-86.25 142.92,-69.13 149.17,-54.72&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;152.3,-56.3 153.06,-45.73 145.87,-53.52 152.3,-56.3&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;158.24&quot; y=&quot;-72.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;imports&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_packages Pages: 1 --&gt;
&lt;svg width=&quot;255pt&quot; height=&quot;177pt&quot; viewBox=&quot;0.00 0.00 255.00 177.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 172.97)&quot;&gt;
&lt;title&gt;semantic_packages&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-172.97 250.88,-172.97 250.88,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;118.87&quot; cy=&quot;-84.66&quot; rx=&quot;48.4&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;118.87&quot; y=&quot;-80.76&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Packages&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ACCESS --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ACCESS&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;185.55&quot; cy=&quot;-41.42&quot; rx=&quot;61.33&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;185.55&quot; y=&quot;-38.12&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Access Modifiers&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ACCESS --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ACCESS&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M143.32,-68.8C148.67,-65.33 154.36,-61.65 159.76,-58.14&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;170.05&quot; y=&quot;-66.17&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- OOP --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;OOP&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;75.71&quot; cy=&quot;-18&quot; rx=&quot;48.48&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;75.71&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;OOP in Java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;OOP --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--OOP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M107.3,-66.79C101.11,-57.23 93.5,-45.48 87.31,-35.91&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;78.8&quot; y=&quot;-54.05&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ENCAP --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;ENCAP&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;52.65&quot; cy=&quot;-128.51&quot; rx=&quot;52.65&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;52.65&quot; y=&quot;-125.21&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Encapsulation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;ENCAP --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--ENCAP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M94.96,-100.49C89.18,-104.32 83,-108.41 77.19,-112.26&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;65.81&quot; y=&quot;-98.27&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COLL --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COLL&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;162.71&quot; cy=&quot;-150.97&quot; rx=&quot;43.18&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;162.71&quot; y=&quot;-147.67&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Collections&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COLL --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COLL&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M130.62,-102.43C137.01,-112.09 144.88,-124.01 151.23,-133.61&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;127.17&quot; y=&quot;-120.72&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Naming convention&lt;/strong&gt;: Reversed domain name (com.example.project), all lowercase&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Directory structure&lt;/strong&gt;: Must match package hierarchy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;import&lt;/strong&gt;: Two forms — explicit (&lt;code class=&quot;notranslate&quot;&gt;import java.util.ArrayList&lt;/code&gt;) and wildcard (&lt;code class=&quot;notranslate&quot;&gt;import java.util.*&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static import&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;import static&lt;/code&gt; allows accessing static members without class name&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-access-modifiers&quot; class=&quot;internal alias&quot; data-slug=&quot;java-access-modifiers&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Access Modifiers&lt;/a&gt; — package-private access is tied to package boundaries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-encapsulation&quot; class=&quot;internal alias&quot; data-slug=&quot;java-encapsulation&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Encapsulation&lt;/a&gt; — packages group related classes with controlled visibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-collections-framework&quot; class=&quot;internal alias&quot; data-slug=&quot;java-collections-framework&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Collections Framework&lt;/a&gt; — the collection classes are organized in &lt;code class=&quot;notranslate&quot;&gt;java.util&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-interfaces&quot; class=&quot;internal alias&quot; data-slug=&quot;java-interfaces&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Interfaces&lt;/a&gt; — packages organize both classes and interfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Default package&lt;/strong&gt;: Classes without a package declaration are in the unnamed (default) package — cannot be imported by classes in named packages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Import ordering&lt;/strong&gt;: No functional impact — pure style convention&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Package and module&lt;/strong&gt;: Java 9+ modules add another layer of encapsulation above packages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wildcard import does not import subpackages&lt;/strong&gt;: &lt;code class=&quot;notranslate&quot;&gt;import java.*&lt;/code&gt; does not import &lt;code class=&quot;notranslate&quot;&gt;java.util.*&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry><entry>
    <title>java-platform-independence</title>
    <link href="https://animishraa05.github.io/wiki/java/java-platform-independence" />
    <link rel="alternate" type="text/markdown" href="https://animishraa05.github.io/wiki/java/java-platform-independence.md" />
    <summary>The Problem Traditional compiled languages like C and C++ produce machine code specific to a particular CPU architecture and operating system.</summary>
    <published>2026-05-13T00:00:00.000Z</published>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <publishedTime>May 13, 2026</publishedTime>
    <updatedTime>May 13, 2026</updatedTime>
    <category term="dev" label="dev" />
<category term="java" label="java" />
    <author>
      <name>Animesh Mishra</name>
      <email>animesh.mishra818@gmail.com</email>
    </author>
    <content type="html">&lt;h2 id=&quot;the-problem&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;The Problem&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#the-problem&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Traditional compiled languages like C and C++ produce machine code specific to a particular CPU architecture and operating system. Developers had to recompile and redistribute their software for every target platform — Windows, Linux, macOS, each with different binaries. This created distribution nightmares, increased maintenance costs, and made cross-platform deployment error-prone.&lt;/p&gt;
&lt;h2 id=&quot;core-idea&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Core Idea&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#core-idea&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;Java achieves platform independence by compiling source code into an intermediate representation called &lt;strong&gt;bytecode&lt;/strong&gt;, which runs on the &lt;strong&gt;Java Virtual Machine (JVM)&lt;/strong&gt; — a software-based execution environment that abstracts away the underlying hardware and OS. Any device with a JVM implementation can run the same Java bytecode without recompilation.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;How It Works&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#how-it-works&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p dir=&quot;auto&quot;&gt;The Java compiler (javac) translates &lt;code class=&quot;notranslate&quot;&gt;.java&lt;/code&gt; source files into &lt;code class=&quot;notranslate&quot;&gt;.class&lt;/code&gt; files containing bytecode. At runtime, the JVM loads these class files, verifies the bytecode for safety, and either interprets it or compiles it to native machine code using a Just-In-Time (JIT) compiler. Each platform has its own JVM implementation, but all JVMs understand the same bytecode format.&lt;/p&gt;
&lt;h2 id=&quot;visual-explanation&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Visual Explanation&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#visual-explanation&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: java_platform Pages: 1 --&gt;
&lt;svg width=&quot;298pt&quot; height=&quot;455pt&quot; viewBox=&quot;0.00 0.00 298.00 455.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 451.4)&quot;&gt;
&lt;title&gt;java_platform&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-451.4 294.02,-451.4 294.02,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- Source --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Source&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;198.03,-447.4 111.99,-447.4 111.99,-410.6 198.03,-410.6 198.03,-447.4&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;155.01&quot; y=&quot;-432.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Source Code&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;155.01&quot; y=&quot;-418.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Hello.java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Compiler --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Compiler&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;202.69,-362.6 107.33,-362.6 107.33,-326.6 202.69,-326.6 202.69,-362.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;155.01&quot; y=&quot;-341&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;javac Compiler&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Source&amp;#45;&amp;gt;Compiler --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Source-&gt;Compiler&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M155.01,-410.12C155.01,-399.61 155.01,-386.09 155.01,-374.14&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;158.51,-374.39 155.01,-364.39 151.51,-374.39 158.51,-374.39&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;190.02&quot; y=&quot;-383.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;javac Hello.java&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Bytecode --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Bytecode&lt;/title&gt;
&lt;polygon fill=&quot;#d4edda&quot; stroke=&quot;black&quot; points=&quot;192.02,-278.6 118,-278.6 118,-241.8 192.02,-241.8 192.02,-278.6&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;155.01&quot; y=&quot;-263.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Bytecode&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;155.01&quot; y=&quot;-249.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Hello.class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Compiler&amp;#45;&amp;gt;Bytecode --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Compiler-&gt;Bytecode&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M155.01,-326.13C155.01,-315.71 155.01,-302.22 155.01,-290.24&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;158.51,-290.45 155.01,-280.45 151.51,-290.45 158.51,-290.45&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;189.75&quot; y=&quot;-299.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;produces .class&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JVM --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;JVM&lt;/title&gt;
&lt;polygon fill=&quot;#ffe5cc&quot; stroke=&quot;black&quot; points=&quot;218.7,-193.8 91.31,-193.8 91.31,-157.8 218.7,-157.8 218.7,-193.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;155.01&quot; y=&quot;-172.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Java Virtual Machine&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Bytecode&amp;#45;&amp;gt;JVM --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Bytecode-&gt;JVM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M155.01,-241.32C155.01,-230.81 155.01,-217.29 155.01,-205.34&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;158.51,-205.59 155.01,-195.59 151.51,-205.59 158.51,-205.59&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;192.52&quot; y=&quot;-214.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;runs on any JVM&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Win --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Win&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;92.01,-109.8 0,-109.8 0,-73.8 92.01,-73.8 92.01,-109.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;46.01&quot; y=&quot;-88.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Windows JVM&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JVM&amp;#45;&amp;gt;Win --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;JVM-&gt;Win&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M90.85,-163.86C76.98,-158.67 63.63,-151.04 54.1,-139.8 49.7,-134.62 47.29,-127.94 46.05,-121.25&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;49.58,-121.33 45.06,-111.75 42.61,-122.05 49.58,-121.33&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;101.05&quot; y=&quot;-130.8&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;10.00&quot;&gt;platform-specific impl&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Linux --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Linux&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;186.02,-109.8 114,-109.8 114,-73.8 186.02,-73.8 186.02,-109.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;150.01&quot; y=&quot;-88.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Linux JVM&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JVM&amp;#45;&amp;gt;Linux --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;JVM-&gt;Linux&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M153.95,-157.41C153.31,-146.97 152.48,-133.44 151.75,-121.46&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;155.26,-121.44 151.16,-111.68 148.27,-121.87 155.26,-121.44&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- Mac --&gt;
&lt;g id=&quot;node7&quot; class=&quot;node&quot;&gt;
&lt;title&gt;Mac&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;289.68,-109.8 206.34,-109.8 206.34,-73.8 289.68,-73.8 289.68,-109.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;248.01&quot; y=&quot;-88.2&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;macOS JVM&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JVM&amp;#45;&amp;gt;Mac --&gt;
&lt;g id=&quot;edge6&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;JVM-&gt;Mac&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M174.73,-157.41C187.8,-145.89 205.15,-130.59 219.69,-117.77&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;221.99,-120.4 227.18,-111.17 217.36,-115.15 221.99,-120.4&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- WinExec --&gt;
&lt;g id=&quot;node8&quot; class=&quot;node&quot;&gt;
&lt;title&gt;WinExec&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;87.02,-36.8 4.99,-36.8 4.99,0 87.02,0 87.02,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;46.01&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Windows&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;46.01&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Native Code&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Win&amp;#45;&amp;gt;WinExec --&gt;
&lt;g id=&quot;edge7&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Win-&gt;WinExec&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M46.01,-73.52C46.01,-66.05 46.01,-57.11 46.01,-48.67&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;49.51,-48.78 46.01,-38.78 42.51,-48.78 49.51,-48.78&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- LinuxExec --&gt;
&lt;g id=&quot;node9&quot; class=&quot;node&quot;&gt;
&lt;title&gt;LinuxExec&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;190.02,-36.8 107.99,-36.8 107.99,0 190.02,0 190.02,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;149.01&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Linux&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;149.01&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Native Code&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Linux&amp;#45;&amp;gt;LinuxExec --&gt;
&lt;g id=&quot;edge8&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Linux-&gt;LinuxExec&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M149.76,-73.52C149.66,-66.05 149.54,-57.11 149.42,-48.67&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;152.92,-48.73 149.28,-38.78 145.92,-48.83 152.92,-48.73&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;!-- MacExec --&gt;
&lt;g id=&quot;node10&quot; class=&quot;node&quot;&gt;
&lt;title&gt;MacExec&lt;/title&gt;
&lt;polygon fill=&quot;#f0f4ff&quot; stroke=&quot;black&quot; points=&quot;290.02,-36.8 207.99,-36.8 207.99,0 290.02,0 290.02,-36.8&quot;&gt;&lt;/polygon&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;249.01&quot; y=&quot;-22&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;macOS&lt;/text&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;249.01&quot; y=&quot;-7.6&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;12.00&quot;&gt;Native Code&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Mac&amp;#45;&amp;gt;MacExec --&gt;
&lt;g id=&quot;edge9&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;Mac-&gt;MacExec&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M248.25,-73.52C248.35,-66.05 248.48,-57.11 248.6,-48.67&quot;&gt;&lt;/path&gt;
&lt;polygon fill=&quot;black&quot; stroke=&quot;black&quot; points=&quot;252.09,-48.83 248.74,-38.78 245.1,-48.73 252.09,-48.83&quot;&gt;&lt;/polygon&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;semantic-network&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Semantic Network&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#semantic-network&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;graphviz-container&quot; style=&quot;display: flex; justify-content: center; margin: 1.5rem 0; overflow-x: auto;&quot; dir=&quot;auto&quot;&gt;&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?--&gt;

&lt;!-- Generated by graphviz version 15.1.0 (0)
 --&gt;
&lt;!-- Title: semantic_java_platform Pages: 1 --&gt;
&lt;svg width=&quot;255pt&quot; height=&quot;194pt&quot; viewBox=&quot;0.00 0.00 255.00 194.00&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
&lt;g id=&quot;graph0&quot; class=&quot;graph&quot; transform=&quot;scale(1 1) rotate(0) translate(4 189.56)&quot;&gt;
&lt;title&gt;semantic_java_platform&lt;/title&gt;
&lt;polygon fill=&quot;white&quot; stroke=&quot;none&quot; points=&quot;-4,4 -4,-189.56 251.3,-189.56 251.3,4 -4,4&quot;&gt;&lt;/polygon&gt;
&lt;!-- THIS --&gt;
&lt;g id=&quot;node1&quot; class=&quot;node&quot;&gt;
&lt;title&gt;THIS&lt;/title&gt;
&lt;ellipse fill=&quot;#ffd700&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; cx=&quot;118.12&quot; cy=&quot;-86.38&quot; rx=&quot;99.6&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;118.12&quot; y=&quot;-82.48&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;13.00&quot;&gt;Platform Independence&lt;/text&gt;
&lt;/g&gt;
&lt;!-- JVM --&gt;
&lt;g id=&quot;node2&quot; class=&quot;node&quot;&gt;
&lt;title&gt;JVM&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;169.98&quot; cy=&quot;-23.83&quot; rx=&quot;27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;169.98&quot; y=&quot;-20.53&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;JVM&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;JVM --&gt;
&lt;g id=&quot;edge1&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--JVM&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M133.12,-68.29C140.54,-59.34 149.42,-48.63 156.6,-39.96&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;126.35&quot; y=&quot;-56.83&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- BYTE --&gt;
&lt;g id=&quot;node3&quot; class=&quot;node&quot;&gt;
&lt;title&gt;BYTE&lt;/title&gt;
&lt;ellipse fill=&quot;#cce5ff&quot; stroke=&quot;black&quot; cx=&quot;74.36&quot; cy=&quot;-18&quot; rx=&quot;38.27&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;74.36&quot; y=&quot;-14.7&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Bytecode&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;BYTE --&gt;
&lt;g id=&quot;edge2&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--BYTE&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M106.39,-68.05C99.91,-57.93 91.9,-45.41 85.51,-35.43&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;77.45&quot; y=&quot;-54.44&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;built from&lt;/text&gt;
&lt;/g&gt;
&lt;!-- PORT --&gt;
&lt;g id=&quot;node4&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PORT&lt;/title&gt;
&lt;ellipse fill=&quot;#d4edda&quot; stroke=&quot;black&quot; cx=&quot;39.78&quot; cy=&quot;-107.72&quot; rx=&quot;39.78&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;39.78&quot; y=&quot;-104.42&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Portability&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;PORT --&gt;
&lt;g id=&quot;edge3&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--PORT&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M62.02,-101.66C61.92,-101.69 61.82,-101.72 61.72,-101.74&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;82.13&quot; y=&quot;-104.4&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;builds into&lt;/text&gt;
&lt;/g&gt;
&lt;!-- COMP --&gt;
&lt;g id=&quot;node5&quot; class=&quot;node&quot;&gt;
&lt;title&gt;COMP&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;193.91&quot; cy=&quot;-115.84&quot; rx=&quot;53.39&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;193.91&quot; y=&quot;-112.54&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;Java Compiler&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;COMP --&gt;
&lt;g id=&quot;edge4&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--COMP&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M160.88,-103C161.02,-103.05 161.15,-103.11 161.29,-103.16&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;147.33&quot; y=&quot;-94.98&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- PERF --&gt;
&lt;g id=&quot;node6&quot; class=&quot;node&quot;&gt;
&lt;title&gt;PERF&lt;/title&gt;
&lt;ellipse fill=&quot;#f0f0f0&quot; stroke=&quot;black&quot; cx=&quot;114.29&quot; cy=&quot;-167.56&quot; rx=&quot;57.17&quot; ry=&quot;18&quot;&gt;&lt;/ellipse&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;114.29&quot; y=&quot;-164.26&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;11.00&quot;&gt;JIT Compilation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- THIS&amp;#45;&amp;#45;PERF --&gt;
&lt;g id=&quot;edge5&quot; class=&quot;edge&quot;&gt;
&lt;title&gt;THIS--PERF&lt;/title&gt;
&lt;path fill=&quot;none&quot; stroke=&quot;black&quot; d=&quot;M117.25,-104.8C116.62,-118.09 115.78,-135.95 115.15,-149.22&quot;&gt;&lt;/path&gt;
&lt;text xml:space=&quot;preserve&quot; text-anchor=&quot;middle&quot; x=&quot;102.44&quot; y=&quot;-129.71&quot; font-family=&quot;Helvetica,sans-Serif&quot; font-size=&quot;9.00&quot;&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id=&quot;key-properties&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Key Properties&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#key-properties&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Same bytecode, any JVM&lt;/strong&gt;: The &lt;code class=&quot;notranslate&quot;&gt;.class&lt;/code&gt; file is identical across platforms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JIT compilation&lt;/strong&gt;: Hot methods are compiled to native code at runtime for performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security layer&lt;/strong&gt;: Bytecode verifier checks for illegal code before execution&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory overhead&lt;/strong&gt;: JVM adds ~20-40 MB baseline memory per process&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;connections&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Connections&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#connections&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-memory-management&quot; class=&quot;internal alias&quot; data-slug=&quot;java-memory-management&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Memory Management&lt;/a&gt; — the JVM manages stack, heap, and method area memory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built from:&lt;/strong&gt; &lt;a href=&quot;../../java-garbage-collection&quot; class=&quot;internal alias&quot; data-slug=&quot;java-garbage-collection&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Garbage Collection&lt;/a&gt; — JVM automates memory reclamation as part of its runtime services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Builds into:&lt;/strong&gt; &lt;a href=&quot;../../java-program-structure&quot; class=&quot;internal alias&quot; data-slug=&quot;java-program-structure&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Program Structure&lt;/a&gt; — every Java program compiles to platform-independent bytecode before running&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&quot;../../java-program-structure&quot; class=&quot;internal alias&quot; data-slug=&quot;java-program-structure&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;Java Program Structure&lt;/a&gt; — the compile-and-run workflow depends on platform-independent bytecode&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;edge-cases--gotchas&quot; dir=&quot;auto&quot;&gt;&lt;span class=&quot;highlight-span&quot;&gt;Edge Cases &amp;#x26; Gotchas&lt;/span&gt;&lt;a data-role=&quot;anchor&quot; data-no-popover href=&quot;#edge-cases--gotchas&quot; class=&quot;internal&quot;&gt;&lt;span class=&quot;indicator-hook&quot;&gt;&lt;/span&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;use href=&quot;#github-anchor&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul dir=&quot;auto&quot;&gt;
&lt;li&gt;&lt;strong&gt;JVM version mismatch&lt;/strong&gt;: Bytecode compiled for Java 17 may not run on Java 8 (must target older versions)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Platform-specific code&lt;/strong&gt;: Native methods via JNI break platform independence&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JVM fragmentation&lt;/strong&gt;: Different vendors have different performance characteristics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not all JVMs are equal&lt;/strong&gt;: Embedded vs server JVMs have different startup and optimization profiles&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry>
</feed>