个性化阅读
专注于IT技术分析

Java static静态关键字

本文概述

静态关键字在Java中主要用于内存管理。我们可以用变量,应用java静态关键字方法,块和嵌套类。静态关键字属于的类而不是类的实例。

静态可以:

  1. 变量(也称为一个类变量)
  2. 方法(也称为一个类方法)
  3. 嵌套类

1)Java静态变量

如果你将任何变量声明为静态的,它被称为一个静态变量。

  • 可以使用静态变量引用的所有对象的共同财产(每个对象并不是唯一的),例如,员工的公司名称,学院的学生等。
  • 类的静态变量只有一次获取内存区域在类加载的时候。

静态变量的优点

它使得你的程序内存效率(即。,它节省了内存)。

理解问题没有静态变量

class Student{
     int rollno;
     String name;
     String college="ITS";
}

假设有500名学生在我的大学,现在所有实例数据成员将内存每次创建对象时。所有学生都有其独特的rollno和名称,所以实例数据成员是良好的在这种情况下。在这里,“大学”是指所有对象的公共财产。如果我们让它静止,这一领域将得到内存只有一次。

Java静态属性是所有对象共享。

静态变量的例子

//Java Program to demonstrate the use of static variable
class Student{
   int rollno;//instance variable
   String name;
   static String college ="ITS";//static variable
   //constructor
   Student(int r,String n){
   rollno = r;
   name = n;
   }
   //method to display the values
   void display (){System.out.println(rollno+" "+name+" "+college);}
}
//Test class to show the values of objects
public class TestStaticVariable1{
 public static void main(String args[]){
 Student s1 = new Student(111,"Karan");
 Student s2 = new Student(222,"Aryan");
 //we can change the college of all objects by the single line of code
 //Student.college="BBDIT";
 s1.display();
 s2.display();
 }
}

输出:

111 Karan ITS
222 Aryan ITS

程序计数器的静态变量

在本例中,我们创建了一个实例变量命名计数在构造函数中增加。由于实例变量的内存对象创建时,每个对象实例变量的副本。如果是增加,它不会反映其他对象。因此每个对象计数变量中的值1。

//Java Program to demonstrate the use of an instance variable
//which get memory each time when we create an object of the class.
class Counter{
int count=0;//will get memory each time when the instance is created

Counter(){
count++;//incrementing value
System.out.println(count);
}

public static void main(String args[]){
//Creating objects
Counter c1=new Counter();
Counter c2=new Counter();
Counter c3=new Counter();
}
}

输出:

1
1
1

程序计数器的静态变量

正如我们上面提到的,静态变量会得到内存只有一次,如果任何对象变化的静态变量的值,它将保持它的价值。

//Java Program to illustrate the use of static variable which
//is shared with all objects.
class Counter2{
static int count=0;//will get memory only once and retain its value

Counter2(){
count++;//incrementing the value of static variable
System.out.println(count);
}

public static void main(String args[]){
//creating objects
Counter2 c1=new Counter2();
Counter2 c2=new Counter2();
Counter2 c3=new Counter2();
}
}

输出:

1
2
3

2)Java静态方法

如果你应用静态关键字与任何方法,它被称为静态方法。

  • 一个静态方法属于类,而不是一个类的对象。
  • 静态方法可以调用,而无需创建一个类的实例。
  • 静态方法可以访问静态数据成员的值,可以改变它。

静态方法的例子

//Java Program to demonstrate the use of a static method.
class Student{
     int rollno;
     String name;
     static String college = "ITS";
     //static method to change the value of static variable
     static void change(){
     college = "BBDIT";
     }
     //constructor to initialize the variable
     Student(int r,String n){
     rollno = r;
     name = n;
     }
     //method to display values
     void display(){System.out.println(rollno+" "+name+" "+college);}
}
//Test class to create and display the values of object
public class TestStaticMethod{
    public static void main(String args[]){
    Student.change();//calling change method
    //creating objects
    Student s1 = new Student(111,"Karan");
    Student s2 = new Student(222,"Aryan");
    Student s3 = new Student(333,"Sonoo");
    //calling display method
    s1.display();
    s2.display();
    s3.display();
    }
}
Output:111 Karan BBDIT
       222 Aryan BBDIT
       333 Sonoo BBDIT

静态方法的另一个例子,执行正常计算

//Java Program to get the cube of a given number using the static method

class Calculate{
  static int cube(int x){
  return x*x*x;
  }

  public static void main(String args[]){
  int result=Calculate.cube(5);
  System.out.println(result);
  }
}
Output:125

静态方法的限制

有两个主要的静态方法的限制。它们是:

  1. 静态方法不能使用非静态数据成员或者直接调用非静态方法。
  2. 这和超级不能用于静态上下文。
class A{
 int a=40;//non static
 
 public static void main(String args[]){
  System.out.println(a);
 }
}
Output:Compile Time Error

问为什么Java main方法静态?

Ans)因为对象不需要调用一个静态方法。如果它是一个非静态方法,JVM创建一个对象第一然后调用main()方法将导致额外的内存分配的问题。


3)Java静态块

  • 用于初始化静态数据成员。
  • 前执行的主要方法在类加载时。

示例静态块

class A2{
  static{System.out.println("static block is invoked");}
  public static void main(String args[]){
   System.out.println("Hello main");
  }
}
Output:static block is invoked
       Hello main

问)我们可以没有main()方法执行程序?

Ans)不,的一个方法是静态块,但可能到JDK 1.6。由于JDK 1.7,它是不可能执行一个java类没有的主要方法。

class A3{
  static{
  System.out.println("static block is invoked");
  System.exit(0);
  }
}

输出:

static block is invoked

因为JDK 1.7及以上,输出是:

Error: Main method not found in class A3,please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
赞(0)
未经允许不得转载:srcmini » Java static静态关键字

评论 抢沙发

评论前必须登录!