class HelloWorld {   
           public native void displayHelloWorld();//所有native关键词修饰的都是对本地的声明   
           static {   System.loadLibrary("hello"); //载入本地库   
     } 
我想明白static{}是静态匿名内部类吗?
我现在在做一个WEB项目。需要在项目启动时启动一个监听类,而且这个监听类是每隔1分钟就自动运行一次的。这个监听类中会调用JNI的内部方法,这样就会出现一个问题。我每一次调用都会动态加载DLL文件。但是DLL文件是独占的。有没有什么方法能将STATIC{system.loadlibrary();}只加载一次!
多谢各位高手了!速度急呀

解决方案 »

  1.   

    不是。
    这叫静态初始化语句块。
    这样做就只在HelloWorld类加载的时候loadLibrary一次。楼主遇到的问题不是这里的问题。
      

  2.   

    class A {
        static { //这样表示静态代码块,在类加载的时候,静态代码块的代码被执行
            System.out.println("静态代码块,在类加载的时候执行");
        }    { //如果前面没有static,表示实例化初始化块,在构造方法调用前执行
            System.out.println("初始化块,在构造方法调用前被执行");
        }
    }
      

  3.   

    不是,静态内部类是这样的:
    Class outer{
        // 声明静态内部类
        static class inner{
        }
    }
      

  4.   

    STATIC{system.loadlibrary();}
    这个本身就是加载一次
      

  5.   

    多谢楼上的各位,但是有一点我还不太明白。因为我这个是循环调用的本地方法。用的TIMER调用。现在会报错。TIMER-2无法加载DLL资源,这应该是什么问题引起的呢?