被static修饰的成员变量和成员方法独立于该类的任何对象。
被类所有的实例所共享。
当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例对象共用同一个static变量。这也就是说不管创建多少对象,static修饰的变量只占有一块内存。
1、静态成员变量:
声明为static关键词修饰的变量叫做静态成员变量,也叫全局变量。
静态成员变量的访问方式:
(1)直接通过类名调用类的静态成员变量:
类名.静态成员变量名
(2)通过对象名调用类的静态成员变量:
对象名.静态成员变量名
当成员变量需要在类的实例对象间共享时,使用static修饰成员变量,极为方便。
2、静态成员方法:
声明为static关键词修饰的方法叫做静态成员方法。例如:作为Java应用程序入口的main成员方法就是一个静态成员方法。
静态成员变量的访问方式:
(1)通过类名调用类的静态成员方法:
类名.静态成员方法名(成员方法调用参数列表)
(2)通过实例对象名调用类的静态成员方法:
对象.静态成员方法名(成员方法调用参数列表)
在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。
应用实例:
public class MyBook {
//声明非静态成员变量 书名
public String book_name ;
//声明静态成员变量,为类的所有实例所共享
public static int book_number;
//构造函数
public MyBook(String book_name){
this.book_name=book_name;
book_number++;
}
public void print_book_name(){
System.out.println("新买了一本书:"+this.book_name);
}
//静态成员方法,只能直接调用同类中其他的静态成员
public static void print_book_number(){
System.out.println(MyBook.book_number);
}
//main方法也是一个静态成员方法
public static void main(String args[]){
//new一本书“三体”
MyBook book_1 = new MyBook("三体");
MyBook book_2 = new MyBook("Java程序设计");
//控制台打印第一本书的名字
book_1.print_book_name();
//控制台打印第二本书的名字
book_2.print_book_name();
//book_number为类的实例对象所共有
//打印类对象的静态成员变量
System.out.println("MyBook类中静态成员变量的值为:");
MyBook.print_book_number();
//打印book_1中静态成员变量
System.out.println("book_1中静态成员变量的值为:");
book_1.print_book_number();
//打印book_2中静态成员变量
System.out.println("book_2中静态成员变量的值为:");
book_2.print_book_number();
}
}