猿教程 Logo

Java static关键词

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

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

static可以是:

  1. 变量(也称为类变量)

  2. 方法(也称为类方法)

  3. 嵌套类


1)Java静态变量

如果将任何变量声明为static,它是已知的静态变量。

  • 静态变量可以用于引用所有对象的公共属性(对于每个对象不是唯一的)。 员工公司名称,学生大学名称

  • 静态变量在类加载时只在类区域中获取一次内存。

静态变量的优点

它使您的程序存储器高效(即它节省内存)。

理解没有静态变量的问题

相关实例:

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

假设在我的大学有500名学生,现在所有实例数据成员将在每次创建对象时获取内存。所有学生都有其唯一的rollno和名称,因此实例数据成员是好的。大学指的是所有对象的共同属性 如果我们使它是静态的,这个字段将只需要获得一次内存。

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

静态变量的示例

相关实例:

//Program of static variable

class Student8{
   int rollno;
   String name;
   static String college ="ITS";
   
   Student8(int r,String n){
   rollno = r;
   name = n;
   }
 void display (){System.out.println(rollno+" "+name+" "+college);}

 public static void main(String args[]){
 Student8 s1 = new Student8(111,"Karan");
 Student8 s2 = new Student8(222,"Aryan");
 
 s1.display();
 s2.display();
 }
}
Output:111 Karan ITS
       222 Aryan ITS

无静态变量的计数器程序

在这个例子中,我们创建了一个名为count的实例变量,它在构造函数中递增。 由于实例变量在创建对象时获取内存,每个对象都将具有实例变量的副本,如果它被递增,则它不会反映到其他对象。 所以每个对象在计数变量中将具有值1。

相关实例:

class Counter{
int count=0;//will get memory when instance is created

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

public static void main(String args[]){

Counter c1=new Counter();
Counter c2=new Counter();
Counter c3=new Counter();

 }
}
Output:1
       1
       1

使用静态变量的计数器程序

如上所述,静态变量将只获取一次内存,如果任何对象更改静态变量的值,它将保留其值。

相关实例:

class Counter2{
static int count=0;//will get memory only once and retain its value

Counter2(){
count++;
System.out.println(count);
}

public static void main(String args[]){

Counter2 c1=new Counter2();
Counter2 c2=new Counter2();
Counter2 c3=new Counter2();

 }
}
Output:1
       2
       3

2)Java静态方法

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

  • 静态方法属于类的类而不是类的对象。

  • 可以调用静态方法,而无需创建类的实例。

  • 静态方法可以访问静态数据成员,并可以更改它的值。

静态方法的示例

相关实例:

//Program of changing the common property of all objects(static field).

class Student9{
     int rollno;
     String name;
     static String college = "ITS";
     
     static void change(){
     college = "BBDIT";
     }

     Student9(int r, String n){
     rollno = r;
     name = n;
     }

     void display (){System.out.println(rollno+" "+name+" "+college);}

    public static void main(String args[]){
    Student9.change();

    Student9 s1 = new Student9 (111,"Karan");
    Student9 s2 = new Student9 (222,"Aryan");
    Student9 s3 = new Student9 (333,"Sonoo");

    s1.display();
    s2.display();
    s3.display();
    }
}
Output:111 Karan BBDIT
       222 Aryan BBDIT
       333 Sonoo BBDIT

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

相关实例:

//Program to get cube of a given number by 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. this和super不能在静态上下文中使用。

相关实例:

class A{
 int a=40;//non static
 
 public static void main(String args[]){
  System.out.println(a);
 }
}
Output:Compile Time Error

Q)为什么java main方法是静态的?

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


3)Java静态块

  • 用于初始化静态数据成员。

  • 它在类加载时在main方法之前执行。

静态块的示例

相关实例:

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

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

A)可以,一种方式是静态块,但是是在以前的版本的JDK中,不是在JDK 1.7中。

相关实例:

class A3{
  static{
  System.out.println("static block is invoked");
  System.exit(0);
  }
}
Output:static block is invoked (if not JDK7)

在JDK7及以上版本中,输出将为:

Output:Error: Main method not found in class A3, please define the main method as:
public static void main(String[] args)
阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/static-keyword-in-java.html