A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yanyoucheng520 中级黑马   /  2014-7-18 23:54  /  1705 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

可不可以稍微举个例子说明下呀

11 个回复

倒序浏览
就是加上static修饰符就行了吗
无论你创建多少对象,只加载一次
回复 使用道具 举报
本帖最后由 wisely 于 2014-7-19 01:55 编辑

静态代码块最好跟构造代码块结合起来看,我举个例子

class Person{
        private String name;
        {
                System.out.println("我是构造代码块");
        }
        Person(){
                System.out.println("我是无参数构造函数");
        }
        Person(String name){
                System.out.println("我是有参构造函数");
        }
        static{
                System.out.println("我是静态代码块");
        }
        public static void show(){
                System.out.println("我是静态方法");
        }
}

public class Sunday{
        public static void main(String[] args) {
                Person.show();   //在运行这句时,需要加载Person类,而随着Person类的加载,静态代码块最先运行,然后才是静态方法。


                Person p1=new Person();  //new 对象时,首先要看看有无【静态代码块】,是否已经运行【静态代码块只能运行一次】。
                                                           //这个例子中,上句代码已经运行了静态代码块,所以在此处就不用再运行。
                                                          //然后就是构造代码块,它是优先于构造函数的,而且每次构造函数都要运行一次,这点与静态代码块不同。
                                                         //运行了构造代码块,再找到相应的构造方法,运行。

                Person p2=new Person("zhangsan");  //与上句代码一样,它要看看前面是否运行过静态代码块,运行过,不再运行。
                                                                               //此处为new 对象,调用了构造函数,所以要先运行构造代码块,然后才是有参数的构造方法。
               
        }
}

经过上面的解说,运行结果想必就能猜出来了。

静态代码块随着类的加载而【运行】,且只运行一次。优先级最高。
构造代码块随着对象的new而运行,每次new对象都要运行一次,优先级次之。
然后才是构造方法。最后提一句,使用静态方法时,不用new对象,直接调用即可。



回复 使用道具 举报
静态代码块:就是一个有静态关键字标识的一个代码块区域。定义在类中。
格式示例:
        static
        {
        静态代码块中的执行语句。
        }
作用与特点:可以完成类的初始化。静态代码块随着类的加载而执行,而且只执行一次(new 多个对象也就只执行一次)。如果和主函数在同一类中,优先于主函数执行。
回复 使用道具 举报
wisely 发表于 2014-7-19 01:49
静态代码块最好跟构造代码块结合起来看,我举个例子

class Person{

单独贴一次代码,不知道为什么,一次贴不全
  1. class Person{
  2.         private String name;
  3.         {
  4.                 System.out.println("我是构造代码块");
  5.         }
  6.         Person(){
  7.                 System.out.println("我是无参数构造函数");
  8.         }
  9.         Person(String name){
  10.                 System.out.println("我是有参构造函数");
  11.         }
  12.         static{
  13.                 System.out.println("我是静态代码块");
  14.         }
  15.         public static void show(){
  16.                 System.out.println("我是静态方法");
  17.         }
  18. }

  19. public class Sunday{
  20.         public static void main(String[] args) {
  21.                 Person.show();
  22.                 Person p1=new Person();
  23.                 Person p2=new Person("zhangsan");
  24.                
  25.         }
  26. }
复制代码



回复 使用道具 举报
楼上的讲的很仔细。。。。膜拜!
回复 使用道具 举报
一句话概括下我的理解,因为类中没有游离的语句,构造代码块,和静态代码块都可以看作是,将一些游离的语句放在一起组成的块。其实都可以看作是类的特殊成员。一个是非静态,一个有静态的特性。
回复 使用道具 举报
就是在static下面接的代码块。类加载进内存的时候就被初始化了。
回复 使用道具 举报
静态代码块就是在类中用修饰符static后面接大括号 是值加载一次的 存储在方法区中
回复 使用道具 举报
Adjin 中级黑马 2014-7-19 09:40:27
10#
当类第一次加载的时候,会运行static{}里面的内容,用于给类初始化
回复 使用道具 举报
2楼说的很详细了,静态代码块初始化类,构造代码块初始化对象
回复 使用道具 举报
static修饰的代码块 随类加载 优先执行 只执行一次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马