黑马程序员技术交流社区

标题: Java 中 静态代码块的各种总结_各种全 [打印本页]

作者: Lingxin    时间: 2016-3-27 22:14
标题: Java 中 静态代码块的各种总结_各种全
静态代码块(☆☆☆☆☆):
                在方法外面 类里面 static{}
                随着类的加载而执行  只执行一次
                做一些全局初始化的内容
                优先于主方法执行

        面试题:
                class Student {
                        static {
                                System.out.println("Student 静态代码块");
                        }
                       
                        {
                                System.out.println("Student 构造代码块");
                        }
                       
                        public Student() {
                                System.out.println("Student 构造方法");
                        }
                }

                class Demo2_Student {
                        static {
                                System.out.println("Demo2_Student静态代码块");
                        }
                       
                        public static void main(String[] args) {
                                System.out.println("我是main方法");
                               
                                Student s1 = new Student();
                                Student s2 = new Student();
                        }
                }
                /*
                执行结果是:
                        Demo2_Student静态代码块
                        我是main方法
                        Student 静态代码块
                        Student 构造代码块
                        Student 构造方法
                        Student 构造代码块
                        Student 构造方法
                解释:执行main方法前必须先把Demo2_Student类的class文件加载到方法区,"Demo2_Student静态代码块"随着类的加载而执行一次
                        接着执行main方法 "我是main方法" 先执行
                        当执行到Student s1 = new Student();的时候 先把Student类的class文件加载到方法区,"Student 静态代码块"随着类的加载而执行一次
                        接着执行构造代码块"Student 构造代码块",接着执行构造方法"Student 构造方法"
                        当又执行到Student s1 = new Student()的时候,这时候Student类的class文件已经加载到方法区了 不需再再次加载了 所以 "Student 静态代码块" 不会在执行
                        接着执行构造代码块"Student 构造代码块",接着执行构造方法"Student 构造方法"
                */


期望你的回复
作者: Man_hui    时间: 2016-3-27 22:34
可以的~学习学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2