----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
静态static:是一个修饰符,用于修饰成员(成员变量,成员函数),当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。类名.静态成员
在定义事物时,哪些是共性的,哪些是特有的,一定要区分开,特有内容随着对象存储在堆内存中,被静态的内容不再存储在堆内存中。
class Person
{
String name;
static String country="CN";//国籍可以共享,因为国籍大部分一样
public void show()
{
System.out.println(name+country);
}
}
class StaticDemo
{
public static void main(String[] args)
{
Person p=new Person();
p.name="张三";
//p.show();
System.out.println(p.country);
System.out.println(Person.country);//可以被类名调用
}
}
那么被静态的内容存储到哪里了呢?
JAVA在启动时一共在内存中划分了5片空间来进行自己数据的存储,分别是栈区、堆区、方法区、本地方法区和寄存器。
方法区(共享区,数据区):上面代码中的country就是被存放在方法区了,类中的方法也是存储在这里。
static的特点:
1. 随着类的加载而加载,随着类的消失而消失,生命周期最长
2. 优先于对象存在,对象不存在时它还在
3. 被所有对象共享
4. 可以直接被类名调用
class Person
{
String name;//成员变量,实例变量(创建了对象它才存在)
static String country="CN";//静态的成员变量,类变量(类名可以调用)
public void show()
{
System.out.println(name+"::"+country);
}
}
当这个类加载进内存时,country也会加载进内存,而name不会加载进内存,name
只有在创建了对象,在对象中才有name变量。
实例变量和类变量的区别:
1. 存放位置:实例变量随着对象的建立存放在堆内存中;类变量随着类的加载存放在方法区
2. 生命周期:类变量生命周期最长,随着类的消失而消失;实例变量生命周期随着对象的消失而消失
静态使用注意事项:
1. 静态方法只能访问静态成员(包括方法和变量),非静态方法既可以访问静态成员,也可以访问非静态成员。
2. 静态方法中不可以定义this,super等关键字(因为静态优先于对象存在,所以静态方法中不可以出现this)
3. 主函数是静态的
静态有利有弊:
利:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份,可以直接被类名调用。
弊:生命周期过长,访问出现局限性。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
详细请查看www.itheima.com