static 用于修饰成员变量和成员方法,其修饰的成员在内存中存放在方法区中。
static的特点:
①随着类的加载而加载,随着类的消失而消失。就是在加载类的时候,static修饰的成员就会在方法区中存在。
②优先于对象的存在。因为static修饰的成员是随着类的加载而加载,而对象时在new时才存在。
③被所有对象所共享。
④可以直接被类名所调用。 可以这样调用:类名.static修饰的成员
static使用的注意事项:
①静态方法中只能访问静态成员,不能使用this,super关键字
原因:因为static修饰的方法是随着类的加载而加载,当执行静态方法的时候,并没有类的对象,所以在static方法中调用“未声明”
静态成员是不能运行成功的。所以静态方法中只能访问静态成员。
static的使用情况:
①用static来修饰成员变量:
对象中出现共享数据的时,该数据定义成静态变量,对象中的特有数据定义成非静态成员。所谓的共享数据:就是共有的,不需要更改的
②用static来修饰函数:
当函数内部没有访问到非静态数据(对象特有数据),该功能可以定义成静态成员
例如:
/**
该类只限在中国使用: 有一个年龄/姓名、所在城市、所在国家
并有一个;对比自己和其他人年龄的功能和比较两个数的大小的功能
*/
class Person
{
//在创建一个Person对象时,不可能年龄、姓名、城市,都是一样的.所以不属于共享数据所以定义成非静态变量
int age ;//年龄
String name;//姓名
String city;//城市
//因为该类只限在中国实用,所以只要new Person()的就是他所在的国家就是中国。所以country不需要在实例化的时,每次都赋一样的值。
static String country="China";
//该功能是比较年龄:因为比较的一个对象时自己,所以访问到了该对象的特有数据age变量。定义成非静态方法
public bool compareAge(Person otherPerson)
{
return this.age==otherPerson.age;
}
//该功能是对比两个数据的大小。方法体中并没有调用该对象的任何特有数据,只是对两个数进行比较。所以定义成静态成员
public static bool compareNum(int num1,int num2)
{
return num1==num2;
}
}