java静态代码初始化 java静态初始化器只能有一个吗-成都快上网建站

java静态代码初始化 java静态初始化器只能有一个吗

java静态初始化器对什么进行初始化

java静态初始化器对static进行初始化。

在延津等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、成都做网站 网站设计制作按需定制设计,公司网站建设,企业网站建设,高端网站设计,全网整合营销推广,外贸营销网站建设,延津网站建设费用合理。

所谓的静态和动态是相对于程序运行是而言的,静态是在程序编译时就初始化好了的,动态初始化是在程序运行是才动态分配内存空间。

static变量初始值一定要是常量。static变量中文名叫静态变量。位置静态局部变量被编译器放在全局存储区.data,所以它虽然是局部的,但是在程序的整个生命周期中存在。

作用:

对于静态全局变量来说,针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域。

对于静态局部变量来说,在函数内以static声明的变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内)。

但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同,且两次调用间变量值始终保持一致;必须注意,静态局部变量只能初始化一次,这是由编译器来保证实现。

对于静态成员变量来说,在C++中,在类的定义中以static声明的成员变量属于类变量,也即在所有类实例中共享,与之相对的就是过程变量。

高级Java开发中什么是静态初始化器?

静态初始化器是由关键字static引导的一对大括号括起的语句组。它的作用与类的构造函数有些相似,都用来完成初始化的工作,但是静态初始化器与构造函数有三点根本的不同:

(1)构造函数是对每个新创建的对象初始化,而静态初始化器是对每个类进行初始化;

(2)构造函数是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载入内存时由系统调用运行的;

(3)不同于构造函数,静态初始化器不是方法,没有方法名、返回值和参数列表。

package com.text.java;

/**

* p class="detail"

* 功能:静态初始化器

* static{ 和 }之间的代码被称为静态初始化器。它只有在第一次加载类时运行。

* 只有静态变量才可以在静态初始化器中进行访问。

* 虽然创建了多个实例,但静态初始化器只运行一次。

* /p

* @ClassName: StaticUtil

* @version V1.0

* @date 2016-8-10

* @author dmw

*/

public class StaticUtil {

static int count;

static{

System.out.println("类初始化静态加载++++");

System.out.println("加载次数"+count);

count++;

}

public static void main(String[] args) {

StaticUtil temp1=new StaticUtil();

StaticUtil temp2=new StaticUtil();

StaticUtil temp3=new StaticUtil();

// 输出: 类初始化静态加载++++

// 加载次数0

}

}

java 静态数据初始化

从主类public class StaticInitialization 中的开始main函数开始。

在初始化对象时,开始 静态数据的初始化

譬如:

执行完

public class StaticInitialization {

public static void main(String[] args) {

System.out.println(

"Creating new Cupboard() in main");

后,然后

执行new Cupboard();这段代码

这时,程序就会跳到Cupboard这个类中,当实例化Cupboard这个类的对象的时候,Cupboard这个类的里面静态数据也同时被处理。

剩下的代码都一样。

关于JAVA中static初始化问题

java虚拟机在首次主动使用类型的时候才会初始化(lazy-load的形式),主动使用包括以下6种情况

1. 创建类的实例

2. 调用类的静态方法

3. 操作类的非常量静态字段(非final static)

4. 调用特定的反射方法

5. 初始化一个类的子类

6. 指定一个类为虚拟机启动时的初始化类

所以说,你必须主动使用到这个类,这个类才会被初始化,这就能解释第一次有输出,而第二次没有输出的情况了

另外,值得一提的是,加载和初始化不是一个概念,比如,在main函数中写

Table a = null;

一样不会有输出。。Table类被加载了但是没有被初始化,因为这不属于上述6种“主动使用”情况之一,不信试试。。。


文章题目:java静态代码初始化 java静态初始化器只能有一个吗
文章链接:http://kswjz.com/article/dogchii.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流