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类初始化,这时就有了第一二行的结果。
②然后在去执行主函数,当new StaticCode()时会将StaticCode类加载到内存中,并执行里面的静态代码块给StaticCode类初始化
这时就有了第三行的结果。
③执行完静态的后会去执行构造函数,执行构造函数时先执行构造代码块在执行其他的内容,这就有了第四五行的结果。
④当主函数中再次new StaticCode()时,StaticCode类中的静态代码块不会在加载,而只会调用构造函数给对象初始化,就有了第六七行的结果。
⑤主函数中执行代码输出OVER,程序结束。
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,程序结束。
相关文章推荐
- Java面向对象学习笔记 -- 4(static、final关键字)
- [java学习笔记]java语言核心----面向对象之static关键字
- java 面向对象学习笔记——修饰词final,static,abstract
- 【职坐标】java面向对象前言——static关键字
- java -- 面向对象概述及static关键字
- 黑马程序员---java基础---面向对象中的构造方法及static关键字,变量的问题
- Java--面向对象之一:面向对象概念、类和对象的关系、封装、构造函数、this关键字、static关键字
- 黑马程序员--03.Java面向对象--02.【static关键字】【main方法】【静态成员】
- Java面向对象-static关键字、静态方法与普通方法、静态成员变量
- JAVA基础初探(三)面向对象思想、类与对象、成员变量与局部变量、构造方法、static关键字详解
- 1、Java面向对象笔记(匿名对象)(static 静态修饰符)(单例设计模式)
- java面向对象_static关键字
- java学习日记_25:面向对象之static关键字
- [java学习笔记]java语言核心----面向对象之this关键字
- 07-Java面向对象构造方法,static关键字,main方法,说明书,math随机数
- 黑马程序员_JAVA笔记06——面向对象2(static、main函数、对象)
- Java笔记2 面向对象<2>static关键字、main函数、静态运用、单例设计模式
- Java面向对象基础--Static关键字的作用及使用
- java学习笔记(static和final关键字)
- JAVA学习笔记(二)-面向对象程序设计