java之静态(static)总结

来源:互联网 发布:手机淘宝降价提醒设置 编辑:程序博客网 时间:2024/06/05 04:20


静态:static

用法:是一个修饰符,用于修饰成员变量或成员函数,当成员被static修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用,调用格式,类名.静态成员。


特点:

1,随着类的加载而加载,也就是说静态会随着类的消失而消失,说明它的生命周期最长

2,被所有对象共享。

3,优先于对象存在*静态先存在,对象后存在

4,可以直接被类名调用


实例变量与类变量的区别:

1,存放位置

类变量随着类的加载而加载存在与方法区中

实例变量随着对象的建立而存在于堆内存中

2,生命周期

类变量生命周期最长,随着类的消失而消失

实例变量随着对象的消失而消失


static使用注意事项:

1,静态方法只能访问静态变量

     非静态方法既可以访问静态变量也可以访问非静态变量

2,静态方法中不可以定义this,super关键字

     因为静态优先于对象存在,this,super关键字是对对象的调用


static的利害:

利:对对象的共享数据进行单独空间的存储,节省空间,没必要每一个对象都存储一份

害:生命周期过长,访问出现局限性。


什么时候定义静态变量?

当对象中出现共享数据,该数据被静态所修饰,对象中的特有数据要定义成非静态数据存在于堆内存中。

什么时候定义静态方法?

当功能内部没有访问到非静态数据,那么该功能可定义成静态的。


静态代码快

格式:

static

 {

    执行语句;

 }


特点:随着类的加载而加载,只执行一次,并优于主函数执行,用于给类进行初始化。


静态代码快与构造代码快区别

静态代码块用于给类进行初始化,构造代码块用于给对象进行初始化。

示例:

class  StaticCode
{

         //静态代码块
static 
{
System.out.println("a");
}
}


class  Half
{

        //静态代码块
static 
{
System.out.println("b");
}
public static void main(String[] args) 
{
        new StaticCode();
new StaticCode();
System.out.println("over");
}

        //静态代码块
static 
{
System.out.println("c");
}
}
//打印结果:b c a over。首先加载类Half  执行语句打印出b c再找到主函数执行主函数中语句
有两句new StaticCode();但只执行一次,打印a,最后打印出over


****执行顺序

静态代码块》构造代码块》构造函数


内存建立讲解:

person p=new person("zhangsan",20)


1,因为new用到person.class会先找到person.class文件并加载到内存中

2,执行该类的静态代码块,如有给person.class进行初始化

3,在堆内存中开辟空间,分配内存地址

4,在堆内存中建立对象特有属性,并进行默认初始化

5,对属性进行显示初始化

6,对对象进行构造代码块初始化

7,对对象进行对应的构造函数初始化