静态:static
用法:是一个修饰符,用于修饰成员(成员变量和成员函数)
当成员被静态修饰后,就多了一个调用方法,即除了可以被对象调用以外,还可以直接被类名调用。
调用形式:类名.静态成员
类名.静态函数
static的特点:
1,随着类的加载而加载。
也就是说:静态会随着类的消失而消失。说明它的生命周期最长。
2,优先于对象的存在
明确一点:静态是先存在的,对象是后存在的。
3,静态成员或静态变量被所有对象所共享
4,可以直接被类名调用
实例变量:也称成员变量
类变量:静态成员变量、也称静态变量
实例变量(成员变量)和类变量(静态变量)的区别:
1,存放位置不同
成员变量随着对象的建立而存在堆内存中;
静态变量随着类的加载而存在于方法区中;方法区也被称为共享区、数据区。
2,生命周期不同
类变量的生命周期最长,随着类的加载而加载,随着类的消失而消失。
成员变量的生命周期随着对象的消失而消失。
静态使用注意事项:
1,静态方法只能访问静态成员,因为静态产生的比较早,对象产生的比较晚,非静态变量随着对象地产生而产生;
非静态方法既可以访问静态也可以访问非静态。但是当确定某一对象已经建立后,可以访问该对象的成员和方法。
2,静态方法中不可以定义this,super关键字。
因为静态优先于对象存在,而this和super关键字都是代表某一对象的,所以静态方法中不能出现this和super关键字。
3,主函数是静态的。
静态的利弊:
利:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中存储一份;可以直接被类名调用。
弊:生命周期过长,访问出现局部性(局部虽好,只能访问静态。)
用法:是一个修饰符,用于修饰成员(成员变量和成员函数)
当成员被静态修饰后,就多了一个调用方法,即除了可以被对象调用以外,还可以直接被类名调用。
调用形式:类名.静态成员
类名.静态函数
static的特点:
1,随着类的加载而加载。
也就是说:静态会随着类的消失而消失。说明它的生命周期最长。
2,优先于对象的存在
明确一点:静态是先存在的,对象是后存在的。
3,静态成员或静态变量被所有对象所共享
4,可以直接被类名调用
实例变量:也称成员变量
类变量:静态成员变量、也称静态变量
实例变量(成员变量)和类变量(静态变量)的区别:
1,存放位置不同
成员变量随着对象的建立而存在堆内存中;
静态变量随着类的加载而存在于方法区中;方法区也被称为共享区、数据区。
2,生命周期不同
类变量的生命周期最长,随着类的加载而加载,随着类的消失而消失。
成员变量的生命周期随着对象的消失而消失。
静态使用注意事项:
1,静态方法只能访问静态成员,因为静态产生的比较早,对象产生的比较晚,非静态变量随着对象地产生而产生;
非静态方法既可以访问静态也可以访问非静态。但是当确定某一对象已经建立后,可以访问该对象的成员和方法。
2,静态方法中不可以定义this,super关键字。
因为静态优先于对象存在,而this和super关键字都是代表某一对象的,所以静态方法中不能出现this和super关键字。
3,主函数是静态的。
静态的利弊:
利:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中存储一份;可以直接被类名调用。
弊:生命周期过长,访问出现局部性(局部虽好,只能访问静态。)
class Person
{
String name;
static String country="CN";
public static void show(){
System.out.println(country+"::::");
}
}
class StaticDemo
{
public static void main(String[] args)
{
//System.out.println(Person.country);
//Person.show();
Person p1 = new Person();
System.out.println(p1.name);
}
}