导航:首页 > 编程语言 > java静态类初始化

java静态类初始化

发布时间:2022-10-09 23:31:03

java 中静态内部类字段什么时候初始化是在外部类加载的时候就初始化吗

首先分析下名字:静态内部类
静态是static。静态的方法或者参数是随着类的加载而产生的(感觉应该是JVM启动时static属性就加载了。)。这就是为什么不用实例化类,就可以调用它的原因。
内部类:用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。其他类不会调用。所以没必要另写一个类。外部类可以调用内部类。而内部类不能调用外部类的方法。
所以我觉得
静态内部类中的属性,方法,是在外部类加载的时候初始化的。
希望对您有帮助。如果有问题请自行
谷歌
度娘.

② java 中静态内部类字段什么时候初始化

不是的,只有在加载内部类的时候才初始化 //有问题可以继续交流
楼主只要看懂一下的代码
那么对于类的加载
基本上就没问题了
最后类的加载过程的解释
public class Test6 {
public static void main(String[] args){
new B();
new A.C();
}
}

class A{
private P p1 = new P("A--p1");
static P p3 = new P("A--p3");
public A(){
System.out.println("A()");
}
private P p2 =new P("A--p2");
static{
new P("A--static");
}
{new P("A{...}");}

public static class C {
private P p1 = new P("C--p1");
static P p3 = new P("C--p3");
public C(){
System.out.println("C()");
}
private P p2 =new P("C--p2");
static{
new P("C--static");
}
{new P("C{...}");}
}
}

class B extends A {
private P p1 = new P("B --p1");
static P p3 = new P("B -- p3");
public B() {
System.out.println("B()");
}
public P p2 = new P("B -- p2");
static {
new P("B -- static");
}

{new P("B{...}");}
}

class P {
public P(String s) {
System.out.println(s);
}
}
/*

有父类的情况
1. 加载父类
1.1 为静态属性分配存储空间并赋初始值
1.2 执行静态初始化块和静态初始化语句(从上至下)
2. 加载子类
2.1 为静态属性分配存储空间
2.2 执行静态初始化块和静态初始化语句(从上至下)
3. 加载父类构造器
3.1 为实例属性分配存数空间并赋初始值
3.2 执行实例初始化块和实例初始化语句
3.3 执行构造器内容
4. 加载子类构造器
4.1 为实例属性分配存数空间并赋初始值
4.2 执行实例初始化块和实例初始化语句
4.3 执行构造器内容
5 回到main()
内部类的加载过程也一样
*/

③ java类中的静态常量是什么时候初始化的

我们知道一个类(class)要被使用必须经过装载,连接,初始化这样的过程。下面先对这三阶段做一个简单的描述,之后会结合一个简单的例子来说明java中类的初始化过程。

在装载阶段,类装载器(Bootstrap ClassLoader 或者用户自定义的ClassLoader) 把编译形成的class文件载入内存,创建类相关的Class对象,这个Class对象封装了我们要使用的类的类型信息。

连接阶段又可以分为三个子步骤:验证、准备和解析。
验证就是要确保java类型数据格式 的正确性,并适于JVM使用。
准备阶段,JVM为静态变量分配内存空间,并设置默认值,注意,这里是设置默认值,比如说int型的变量会被赋予默认值0 。在这个阶段,JVM可能还会为一些数据结构分配内存,目的 是提高运行程序的性能,比如说方法表。
解析过程就是在类型的常量池中寻找类、接口、字段和方法的符号引用,把这些符号引用替换成直接引用。这个阶段可以被推迟到初始化之后,当程序运行的过程中真正使用某个符号引用的时候 再去解析它。

类会在首次被“主动使用”时执行初始化,为类(静态)变量赋予正确的初始值。在Java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化块给出的。而我们这里所说的主动使用 包括:
1. 创建类的实例
2. 调用类的静态方法
3. 使用类的非常量静态字段
4. 调用Java API中的某些反射方法
5. 初始化某个类的子类
6. 含有main()方法的类启动时

初始化一个类包括两个步骤:
1、 如果类存在直接父类的话,且直接父类还没有被初始化,则先初始化其直接父类
2、 如果类存在一个初始化方法,就执行此方法

④ 高级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类中的静态变量是什么时候初始化的

静态方法是你手动调用的时候执行。
静态变量与类一起加载,最优先的。
然后是,静态初始化器(只初始化静态成员变量)。
然后是,属性初始化(只初始化非静态成员变量)。
最后是,构造函数(常用的,你懂的)...
记住:先是静态,然后是非静态。

⑥ Java静态初始化块的问题

1、首先打开电脑上的eclipse软件,配置好jdk的,如下图所示。

⑦ Java的静态块和初始化块分别何时执行有什么区别

静态初始化块:当类第一次加载时执行。

非静态初始化块:非静态初始化块会在构造函数执行时,且在构造函数主体代码执行之前被执行。

区别如下:

1、执行次数不同

静态块只执行一次,初始化块可以执行多次。

2、作用不同

静态初始化块仅能初始化类变量,即static修饰的数据成员。

非静态初始化块可以初始化类的实例变量。

(7)java静态类初始化扩展阅读:

使用Java静态代码块注意事项:

1、它是随着类的加载而执行,只执行一次,并优先于主函数。具体说,静态代码块是由类调用的。类调用时,先执行静态代码块,然后才执行主函数的。

2、静态代码块其实就是给类初始化的,而构造代码块是给对象初始化的。

3、静态代码块中的变量是局部变量,与普通函数中的局部变量性质没有区别。

4、一个类中可以有多个静态代码块。

5、对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。

⑧ 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,动态初始化就是new

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

我觉得已经够通俗的了

阅读全文

与java静态类初始化相关的资料

热点内容
怎么在电脑上编译成功 浏览:214
单片机可调时钟设计方案 浏览:192
qq文件夹密码忘记怎么找回 浏览:683
php扩展插件 浏览:607
解压视频厕所抽纸 浏览:952
app减脂怎么用 浏览:452
pythonwebpdf 浏览:639
单片机的功能模块 浏览:771
安卓手机如何录制视频长时间 浏览:285
安全问题app哪个好 浏览:445
压缩水会变冰吗 浏览:526
小说配音app哪个靠谱 浏览:820
编译iso 浏览:944
照片生成pdf格式 浏览:194
病历转pdf 浏览:835
云服务器配硬件 浏览:978
服务器10k什么意思 浏览:21
pdfeditor汉化 浏览:884
新科学pdf 浏览:748
现在还有c语言编译吗 浏览:676