java里static

static关键字,主要作用是修饰成员变量和方法的时候能直接用类名调用.static就是静态的意思,实际就是属于类的东东,就是类加载后在内存里只有一份,

他存在于方法区的,因此主要用于当一个类只需要一份的东西,比如单例模式.或缓存一些东西,比如Integer初始化的缓存.

static修饰变量(只能修饰成员变量,不能修饰局部变量,),static变量一个类里可以多次被修改,但是只要这个类初始化后就只有一份.
static修饰方法,是属于类的方法,那么在静态方法里就不能调用非static的方法和变量,因为假如在静态方法里有非静态的方法和变量,那么类在加载的时候就会加载static方法,但是这时可能他里面的非静态的变量或方法还没实例化呢.!;
static也不能修饰抽象方法,因为抽象方法是用来被继承后重写的,但是static方法只能被继承不能被重写.意思就是父类和子类里都有static void test()方法,注意这里不是重写,而是子类自和父类各自的东西.既然不能重写,那么假如用static修饰抽象方法就永远没有实现了.或者从内存分配角度看,抽象类是不能实例化的,即不能被分配内存;而static修饰的方法在类实例化之前就已经被分配了内存,这样一来矛盾就出现了.
<think>好的,我需要回答用户关于Javastatic块的作用以及System.loadLibrary的使用场景的问题。首先,我需要回顾static块的基本概念。static块在Java中用于类的初始化,当类被加载时执行,通常用于初始化静态变量或执行一次性设置操作。比如,加载本地库就是一个常见的用例。 接下来是System.loadLibrary方法。这个方法用于加载动态链接库(如JNI所需的.so或.dll文件)。用户可能想知道它的使用场景,比如在JNI调用时加载本地库,确保本地方法可用。需要注意的是,loadLibrary的参数是库名,不带扩展名,系统会自动处理平台差异。 然后,我需要结合用户提供的引用内容。引用[1]提到System类通过JNI与操作系统交互,引用[2]和[3]讨论了JNI的使用和动态库加载。这些引用支持了System.loadLibrary在JNI中的应用,尤其是在加载本地库时的作用。 用户的问题还要求生成相关问题。我需要考虑与static块和JNI相关的其他问题,比如static块的执行时机、多次加载库的影响、替代加载方式等。 最后,要确保回答结构清晰,分点说明,并正确引用资料。同时,检查LaTeX格式是否符合要求,比如行内公式用$...$,独立公式用$$...$$,但当前内容中可能没有数学公式,所以需要注意是否有需要格式化的部分。如果有提到变量或代码,可能需要调整格式,但这主要是代码块和文字说明,所以使用正确的代码标记即可。</think>### Java static块的作用 1. **类初始化** static代码块(静态初始化块)在类加载时执行,且**仅执行一次**,主要用于初始化静态变量或执行类级别的配置操作。例如: ```java class MyClass { static int count; static { count = 10; // 初始化静态变量 System.out.println("Static block executed"); } } ``` 2. **执行顺序** 多个static块按声明顺序执行,且优先于实例初始化块和构造函数。例如: ```java static { System.out.println("First"); } static { System.out.println("Second"); } ``` --- ### System.loadLibrary的功能与使用场景 1. **加载本地库** `System.loadLibrary("库名")`用于加载JNI(Java Native Interface)所需的动态链接库(如Windows的`.dll`或Linux的`.so`)。 示例: ```java public class NativeDemo { static { System.loadLibrary("mylib"); // 加载名为libmylib.so/mylib.dll的库 } public native void nativeMethod(); // 声明本地方法 } ``` 2. **使用场景** - **JNI调用**:加载本地库以调用C/C++实现的本地方法[^2][^3]。 - **资源初始化**:在库加载时执行一次性初始化操作(如硬件驱动初始化)。 - **跨平台兼容**:库名自动适配操作系统(如Linux添加`lib`前缀和`.so`扩展)。 3. **注意事项** - 需确保库文件位于`java.library.path`路径中。 - 推荐在static块中调用`loadLibrary`,确保类加载时完成库加载[^1]。 --- ### 相关代码示例(JNI流程) 1. **Java侧定义本地方法**: ```java public class JniExample { static { System.loadLibrary("native"); // 加载libnative.so/native.dll } public static native void printMessage(); // 本地方法声明 } ``` 2. **C/C++实现本地方法**: ```c #include <jni.h> #include <stdio.h> JNIEXPORT void JNICALL Java_JniExample_printMessage(JNIEnv *env, jclass cls) { printf("Hello from native code!"); } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值