静态初始化java
⑴ 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{ cup1=new Cup(1);cup2=new Cup(2);} 这个就是java里的静态成员初始化语法。不是方法,只是给静态成员数据赋初始值。
Cup.cup1.f(99)可以看成两部分:
x = Cup.cup1 这是取出Cup类中的静态成员数据cup1,这里称之x
x.f(99) 这是调用对象x的成员函数f
⑶ Java静态初始化块的问题
1、首先打开电脑上的eclipse软件,配置好jdk的,如下图所示。
⑷ 关于JAVA中static初始化问题
java虚拟机在首次主动使用类型的时候才会初始化(lazy-load的形式),主动使用包括以下6种情况
1. 创建类的实例
2. 调用类的静态方法
3. 操作类的非常量静态字段(非final static)
4. 调用特定的反射方法
5. 初始化一个类的子类
6. 指定一个类为虚拟机启动时的初始化类
所以说,你必须主动使用到这个类,这个类才会被初始化,这就能解释第一次有输出,而第二次没有输出的情况了
另外,值得一提的是,加载和初始化不是一个概念,比如,在main函数中写
Table a = null;
一样不会有输出。。Table类被加载了但是没有被初始化,因为这不属于上述6种“主动使用”情况之一,不信试试。。。
⑸ java 静态变量初始化为什么要用静态初始化
在java中用final修饰符修饰的变量表示不可以被二次赋值,且系统不会给其赋默认值。 如果单纯只是final变量,可以在定义的时候就赋默认值,也可以在构造方法中赋默认值。 但是如果同时用final static 修饰变量,因为static变量属于类而不属于对象,且在调用构造方法之前static 变量就已经被系统给赋默认值。而相应的final static 变量就只能在定义的时候就初始化,否则既无法在构造方法中初始化,系统又不会赋默认值,相当于这个变量被定义出来是毫无用处的。 因此java中final static变量必须初始化
⑹ java数组静态初始化区别(内存方面)
我没太明白你说的静态数组初始化是什么意思。
正常静态数组变凉
static int[] a = {1,2,3,4,5};
静态存储的是这个a这个变量,这个变量再进程运行没有退出之前都存在,不回被垃圾收集齐回收。
1,2,3,4,5这些毫无疑问是存放在堆中的。这样如果a这个变量没有指向其他的,1,2,3,4,5都不会被收集。
普通的变量
int b[] = {1,2,3,4,5}
这个变量,离开了作用域,并且没有被其他类引用的话,下一次垃圾回收来临时被判断为链路不可达,被回收资源,就访问不到了。
⑺ java中的静态初始化和动态初始化
静态初始化就是static,动态初始化就是new
所谓的静态和动态是相对于程序运行是而言的,静态是在程序编译时就初始化好了的,动态初始化是在程序运行是才动态分配内存空间,
我觉得已经够通俗的了
⑻ java 中什么叫做静态和非静态。 还有什么叫做静态初始化和动态初始化。
静态就是属于类的,非静态就是不属于类的,属于对象的
静态初始化和动态初始化是创建数组的概念。
静态初始化:创建数组时,程序员显式地为数组中的元素赋初值,你不指定数组长度
动态初始化:创建数组时,由系统默认地为数组中的元素赋初值,你指定数组长度
比如:静态初始化就是
int[]
a;
a
=
{1,2,3};
动态初始化:
int[]
a;
a
=
new
int[3];
⑼ 高级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
}
}