JavaEE初始化时静态代码块加载问题

1.使用java.exe命令运行某个类的时
java.exe Person
2.创建一个类的对象时
Person p=new Person();
3.访问类中的静态成员变量(赋值/获取值)
System.out.println(Person.className);
4.访问了类中的静态成员方法
Person.method();
5.创建类的子类对象的时候
Student s=new Student();
6.使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
System.out.println(Person.class);//(不加载静态代码块)

第六种方法在加载时没有完成反射过程中类的加载的三步(类的加载,连接,初始化),所以不能执行类中的静态代码块,其余方法均可以实现静态代码块的执行

时间: 2024-08-02 10:56:48

JavaEE初始化时静态代码块加载问题的相关文章

类初始化时静态代码块的加载

class superclass{ static { System.out.println("superclass init"); } public static int value = 123;}class subclass extends superclass{ static { System.out.println("subclass init"); }}class outputrestult{ public static void main(String[]

java 成员变量 静态变量代码块 静态代码快加载顺序

序言 基类A 类B继承实现了A类 1在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入)2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包括静态代码和变量,它们的级别是相同的,安装代码中出现的顺序初始化)4,装载子类B后,完成静态动作类装载完成,开始进行实例化1,在实例化子类B时,先要实例化父类A2,实例化父类A时,先成员实例化(非静态代码)3,父类A的构造方法4,子类B的成员实例化(非静态代码)5,子类B的构造方法

java静态成员变量,静态代码块执行测试

Java  类对象 静态成员变量,静态代码块加载执行顺序. package com.yjm.pro; import java.io.IOException; import java.util.Properties; public class Pro {  public static String url;  public static String username;  public static String password;  public static String classforna

静态代码块 和 main 函数 谁先加载???

学习编程中,当我们遇到问题的时候,如何解决我们的问题? 动手编程,编一个小程序 就很容易 看见自己想要的结果和答案! 今天学习了 static {}  静态代码块,但是 搞不清楚 他和static main() 函数 谁先加载? 于是: 自己编写了一个小段代码: 代码如下: package stu.love.a; public class StaticDemo1 { static { System.out.println("a"); } /** * @param args */ pub

final、static、代码块、静态代码块、内部类、代码执行顺序

final final域使得确保初始化安全性(initialization safety)成为可能,初始化安全性让不可变形对象不需要同步就能自由地被访问和共享 作用在类上               则为final类,final类不能被继承.一般用于工具类时,同时把工具类构造函数声明为私有,暴露静态共有方法 作用在成员变量上    则视为常量.此时赋值方式有三种:(1)声明时赋值(2)构造函数中赋值(3)代码块中赋值. 即不管哪种方式都要保证在使用该变量之前要确保已经有值.使用该特性,可以强制赋

关于java中普通代码块、构造代码块与静态代码块

1.普通代码块 public static void main(String[] args) { /*普通代码块: *直接定义在在方法或语句中出现”{普通代码的执行语句}“的就称为普通代码块. *普通代码块执行顺序由他们在代码中出现的次序决定--“先出现先执行” * */ { System.out.println("这里是普通代码块A"); } //new A(); { System.out.println("这里是普通代码块B"); } } 执行结果:这里是普通代

一道面试题:静态代码块的执行顺序

先来看一道最常见的面试题:静态代码块的执行顺序? 看一下实际运行: class A{ static { System.out.println("A的静态代码块"); } { System.out.println("A的构造代码块/非静态代码块"); } public A() { System.out.println("A的构造函数"); } } class B extends A{ static { System.out.println(&quo

Java静态代码块和非静态代码块、类加载、构造对象的机制

温故而知新,代码块这东西时间一长一些东西容易忘记,比如静态代码块.非静态代码款.静态成员变量初始化.动态成员变量初始化.构造方法调用.类加载等等的顺序机制是怎么样的? 话不多说了,一个例子足以说明一切: package com.collectiontest; import org.junit.Test; public class BasicTest { @Test public void testBlock() { System.out.println("m1:"); Mimi m1=

静态代码块、静态变量等执行顺序

1 public class BasicTest { 2 public static void main(String[] args) { 3 System.out.println("m1:"); 4 Mimi m1=new Mimi(); 5 System.out.println("m2:"); 6 Mimi m2=new Mimi(); 7 } 8 } 9 10 class Mimi { 11 public static int si=0; 12 int di=