04.(Java基础)-01Static关键字的有哪些作用
2015-12-22 19:40
351 查看
Static 关键字主要有两个作用:
1.为特定的数据类型或对象分配单一的存储空间,而不用去考虑创建了多少个实例对象,用static修饰的在内存中只有一份它与创建的实例的对象多少没有关系。
2.在不创建类的实例对象的情况下就可以通过类来直接调用方法或使用类中的属性。
注意:
由于static方法使用前不需要创建任何对象;所以对于static方法不能简单地调用其非static方法或域而没有指定某个命名对象,来直接访问非static方法和域。也就是说在同一个类中存在一个static字段和一个非static字段,一个static方法和非static方法。static方法可以调用static字段,但不可以调用非static字段。非static方法可以调用static和非static字段。
Static主要有四种使用情况:
成员变量,成员方法,代码块,内部类
1.static 变量
static变量也称作静态变量(可以理解为全局变量),静态变量和非静态变量的区别是:静态变量属于类(Class,只有唯一一个),在内存中只有一个(所有的实例都指向这一个),它当且仅当对应的类初次加载时会被分配空间。而非静态变量是对象所拥有的,在创建实例对象的时候被初始化,只有创建new实例对象后才会被分配,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。
2.static方法
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this和super的,因为它不依附于任何对象,既然都没有对象,就谈不上this 和super了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用.
3.static代码块
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个 static块,并且只会执行一次。
为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次(static代码块只会执行一次)。下面看个例子:
isBornBoomer是用来这个人是否是1946-1964年出生的,而每次isBornBoomer被调用的时候,都会生成startDate和birthDate两个对象,造成了空间浪费,如果改成这样效率会更好:
因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。
4.static内部类
static内部类是指被声明了static的内部类。它可以不依赖外部类的实例而被实例化(外部类.内部类 inner = new 外部类.内部类()),而通常的内部类需要在外部类实例化后才能实例化。
1.为特定的数据类型或对象分配单一的存储空间,而不用去考虑创建了多少个实例对象,用static修饰的在内存中只有一份它与创建的实例的对象多少没有关系。
2.在不创建类的实例对象的情况下就可以通过类来直接调用方法或使用类中的属性。
注意:
由于static方法使用前不需要创建任何对象;所以对于static方法不能简单地调用其非static方法或域而没有指定某个命名对象,来直接访问非static方法和域。也就是说在同一个类中存在一个static字段和一个非static字段,一个static方法和非static方法。static方法可以调用static字段,但不可以调用非static字段。非static方法可以调用static和非static字段。
Static主要有四种使用情况:
成员变量,成员方法,代码块,内部类
1.static 变量
static变量也称作静态变量(可以理解为全局变量),静态变量和非静态变量的区别是:静态变量属于类(Class,只有唯一一个),在内存中只有一个(所有的实例都指向这一个),它当且仅当对应的类初次加载时会被分配空间。而非静态变量是对象所拥有的,在创建实例对象的时候被初始化,只有创建new实例对象后才会被分配,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。
2.static方法
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this和super的,因为它不依附于任何对象,既然都没有对象,就谈不上this 和super了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用.
3.static代码块
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个 static块,并且只会执行一次。
为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次(static代码块只会执行一次)。下面看个例子:
4.static内部类
static内部类是指被声明了static的内部类。它可以不依赖外部类的实例而被实例化(外部类.内部类 inner = new 外部类.内部类()),而通常的内部类需要在外部类实例化后才能实例化。
相关文章推荐
- 解决java.sql.ResultSet的getDate获取时间中时分秒为0的问题
- 使用Eclipse编译运行MapReduce程序 Hadoop2.4.1
- 深入Java虚拟机:JVM中的Stack和Heap
- Java工程师成神之路
- 我的java基础学习2
- Java多线程总结(8)concurrent.locks包下的锁机制的使用
- leetcode 140:Word Break II 采用很巧妙的动态规划和DFS联合使用 JAVA源代码实现
- ubuntu下的jdk,eclipse安装
- Java拾遗之Spring Web MVc
- spark createDirectStream保存kafka offset(JAVA实现)
- Java实例变量初始化
- Android Studio导入外部Eclipse项目中用到的so库
- java.lang.ExceptionInInitializerError
- java正则表达式——判断字符串为哪种类型的数字?
- Java的基本程序设计结构(二)
- Java:断点续传
- java keytool证书工具使用小结(转)
- Android:Eclipse-unable to get system library for the project
- Spring 配置多数据源实现数据库读写分离
- [Java开发之路](5)异常