Java Programming — Study Notes

Unit 01

Java Fundamentals, Compiler, Features & Type Casting

4 Questions 6 Marks Each
01
6 Marks Question

Difference Between Java and C++

Java and C++ are both popular object-oriented programming languages, but they differ in many aspects such as platform dependency, memory management, and features. The key differences are given below.

  • 1. Platform Dependency C++ is a platform-dependent language because its compiled code runs on a specific machine. Java is platform-independent because it compiles into bytecode that runs on the JVM (Write Once, Run Anywhere).
  • 2. Primary Use C++ is mainly used for system programming such as operating systems and game engines. Java is mainly used for application programming including web, enterprise, mobile, and Windows-based applications.
  • 3. Multiple Inheritance C++ supports multiple inheritance through classes. Java does not support multiple inheritance through classes; it achieves it using interfaces.
  • 4. Pointer Support C++ provides full support for pointers and allows pointer programming. Java does not allow explicit pointer use; pointers are handled internally for security and simplicity.
  • 5. Operator Overloading C++ supports operator overloading. Java does not support operator overloading (except for the + operator used with strings).
  • 6. Compiler & Execution C++ uses only a compiler that converts source code directly into machine code. Java uses both a compiler and an interpreter — source code is compiled into bytecode and then executed by the JVM.
  • 7. Memory Management C++ uses manual memory management with new and delete. Java provides automatic garbage collection to remove unused objects, making it more robust.
  • 8. Thread Support C++ does not have built-in thread support and often relies on libraries. Java has built-in multithreading support.
Conclusion In summary, C++ is closer to hardware and suitable for system-level programming, whereas Java is safer, portable, and widely used for application and web development due to features like JVM, garbage collection, and built-in multithreading.
02
6 Marks Question

Java Compiler and Interpreter

In Java, both the compiler and interpreter are used to convert and execute a program. The compiler converts source code into bytecode, and the interpreter executes that bytecode to produce output.

Java Compiler

A Java compiler is a program that translates the entire Java source code into an intermediate code called bytecode. This bytecode is platform-independent and can run on any system that has a JVM.

Working of Java Compiler:

  • It scans the complete source code at once.
  • It checks syntax and type errors.
  • It converts .java file into .class bytecode file.
  • It requires more memory to generate bytecode.

Command used: javac filename.java

Role of Java Compiler:

  • Scans the full program in one go.
  • Detects errors before execution.
  • Generates platform-independent bytecode.

Java Interpreter

A Java interpreter is responsible for executing the bytecode line by line at runtime and converting it into machine code for the specific system.

Working of Java Interpreter:

  • Reads bytecode instruction by instruction.
  • Converts bytecode into native machine code.
  • Stops execution if an error occurs on any line.

Command used: java classname

Role of Java Interpreter:

  • Converts bytecode into machine-specific code.
  • Executes the program line by line.
  • Produces the final output.

Difference Between Compiler and Interpreter

CompilerInterpreter
Scans entire program at onceExecutes line by line
Shows all errors togetherShows one error at a time
Generates bytecodeExecutes bytecode
Faster execution after compilationSlower execution
Conclusion In Java, the compiler and interpreter work together. The compiler first converts source code into platform-independent bytecode, and the interpreter (via JVM) executes it on the target machine. This two-step process makes Java portable and secure.
03
6 Marks Question

Features of Java

Java is a high-level, robust, object-oriented programming language designed to be simple, secure, and portable. The primary objective of Java was to create a portable and secure programming language. The important features of Java are explained below.

  • 1. Simple Java is easy to learn and its syntax is clean and understandable. Many complex features of C++ such as explicit pointers and operator overloading are removed. It also provides automatic garbage collection, so programmers do not need to free memory manually.
  • 2. Object-Oriented Java is a fully object-oriented language. Everything in Java is treated as an object. It supports OOP concepts such as Class, Object, Inheritance, Polymorphism, Abstraction, and Encapsulation. This approach simplifies software development and maintenance.
  • 3. Platform Independent Java follows the principle Write Once, Run Anywhere (WORA). Java programs are compiled into bytecode, which can run on any system that has a JVM, making Java platform independent.
  • 4. Secure Java provides a secure execution environment because there is no explicit pointer usage and programs run inside JVM sandbox. These features help in developing virus-free and tamper-free applications.
  • 5. Robust Java is strong and reliable due to strong memory management, automatic garbage collection, exception handling, and type checking mechanism. These reduce crashes and improve stability.
  • 6. Portable Java bytecode can be carried to any platform without modification. Fixed-size primitive data types make Java architecture neutral and portable.
  • 7. High Performance Java is faster than traditional interpreted languages because bytecode is close to native code. However, it is slightly slower than fully compiled languages like C++.
  • 8. Multithreaded Java supports multithreading, allowing multiple tasks to run simultaneously. Threads share a common memory area, which improves performance in multimedia and web applications.
  • 9. Distributed Java supports distributed computing through technologies like RMI and EJB, enabling applications to access files and methods over a network.
  • 10. Dynamic Java is dynamic because classes can be loaded on demand at runtime. It also supports functions from native languages like C and C++.
Conclusion Java provides powerful features such as simplicity, security, portability, and multithreading, which make it one of the most widely used programming languages for web, mobile, and enterprise applications.
04
6 Marks Question

Type Casting in Java

Type casting (also called type conversion) in Java is the process of converting a value from one data type to another data type. It is mainly used when we want to assign a value of one type to a variable of another type.

There are two types of type conversion in Java: Widening Conversion and Narrowing Conversion.

1. Widening Conversion (Implicit / Automatic)

Widening conversion is the conversion of a smaller data type into a larger data type. This conversion is performed automatically by the Java compiler, so it is also called implicit conversion.

Condition:

Occurs when destination type is larger than source type.

Example:

int i = 10;
double d1;
d1 = i;   // widening conversion

Common Widening Order:

byte short int long float double
char int long float double
Key Points
  • Done automatically by the computer.
  • No data loss.
  • No cast operator required.

2. Narrowing Conversion (Explicit / Type Casting)

Narrowing conversion is the conversion of a larger data type into a smaller data type. This conversion is not automatic and must be done using the cast operator.

Condition:

Occurs when destination type is smaller than source type. Cast operator is compulsory.

Syntax of Cast Operator:

(Target_datatype) value;

Example:

float f = 82.8f;
int i = (int) f;   // narrowing conversion
// Output: i = 82  (The decimal part is lost.)
Key Points
  • Done manually.
  • May cause data loss.
  • Cast operator required.
Conclusion Type casting in Java is used to convert one data type into another. It is of two types: widening (automatic and safe) and narrowing (manual and may lose data). Proper use of type casting helps in efficient memory usage and correct program execution.