java中static相关问题

问题描述

java中static相关问题

class Bowl {
static{
System.out.println("这是Bow3的测试!");
}
{
System.out.println("这是Bow1的测试!");
}
static{
System.out.println("这是Bow4的测试!");
}
}

以上类new后输出:
这是Bow3的测试!
这是Bow4的测试!
这是Bow1的测试!
应该是在类编译的时候就已经加载了,那么static{}和{}区别是什么?

解决方案

http://www.cnblogs.com/sophine/p/3531282.html

解决方案二:

普通初始化块负责对象初始化,类初始化负责对类进行初始化。静态初始化块是类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建
对象时才执行。而你说在编译时就加载了静态初始化块我认为就不太正确了,准确说是:当JVM第一次主动使用某个类时,系统会在类准备阶段为该类的所有
的静态成员变量分配内存;在初始化阶段则初始化这些静态常量。那么你new之前不就是在使用这个Bowl类,那么JVM不就应该加载该类的所有类变量,
在new之前定义一个Bowl对象时这个阶段就应该初始化该类的所有成员变量,最后调用该类的构造方法。

解决方案三:

{} 是 普通初始化块, 属于对象
static 是 静态初始化块, 属于类, 类在加载连接后悔进行初始化, 这时候会执行 静态初始化
对象new之前 先进行类的初始化,因为类是对象的模板,先有类,后有对象, 类的初始化 悔执行静态代码块,
初始完后,根据模板 创建对象, 创建对象过程中 悔执行 普通代码块。

同级别的代码块是 自上而下依次执行的

希望对你有帮助

时间: 2025-01-20 17:05:48

java中static相关问题的相关文章

Java中static、this、super、final用法

一.static  请先看下面这段程序:   public class Hello{     public static void main(String[] args){ //(1)       System.out.println("Hello,world!");   //(2)     }   } 看过这段程序,对于大多数学过Java 的从来说,都不陌生.即使没有学过Java,而学过其它的高级语言,例如C,那你也应该能看懂这段代码的意思.它只是简单的输出"Hello,w

Thinking:Java中static、this、super、final用法

Thinking:Java中static.this.super.final用法   本篇旨在帮助准备学习Java以及刚接触Java的朋友认识.掌握和使用static.this.super.final这几个关键字的使用.Java博大精深,我也是一位正在学习和使用Java的爱好者,文中难免有不妥之处,欢迎指正. 一.static 请先看下面这段程序:   public class Hello{    public static void main(String[] args){ //(1)     

Java中static关键字的作用和用法详细介绍_java

static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是

JAVA中static方法的用法实例详解_java

本文实例讲述了JAVA中static方法的用法.分享给大家供大家参考,具体如下: static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享.只要这个类被加载,Java虚拟机就能根据类名在运行时数据区或者方法区内找到他们.因此,static对象可以在它的任何对象创建之前访

Java中static作用详解_java

static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是

java中static变量和static方法以及普通方法在那个内存中存储呢? 请高手指点,谢谢

问题描述 java中static变量和static方法以及普通方法在那个内存中存储呢? 请高手指点,谢谢 栈内存:局部变量和对象的引用变量: 堆内存:对象: 以上是我所知道的,那么static变量和static方法以及普通方法在那个内存中存储呢? 请高手指点,谢谢 解决方案 static和普通方法都存在堆内存中,堆内存有个永久区permgen,这里面会存类信息. 所以不断的加载类或jar包可能出现permgen oome的错误. static是在堆内存的数据区. 解决方案二: java stat

java中static初始化模块的使用

问题描述 java中static初始化模块的使用 我在编写中反复调用一个类中的方法,该类中有一个静态初始化模块static{},没有主方法,那么这个类的初始化模块会不会反复初始化? 怎么让它之初始化一次? 是在作c/s模型中出现的,客户端发送请求,要求修改服务器端的static模块,修改成功后,再次访问static模块又初始化了. 解决方案 java中static的使用java-static的使用java static final 初始化 解决方案二: 它本来就只初始化一次 解决方案三: 静态类

java中static{.......}代码块的作用

问题描述 java中static{.......}代码块的作用 java中static{.......}代码块主要用在哪里,表示什么意思,有什么用,里面主要写什么内容 解决方案 static后不跟方法名,这个块在该类第一次加载的时候运行,就是说比初始化模块还早就运行,一般用于加载该类需要一次性完成的功能使用. 解决方案二: Java中的static静态代码块 解决方案三: 初始化用,不需要创建实例,当你访问这个类时,就会执行 解决方案四: static 就是静态.你可以搜索一下关于静态的解释.网

java static-关于java中static的问题

问题描述 关于java中static的问题 一.能总结一下java中static关键字的用法吗?及其一些注意事项. 二.帮我解释几个句子为什么是错误的: 1.关键字static final再修饰int类型变量的时候,必须同时定义变量的初始值为0. 2.关键字static放在类前面做修饰符时,表示该类中的所有方法都为静态方法. 解决方案 在Java语言中,static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Ja