第一章java中的静态关键字与示例


在这篇文章中,我们将看到关于 java 中的静态关键字。所以静态关键字可以与:

  • Variable
  • Method
  • Block
  • Nested class

让我们一一进行。

静态变量:

如果任何实例变量被声明为静态。它被称为静态变量。

static int countryCounter;

关于静态变量的一些要点是:

  • 静态变量属于一个类而不是一个对象。
  • 静态变量在类加载时只在类区初始化一次
  • 所有对象共享静态变量的单个副本
  • 您不需要创建对象来访问静态变量。您可以使用类名直接访问它。
  • 静态变量也可以通过实例 java 方法访问。

如果您创建一个具有两个变量的类,一个是静态的,一个是非静态的。该类的非静态变量(从该类创建的对象)将获得该变量自己的版本。但是有了静态变量,它就属于类,而且只有一个。尽管该类中的任何对象都可以引用它。 示例: 让我们举一个非常简单的例子。您想跟踪您创建了多少对象。为此,您的类中有一个静态变量。假设您的类是: Country.java

package org.arpit.java2blog;
/*
 * @author:Arpit Mandliya
 */
public class Country {

    //static variable
   static int countryCounter;

    // instance variable
    String name;
    int dummyCounter;
    Country(String name)
    {
        this.name=name;
        countryCounter++;

        dummyCounter++;
    }

    public static void main(String[] args)
    {
        System.out.println("****************************************");

        Country india=new Country("India");
        System.out.println("Country Name: "+india.getName());
        System.out.println("Number of country object created: "+Country.countryCounter);
        System.out.println("Dummy counter not a static variable: "+india.dummyCounter);
        System.out.println("****************************************");
        Country france=new Country("France");
        System.out.println("Country Name: "+france.getName());
        System.out.println("Number of country object created: "+france.countryCounter);
        System.out.println("Dummy counter not a static variable: "+france.dummyCounter);

        System.out.println("****************************************");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

输出: 当你运行上面的程序时,你会得到以下结果:

****************************************
Country Name: India
Number of country object created: 1
Dummy counter not a static variable 1
****************************************
Country Name: France
Number of country object created: 2
Dummy counter not a static variable 1
****************************************

图表:

img

在上面的例子中,我们有一个名为“countryCounter”的静态变量,所以每当我们创建一个新对象时,它的值将增加 1,因为 counterCounter 变量被所有国家对象共享,并且我们有一个名为“dummyCounter”的实例变量,所以无论何时创建任何新对象,其值再次初始化为 0。

静态方法:

如果任何方法被声明为静态。它被称为静态方法。

public static void printCountryCounter()
    {
        System.out.println("Number of country object created: "+countryCounter);
    }

关于静态方法的一些要点是:

  • 静态方法属于一个类而不是对象。
  • 静态方法可以直接使用 className 调用。虽然它也可以使用 objectName 调用
  • 通常静态方法用于获取静态字段。
  • 您可以通过 java 实例方法访问静态方法。
  • 您不能在静态方法中访问非静态方法或实例变量。
  • 静态方法不能引用 this 或 super 关键字。

示例: 我们将创建上面的示例,并将使用一种静态方法 printCountryCounter 来打印 countryCounter 变量。 Country.java

package org.arpit.java2blog;
/*
 * @author:Arpit Mandliya
 */
public class Country {

    String name;
    static int countryCounter;
    int dummyCounter;
    Country(String name)
    {
        this.name=name;
        countryCounter++;

        dummyCounter++;
    }


    public static void main(String[] args)
    {
        Country india=new Country("India");

        System.out.println("****************************************");
        System.out.println("Country Name: "+india.getName());
        printCountryCounter();
        System.out.println("Dummy counter not a static variable: "+india.dummyCounter);
        System.out.println("****************************************");
        Country france=new Country("France");
        System.out.println("Country Name: "+france.getName());
        printCountryCounter();
        System.out.println("Dummy counter not a static variable: "+france.dummyCounter);
        System.out.println("****************************************");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static void printCountryCounter()
    {
        System.out.println("Number of country object created: "+countryCounter);
    }
}

输出: 当你运行上面的程序时,你会得到以下结果:

****************************************
Country Name: India
Number of country object created: 1
Dummy counter not a static variable 1
****************************************
Country Name: France
Number of country object created: 2
Dummy counter not a static variable 1
****************************************

为什么不能从静态方法访问非静态成员:

当你从静态方法调用非静态方法时,你会得到编译错误。 例如:在上面的 printCountryCounter() 中,假设你调用 getName() 你会编译错误。

public static void printCountryCounter()

 {

        getName();  //Compilation error

        System.out.println("Number of country object created: "+countryCounter);

 }

想象一种情况,当您被允许从 printCountryCounter() 调用 getName() 时。您可以仅使用类名调用 printCountryCounter() ,因此当您调用 printCountryCounter() 时,getName() 应该返回什么值,因为每个值可能不同新对象以及它将引用哪个值。这就是为什么不允许从静态方法调用非静态成员的原因。

静态块:

静态块是 Java 类中的语句块,将在类首次加载到 JVM 时执行

关于静态块的一些要点是:

  • 静态块用于初始化静态数据成员。
  • 静态块在 main 方法执行之前执行。
package org.arpit.java2blog;
public class StaticBlockExample {

    /**

     * @Author:Arpit Mandliya

     */

    static{
        System.out.println("This block will get call before main method");
    }

    public static void main(String[] args) {

        System.out.println("In main method");
    }
}

输出: 当你运行上面的程序时,你会得到以下结果:

This block will get call before main method
In main method

静态类:

在java中,您可以在另一个类中定义一个类。这样的类称为嵌套类。包含嵌套类的类称为外部类。在java中,我们不能使外部类静态。

只有嵌套类可以声明为静态

关于嵌套静态类的一些要点是:

  • 嵌套静态类不需要外部类的引用。
  • 静态类不能访问 Outer 类的非静态成员。它只能访问外部类的静态成员,包括私有的。

例子:

package org.arpit.java2blog;
/*
 * @author:Arpit Mandliya
 */
public class OuterClass {

    static class InnerStaticClass{

        public void printInnerClass()
        {
            System.out.println("In inner class");
        }
    }

    public static void main(String[] args)
    {


        System.out.println("****************************************");
        OuterClass.InnerStaticClass inc=new OuterClass.InnerStaticClass();
        inc.printInnerClass();
        System.out.println("****************************************");
    }

    public static void printOuterClass()
    {
        System.out.println("In outer class");
    }

}

输出: 当你运行上面的程序时,你会得到以下结果:

****************************************
In inner class
****************************************


原文链接:https://codingdict.com/