欢迎来到天天文库
浏览记录
ID:37713258
大小:28.06 KB
页数:5页
时间:2019-05-29
《static{}(静态代码块)与{}(非静态代码块)的异同点》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、static{}(静态代码块)与{}(非静态代码块)的异同点相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个, 一般在代码块中对一些static变量进行赋值。不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new 一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。例://普通类publicclassPuTong{publ
2、icPuTong(){System.out.print("默认构造方法!-->");}//非静态代码块{System.out.print("非静态代码块!-->");}//静态代码块static{System.out.print("静态代码块!-->");}publicstaticvoidtest(){{System.out.println("普通方法中的代码块!");}}}//测试类publicclassTestClass{/***区别两次new静态与非静态代码块执行情况*/publicstati
3、cvoidmain(String[]args){PuTongc1=newPuTong();c1.test();PuTongc2=newPuTong();c2.test();}}/*运行输出结果是:静态代码块!-->非静态代码块!-->默认构造方法!-->普通方法中的代码块!非静态代码块!-->默认构造方法!-->普通方法中的代码块!*/一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用
4、的时候,需要使用静态方法,这种代码是被动执行的.两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的.作用:静态代码块可用来初始化一些项目最常用的变量或对象;静态方法可用作不创建对象也可能需要执行的代码.3.7.3 静态代码块在类中,可以将某一块代码声明为静态的,这样的程序块叫静态初始化段。静态代码块的一般形式如下:static{语句序列}静态代码块只能定义在类里面,它独立于任何方法,不能定义在方法里面。静态代码块里面的变量都是局部变量,只在本块内有效。静态代码块会在类被加载时自动
5、执行,而无论加载者是JVM还是其他的类。一个类中允许定义多个静态代码块,执行的顺序根据定义的顺序进行。静态代码块只能访问类的静态成员,而不允许访问实例成员。【例3.25】静态代码块运行示例1。//-----------文件名staticBlock.java,程序编号3.38-----------------publicclassstaticBlock{//定义一个普通的main()方法publicstaticvoidmain(Stringargs[]){System.out.println("Thi
6、sismainmethod."); }//定义一个静态代码块static{System.out.println("Thisisstaticblock.");intstVar=0; //这是一个局部变量,只在本块内有效}}编译通过后,用java命令加载本程序,会得到如下输出:Thisisstaticblock.Thisismainmethod.从以上输出结果中可以看出,静态代码块甚至在main方法之前就被执行。在main()方法中可以完成的任务在静态代码块中都可以完成。但是二者在执行上仍然有一些区别
7、,请看下例。【例3.26】静态代码块和main()方法的区别。这里仍然使用例3.25中的staticBlock类,然后新定义一个类来使用它。//-----------文件名useStaticBlock.java,程序编号3.39-----------------publicclassuseStaticBolck{publicstaticvoidmain(Stringargs[]){newstaticBlock(); //创建一个staticBlock的对象}}本例其实可以概括成一句话:静态方法只能访
8、问静态成员,实例方法可以访问静态和实例成员。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,所以它可以由系统在创建对象之前就调用。下面这个程序有个错误,请读者仔
此文档下载收益归作者所有