Skip to main content

Rules for Static Variables in Java

 

Rules for Static Variables in Java:

  1. Class-Level Association:

    • Static variables are shared among all instances of a class.
    • They are stored in the class area of memory, not in the heap.
    • Only one copy of a static variable exists, regardless of the number of instances of the class.
    java
    class Example { static int count = 0; }
  2. Declaration:

    • Declared with the static keyword, usually outside of methods, constructors, or blocks.
    • Typically used for constants or shared properties among all objects.
    java
    class Example { static int sharedVar; }
  3. Access:

    • Can be accessed directly using the class name (preferred):
      java
      Example.sharedVar = 10;
    • Alternatively, can be accessed via an object instance, but it's discouraged for clarity:
      java
      Example obj = new Example(); obj.sharedVar = 10; // Works, but not recommended
  4. Initialization:

    • Static variables are initialized only once, at the time of class loading.
    • Default values are provided if not explicitly initialized:
      • int, long, short, byte0
      • float, double0.0
      • char'\u0000'
      • booleanfalse
      • Object references → null
    java
    class Example { static int number; // Default value: 0 }
  5. Memory Management:

    • Static variables are loaded into memory once and are not tied to any object lifecycle.
    • They remain in memory until the class is unloaded.
  6. Access from Static and Instance Contexts:

    • Static Context (e.g., Static Methods):
      • Static variables can be accessed directly without creating an object.
    • Instance Context (e.g., Instance Methods):
      • Static variables can also be accessed from instance methods.
    java
    class Example { static int staticVar = 5; public static void staticMethod() { System.out.println(staticVar); // Accessible directly } public void instanceMethod() { System.out.println(staticVar); // Also accessible here } }
  7. Modifiers:

    • Can be combined with other modifiers like final, public, private, or protected.
    • If static and final, it becomes a constant and must be initialized at the time of declaration.
    java
    class Example { public static final int CONSTANT = 100; // Static constant }
  8. Initialization Block:

    • Static variables can be initialized in a static initialization block, which is executed when the class is loaded.
    java
    class Example { static int value; static { value = 42; // Static initialization block } }
  9. Shadowing:

    • A static variable can be shadowed by a local variable or method parameter with the same name.
    • Use the class name to explicitly refer to the static variable.
    java
    class Example { static int count = 10; public void display(int count) { System.out.println(count); // Local variable System.out.println(Example.count); // Static variable } }
  10. Static Variables and Inheritance:

    • Static variables are inherited but not overridden.
    • Subclasses share the same static variable as the parent class.
    java
    class Parent { static int num = 10; } class Child extends Parent { // Access Parent.num directly }

Best Practices for Static Variables:

  1. Use sparingly: Overusing static variables can make code harder to manage and test due to shared state.
  2. Constants: Combine static with final for constants and use uppercase naming:
    java
    public static final double PI = 3.14159;
  3. Class-specific Data: Use static variables only for data that is truly class-level, like counters, constants, or configuration values.
  4. Avoid accessing via instances: Always access static variables through the class name for clarity.
  5. Thread Safety: Be cautious when using static variables in multithreaded environments to avoid concurrency issues.

Comments

Popular posts from this blog

Step-by-Step: Launch Browser, Context, and Page in Playwright and Run Test and Configuration (JavaScript)

๐ŸŽฅ Setup Browser, Context, Page & Run Config Test Scripts with package.json & playwright.config.js Step-by-Step: Launch Browser, Context, and Page in Playwright and Run Test and Configuration (JavaScript) 1. Install Playwright You can install Playwright using the following command: npm init playwright@latest 2. Create a Basic Test Script Understand the core Playwright architecture: Element Description browser Controls the browser instance (like Chrome, Firefox, etc.) context Acts like a separate browser profile (cookies, localStorage are isolated) page A single browser tab where interaction happens 3. Run the Test npx playwright test example.spec.js Ways to Run TypeScript Tests Way Command Notes ๐ŸŸข Via npx npx playwright test Uses built-in TypeScript support ๐ŸŸข With s...

Playwright Test Structure in Details -Session-02

๐ŸŽฅ Playwright: test.only, Hooks & Grouping with test.describe Explained Let’s go step-by-step , showing how to build from a single test , to using beforeEach / afterEach , and then organizing things with test.describe . ✅ Step 1: Basic Single Test with test.only import { test, expect } from '@playwright/test' ; test. only ( '๐Ÿš€ Basic test - check title' , async ({ page }) => { await page. goto ( 'https://example.com' ); await expect (page). toHaveTitle ( /Example Domain/ ); }); test.only ensures only this test runs — great for debugging. ✅ Step 2: Add beforeEach and afterEach import { test, expect } from '@playwright/test' ; test. beforeEach ( async ({ page }) => { console . log ( '๐Ÿ”„ Setting up before each test' ); await page. goto ( 'https://example.com' ); }); test. afterEach ( async ({ page }, testInfo) => { console . log ( `๐Ÿ“ฆ Finished test: ${testInfo.title} `); }); test. only ( ...

Playwright Locators in JavaScript (Complete Guide)

๐ŸŽฏ Playwright Locators in JavaScript (Complete Guide) This guide explains each Playwright locator with: ✅ What it is ๐Ÿ• When to use ⚙️ How to use it ๐ŸŽฏ Benefits ๐Ÿงช Code Examples ๐Ÿ”น 1. Locator by ID ✅ What: Selects an element with a unique id . ๐Ÿ• When: Element has a unique id . ⚙️ How: page.locator('#username') ๐ŸŽฏ Benefit: Fast and reliable. <input id="username" /> await page.locator('#username').fill('John'); ๐Ÿ”น 2. Locator by Class ✅ What: Selects by class . ๐Ÿ• When: Repeated or styled elements. ⚙️ How: page.locator('.password') ๐ŸŽฏ Benefit: Useful for shared styling. <input class="password" /> await page.locator('.password').fill('12345'); ๐Ÿ”น 3. Locator by Text ✅ What: Matches visible element text. ๐Ÿ• When: For buttons, links, etc. ⚙️ How: page.getByText('Login') ๐ŸŽฏ Benefit: Human-readable. <button>Login...