静态:static
用法:是一个修饰符,用于修饰成员(成员变量,成员方法)
当成员被静态修饰后,既可以被对象调用,又可以被类调用,类名.静态成员。
static的特性:
1.随着类的加载而加载
2.优先于对象存在。
3.被所有对象所共享。
4.可以直接被类名调用。
5.修饰的是共享数据。
注意:静态随着类的消失而消失,生命周期长,明确一点,静态先存在,对象时候存在的。
实例变量和类变量的区别:
1.存在位置:类变量随类的加载而存在方法区中
2.生命周期:类变量岁类的消失,生命周期长,
实例变量随类的消失而消失生命周期短。
3.调用方式:类变量可以直接被类名调用。,成员变量,可以被对象调用。
4.别名不同:静态变量也称类变量,成员变量也称实例变量。
静态的使用注意事项:
1. 静态方法只能访问静态成员
非静态方法可以访问非静态成员。
2.静态方法中不可以定义this,super关键字,(静态优先于对象存在,所以静态方法中不可以存在this关键字)
3.主函数是静态的。
静态有利有弊:
利:对对象共享数据进行单独存储,节省空间,没必要每一个对象存储一份。 可以直接被类名调用。
弊:生命周期长,,访问出现局限。
main 不是关键字,但是是一个特殊的单词,可以被jvm识别。
主函数是固定格式, 其中main(String[])是jvm识别的标志
jvm在调用主函数是传入的是 new string[0]
由于静态方法有访问局限性,那什么时候定义静态方法呐。
在不涉及特有方法是,不涉及特有变量 可以定义静态的
==============================================================================================================
class DuoTaiTest4
{
public static void main(String[] args)
{
Demo d = new Demo(7);
d.speak();
Demo.speak();//静态方法类名直接调用。
d.show();
}
}
class Demo
{
int age;
static int num=9;
Demo(int age)
{
this.age=age;
}
public static void speak()//静态方法只能访问静态成员
{
System.out.println(num);//静态方法只能访问静态成员
}
public void show()
{
System.out.println(age);
}
} |