Java static静态关键字

本文概述

  • 1)Java静态变量
  • 2)Java静态方法
  • 3)Java静态块
静态关键字在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 createdCounter(){ 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 valueCounter2(){ 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 methodclass 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()方法执行程序?
【Java static静态关键字】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

    推荐阅读