以前记得static代码块貌似是Java类加载过程中优先级最高的,但是最近几天写代码发现不是这样的,因为static变量的优先级要比static代码块高得多,所以因此我犯了不少错误,下面以一个例子来说明一下一个类初始化为对象的时候的加载过程:
我们提供的服务有:成都做网站、成都网站设计、成都外贸网站建设、微信公众号开发、网站优化、网站认证、舟山ssl等。为上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的舟山网站制作公司
- package com.bird.jdbc;
- public class Test {
- private static A a = new A();
- private final static F f= new F();
- private B b = new B();
- static{
- System.out.println("c");
- }
- public Test(){
- System.out.println("Test");
- }
- public static void main(String[] args){
- // Test t = new Test();
- try {
- Class.forName("com.bird.jdbc.Test");
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- class A{
- public A(){
- System.out.println("A");
- }
- }
- class B{
- public B(){
- System.out.println("B");
- }
- }
- class F{
- public F(){
- System.out.println("F");
- }
- }
大家可以看到,直接运行Test t = new test();这句话,运行结果为
- A
- F
- c
- B
- Test
所以是先static变量,然后是static的代码块,然后才是普通变量,最后是构造函数
如果是运行Class.forName()函数的话,运行结果为
- A
- F
- c
还是这样,先是static变量,然后才是static代码块,所以那种对于class.Forname加载类,只调用static代码块的误区要克服,因为还有一个static代码块在等着你,呵呵,我得记录下来以示警戒。
原文链接:http://blog.csdn.net/a352193394/article/details/7255277
文章题目:对于Java类加载过程中的顺序问题探究
文章URL:http://www.shufengxianlan.com/qtweb/news19/255169.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联