Java中static关键字的作用_极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java中static关键字的作用

Java中static关键字的作用

更新时间:2022-12-05 12:37:11 来源:极悦 浏览812次

Java中的static关键字主要用于内存管理。Java中的static关键字用于共享给定类的相同变量或方法。用户可以将静态关键字应用于变量、方法、块和嵌套类。static 关键字属于类而不是类的实例。static 关键字用于常量变量或对类的每个实例都相同的方法。

static关键字是 Java 中的非访问修饰符,适用于以下情况:

积木

变量

方法

班级

注意:要创建静态成员(块、变量、方法、嵌套类),请在其声明之前加上关键字static。

当成员声明为静态时,可以在创建其类的任何对象之前访问它,而无需引用任何对象。例如,在下面的 java 程序中,我们在不创建Test类 的任何对象的情况下访问静态方法m1() 。

// Java program to demonstrate that a static member
// can be accessed before instantiating a class
class Test
{
	// static method
	static void m1()
	{
		System.out.println("from m1");
	}
	public static void main(String[] args)
	{
		// calling m1 without creating
		// any object of class Test
		m1();
	}
}

输出

从 m1

静态块

如果您需要进行计算以初始化静态变量,则可以声明一个静态块,该块在首次加载类时只执行一次。

考虑以下演示静态块使用的 java 程序。

// Java program to demonstrate use of static blocks
class Test
{
	// static variable
	static int a = 10;
	static int b;	
	// static block
	static {
		System.out.println("Static block initialized.");
		b = a * 4;
	}
	public static void main(String[] args)
	{
	System.out.println("from main");
	System.out.println("Value of a : "+a);
	System.out.println("Value of b : "+b);
	}
}

输出

静态块已初始化。
从主
a 的值:10
b 的值:40

静态变量

当变量被声明为静态时,将创建该变量的单个副本并在类级别的所有对象之间共享。静态变量本质上是全局变量。该类的所有实例共享同一个静态变量。

静态变量的要点:

我们只能在类级别创建静态变量。

静态块和静态变量按照它们在程序中出现的顺序执行。

下面的 Java 程序演示了静态块和静态变量是按照它们在程序中出现的顺序执行的。

// Java program to demonstrate execution
// of static blocks and variables
class Test
{
	// static variable
	static int a = m1();	
	// static block
	static {
		System.out.println("Inside static block");
	}
		// static method
	static int m1() {
		System.out.println("from m1");
		return 20;
	}	
	// static method(main !!)
	public static void main(String[] args)
	{
	System.out.println("Value of a : "+a);
	System.out.println("from main");
	}
}

输出

从 m1
内部静态块
a 的值:20
从主

静态方法

当使用static关键字声明方法时,它被称为静态方法。静态方法最常见的例子是main()方法。如上所述,可以在创建其类的任何对象之前访问任何静态成员,而无需引用任何对象。声明为静态的方法有几个限制:

他们只能直接调用其他静态方法。

他们只能直接访问静态数据。

他们不能以任何方式引用this或super。

下面是演示静态方法限制的java程序。

// Java program to demonstrate restriction on static methods
class Test
{
	// static variable
	static int a = 10;	
	// instance variable
	int b = 20;	
	// static method
	static void m1()
	{
		a = 20;
		System.out.println("from m1");		
		// Cannot make a static reference to the non-static field b
		b = 10; // compilation error				
		// Cannot make a static reference to the
				// non-static method m2() from the type Test
		m2(); // compilation error		
		// Cannot use super in a static context
		System.out.println(super.a); // compiler error
	}	
	// instance method
	void m2()
	{	
		System.out.println("from m2");
	}			
	public static void main(String[] args)
	{
		// main method
	}
}

输出

prog.java:18: 错误:无法从静态上下文中引用非静态变量 b
         b = 10; // 编译错误
         ^
prog.java:22: 错误:无法从静态上下文中引用非静态方法 m2()
         m2(); // 编译错误
         ^
prog.java:25: 错误:无法从静态上下文中引用非静态变量 super
         System.out.println(super.a); // 编译器错误                            ^
prog.java:25: 错误:找不到符号
         System.out.println(super.a); // 编译器错误                                 ^
  符号:变量a
4个错误

什么时候使用静态变量和方法?

对所有对象共有的属性使用静态变量。例如,在 Student 类中,所有学生都使用相同的大学名称。使用静态方法来更改静态变量。

考虑以下 java 程序,它说明了静态关键字与变量和方法的用法。

// A java program to demonstrate use of
// static keyword with methods and variables
// Student class
class Student {
	String name;
	int rollNo;
	// static variable
	static String cllgName;
	// static counter to set unique roll no
	static int counter = 0;
	public Student(String name)
	{
		this.name = name;
		this.rollNo = setRollNo();
	}
	// getting unique rollNo
	// through static variable(counter)
	static int setRollNo()
	{
		counter++;
		return counter;
	}
	// static method
	static void setCllg(String name) { cllgName = name; }
	// instance method
	void getStudentInfo()
	{
		System.out.println("name : " + this.name);
		System.out.println("rollNo : " + this.rollNo);
		// accessing static variable
		System.out.println("cllgName : " + cllgName);
	}
}
// Driver class
public class StaticDemo {
	public static void main(String[] args)
	{
		// calling static method
		// without instantiating Student class
		Student.setCllg("XYZ");
		Student s1 = new Student("Alice");
		Student s2 = new Student("Bob");
		s1.getStudentInfo();
		s2.getStudentInfo();
	}
}

输出

姓名:爱丽丝
卷号:1
clg名称:XYZ
姓名:鲍勃
卷号:2
clg名称:XYZ

以上就是关于“Java中static关键字的作用”介绍,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下本站的Java教程,里面还有更丰富的知识等着大家去学习,相信对大家一定会有所帮助的。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>