java中static 关键字的使用

来源:互联网 发布:淘宝不能发布游戏账号 编辑:程序博客网 时间:2024/05/18 20:33
有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,
而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static成员的最常见的例子是main( )。因为在程序开始执行时必须调用main(),所以它被声明为static。声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:· 它们仅能调用其他的static方法。· 它们只能访问static数据。· 它们不能以任何方式引用this或super。   
 如果你需要通过计算来初始化你的static变量,你可以声明一个static块,

Static块仅在该类被加载时执行一次。

static 的具体使用如下:

package Static;


public class Static {
public static void main(String[] args) {
Student A = new Student();
// A.country = "Hello";
// System.out.println(A.country);
Student B = new Student();
// System.out.println(B.country);//B对象直接调用country实际是从方法区调用,
//被所有对象共享
// System.out.println(Student.country);//被类名直接调用,被static修饰的成员变量
//随着类名的加载而加载
B.print();
B.p();
}
}
/*
 * static 关键字
 * 作用:是一个修饰符,用于修饰成员(成员变量,成员方法)
 * 1.被static修饰后的成员变量只有一份
 * 2.当成员被static修饰之后,多了一种访问方式,除了可以被对象调用外还可以被类名直接调用
 * (类名.静态成员)
 * 1.static特点:随着类的加载而加载
 * 2.优先于对象的存在
 * 3.被所有的对象所共享的
 * 使用:
 * 当类的成员变量被所有的对象共享时可以定义为static(比如一个教室的所有学生对象
 * 用一个饮水机)
 * 
 * 生命周期:类变量周期最长,随着类的消失而消失,非静态成员变量随着对象的消失而消失
 */
class Student{
String name;
int age;//实例变量
static String country;//静态变量(类变量)将country存入方法区,不再进入堆内存,
//对所有对象共享
static void print(){//static修饰的方法为静态方法
String A1 = "hello";//A1为局部变量
System.out.println(A1);
System.out.println(country);
// System.out.println(name);//错,静态方法不能引用动态的变量(只能访问静态成员变量)
// System.out.println(this.name);静态方法中不可以定义this super关键字,因为优先于对象而存在
}
void p(){
System.out.println(name);
System.out.println(country);//非静态方法能够调用静态成员
}
}