Chapter 1 Introduction
1.1 Introduction to Java
Java is a high-level, network-centric, and object-oriented programming language.1 First
released by Sun Microsystems in 1995, it is now maintained by Oracle Corporation and serves
as a foundational technology for modern enterprise computing.1 Java’s design is built upon
the principle of "Write Once, Run Anywhere" (WORA).1
This WORA capability is achieved through a two-step process. First, Java source code
($.java$) is compiled into platform-independent bytecode ($.class$). This bytecode is not
machine code for any specific processor. Instead, it is executed by a Java Virtual Machine
(JVM), which acts as an abstraction layer, translating the generic bytecode into native
machine instructions for the underlying operating system and hardware.6
It is this principle of cross-platform consistency that established Java as the dominant
language for enterprise applications. The ability to write and compile a single application and
deploy it without modification across a diverse ecosystem of servers (e.g., Windows, Linux,
macOS) provides an immense economic advantage. This "cross-platform consistency
reduces... costs, ensures wider market reach, and simplifies maintenance". This technical and
economic robustness is the reason Java is utilized by over 90% of Fortune 500 companies
and why it was selected as the foundational language for this internship's core project.
1.2 Objective of Internship Training
The primary objective of the internship was to move beyond academic theory and engage in
the practical application of software engineering principles. The training was structured to
build a hierarchical understanding of modern Java development, with each concept serving as
a foundation for the next.
The objectives were not a simple checklist but a deliberate learning progression:
1. To Learn the Paradigm: First, to gain a deep, practical understanding of
Object-Oriented Programming (OOP) principles and apply them in real-time application
design. This establishes the philosophy of how to structure code.
2. To Learn the Structures: Second, to work with the Java Collection Framework (JCF) for
efficient data handling. This provides the tools for managing data within the OOP
paradigm.
3. To Learn the Performance: Third, to implement Multithreading concepts for concurrent
execution. This provides the techniques for building responsive and high-performance
applications.
4. To Achieve Synthesis: Finally, to integrate all these concepts by designing and building
a functional, end-to-end Banking Application. This project served as the capstone,
proving mastery over the constituent parts.
This structured approach ensures that the "how" (the code) is always informed by the "why"
(the computer science principles).
1.3 Tools and Technology Used
The training utilized a stack of technologies and tools standard in the professional Java
development industry.
1.3.1 Core Technologies
The technical curriculum was focused on the Java SE (Standard Edition) platform,
encompassing:
● Core Java: The foundational syntax, keywords, and core libraries of the language.
● Object-Oriented Programming (OOP) Concepts: The design paradigm that underpins
all of Java.
● Java Collection Framework (JCF): The set of interfaces and classes used for data
storage and manipulation.
● Java Multithreading: The mechanisms for achieving concurrent execution within a Java
application.
1.3.2 Integrated Development Environments (IDEs)
Exposure was provided to the three most prominent IDEs in the Java ecosystem. This was
significant as it offered a comprehensive view of the development landscape, from mature
enterprise systems to modern lightweight editors. The tools included IntelliJ IDEA , Visual
Studio Code , and Eclipse.
● IntelliJ IDEA: Developed by JetBrains, IntelliJ IDEA is the current top choice for
professional enterprise Java development. It is known for its powerful "smart code
completion," robust refactoring tools, deep integration with version control systems, and
a vast plugin marketplace. It represents the modern, productivity-focused standard.12
● Visual Studio Code (VS Code): A lightweight, free editor from Microsoft that has rapidly
gained popularity, overtaking Eclipse for the number two position in the Java space. Its
strengths lie in its speed, minimal footprint, and an extensive extension marketplace that
allows it to be configured for "multi-language coding".1 It represents the future of
lightweight, cloud-native, and polyglot development.
● Eclipse: The foundational, open-source IDE that was the long-time standard for Java
development. It remains "highly extensible" and is free for business use. It is a mature
and powerful tool still at the heart of many large-scale, established enterprise
applications.12
This exposure provided a strategic understanding of the toolchain: Eclipse as the established,
mature enterprise environment; IntelliJ IDEA as the modern enterprise standard; and VS Code
as the lightweight, multi-platform future.
A comparative summary of the IDEs used is presented in Table 1.1.
Table 1.1: Comparison of Java Development IDEs
IDE Key Feature Primary Use Case Cost Model
IntelliJ IDEA Advanced smart Professional, Commercial
code completion enterprise-grade (Ultimate) / Free
and refactoring Java development (Community)
VS Code Lightweight, fast, Multi-language Free
and multi-language coding,
support 1 cloud-native, and
web development
Eclipse Highly extensible Java-based Free
plugin ecosystem, enterprise projects,
mature Android
development
Chapter 2 Training Work Undertaken
This chapter details the theoretical and practical foundations of the key technologies
mastered during the internship. The work progressed from the core design philosophy (OOP)
to performance (Multithreading) and data management (Collections).
2.1 Object-Oriented Programming (OOP) Concepts
Java is, by definition, an object-oriented language. The training focused on moving beyond a
simple definition to a practical understanding of its four foundational pillars: Encapsulation,
Abstraction, Inheritance, and Polymorphism.16
1. Encapsulation: This is the mechanism of "binding the data with the code that
manipulates it". In practice, this is achieved by declaring class fields (data) as private and
providing public methods (getters and setters) to control access. The goal is to protect
an object's internal state from external interference and misuse, preventing tightly
coupled code.
2. Abstraction: This is the design principle of "hiding the complex implementation details
and showing only the essential features". While related to encapsulation, they are
distinct. Encapsulation is the implementation (hiding the data), while Abstraction is the
interface (hiding the complexity). For example, in a BankAccount class, encapsulation is
making the $balance variable private. Abstraction is providing a public void
transferMoney() method, which hides the complex internal logic of database lookups,
debits, credits, and logging from the end-user. This is achieved in Java using abstract
classes and interfaces.
3. Inheritance: This is the "mechanism by which one object acquires... properties of
another object". It is a primary driver of code reusability. In Java, this is implemented
using the extends keyword, where a subclass (or child class) inherits the fields and
methods of a superclass (or parent class).
4. Polymorphism: Literally "many forms," this is the ability to "process objects differently
based on their data type". It allows a single interface to represent multiple underlying
forms.
○ Static (Compile-Time) Polymorphism: Achieved via Method Overloading. This
involves having multiple methods in the same class with the same name but different
parameters (i.e., different type, number, or order of arguments).
○ Dynamic (Run-Time) Polymorphism: Achieved via Method Overriding. This occurs
when a subclass provides a specific implementation for a method that is already
defined in its superclass.
Practical Example: Inheritance and Polymorphism
To solidify these concepts, a practical example was implemented, modeling different
geometric shapes.19 A parent Shape class defines generic behaviors, and child classes
provide specific implementations.
Java
/* [Link] - Superclass */
class Shape {
void draw() {
[Link]("Drawing a generic shape");
}
void numberOfSides() {
[Link]("Side = 0");
}
}
/* [Link] - Subclass */
class Square extends Shape {
// Demonstrates Inheritance
@Override // Demonstrates Dynamic Polymorphism
void draw() {
[Link]("Drawing a SQUARE");
}
@Override
void numberOfSides() {
[Link]("Side = 4");
}
}
/* [Link] - Subclass */
class Pentagon extends Shape {
// Demonstrates Inheritance
@Override // Demonstrates Dynamic Polymorphism
void draw() {
[Link]("Drawing a PENTAGON");
}
@Override
void numberOfSides() {
[Link]("Side = 5");
}
}
/* Main execution class */
public class OopDemo {
public static void main(String args) {
Shape mySquare = new Square();
Shape myPentagon = new Pentagon();
[Link](); // Output: Drawing a SQUARE
[Link](); // Output: Side = 4
[Link](); // Output: Drawing a PENTAGON
[Link](); // Output: Side = 5
}
}
This code clearly demonstrates Inheritance (the Square and Pentagon classes extend Shape)
and Dynamic Polymorphism (when [Link]() is called, the JVM at runtime correctly
executes the draw() method from the Square class, not the Shape class).19
2.2 Java Multithreading
Multithreading is the capacity of a single program to execute multiple "threads" (lightweight
sub-processes) concurrently.20 This is essential for building high-performance, responsive
applications. For example, in a desktop application, one thread can handle the user interface
(UI) while another performs a long-running calculation, preventing the UI from "freezing."
There are two primary methods for creating a thread in Java:
1. extends Thread: A class can inherit directly from the [Link] class and override
its run() method.20
2. implements Runnable: A class can implement the [Link] interface, provide
an implementation for the run() method, and then be passed to the constructor of a
Thread object.20
During the training, a strong emphasis was placed on using the implements Runnable
approach, as this is the professional standard for enterprise development. The reason is
twofold.
First, Java only supports single inheritance. If a class extends Thread, it is "using" its only
inheritance slot and cannot extend any other class (e.g., class MyTask extends Applet could
not also extends Thread).22 Implementing the Runnable interface carries no such restriction.
Second, and more fundamentally, implements Runnable is a superior software design. It
separates the task (the "what") from the worker (the "how").22 The Runnable object is simply a
task, while the Thread object is the worker that executes it. This separation is the design
principle that enables Java's modern, high-level concurrency APIs. Frameworks like the
ExecutorService and ThreadPool (which are central to enterprise applications) are designed
to manage and execute pools of Runnable tasks, not Thread objects.22
Practical Example: Implementing Runnable
The following code demonstrates the creation and execution of a new thread using the
Runnable interface.25
Java
/*
* This class demonstrates creating a thread by
* implementing the Runnable interface.
*/
public class RunnableExample {
// 1. Create a class that implements the Runnable interface
private class MyRunnableTask implements Runnable {
// 2. Implement the run() method with the task's logic
@Override
public void run() {
// This code will be executed in the new thread
[Link]([Link]().getName()
+ ", executing the run() method!");
}
}
public static void main(String args) {
[Link]("Main thread is: "
+ [Link]().getName());
// 3. Instantiate the Runnable task
Runnable task = new RunnableExample().new MyRunnableTask();
// 4. Instantiate a Thread object and pass the task to it
Thread t1 = new Thread(task);
// 5. Start the new thread
[Link]();
}
}
Output:
Main thread is: main
Thread-0, executing the run() method!
This output confirms that two threads were active: the main thread and the new Thread-0
created by the [Link]() call. A critical distinction was made: calling [Link]() instructs the JVM
to create a new thread and execute the run() method within it. Calling [Link]() directly would
not create a new thread; it would simply execute the run() method's code within the existing
main thread.20
2.3 The Java Collection Framework (JCF)
The Java Collection Framework (JCF) is a "unified architecture for representing and
manipulating collections" of objects.26 It provides a set of high-performance, pre-built data
structures (classes) and the interfaces that define their behavior, eliminating the need for
developers to write these structures from scratch.26 The framework is built upon a hierarchy
of core interfaces:
● Collection: The root interface of the framework. It defines the basic operations for a
group of objects, such as add(), remove(), and size().26
● List: An ordered collection (a sequence) that allows duplicate elements.29
○ ArrayList: The most common implementation. It uses a dynamic array for storage,
providing fast random access (e.g., get(index)).27
○ LinkedList: An implementation that uses a doubly-linked list. It is slower for random
access but faster for adding or removing elements from the middle of the list.
● Set: A collection that does not allow duplicate elements.28
○ HashSet: An implementation that uses a hash table for storage. It offers fast
insertion and lookup, but does not guarantee any order.27
● Map: An object that maps keys to values. Keys must be unique. It is not a true Collection
(it does not inherit from the Collection interface) but is considered part of the
framework.26
○ HashMap: The most common implementation. It uses a hash table to store key-value
pairs, providing very fast (O(1) on average) lookup based on the key.30
The JCF is a perfect practical application of the OOP principles of abstraction and
polymorphism. Developers are encouraged to program against the interface (e.g., List), not
the concrete class (e.g., ArrayList).
Java
// Good Practice: Programming to the interface
List<String> names = new ArrayList<>();
This use of Abstraction (hiding the ArrayList's specific implementation behind the List
interface) enables Polymorphism. A method declared to accept a List can be passed any
object that implements List (e.g., ArrayList, LinkedList).
The power of this design is that the underlying data structure can be changed by modifying
only one line of code—the object's instantiation. If an application's performance profile
reveals that frequent insertions are a bottleneck, a developer can switch from ArrayList to
LinkedList with a single line change, and the rest of the application, which was coded to the
List interface, will function without modification.31
Practical Examples: ArrayList and HashMap
The following code snippets demonstrate the practical instantiation and use of the most
common List and Map implementations.27
ArrayList Example:
Java
/*
* Demonstrates using ArrayList to store and iterate
* over a list of strings.
*/
import [Link];
import [Link];
public class ArrayListExample {
public static void main(String args) {
// Creating a List using the ArrayList implementation
List<String> list = new ArrayList<>();
// Adding elements
[Link]("Java");
[Link]("Python");
[Link]("C++");
// Iterating using an enhanced for-loop
[Link]("Programming Languages:");
for (String lang : list) {
[Link](lang);
}
}
}
HashMap Example:
Java
/*
* Demonstrates using HashMap to store and iterate
* over key-value pairs.
*/
import [Link];
import [Link];
public class HashMapExample {
public static void main(String args) {
// Creating a Map using the HashMap implementation
Map<String, Integer> studentAges = new HashMap<>();
// Adding key-value pairs using put()
[Link]("John", 25);
[Link]("Jane", 30);
[Link]("Jim", 35);
// Iterating using [Link] and entrySet()
[Link]("Student Ages:");
for ([Link]<String, Integer> entry : [Link]()) {
[Link]([Link]() + " -> " + [Link]());
}
}
}
Chapter 3 Results and Discussion
This chapter provides a detailed analysis of the capstone project, a "Banking Application".
This project served as the synthesis of all theoretical concepts, requiring the practical
application of OOP design, data management, and secure database communication.
3.1 Project Architecture and Design
The project is a console-based application that simulates core banking functions: creating a
new user account, logging in, viewing account balance, and transferring money to another
user.
While a console application, its internal structure was deliberately designed to follow a
professional 3-Tier Architecture. This architecture separates concerns into distinct logical
layers, which is the standard for building scalable and maintainable enterprise software.
1. Presentation Layer ([Link]): This tier is responsible for all user interaction. In this
project, it consists of the main method which runs the console menu. It handles printing
prompts to the console ([Link]) and reading input from the user
(BufferedReader). It is the "face" of the application but contains no business logic.
2. Business Logic Layer (BLL) ([Link]): This is the "brain" of the
application. This layer contains all the core rules and logic that define the application's
behavior. Methods like loginAccount(), getBalance(), and transferMoney() reside here.
This layer is independent of the UI; it does not know if it is being called from a console, a
web page, or a mobile app.
3. Data Access Layer (DAL) ([Link] & SQL): This tier is responsible for all
communication with the database. It includes the [Link] class, which manages
the JDBC connection, and all the SQL queries required to create, read, update, and
delete data. This layer abstracts the database from the BLL.
This separation of concerns is a professional best practice. It ensures that a change in one
layer (e.g., migrating the database from MySQL to PostgreSQL) has minimal impact on the
other layers.
3.2 Database Implementation (Data Layer)
The application's persistence layer was implemented using a MySQL database named BANK.
A single table, customer, was created to store user information, account details, and balance.
The schema for this table is defined as follows:
Table 3.1: Database Schema for customer Table
Field Type Constraints Description
ac_no INT NOT NULL, Unique Account
AUTO_INCREMENT, Number (Primary
PRIMARY KEY Key)
cname VARCHAR(45) NOT NULL, UNIQUE Customer's chosen
username (Must be
unique)
balance INT DEFAULT 1000 Current account
balance, new
accounts start at
1000
pass_code INT NOT NULL Customer's secret
4-digit
PIN/password
*Source: Adapted from *
Communication with this database was managed by the [Link] class, which uses
Java Database Connectivity (JDBC). The core of this class is the getConnection() method.
[Link] (Snippet)
Java
package banking;
import [Link];
import [Link];
public class Connection {
static Connection con;
public static Connection getConnection() {
try {
String mysqlJDBCDriver = "[Link]";
String url = "jdbc:mysql://localhost:3306/BANK";
String user = "root";
String pass = "your_mysql_password"; // Password required
// 1. Load the MySQL JDBC Driver
[Link](mysqlJDBCDriver);
// 2. Establish the connection
con = [Link](url, user, pass);
} catch (Exception e) {
[Link]("Connection Failed! " + [Link]());
}
return con;
}
}
This method performs two critical JDBC operations:
1. [Link](): Dynamically loads the MySQL driver class into the JVM.
2. [Link](): Uses the loaded driver to establish an active session
with the database at the specified URL, using the provided credentials.
3.3 Business Logic Implementation (BLL)
The [Link] class contains the core logic. Two methods, in particular,
demonstrate critical security and data integrity principles: loginAccount and transferMoney.
3.3.1 Secure Querying with PreparedStatement
A common vulnerability in database applications is SQL Injection. This attack occurs when
user-provided input is insecurely concatenated into a SQL query string, allowing an attacker
to execute malicious SQL.
The loginAccount method was implemented to be immune to this attack by exclusively using
PreparedStatement.
[Link] (Login Snippet)
Java
public static boolean loginAccount(String name, int passCode) {
try {
// 1. The SQL query uses '?' as placeholders
String sql = "SELECT * FROM customer WHERE cname =? AND pass_code =?";
// 2. The query is "prepared" by the database
PreparedStatement ps = [Link](sql);
// 3. User input is supplied as parameters.
// The driver ensures this data is treated ONLY as text,
// not as executable SQL code.
[Link](1, name);
[Link](2, passCode);
// 4. The query is safely executed
ResultSet rs = [Link]();
if ([Link]()) {
// User found, login successful
return true;
}
//...
} catch (Exception e) {
//...
}
return false;
}
By using parameterized queries (?), the JDBC driver ensures that the user's input (name and
passCode) is always treated as literal data. Even if a user entered ' OR '1'='1' as their name, the
PreparedStatement would search for a username literally matching that string, rather than
executing the malicious logic. This demonstrates a non-negotiable secure coding practice for
any application that handles user data.
3.3.2 Atomic Transactions with transferMoney
The transferMoney method is the most critical operation in the application. It must perform
two separate database operations:
1. Debit: UPDATE the sender's account to decrease their balance.
2. Credit: UPDATE the receiver's account to increase their balance.
These two operations must be atomic—they must both succeed, or both fail together. If the
debit succeeds but the credit fails (e.g., due to a server crash), money would be "lost,"
violating the data integrity of the entire system.
This atomicity was achieved by implementing manual transaction management, a practical
application of the ACID (Atomicity, Consistency, Isolation, Durability) principles that govern
reliable database operations.
[Link] (Transfer Snippet)
Java
public static boolean transferMoney(int sender_ac, int receiver_ac, int amount) {
try {
// 1. Begin manual transaction
[Link](false);
// 2. Check sender balance (omitted for brevity)...
// 3. Operation 1: Debit Sender
String debit = "UPDATE customer SET balance = balance -? WHERE ac_no =?";
PreparedStatement psDebit = [Link](debit);
[Link](1, amount);
[Link](2, sender_ac);
[Link]();
// 4. Operation 2: Credit Receiver
String credit = "UPDATE customer SET balance = balance +? WHERE ac_no =?";
PreparedStatement psCredit = [Link](credit);
[Link](1, amount);
[Link](2, receiver_ac);
[Link]();
// 5. If both operations succeed, make changes permanent
[Link]();
return true;
} catch (Exception e) {
try {
// 6. If ANY exception occurs, undo all changes
[Link]();
} catch (SQLException ex) {
[Link]();
}
[Link]();
}
return false;
}
The logic flow is as follows:
1. [Link](false): Disables the default JDBC behavior of committing after every
single statement. This marks the beginning of the transaction.
2. [Link](): If both executeUpdate() calls succeed without throwing an exception,
commit() is called to make the changes permanent in the database.
3. [Link](): If any Exception is caught (e.g., a SQL error, a network failure), the catch
block executes rollback(), which instantly undoes all changes made since
setAutoCommit(false) was called. This ensures the database is left in a consistent state
and money is neither created nor destroyed.
This implementation of ACID principles is the bedrock of any reliable financial application.
3.4 Application Execution (Presentation Layer)
The [Link] class contains the main method and acts as the Presentation Layer. It uses a
while(true) loop to continuously display the main menu and a switch statement to route user
input. It gathers input from the user via a BufferedReader and then calls the appropriate
methods in the bankManagement (BLL) class to perform the requested operations.
The console output for the application's key functions is as follows:
(Figure 3.1: Main Menu of Banking Application)
*************************************************
* Welcome to the Banking App *
*************************************************
1) Create Account
2) Login
3) Exit
Enter Choice:
(Figure 3.2: Console Output for getBalance Function)
Hello, [Username]! What would you like to do?
1) Transfer Money
2) View Balance
3) Logout
Enter Choice: 2
-------------------------------------------------
Account No Customer Name Balance
1001 John 5000.00
-------------------------------------------------
(Figure 3.3: Console Output for transferMoney Function)
Enter Receiver A/c No: 1002
Enter Amount: 500
Transaction successful!
Chapter 4 Conclusion and Future Scope
4.1 Conclusion
This internship successfully met all training objectives, providing a robust, full-circle learning
experience that bridged the gap between academic theory and professional practice. The
training progressed logically from foundational paradigms to complex, practical
implementation.
The theoretical concepts explored in Chapter 2—Object-Oriented Programming, Java
Multithreading, and the Collection Framework—were proven to be the essential and
non-negotiable building blocks for developing the capstone project. The hands-on
development of the Banking Application in Chapter 3 solidified this theoretical knowledge. It
provided high-impact, practical experience in designing a secure, multi-layered application
architecture, implementing critical security features to prevent SQL injection, and ensuring
absolute data integrity using ACID-compliant database transactions. The internship provided
confidence in building real-world Java applications that are not only functional but also
robust, secure, and maintainable.
4.2 Future Scope
The Java ecosystem remains one of the most dominant forces in enterprise software, with its
popularity consistently ranking in the top 3 globally 32 and its platform independence making it
a core component of enterprise operations. The future of Java is intrinsically linked with the
foremost trends in technology: Artificial Intelligence (AI), cloud-native development, and the
Internet of Things (IoT).33
The "Future Scope" is not merely an abstract concept; it represents a concrete, strategic
roadmap for evolving the very project built during this internship. The console-based banking
application, while a strong monolith, serves as the perfect foundation for a modern,
enterprise-grade system.
The logical evolution of this project would follow these steps:
1. From Monolith to Microservices: The first step is to re-architect the application. The
logic within [Link] would be extracted and rebuilt as a standalone REST
API using a modern framework like Spring Boot.34 This would create a "Transaction
Microservice" and a "User Microservice," fully decoupling the business logic from any
specific frontend.
2. From Local to Cloud-Native: These new microservices would be designed as
"cloud-native" applications.34 They would be containerized (e.g., using Docker) and
deployed on a scalable cloud platform like Amazon Web Services (AWS) or Microsoft
Azure, managed by an orchestrator like Kubernetes.35
3. From Manual to Intelligent (AI): With the backend modernized, Artificial Intelligence
could be integrated.35 A Spring AI 38 or LangChain4j 35 module could be added to
provide an intelligent chatbot for customer service, querying account balances via
natural language. Furthermore, a machine-learning model could be trained on
transaction data to perform real-time fraud detection, a critical feature for any modern
bank.33
4. From Console to Web/Mobile (IoT): The console UI would be replaced by a modern
web application (e.g., using React) and a native Android mobile application (another
domain where Java is strong).33 Java's robust capabilities in IoT 36 could be leveraged to
connect this ecosystem to physical devices, such as smart ATMs or NFC (tap-to-pay)
sensors.
This roadmap demonstrates that the skills acquired during this internship—OOP, JCF, and
JDBC—are not legacy, but rather the essential foundation upon which all modern Java-based
innovation is built.
References
“Lesson: Object-Oriented Programming Concepts,” The Java™ Tutorials. Oracle, 2024.
[Online]. Available: [Link]
[Accessed: Oct. 20, 2025].
A. Author, “Mastering Object-Oriented Programming (OOP) in Java: Encapsulation,
Inheritance, Polymorphism, and Abstraction,” Medium, Dec. 01, 2024. [Online]. Available:
[Link]
bstraction/. [Accessed: Oct. 20, 2025].
A. Author, “Multithreading in Java,” DigitalOcean, Apr. 26, 2022. [Online]. Available:
[Link] [Accessed: Oct. 20,
2025].
“Collections Framework Overview,” Java SE 8 Documentation. Oracle, 2024. [Online].
Available: [Link]
[Accessed: Oct. 20, 2025].
“The Best Java IDE in 2025,” JRebel by Perforce, Mar. 11, 2025. [Online]. Available:
[Link] [Accessed: Oct. 20, 2025].
“Java Collections Tutorial,” GeeksforGeeks, Sep. 23, 2025. [Online]. Available:
[Link] [Accessed: Oct. 20, 2025].
“Runnable Interface in Java,” GeeksforGeeks, Sep. 23, 2025. [Online]. Available:
[Link] [Accessed: Oct. 20, 2025].
“OOPs Concepts in Java,” TechAffinity, Jul. 03, 2024. [Online]. Available:
[Link] [Accessed: Oct. 20, 2025].
“Mini Banking Application in Java,” GeeksforGeeks, Oct. 07, 2025. [Online]. Available:
[Link] [Accessed: Oct. 20, 2025].
B.A. Baeldung, “Java Concurrency Series,” Baeldung, Sep. 28, 2023. [Online]. Available:
[Link] [Accessed: Oct. 20, 2025].
M. Kumar, “Mastering Object-Oriented Programming (OOP) in Java,” Medium, Sep. 11, 2023.
[Online]. Available:
[Link]
ava-encapsulation-inheritance-polymorphism-and-12b5c5c4469c. [Accessed: Oct. 20, 2025].
“What Is Java?,” Amazon Web Services (AWS). [Online]. Available:
[Link] [Accessed: Oct. 20, 2025].
“10 Compelling Reasons Why Java Is the Future of Enterprise App Development in 2025,”
Payara, Apr. 17, 2024. [Online]. Available:
[Link]
velopment-in-2025/. [Accessed: Oct. 20, 2025].
A. Author, “implements Runnable vs. extends Thread in Java,” Stack Overflow, May 29, 2017.
[Online]. Available:
[Link]
[Accessed: Oct. 20, 2025].
A. Author, “What are the differences between the thread class and runnable interface for
creating a thread,” Quora, Aug. 24, 2019. [Online]. Available:
[Link]
nterface-for-creating-a-thread. [Accessed: Oct. 20, 2025].
“The Future of Java and AI Coding in 2025,” DZone, Apr. 04, 2025. [Online]. Available:
[Link] [Accessed: Oct. 20,
2025].
“The theory behind Java programming language (part1),” Medium, Oct. 17, 2018. [Online].
Available:
[Link]
55d46889e. [Accessed: Oct. 20, 2025].
“Java (programming language),” Wikipedia, Oct. 19, 2025. [Online]. Available:
[Link] [Accessed: Oct. 20, 2025].
Appendix A Screenshots
Figure A.1: IntelliJ IDEA Project Environment
(This appendix would contain a full-page screenshot of the IntelliJ IDEA IDE. The Project
Explorer on the left would display the project structure: src/banking/[Link],
src/banking/[Link], and src/banking/[Link]. The main editor window
would display the source code for [Link], with the transferMoney method and
its [Link]() / [Link]() logic highlighted.)
Figure A.2: Eclipse IDE Environment and Code
(This appendix would contain a full-page screenshot of the Eclipse IDE. The main editor
window would display the source code for the [Link] file, specifically showing the main
method, the while(true) loop, and the switch statement that forms the main user menu.)
Appendix B Daily Diary
Table B.1: Sample Daily Internship Diary
Day No. / Week No. Date Brief of observations
made, work done,
problem/project
undertaken, discussion
held, etc.
Week 1, Day 1 Internship orientation.
Received overview of
company's Java
technology stack. Began
theoretical review of Java,
focusing on the "Write
Once, Run Anywhere"
(WORA) principle of the
JVM.
Week 1, Day 3 Comparative analysis of
IDEs. Set up projects in
IntelliJ IDEA, Eclipse, and
VS Code. Selected IntelliJ
IDEA as primary
development environment
due to its advanced
refactoring and code
completion features.
Week 2, Day 2 Deep dive into
Object-Oriented
Programming. Coded
practical examples for
Inheritance (using extends)
and Dynamic
Polymorphism (using
@Override). Discussed
Abstraction vs.
Encapsulation with mentor.
Week 2, Day 5 Studied the Java Collection
Framework. Focused on the
List and Map interfaces.
Conducted performance
analysis: ArrayList (fast
random access) vs.
LinkedList (fast
insertion/deletion).
Week 3, Day 1 Began design of the
Banking Application. Wrote
the 3-tier architecture plan
(Presentation, BLL, DAL).
Created the MySQL
database schema and
customer table. Wrote the
[Link] JDBC
class.
Week 3, Day 3 Implemented the
createAccount and
loginAccount methods in
the BLL. Focused on
security, implementing
PreparedStatement to
prevent SQL Injection
vulnerabilities.
Week 4, Day 2 Implemented the
transferMoney method.
This was the most complex
task. Spent the day
learning and debugging the
ACID transaction logic.
Successfully implemented
[Link](false),
[Link](), and
[Link]() to ensure
data integrity.
Week 4, Day 4 Completed the
Presentation Layer
([Link]) with the
console menu. Integrated
all BLL methods.
Conducted full-system
testing: created two
accounts, transferred
money, verified balances,
and confirmed rollback on
a failed transfer.
Week 5, Day 1 Studied Java
Multithreading. Focused on
implements Runnable as
the superior design choice
over extends Thread due to
its separation of task and
worker, and compatibility
with ExecutorService.
Week 5, Day 5 Final project review and
presentation. Discussed
future scope with mentors,
outlining a plan to migrate
the monolith to a Spring
Boot microservice
architecture, deployed on
the cloud and integrated
with an AI chatbot.
Works cited
1. internship [Link]
2. Java (programming language) - Wikipedia, accessed on November 7, 2025,
[Link]
3. The Java™ Tutorials - Oracle Help Center, accessed on November 7, 2025,
[Link]
4. accessed on November 7, 2025,
[Link]
0a%20high%2Dlevel,without%20the%20need%20to%20recompile.
5. Java Tutorial - Tutorials Point, accessed on November 7, 2025,
[Link]
6. The Theory behind Java Programming Language Part1. | by IRAKOZE Yves -
Medium, accessed on November 7, 2025,
[Link]
e-part1-42355d46889e
7. Most Popular Java IDEs in 2025 | JRebel by Perforce, accessed on November 7,
2025, [Link]
8. IntelliJ vs Eclipse vs VSCode - DEV Community, accessed on November 7, 2025,
[Link]
9. VSCode, BlueJ, Visual studio, Eclipse, Intellij,Vim. Which is the best? : r/java -
Reddit, accessed on November 7, 2025,
[Link]
pse_intellijvim/
10.OOPs in Java: Encapsulation, Inheritance, Polymorphism, Abstraction, accessed
on November 7, 2025,
[Link]
morphism-abstraction/
11. Mastering Object-Oriented Programming (OOP) in Java: Encapsulation,
Inheritance, Polymorphism, and Abstraction | by Manish Kumar | Medium,
accessed on November 7, 2025,
[Link]
ming-oop-in-java-encapsulation-inheritance-polymorphism-and-12b5c5c4469c
12.5 OOPS Concepts in Java | Inheritance | Polymorphism | Abstraction, accessed on
November 7, 2025, [Link]
13.Multithreading in Java: Concepts, Examples, and Best Practices ..., accessed on
November 7, 2025,
[Link]
14.Java Concurrency and Multithreading Tutorial - [Link], accessed on
November 7, 2025, [Link]
15."implements Runnable" vs "extends Thread" in Java - Stack Overflow, accessed on
November 7, 2025,
[Link]
read-in-java
16.What are the differences between the thread class and runnable interface for
creating a thread? - Quora, accessed on November 7, 2025,
[Link]
d-runnable-interface-for-creating-a-thread
17.Java Concurrency Series | Baeldung, accessed on November 7, 2025,
[Link]
18.Java Runnable Interface - GeeksforGeeks, accessed on November 7, 2025,
[Link]
19.Collections Framework Overview, accessed on November 7, 2025,
[Link]
20.Java Collections Tutorial - GeeksforGeeks, accessed on November 7, 2025,
[Link]
21.How to Learn Java Collections - A Complete Guide - GeeksforGeeks, accessed
on November 7, 2025,
[Link]
guide/
22.Java Collections Deep Dive: Managing Data with Lists, Sets, Queues, and Maps -
Gondi, accessed on November 7, 2025,
[Link]
sts-sets-queues-and-maps-java-no-22-2fed54e7cdd1
23.Core Java - Collections Framework (ArrayList, HashMap, etc.) - myTectra,
accessed on November 7, 2025,
[Link]
shmap
24.Java: ArrayList for List, HashMap for Map, and HashSet for Set? - Stack Overflow,
accessed on November 7, 2025,
[Link]
map-and-hashset-for-set
25.TIOBE Index - TIOBE - TIOBE Software, accessed on November 7, 2025,
[Link]
26.What is Java? - Java Programming Language Explained - AWS, accessed on
November 7, 2025, [Link]
27.Java Job Market Trends in 2025: What Developers Should Know - OPTnation,
accessed on November 7, 2025,
[Link]
28.The Future of Java and AI: Coding in 2025 - DZone, accessed on November 7,
2025, [Link]
29.How Java Is Powering IoT Applications in 2025 | by Sravaninareshit - Medium,
accessed on November 7, 2025,
[Link]
2025-838b62b28c76
30.Can a new developer still expect to have a full career working on Java in 2025? -
Reddit, accessed on November 7, 2025,
[Link]
expect_to_have_a_full/
31.The State of Coding the Future with Java and AI – May 2025 - Microsoft
Developer Blogs, accessed on November 7, 2025,
[Link]
nd-ai/
32.9 Emerging Java Trends to Watch in 2025 - Trio Dev, accessed on November 7,
2025, [Link]
33.A Perfect Match: Java and the Internet of Things - Oracle, accessed on
November 7, 2025,
[Link]