DevAcademia
C++C#CPythonJava
  • Java Basics

  • Java Introduction
  • Java Get Started
  • Java Syntax
  • Java Output
  • Java Comments
  • Java Variables
  • Java Data Types
  • Java Type Casting
  • Java Operators
  • Java Strings
  • Java If...Else
  • Java Switch Statement
  • Java Loops
  • Java Math
  • Java Arrays
  • Java Date
  • Java OOP

  • Java Classes/Objects
  • Java Class Attributes
  • Java Class Methods
  • Java Constructors
  • Java Destructors
  • Java this Keyword
  • Java Modifiers
  • Java Non Modifiers
  • Java Encapsulation
  • Java Packages & API
  • Java Inheritance
  • Java Polymorphism
  • Java Super Keyword
  • Java Inner Classes
  • Java Exception Handling
  • Java Abstraction
  • Java Interfaces
  • Java Enums
  • Java User Input
  • Java Quiz

  • Java Fundamentals Quiz
  • Java Basics

  • Java Introduction
  • Java Get Started
  • Java Syntax
  • Java Output
  • Java Comments
  • Java Variables
  • Java Data Types
  • Java Type Casting
  • Java Operators
  • Java Strings
  • Java If...Else
  • Java Switch Statement
  • Java Loops
  • Java Math
  • Java Arrays
  • Java Date
  • Java OOP

  • Java Classes/Objects
  • Java Class Attributes
  • Java Class Methods
  • Java Constructors
  • Java Destructors
  • Java this Keyword
  • Java Modifiers
  • Java Non Modifiers
  • Java Encapsulation
  • Java Packages & API
  • Java Inheritance
  • Java Polymorphism
  • Java Super Keyword
  • Java Inner Classes
  • Java Exception Handling
  • Java Abstraction
  • Java Interfaces
  • Java Enums
  • Java User Input
  • Java Quiz

  • Java Fundamentals Quiz

Loading Java tutorial…

Loading content
Java OOPTopic 41 of 59
←PreviousPrevNextNext→

Java Class Attributes - Complete Guide

Introduction to Class Attributes

Class attributes, also known as fields or instance variables, are variables declared inside a class that define the state or properties of objects.

They represent the characteristics each object will have. Understanding how to declare, initialize, and manage class attributes is fundamental to object-oriented programming in Java.

Types of Class Attributes

Java provides different types of class attributes, each serving a distinct purpose.

Example
public class AttributeTypes {
    // Instance variables (unique per object)
    private String name;
    private int age;
    private double salary;
    private boolean isEmployed;

    // Static variable (shared by all objects)
    private static int objectCount = 0;

    // Final variable (constant per object)
    private final String species = "Human";

    // Static final (true constants)
    public static final double PI = 3.14159;

    // Transient variable (ignored during serialization)
    private transient String temporaryData;

    // Volatile variable (thread-safe visibility)
    private volatile boolean flag;

    public AttributeTypes(String name, int age, double salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
        this.isEmployed = true;
        objectCount++;
    }

    public void displayAttributes() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
        System.out.println("Salary: " + salary);
        System.out.println("Employed: " + isEmployed);
        System.out.println("Species: " + species);
        System.out.println("Object count: " + objectCount);
        System.out.println("PI: " + PI);
    }

    public static void main(String[] args) {
        AttributeTypes person1 = new AttributeTypes("Alice", 30, 50000.0);
        AttributeTypes person2 = new AttributeTypes("Bob", 25, 45000.0);

        System.out.println("Person 1:");
        person1.displayAttributes();

        System.out.println("\nPerson 2:");
        person2.displayAttributes();

        System.out.println("\nTotal objects created: " + AttributeTypes.objectCount);
        System.out.println("Value of PI: " + AttributeTypes.PI);
    }
}
Output
Person 1:
Name: Alice
Age: 30
Salary: 50000.0
Employed: true
Species: Human
Object count: 2
PI: 3.14159

Person 2:
Name: Bob
Age: 25
Salary: 45000.0
Employed: true
Species: Human
Object count: 2
PI: 3.14159

Total objects created: 2
Value of PI: 3.14159

Attribute Modifiers and Visibility

Java provides access modifiers to control the visibility of attributes, supporting encapsulation.

Example
public class AccessModifiersDemo {
    public String publicField = "Public Access";
    protected String protectedField = "Protected Access";
    String defaultField = "Default Access"; // package-private
    private String privateField = "Private Access";

    public static String staticPublicField = "Static Public";
    private static String staticPrivateField = "Static Private";

    public void demonstrateAccess() {
        System.out.println("Within same class:");
        System.out.println(publicField);
        System.out.println(protectedField);
        System.out.println(defaultField);
        System.out.println(privateField);
        System.out.println(staticPublicField);
        System.out.println(staticPrivateField);
    }

    public static void main(String[] args) {
        AccessModifiersDemo demo = new AccessModifiersDemo();
        demo.demonstrateAccess();

        System.out.println("\nFrom static method:");
        System.out.println(staticPublicField);
        System.out.println(staticPrivateField);
        System.out.println(demo.publicField);
    }
}

class AnotherClass {
    public void testAccess() {
        AccessModifiersDemo demo = new AccessModifiersDemo();

        System.out.println("\nFrom another class in same package:");
        System.out.println(demo.publicField);
        System.out.println(demo.protectedField);
        System.out.println(demo.defaultField);
        System.out.println(AccessModifiersDemo.staticPublicField);
    }
}
Output
Within same class:
Public Access
Protected Access
Default Access
Private Access
Static Public
Static Private

From static method:
Static Public
Static Private
Public Access

From another class in same package:
Public Access
Protected Access
Default Access
Static Public

Initialization of Class Attributes

Attributes can be initialized in several ways: directly, via constructors, with initialization blocks, or static initialization blocks.

Example
public class AttributeInitialization {
    private String name = "Unknown";
    private int count = 0;

    private static String defaultLanguage = "English";

    private final int id;
    private final String createdAt;

    { // Instance initialization block
        createdAt = java.time.LocalDateTime.now().toString();
    }

    static { // Static initialization block
        defaultLanguage = "English-US";
    }

    public AttributeInitialization() {
        this.id = generateId();
    }

    public AttributeInitialization(String name, int id) {
        this.name = name;
        this.id = id;
    }

    private int generateId() {
        return (int)(Math.random() * 1000);
    }

    public void displayAttributes() {
        System.out.println("ID: " + id);
        System.out.println("Name: " + name);
        System.out.println("Count: " + count);
        System.out.println("Created At: " + createdAt);
        System.out.println("Default Language: " + defaultLanguage);
    }

    public static void main(String[] args) {
        System.out.println("Creating first object:");
        AttributeInitialization obj1 = new AttributeInitialization();
        obj1.displayAttributes();

        System.out.println("\nCreating second object:");
        AttributeInitialization obj2 = new AttributeInitialization("Test", 999);
        obj2.displayAttributes();

        System.out.println("\nStatic field shared:");
        System.out.println("Default Language: " + AttributeInitialization.defaultLanguage);
    }
}
Output
Creating first object:
ID: 123 (random)
Name: Unknown
Count: 0
Created At: 2023-10-15T14:30:45.123
Default Language: English-US

Creating second object:
ID: 999
Name: Test
Count: 0
Created At: 2023-10-15T14:30:45.125
Default Language: English-US

Static field shared:
Default Language: English-US

Best Practices for Class Attributes

  • ✅ Use private fields and provide getters/setters for encapsulation
  • ✅ Use final for fields that must not change
  • ✅ Use static final for constants
  • ✅ Initialize attributes explicitly
  • ✅ Name attributes descriptively
  • ✅ Use enums for fields with limited values
  • ✅ Avoid public fields unless they are true constants
  • ✅ Ensure consistency in naming and access levels
Test your knowledge: Java Class Attributes - Complete Guide
Quiz Configuration
4 of 10 questions
Sequential
Previous allowed
Review enabled
Early close allowed
Estimated time: 5 min
Java OOPTopic 41 of 59
←PreviousPrevNextNext→