当前位置:  编程技术>java/j2ee

Java中的static静态代码块的使用详解

    来源: 互联网  发布时间:2014-10-24

    本文导语:  一.与静态方法的比较     一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使...

一.与静态方法的比较  

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


二.静态方法注意事项  

  使用类的静态方法时,注意:

    a.在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前

不用创建任何对象。

    b.静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生(this关键字只能在方法内部使用,表示对“调用方法的那

个对象”的引用)。

  静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如: fun() {    static int i=0;//非法。 }
 

三.程序举例

代码如下:

public class TestStaticCon {
     public static int a = 0;

     static {
         a = 10;
         System.out.println("父类的静态代码块在执行a=" + a);
     }

     {
         a = 8;
         System.out.println("父类的非静态代码块在执行a=" + a);
     }

     public TestStaticCon() {
         this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法
         System.out.println(a);
         System.out.println("父类无参构造方法在执行a=" + a);
     }

     public TestStaticCon(String n) {
         System.out.println(n);
         System.out.println(a);

     }

     public static void main(String[] args) {
         TestStaticCon tsc = null;
         System.out.println("!!!!!!!!!!!!!!!!!!!!!");
         tsc = new TestStaticCon();
     }
 }

代码如下:

运行结果:
父类的静态代码块在执行a=10
!!!!!!!!!!!!!!!!!!!!!
父类的非静态代码块在执行a=8
a在父类带参构造方法中的值:10
8
8
父类无参构造方法在执行a=8

四.网友提供
代码如下:

public class StaticBlock {

     static {
         System.out.println("静态块");
     }
     {
         System.out.println("构造块,在类中定义");
     }

     public StaticBlock() {
         System.out.println("构造方法执行");
     }

     public static void main(String[] args) {
         new StaticBlock();
         new StaticBlock();
     }

 }

代码如下:

静态块
构造块,在类中定义
构造方法执行
构造块,在类中定义
构造方法执行

  结论:静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。且执行顺序为静态代码块------非静态代码块----构造函数。

  其中让我疑惑的是“a在父类带参构造方法中的值:10”,我再想那时候为什么不是8,debug了(F11,不能直接设置断点然后运行,那样和直接运行没区别),发现先进入了无参的构造方法,执行了第一条语句并且切换到了另一个构造方法(不管是不是反正第一句都要执行,此时a还是10,非静态代码块还未执行),提示找不到源,不管是不是这条语句都提示了这个警告(不算错误,因为程序继续正常运行),然后运行了非静态代码块,继而从有参的构造方法处继续执行……


    
 
 

您可能感兴趣的文章:

  • java有无像vb那样的静态变量?java的staic是类的属性,那末,静态变量如何声明?
  • Java 静态分析工具 JArchitect
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • 如何用JAVA实现访问静态页面上的……
  • java用静态工厂代替构造函数使用方法和优缺点
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • JAVA中使用双括号来初始化静态常量的小技巧
  • 大家快来帮帮我,关于JAVA的类变量:一定在定义成STATIC变量(即静态变量)吗?
  • 关于静态方法的一些问题(各位救命啊,关于一个项目用java还是delphi来做的)
  • 浅谈java中静态方法的重写问题详解
  • java中静态变量和实例变量的区别详细介绍
  • java 静态代理 动态代理深入学习
  • Java 项目生成静态页面的代码
  • 使用java将动态网页生成静态网页示例
  • Java 静态博客生成器 OpooPress
  • 代理角色java设计模式之静态代理详细介绍
  • Java UrlRewriter伪静态技术运用深入分析
  • 深入解析java中的静态代理与动态代理
  • java map(HashMap TreeMap)用法:初始化,遍历和排序详解
  • 哪位java同门师兄有《java2编程详解》电子文档,注意不是影印版
  • 请问哪儿有java2编程详解的电子书下载??本人急需!!跟贴有分!!!
  • 谁有JAVA的类库详解或下载地址?
  • 请问那里有《JAVA2编程详解》可以下载?
  • 《Java 2 编程详解》程序清单14.12中的一个问题。
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • 我非常想知道JAVA跟C/C++对于硬件控制的能力孰强孰弱.(菜鸟问题,要详解,在线等待)
  • Java中的随机数详解
  • 深入分析Java内存区域的使用详解
  • Java加载JDBC驱动程序实例详解
  • Java代码重构的几种模式详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java操作excel2007文档介绍及代码例子
  • 寻找<<java2图形设计卷2SWING>>一书源代码和<<java网络高级编程>>一书源代码
  • java实现判断字符串是否全是数字的四种方法代码举例
  • 怎样将标准的C++代码转换成JAVA代码??
  • java Servlet获取和设置cookie实例代码
  • 哪位会使用代码保护工具WingGuard来保护java代码?
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • Java代码分享工具 Java Gems
  • java Servlet实现Session创建存取以及url重写代码示例
  • 各路JAVA高手们,能否给我一个用JAVA写的简单聊天室代码?
  • 你最喜欢去的JAVA网站或JAVA源代码下载网站是哪里???
  • JAVA APPLET与JSP有什么区别?好像都是把JAVA代码嵌到网页中。
  • java里有什么函数可以检查 java 代码并执行它?
  • 谁有Java源代码中floatToIntBits,intBitsToFloat的源代码?
  • 怎样看到java程序经过编译后的代码内容(bytecode的)或者在bytecode在JVM执行时JVM所解析的代码
  • 大哥大姐们小弟刚学JAVA,对它没点头绪啊!能告诉我JAVA在什么环境下编写代码和编译吗??
  • java与js代码互调示例代码
  • java文件复制代码片断(java实现文件拷贝)
  • 你认为最好的中文JAVA网站或有大量优秀JAVA源代码免费下载的网站是哪里???送分!!!
  • 有没有这样的软件:把一个不标准格式的JAVA原代码转换为具有标准(或比较标准)编码规范的代码。
  • 请问在java多线程中,是只有run(){}内的代码运行在一个新线程下呢?还是这个类中的代码都运行在一个新线程下?
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3