JAVA中 静态块的作用 java中,什么时候要用到静态语句块,它有何作用呢?

java\u4e2d\u9759\u6001\u4ee3\u7801\u5757 static\u7684\u4f5c\u7528

\u7c7b\u52a0\u8f7d\u7684\u65f6\u5019\u5c31\u4f1a\u53bb\u6267\u884c\u9759\u6001\u4ee3\u7801\u5757\u7684\u5185\u5bb9\u3002\u6bd4\u5982\u8bf4\uff1a\u5199\u8fde\u63a5\u6570\u636e\u5e93\u7684\u90a3\u4e9b\u5185\u5bb9\u65f6\uff0c\u7ecf\u5e38\u6709classforName("XXX"),\u7528\u4e8e\u52a0\u8f7d\u4e00\u4e9b\u4e1c\u897f\uff0c\u8fd9\u4e9b\u4e1c\u897f\u5c31\u53ef\u4ee5\u5199\u5728\u9759\u6001\u4ee3\u7801\u5757\u4e2d\u3002\u8fd8\u6709\u4e00\u4e9b\uff0c\u4f60\u60f3\u8ba9\u7c7b\u52a0\u8f7d\u65f6\u5c31\u6267\u884c\u7684\u7a0b\u5e8f\u4e5f\u53ef\u4ee5\u653e\u5728\u91cc\u9762\u3002

\u4e00 \u822c\u60c5\u51b5\u4e0b,\u5982\u679c\u6709\u4e9b\u4ee3\u7801\u5fc5\u987b\u5728\u9879\u76ee\u542f\u52a8\u7684\u65f6\u5019\u5c31\u6267\u884c\u7684\u65f6\u5019,\u9700\u8981\u4f7f\u7528\u9759\u6001\u4ee3\u7801\u5757,\u8fd9\u79cd\u4ee3\u7801\u662f\u4e3b\u52a8\u6267\u884c\u7684;\u9700\u8981\u5728\u9879\u76ee\u542f\u52a8\u7684\u65f6\u5019\u5c31\u521d\u59cb\u5316,\u5728\u4e0d\u521b\u5efa\u5bf9\u8c61\u7684\u60c5 \u51b5\u4e0b,\u5176\u4ed6\u7a0b\u5e8f\u6765\u8c03\u7528\u7684\u65f6\u5019,\u9700\u8981\u4f7f\u7528\u9759\u6001\u65b9\u6cd5,\u8fd9\u79cd\u4ee3\u7801\u662f\u88ab\u52a8\u6267\u884c\u7684. \u9759\u6001\u65b9\u6cd5\u5728\u7c7b\u52a0\u8f7d\u7684\u65f6\u5019 \u5c31\u5df2\u7ecf\u52a0\u8f7d \u53ef\u4ee5\u7528\u7c7b\u540d\u76f4\u63a5\u8c03\u7528
\u6bd4\u5982main\u65b9\u6cd5\u5c31\u5fc5\u987b\u662f\u9759\u6001\u7684 \u8fd9\u662f\u7a0b\u5e8f\u5165\u53e3
\u4e24\u8005\u7684\u533a\u522b\u5c31\u662f:\u9759\u6001\u4ee3\u7801\u5757\u662f\u81ea\u52a8\u6267\u884c\u7684;
\u9759\u6001\u65b9\u6cd5\u662f\u88ab\u8c03\u7528\u7684\u65f6\u5019\u624d\u6267\u884c\u7684.
\u9759\u6001\u65b9\u6cd5
\uff081\uff09\u5728Java\u91cc\uff0c\u53ef\u4ee5\u5b9a\u4e49\u4e00\u4e2a\u4e0d\u9700\u8981\u521b\u5efa\u5bf9\u8c61\u7684\u65b9\u6cd5\uff0c\u8fd9\u79cd\u65b9\u6cd5\u5c31\u662f\u9759\u6001\u65b9\u6cd5\u3002\u8981\u5b9e\u73b0\u8fd9\u6837\u7684\u6548\u679c\uff0c\u53ea\u9700\u8981\u5728\u7c7b\u4e2d\u5b9a\u4e49\u7684\u65b9\u6cd5\u524d\u52a0\u4e0astatic\u5173\u952e\u5b57\u3002\u4f8b\u5982\uff1a
public static int maximum(int n1,int n2)
\u4f7f\u7528\u7c7b\u7684\u9759\u6001\u65b9\u6cd5\u65f6\uff0c\u6ce8\u610f\uff1a

a\u5728\u9759\u6001\u65b9\u6cd5\u91cc\u53ea\u80fd\u76f4\u63a5\u8c03\u7528\u540c\u7c7b\u4e2d\u5176\u4ed6\u7684\u9759\u6001\u6210\u5458\uff08\u5305\u62ec\u53d8\u91cf\u548c\u65b9\u6cd5\uff09\uff0c\u800c\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u7c7b\u4e2d\u7684\u975e\u9759\u6001\u6210\u5458\u3002\u8fd9\u662f\u56e0\u4e3a\uff0c\u5bf9\u4e8e\u975e\u9759\u6001\u7684\u65b9\u6cd5\u548c\u53d8\u91cf\uff0c\u9700\u8981\u5148\u521b\u5efa\u7c7b\u7684\u5b9e\u4f8b\u5bf9\u8c61\u540e\u624d\u53ef\u4f7f\u7528\uff0c\u800c\u9759\u6001\u65b9\u6cd5\u5728\u4f7f\u7528\u524d\u4e0d\u7528\u521b\u5efa\u4efb\u4f55\u5bf9\u8c61\u3002
b \u9759\u6001\u65b9\u6cd5\u4e0d\u80fd\u4ee5\u4efb\u4f55\u65b9\u5f0f\u5f15\u7528this\u548csuper\u5173\u952e\u5b57\uff0c\u56e0\u4e3a\u9759\u6001\u65b9\u6cd5\u5728\u4f7f\u7528\u524d\u4e0d\u7528\u521b\u5efa\u4efb\u4f55\u5b9e\u4f8b\u5bf9\u8c61\uff0c\u5f53\u9759\u6001\u65b9\u6cd5\u8c03\u7528\u65f6\uff0cthis\u6240\u5f15\u7528\u7684\u5bf9\u8c61\u6839\u672c\u6ca1\u6709\u4ea7\u751f\u3002
\uff082\uff09\u9759\u6001\u53d8\u91cf\u662f\u5c5e\u4e8e\u6574\u4e2a\u7c7b\u7684\u53d8\u91cf\u800c\u4e0d\u662f\u5c5e\u4e8e\u67d0\u4e2a\u5bf9\u8c61\u7684\u3002\u6ce8\u610f\u4e0d\u80fd\u628a\u4efb\u4f55\u65b9\u6cd5\u4f53\u5185\u7684\u53d8\u91cf\u58f0\u660e\u4e3a\u9759\u6001\uff0c\u4f8b\u5982\uff1a
fun()
{
static int i=0;//\u975e\u6cd5\u3002
}
\uff083\uff09\u4e00\u4e2a\u7c7b\u53ef\u4ee5\u4f7f\u7528\u4e0d\u5305\u542b\u5728\u4efb\u4f55\u65b9\u6cd5\u4f53\u4e2d\u7684\u9759\u6001\u4ee3\u7801\u5757\uff0c\u5f53\u7c7b\u88ab\u8f7d\u5165\u65f6\uff0c\u9759\u6001\u4ee3\u7801\u5757\u88ab\u6267\u884c\uff0c\u4e14\u53ea\u88ab\u6267\u884c\u4e00\u6b21\uff0c\u9759\u6001\u5757\u5e38\u7528\u6765\u6267\u884c\u7c7b\u5c5e\u6027\u7684\u521d\u59cb\u5316\u3002\u4f8b\u5982\uff1a
static
{
}

如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情 况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用

与非静态代码区别:

静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次;
非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次

例:
//普通类
public class PuTong {
public PuTong(){
System.out.print("默认构造方法!-->");
}

//非静态代码块
{
System.out.print("非静态代码块!-->");
}

//静态代码块
static{
System.out.print("静态代码块!-->");
}

public static void test(){
{
System.out.println("普通方法中的代码块!");
}
}
}

扩展资料:

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性 。

参考资料:百度百科-网页链接



我先说一下静态块吧,下面就是一个静态块,
static {
}
静态块的特点是在类加载的时候就执行,先说一下类加载,一个程序要想运行,首先要把代码加载到内存中对吧?然后才能去和CPU交流,这是冯诺依曼计算机规定的。Java也是一样,Java的.class字节码文件要想执行,首先也要加载到内存,由类加载器把字节码文件的代码加载到内存中,这一步就叫类加载,这是首先要进行的。
public class Test {
static {
System.out.println("我是静态块");
}
}
当创建Test类的一个对象的时候,比如new Test() ,是这样,首先是类加载,然后才能new对象,静态块在类加载的时候就执行了,这就说明静态块在new对象之前就会执行,而且一个类在第一次被使用的时候会被加载,然后在整个应用程序的生命周期当中不会再次被加载了,就加载这一次,所以这就说明,静态块就执行一次,不会执行第二遍!
public class Test {
public Test() {// 构造方法
System.out.println("我是构造方法,创建对象的时候我会执行,我执行完,对象就造出来了");
}

static {
System.out.println("我是静态块,类加载的时候我就执行了,而且只执行这一次");
}
}
然后这样:
new Test();
new Test();
你会发现首先打印出静态块的信息,然后才打印出构造方法信息,然后再次new Test();的时候,只打印出了构造方法的信息,这个例子证明了我上面说的是对的!

这就是静态块,我说完了,至于你说的 静态块中初始化Map。 初始化这几个字很难讲他的意思,意思包括
把一些内容设为默认状态、把没准备的准备好、在什么什么之前就怎么怎么样、将变量赋为默认值,等等,这个不能精确的说,只能就事说事,下面就可以说是在静态块中初始化Map,

public class Test {
private static Map m;
static {
m = new HashMap();
}
}

就说道这儿,楼主 看了一个帖子 写的是初始化Map的, 如果还有疑问 不如把地址贴出来,大家也好帮你,就光说初始化Map,这个问的太叫人没法回答了。

静态方法中不用this是无法引用除自己方法体中定义的成员和参数以外的非静态变量或者方法的。 静态方法是不允许被子类重写的,但是子类可以覆盖父类的静态方法。 子类也不可将父类中的非静态方法重写为静态方法。 main方法也是静态方法,在main方法中访问类中的成员变量和方法,需要在方法体中创建类的对象

静态块在类加载时执行 且只执行一次

扩展阅读:java入门网站 ... java中静态方法的调用 ... javaw exe ... java静态代码的作用 ... javascript入门 ... java官网网址 ... java静态方法的作用 ... 静态代码块的执行顺序 ... java中的方法中静态参数 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网