Java static静态变量和静态方法的用法(附带实例)
一般情况下,类的成员(变量或方法)必须通过该类的对象访问。但有的时候希望定义一个类的成员,可以独立于该类的任何对象。Java 提供了这种机制,只需要在类成员的声明前面加上关键字 static 即可。
由 static 修饰的成员变量和成员方法被称为静态变量和静态方法,例如最常见的静态方法就是 main() 方法。因为在程序开始执行时必须首先调用 main() 方法,此时还没有实例化任何对象,无法通过对象调用,所以它被声明为静态方法被系统直接调用。
静态变量不属于类的某个具体对象,被该类所有的对象共享。该类的任何对象访问它时都会取得相同的值。如果一个对象修改了静态变量的值,其他对象读出的都是修改后的值。
静态变量既可以被对象调用也可以通过类名调用。调用静态变量的语法格式如下:
【实例】实现在 StaticTest1 类中通过两种方法调用静态变量。
静态变量被类的所有对象共享,同一时间点它的值是唯一的,那就意味着如果有一个对象修改了静态变量的值,那么其他对象读出的都是修改后的值。下面通过一个示例演示这一特性:
调用静态方法的语法格式如下:
静态方法和非静态方法的区别主要体现在以下两方面:
由 static 修饰的成员变量和成员方法被称为静态变量和静态方法,例如最常见的静态方法就是 main() 方法。因为在程序开始执行时必须首先调用 main() 方法,此时还没有实例化任何对象,无法通过对象调用,所以它被声明为静态方法被系统直接调用。
Java static静态变量
如果一个类的成员变量被 static 修饰,那么这个成员变量就是静态成员变量,也可以简称为静态变量。静态变量不属于类的某个具体对象,被该类所有的对象共享。该类的任何对象访问它时都会取得相同的值。如果一个对象修改了静态变量的值,其他对象读出的都是修改后的值。
静态变量既可以被对象调用也可以通过类名调用。调用静态变量的语法格式如下:
对象.静态变量 类名.静态变量
【实例】实现在 StaticTest1 类中通过两种方法调用静态变量。
public class StaticTest1 { static int count = 1; // 静态变量 public static void main(String[] args) { StaticTest1 static1 = new StaticTest1(); // 通过对象调用静态变量 count int count1 = static1.count; System.out.println("通过对象调用静态变量的返回值:" + count1); // 通过类名调用静态变量 count int count2 = StaticTest1.count; System.out.println("通过类名调用静态变量的返回值:" + count2); } }程序运行结果为:
通过对象调用静态变量的返回值:1 通过类名调用静态变量的返回值:1程序可以正常执行,说明静态变量既可以通过对象调用也可以通过类名调用,而且返回值完全一样。
静态变量被类的所有对象共享,同一时间点它的值是唯一的,那就意味着如果有一个对象修改了静态变量的值,那么其他对象读出的都是修改后的值。下面通过一个示例演示这一特性:
public class StaticTest2 { static int count = 1; // 静态变量 public static void main(String[] args) { // 创建两个对象 StaticTest2 static1 = new StaticTest2(); StaticTest2 static2 = new StaticTest2(); // 通过第一个对象修改静态变量的值 static1.count = 2; // 通过不同的对象调用静态变量 System.out.println("通过对象 1 调用静态变量的返回值:" + static1.count); System.out.println("通过对象 2 调用静态变量的返回值:" + static2.count); // 通过类名调用静态变量 System.out.println("通过类名调用静态变量的返回值:" + StaticTest2.count); } }程序运行结果为:
通过对象 1 调用静态变量的返回值:2
通过对象 2 调用静态变量的返回值:2
通过类名调用静态变量的返回值:2
Java static静态方法
由 static 关键词修饰的方法就是静态方法。静态方法既可以通过对象调用,也可以通过类名调用。调用静态方法的语法格式如下:
对象.静态方法 类名.静态方法下面通过一个示例演示静态方法的调用:
public class StaticTest3 { static int count = 1; // 静态变量 // 静态方法 public static int getCount() { return count; } public static void main(String[] args) { // 创建对象 StaticTest3 static1 = new StaticTest3(); // 通过对象调用静态方法 System.out.println("通过对象调用静态方法的返回值:" + static1.getCount()); // 通过类名调用静态方法 System.out.println("通过类名调用静态方法的返回值:" + StaticTest3.getCount()); } }程序运行结果为:
通过对象调用静态方法的返回值:1
通过类名调用静态方法的返回值:1
静态方法和非静态方法的区别主要体现在以下两方面:
- 调用静态方法时,既可以通过类名调用也可以通过对象调用,非静态方法只能通过对象调用。
- 静态方法只允许使用类中的静态变量和静态方法,不能使用类中的非静态成员变量和成员方法,而非静态方法没有这方面的限制。