黑马程序员技术交流社区

标题: 分享入口main函数背后的故事 [打印本页]

作者: hopestar    时间: 2015-6-9 20:59
标题: 分享入口main函数背后的故事
就结合代码通过调试的方法来分析一下main入口函数以后程序的方法如下:
class Show {
        static{
                        System.out.println("i am static ");//第二步
        }
        {
                System.out.println("i am not static");//第五步
        }
        private static int i=10;//第三步
        public static void myShow()
        {
                System.out.println("i am myShow");//没有被执行
        }
        private int j=100;//第六步
        public void weShow()
        {
                System.out.println("i am weyShow");//第七步
        }
        private Show(){
                System.out.println("i am grut");
        };
        private static final Show sh=new Show();//第四步
        public static  Show getShow()//第八步
        {
                return sh;
        }
}
public class DD{
        public static void main(String[] arg)
        {
                Show.getShow();//第一步
               
       
        }
}
由代码调试验证可知,程序的运行步骤如下:
[size=12.0000pt]1、从程序入口main函数顺序执行。
[size=12.0000pt]2、在顺序执行过程中碰到其他类的调用时,就先执行该类的静态代码块。
[size=12.0000pt]3、执行完静态代码块后,再依次执行该类的静态属性。
[size=12.0000pt]4、执行完该类的静态属性之后,再执行该类的代码块。
[size=12.0000pt]5、执行完该类的代码块在依次执行该类的非静态属性。
[size=12.0000pt]6、执行完该类的非静态属性,在执行该类的构造方法。
[size=12.0000pt]7、执行完该类的构造方法,在执行main函数调用该类的方法。
[size=12.0000pt]8、该类没有被调用的方法,则不会被执行。
   


作者: 爱java爱生活    时间: 2015-6-9 21:48
给力啊,正好不懂;
作者: 天涯111    时间: 2015-6-9 21:54
这个解释的不错  ,正好也是我不会的一点,受教了   谢谢你 的分享!
作者: QQheima    时间: 2015-6-9 22:25
继续努力,你在码农之路上已经敲出了第一个helloword
作者: QQheima    时间: 2015-6-9 22:27
继续努力,你在码农之路上已经敲出了第一个helloword
作者: msxhm    时间: 2015-6-9 22:32
加油哦~~~
作者: 15383016390    时间: 2015-6-10 10:15
很不错,谢谢分享。
作者: 15383016390    时间: 2015-6-10 10:24
第七个步为什么会被执行呢??这里应该也没有被执行吧
作者: hopestar    时间: 2015-6-10 11:59
15383016390 发表于 2015-6-10 10:24
第七个步为什么会被执行呢??这里应该也没有被执行吧

是的,我标错了!你看的挺仔细的!!private Show(){
                System.out.println("i am grut");
        };//第七步
作者: lucien_he    时间: 2015-6-10 14:03
还没研究过  看看
作者: 15383016390    时间: 2015-6-10 16:37
hopestar 发表于 2015-6-10 11:59
是的,我标错了!你看的挺仔细的!!private Show(){
                System.out.println("i am grut"); ...

恩恩,你现在下载入学考试题了吗?感觉怎么样啊?这一期的班还能赶上吗?
作者: 仲德明    时间: 2015-6-10 17:13
真的不错!
作者: hopestar    时间: 2015-6-10 18:28
15383016390 发表于 2015-6-10 16:37
恩恩,你现在下载入学考试题了吗?感觉怎么样啊?这一期的班还能赶上吗? ...

郁闷死了,刚刚老师说我的blog地址格式有问题!我现在有新浪博客的地址,接下来我该怎么做呢??尽可能详细点!!谢谢
作者: yywishp    时间: 2015-6-10 18:32
过来学习,共勉
作者: 15383016390    时间: 2015-6-10 19:02
hopestar 发表于 2015-6-10 18:28
郁闷死了,刚刚老师说我的blog地址格式有问题!我现在有新浪博客的地址,接下来我该怎么做呢??尽可能详 ...

我也不知道,我也是申请的新浪博客,
作者: hopestar    时间: 2015-6-10 19:17
15383016390 发表于 2015-6-10 19:02
我也不知道,我也是申请的新浪博客,

在入学测试区的最下面发这张图片里的内容,然后 在复制你这个主题的地址粘贴到你入学流程所需的文本框里。我就是这样做的,应该是没问题的。

1.png (68.67 KB, 下载次数: 69)

1.png

作者: java8023    时间: 2015-6-10 21:10
你试过在静态代码快调用静态成员变量吗,看看是谁先执行
作者: java8023    时间: 2015-6-10 21:16
class Test
{
        static int i=1;
        static{
                System.out.println(i);
       
        }
        public static void main(String[] args){
                Test t=new Test();
                t.show();
        }
        public void show(){
                System.out.println("测试专用!!!!静态方法调用非静态方法");
        }
}
  1. class Test
  2. {
  3.         static int i=1;
  4.         static{
  5.                 System.out.println(i);
  6.        
  7.         }
  8.         public static void main(String[] args){
  9.                 Test t=new Test();
  10.                 t.show();
  11.         }
  12.         public void show(){
  13.                 System.out.println("测试专用!!!!静态方法调用非静态方法");
  14.         }
  15. }
复制代码

作者: hopestar    时间: 2015-6-10 23:22
java8023 发表于 2015-6-10 21:10
你试过在静态代码快调用静态成员变量吗,看看是谁先执行

当被调用类加载的时候,就会顺序执行该类的静态属性和静态代码块,谁在前面就执行谁!当执行到静态代码时,静态代码块里的静态成员(包括静态方法和静态属性)则严格顺序执行。
作者: 15383016390    时间: 2015-6-11 05:52
hopestar 发表于 2015-6-10 19:17
在入学测试区的最下面发这张图片里的内容,然后 在复制你这个主题的地址粘贴到你入学流程所需的文本框里 ...

对的,我刚看你发表的了,也能进你的博客,那现在通过了吗?
作者: a5231865    时间: 2015-6-11 06:46
好流弊,我先收藏了,后面用~
作者: hopestar    时间: 2015-6-11 11:09
15383016390 发表于 2015-6-11 05:52
对的,我刚看你发表的了,也能进你的博客,那现在通过了吗?

下午六点之前可以批的,现在还没批!等结果,你呢?你到哪一步了??
作者: 15383016390    时间: 2015-6-11 13:00
hopestar 发表于 2015-6-11 11:09
下午六点之前可以批的,现在还没批!等结果,你呢?你到哪一步了??

我写了九篇了,不过都是以前随便写的,以前没看过格式要求什么的,现在想改有点头大啊,
作者: 海角秋风    时间: 2015-6-11 13:21
好好研究一下,学习一下。。。
作者: hopestar    时间: 2015-6-11 15:06
15383016390 发表于 2015-6-11 13:00
我写了九篇了,不过都是以前随便写的,以前没看过格式要求什么的,现在想改有点头大啊, ...

我觉得没有什么很严格的格式啊!你重新梳理一下应该就好了,对了,我的审批通过了!现在要做入学测试题了!你加油哦!!
作者: 15383016390    时间: 2015-6-11 15:11
hopestar 发表于 2015-6-11 15:06
我觉得没有什么很严格的格式啊!你重新梳理一下应该就好了,对了,我的审批通过了!现在要做入学测试题了 ...

恩恩,一起加油!!
作者: 杜弦东.    时间: 2015-6-11 15:18
     哦!
作者: yang2015    时间: 2015-6-11 19:46
学习学习
作者: cyd1058    时间: 2015-6-11 20:02
学习了,加油
作者: candy_xue    时间: 2015-6-11 20:47
对于初学者  确实是个很不错的demo
作者: 15383016390    时间: 2015-6-22 07:40
hopestar 发表于 2015-6-11 15:06
我觉得没有什么很严格的格式啊!你重新梳理一下应该就好了,对了,我的审批通过了!现在要做入学测试题了 ...

同学,你学的怎么样了啊?能入学了吗?
作者: 1958078929    时间: 2015-6-22 07:52
谢谢分享
作者: hopestar    时间: 2015-6-22 20:03
15383016390 发表于 2015-6-22 07:40
同学,你学的怎么样了啊?能入学了吗?

还差最后一步面试了,不知道能不能过呢?你呢?过了没?
作者: a1224577182    时间: 2015-6-22 21:03
感谢分享!!
作者: 十五号的人生    时间: 2015-6-22 21:52
学习了,谢谢楼主
作者: fanrong    时间: 2015-6-22 22:30
解释的很详细,受用了
作者: 金亮0602    时间: 2015-6-22 22:53
解释的不错  ,正好也是我也学习一下
作者: 宝马X6    时间: 2015-6-22 22:56
这个表示看不懂
作者: 几率收割    时间: 2015-6-22 23:08
有些凌乱
作者: liu100chao    时间: 2015-6-22 23:13
个人觉得 ,再加一个构造代码块能更给力!
作者: liu100chao    时间: 2015-6-23 22:06
liu100chao 发表于 2015-6-22 23:13
个人觉得 ,再加一个构造代码块能更给力!

好!但是你要是什么知识点都自己动手来做的话!需要好长的!时间才能看完视频走完流程
作者: 风一样的少年    时间: 2015-6-23 22:09
很好,支持
作者: liu100chao    时间: 2015-6-26 18:34
liu100chao 发表于 2015-6-22 23:13
个人觉得 ,再加一个构造代码块能更给力!

说得好!自己动手 ,丰衣足食




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