您的位置:首页 > 编程语言 > Java开发

Java面向对象笔记(六)static关键字

2017-04-14 12:29 435 查看
一、有什么作用

static表示静态的,存在于静态域中,用于修饰成员变量和成员函数,

当成员变量被static修饰后,可以用类名调用(类名.静态成员)。

二、特点

①随着类的加载而加载,随着类的消失而消失(生命周期最长)

②被所有对象所共享

③优先于对象存在

④可以直接被类名所调用

三、和实例变量(成员变量)的区别

①存在位置:类变量随着类的加载而存在于方法区;实例变量随着对象的建立而存在于堆内存中。

②生命周期:类变量生命周期最长,随着类的消失而消失;实例变量生命周期随着对象的消失而消失。

三、注意事项

①静态方法只能访问静态成员,非静态方法既可以访问静态,又可以访问非静态。

②静态方法中不可以定义this,super关键字(因为静态优先于对象存在)

四、静态代码块

①格式

static

{

//代码块

}

②注意:随着类的加载而执行,只执行一次,并优先于主函数,用于给类初始化。

五、案例

class StaticCodeDemo
{
static
{
System.out.println("这是StaticCodeDemo类中的静态代码块");
}

public static void main(String[] args)
{
new StaticCode();
//类只加载一次,在new一个对象时与不会在执行static中的代码
new StaticCode();
System.out.println("OVER");
}
static
{
System.out.println("这是StaticCodeDemo类中位于主函数下的静态代码块");
}
}
class StaticCode
{
//这是StaticCode类中的静态代码块
static
{
System.out.println("这是StaticCode类中的静态代码块");
}
public StaticCode(){
{
//这是StaticCode类中的构造代码块
System.out.println("这是StaticCode类中的构造代码块");
}
System.out.println("这是StaticCode类中的构造函数");

}
}
这是StaticCodeDemo类中的静态代码块
这是StaticCodeDemo类中位于主函数下的静态代码块
这是StaticCode类中的静态代码块
这是StaticCode类中的构造代码块
这是StaticCode类中的构造函数
这是StaticCode类中的构造代码块
这是StaticCode类中的构造函数
OVER


解释:

①当程序运行时,先将StaticCodeDemo类加载到内存中,同时会将静态代码块加载到静态域中给StaticCodeDemo类初始化,这时就有了第一二行的结果。

②然后在去执行主函数,当new StaticCode()时会将StaticCode类加载到内存中,并执行里面的静态代码块给StaticCode类初始化

这时就有了第三行的结果。

③执行完静态的后会去执行构造函数,执行构造函数时先执行构造代码块在执行其他的内容,这就有了第四五行的结果。

④当主函数中再次new StaticCode()时,StaticCode类中的静态代码块不会在加载,而只会调用构造函数给对象初始化,就有了第六七行的结果。

⑤主函数中执行代码输出OVER,程序结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐