13.黑马程序员-static关键字、静态代码块
2012-10-16 18:04
253 查看
------- android培训、java培训、期待与您交流! ----------
1.static(静态)关键字
作用:用于修饰成员(成员变量和成员方法)。
被修饰后成员的特点:
随着类的加载而加载。
优先于对象存在。
被所有对象所共享。
可以直接被类名调用:类名.静态成员。
使用注意
静态方法只能访问静态成员。
静态方法中不可以写this,super关键字。
主函数是静态的。
静态的好处:对对象的共享数据进行单独空间的存储,节省空间。没有必要每个对象都存储一份。。可以直接用类名调用。
静态的弊端:生命周期过长,访问出现局限性。
什么时候使用静态?
要从两方面下手
因为静态修饰的内容有成员变量和函数。
什么时候定义静态变量(类变量)呢?
当对象中出现共享数据时,共享数据不是指成员变量相同,而是变量的值相同。对象中的特有数据要定义成非静态存在于堆内存中。
什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据)。那么该功能可以定义成静态的。
方法区:
静态方法存在于方法区
也叫做:共享区,数据区。
方法区还有一些更细节的划分
存在:类中的方法,类中的共享数据,
方法是类的共性方法,对象的特有数据是每个对象都不同的。
方法区的数据(类变量,也就是静态变量)随着类的建立而建立,随着类的消失而消失。而实例变量随着对象的建立而存在于对内存中,随着对象的消失而消失。
静态的应用
当多个应用程序的功能重复时,可以把方法提取出来,建立一个Tool类。
虽然可以通过建立arrayTool的对象使用这些工具方法,对数组进行操作,但是发现了问题
对象是用于封装数据的,开始arrayTool对象中并未纷杂U那个特有数据。
操作数组的每一个方法都没有用到arrayTool对象中的特有数据。
这时就考虑,让程序更严谨,是不需要对象的。
可以将arrayTool中的方法都定义成static的。直接通过类名调用即可。可以将构造函数私有防止被建立对象。
2.静态代码块
静态代码块的格式:
static
{
静态代码块中的执行语句。
}
特点:随着类的家在而执行,只执行一次。
作用:给类初始化,并且不需要调用,不论位置前后都优先于mian函数。
用到类中的内容的时候,类才会初始化,new 类(使用了构造方法)或类名.方法都是。值定义引用是不会加载类的,例如类 类名=null就不加载。
静态代码块的考试
静态代码块、构造代码块、构造函数一起出现,前者随着类初始化,后者随着对象初始化。疑问?静态代码块和构造代码块次序不同时,是按代码顺序初始化呢还是先初始化类在初始化对象这种方式。
对象的初始化过程。
创建对象时,new在内存中做了什么事情。
person p =new person();
new对象的时候会将person这个class从硬盘当中通过jvm加载进内存,开辟了堆内存空间。这时候栈内存中,主函数里有个p引用。
静态代码块被执行。
对象空间开辟,成员变量进入内存,默认初始化,例如int初始化为0,字符串初始化为null。然后是显示初始化,成员变量开始赋值。
接下来构造代码块初始化,再后构造函数初始化。
将内存地址付给栈内存中的p变量。
对象调用成员过程
person p = new person("zhangsan",20);
p.setName(“lisi”);
方法区优先于对象存在,静态方法、静态变量先初始化。
栈里面main先执行,有一个引用变量p,堆里面有一个 person 对象,对象默认初始化后再显示初始化,然后p指向对象。
对象成员(方法、变量)加载进方法区。
对象方法中如果含有局部变量参数,那么这个方法也要进入栈中开辟空间。方法一开辟空间内部就有个this的引用,谁调用这个方法,this就是堆中的这个对象,然后栈中的方法的局部变量修改堆中的成员变量。
1.static(静态)关键字
作用:用于修饰成员(成员变量和成员方法)。
被修饰后成员的特点:
随着类的加载而加载。
优先于对象存在。
被所有对象所共享。
可以直接被类名调用:类名.静态成员。
使用注意
静态方法只能访问静态成员。
静态方法中不可以写this,super关键字。
主函数是静态的。
静态的好处:对对象的共享数据进行单独空间的存储,节省空间。没有必要每个对象都存储一份。。可以直接用类名调用。
静态的弊端:生命周期过长,访问出现局限性。
什么时候使用静态?
要从两方面下手
因为静态修饰的内容有成员变量和函数。
什么时候定义静态变量(类变量)呢?
当对象中出现共享数据时,共享数据不是指成员变量相同,而是变量的值相同。对象中的特有数据要定义成非静态存在于堆内存中。
什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据)。那么该功能可以定义成静态的。
方法区:
静态方法存在于方法区
也叫做:共享区,数据区。
方法区还有一些更细节的划分
存在:类中的方法,类中的共享数据,
方法是类的共性方法,对象的特有数据是每个对象都不同的。
方法区的数据(类变量,也就是静态变量)随着类的建立而建立,随着类的消失而消失。而实例变量随着对象的建立而存在于对内存中,随着对象的消失而消失。
静态的应用
当多个应用程序的功能重复时,可以把方法提取出来,建立一个Tool类。
虽然可以通过建立arrayTool的对象使用这些工具方法,对数组进行操作,但是发现了问题
对象是用于封装数据的,开始arrayTool对象中并未纷杂U那个特有数据。
操作数组的每一个方法都没有用到arrayTool对象中的特有数据。
这时就考虑,让程序更严谨,是不需要对象的。
可以将arrayTool中的方法都定义成static的。直接通过类名调用即可。可以将构造函数私有防止被建立对象。
2.静态代码块
静态代码块的格式:
static
{
静态代码块中的执行语句。
}
特点:随着类的家在而执行,只执行一次。
作用:给类初始化,并且不需要调用,不论位置前后都优先于mian函数。
用到类中的内容的时候,类才会初始化,new 类(使用了构造方法)或类名.方法都是。值定义引用是不会加载类的,例如类 类名=null就不加载。
静态代码块的考试
静态代码块、构造代码块、构造函数一起出现,前者随着类初始化,后者随着对象初始化。疑问?静态代码块和构造代码块次序不同时,是按代码顺序初始化呢还是先初始化类在初始化对象这种方式。
对象的初始化过程。
创建对象时,new在内存中做了什么事情。
person p =new person();
new对象的时候会将person这个class从硬盘当中通过jvm加载进内存,开辟了堆内存空间。这时候栈内存中,主函数里有个p引用。
静态代码块被执行。
对象空间开辟,成员变量进入内存,默认初始化,例如int初始化为0,字符串初始化为null。然后是显示初始化,成员变量开始赋值。
接下来构造代码块初始化,再后构造函数初始化。
将内存地址付给栈内存中的p变量。
对象调用成员过程
person p = new person("zhangsan",20);
p.setName(“lisi”);
方法区优先于对象存在,静态方法、静态变量先初始化。
栈里面main先执行,有一个引用变量p,堆里面有一个 person 对象,对象默认初始化后再显示初始化,然后p指向对象。
对象成员(方法、变量)加载进方法区。
对象方法中如果含有局部变量参数,那么这个方法也要进入栈中开辟空间。方法一开辟空间内部就有个this的引用,谁调用这个方法,this就是堆中的这个对象,然后栈中的方法的局部变量修改堆中的成员变量。
相关文章推荐
- 黑马程序员_iOS开发C语言基础之关键字typedef、static、extern使用
- 黑马程序员——关于static关键字
- 黑马程序员——Java基础语法 之面向对象(概念,特征,this,static关键字,代码块)
- 黑马程序员——static关键字丶main方法丶继承...
- 黑马程序员——C语言的关键字 typedef,static,extern和预处理指令
- 黑马程序员——java中static关键字的应用
- 黑马程序员---基础-概述、封装、构造方法、this和static关键字、继承
- 黑马程序员——static关键字
- 黑马程序员----构造函数,static关键字
- 黑马程序员--面向对象(二)static关键字、静态代码块、对象的初始化过程
- 黑马程序员---面向对象:static关键字
- 黑马程序员_static和final关键字
- 黑马程序员_JavaSE基础知识总结七:new、this、static关键字和单例模式初步
- 黑马程序员——面向对象——static关键字——代码块
- 黑马程序员——OC语言基础---Static关键字使用
- 黑马程序员入学篇——(3)static 关键字
- 黑马程序员——高新技术---Java基础语法—面向对象_构造方法,static 关键字
- 黑马程序员———面向对象之封装及this和static关键字
- 黑马程序员——static关键字 与简单的单态设计模式
- 黑马程序员——零基础学习iOS开发——07 全局变量、局部变量、static和extern关键字