If you're new to Java programming, two of the most important concepts to grasp right from the start are 
variables and 
data types. Don’t worry—they’re not as scary as they might sound. Think of variables as labeled boxes that hold different kinds of data, and data types as the kind of content those boxes are allowed to store.
In this beginner-friendly guide, we’ll break down what variables are, the different types of data you can store in them, and how to use them correctly in your Java programs.
What is a Variable in Java?
A 
variable in Java is like a storage container for data. You give it a name, choose what kind of data it should hold, and then assign a value to it.
Here’s a simple example:
int age = 25;
In this line
  - intis the data type (it means the variable will store an integer).
- ageis the variable name.
- 25is the value stored inside the variable.
Variable Declaration and Initialization
You can declare a variable like this:
int score;  // declaration
And assign a value to it later:
score = 100;  // initialization
Or you can do both in one line (which is very common):
int score = 100;
Types of Variables in Java
Java has 
three types of variables, based on where they are declared and how long they exist:
  - Local Variables
  
    - Declared inside methods or blocks.
- Only accessible within that method or block.
- Must be initialized before use.
 
- Instance Variables (a.k.a. fields)
    
      - Declared inside a class but outside methods.
- Belong to each instance (object) of the class.
- Have default values if not explicitly initialized.
 
- Static Variables
    
      - Declared with the statickeyword.
- Belong to the class, not to objects.
- Shared among all instances.
    
 
Example:
public class Car {
    static int numberOfWheels = 4;  // static variable
    String color;                   // instance variable
    public void displayInfo() {
        int speed = 60;             // local variable
        System.out.println(color + " car going at " + speed + " km/h.");
    }
}
Java Data Types Overview
Java is a 
strongly typed language, which means every variable must have a data type. Data types tell Java what kind of data a variable can hold.
1. Primitive Data Types
Java has 
eight primitive types:
  
    
      | Type | Description | Example | 
  
  
    
      | int | Whole numbers | int x = 10; | 
    
      | double | Decimal numbers | double pi = 3.14; | 
    
      | float | Smaller decimal numbers | float rate = 5.5f; | 
    
      | char | A single character | char letter = 'A'; | 
    
      | boolean | True or false | boolean isJavaFun = true; | 
    
      | byte | Smallest whole number type | byte a = 100; | 
    
      | short | Small whole number | short b = 10000; | 
    
      | long | Large whole numbers | long bigNum = 100000L; | 
  
Note:
  - floatand- longvalues require a suffix:- for- L.
- doubleis the default for decimals.
2. Non-Primitive (Reference) Data Types
These include:
  - Strings
- Arrays
- Objects
- Interfaces
Example of a 
String:
String greeting = "Hello, Java!";
Strings are widely used and are not considered primitive—even though they feel like one.
Constants: Final Variables
If you want a variable’s value to never change, use the 
final keyword:
final double PI = 3.14159;
By convention, constant names are written in 
uppercase.
Type Casting in Java
Sometimes, you may need to convert one data type into another. This is called 
type casting.
Implicit Casting (Widening)
Java does this automatically when converting from a smaller type to a larger type.
int a = 100;
double b = a;  // no error
Explicit Casting (Narrowing)
You must do this manually when going from a larger to a smaller type.
double a = 9.8;
int b = (int) a; // b = 9
Be careful: narrowing may lead to data loss.
Tips for Working with Variables
  - Always give meaningful names: userNameis better thanu1.
- Java is case-sensitive: Ageandageare different.
- Choose the right data type to save memory and avoid bugs.
- Use finalfor values that shouldn't change.
Common Mistakes to Avoid
  - Forgetting to initialize a local variable before using it.
- Mixing up types: trying to store a Stringin anintwill cause an error.
- Overflow: assigning a large value to a small data type (like byte b = 200;) will cause issues.
- Confusing primitive types with reference types (like intvsInteger).