00:00
呃,现在呢,我们继续来看下面的代码,就是这个流程,那么通过这个案例呢,我们来再看一下这个SKY程序的一个执行过程哈,嗯,我这里想写一段代码。想写一段模拟代码,让大家再来认识一下,就是SC它这个程序执行的一个流程,流程,那刚才呢,我们在讲这个用ED写的时候呢,我把这个流程已经说了一下,但是呢,只是把它说了下,我们没有写一段模拟代码,就说现在我们想这样干件事情,干点什么事情呢?我们用Java来写一段这个模拟代码,到底它是怎么跑起来的,因为同学们在前面学JA烷的时间可能有点久了,就是基础呢,可能有有一些遗忘了,对吧,所以说我刚好了把这个给他,再给他过一下。或者说给他演示一个它的这个模拟一段Java代码,看是怎么跑的,大家认识更清晰了。好,我写一段模拟代码,比如说我们就以这段代码为例。
01:03
Test scan,我写了这么一段代码,为什么它就能运行hello scan I idea呢?原因是为什么呢?我们来写一段模拟代码来走一个。好,这次呢,我就直接写家吧,啊呃,为了模拟呢,我就这样子,我就干脆哈,干脆新建,在下面新建一个悬。啊建一个包叫什么呢?叫做叫做这个这个测试啊测试。测试它的一个运行。好。好这些,那么我在里面这里面来看一下流程是什么样子的,来先用反编译工具把刚才这个打开。打开我们这个反编译工具。好的,打开过后呢,我们来找一下在哪里呢?在不在这儿,不在这儿,整个先说一下啊,我们撕开了这个项目,它会默认放在哪个地方呢?你们可以这样去看。
02:06
如果不知道怎么看的话,可以直接点它右键,这有一个可以看它的东西叫show in explorer。你看这。把它打开过后,你就知道我们的项目其实都是放在这个下面的,这就一目了然了,就是在C盘下面的idea project下面这个零五什么什么什么进去的啊好我们来看一下,那现在呢,我用反编译工具来找一下,首先我先找到C盘。C盘下面有一个用户,用户下面有个administrator里面有一个这个idea,哎,不是这个啊,是这。Idea projects进到这里面有很多的文件夹,就是你的项目,我们刚才建的这个项目呢,就应该是07205,进到这里面去,进到这里面去呢,有两个部分,一个是S,这是我们的源代码。
03:01
源代码就是你自己写的那一部分代码,比如说我们main里面的,看到里面的代码都在这,你看我们刚才写的这个test,包括这这这些都有,好,但是我们要看什么呢?看的是它生成的class文件,都应该到这个target里面去找,好我进到这里面去找。我发现这里面呢,已经有了,好我把它点开。看他是这样进来的。第一个是这儿有一个。Test scanner,我把这个拿过来。因为我要模拟它嘛,所以说我就干脆给他写一样的名字啊,注意听。这有个test,我就模拟一下,看他是怎么跑起来的,就讲一次这个好,我新建一个class,注意我在讲的是模拟,我我就是看看他是怎么跑的。那这个代码既然是模拟,那我干脆省个事儿,我就直接把他这个代码拿过来为我所用。我就拷贝过来。
04:00
拷贝过来这个也没问题,那么我整理一下代码啊,显然这个地方他一定会报错好,报错原因就是因为你这些还没写全好,紧接着呢,我把这个地方也拿过来,就是这个地方代码。这个代码呢,我也一并复制过来。啊,复制过来。大家看这段代码,其实已经是Java代码了啊。因为它反应过来肯定是反编译,肯定是加对应的加法嘛,好,然后呢,我把这呢也拿过来好,我要整理整理了,首先我把这个public拿掉。好,类名我们可以保留,然后这个地方的类型呢,我们给他补一个。啊,类型补一个好,这个地方它会报一个没有初始化,没有初始化呢,我们把这个初始化工作,呃,给它放到这个静态块里面去啊静态块里面去,我把这个先注销。我说了啊,反编译跟你实际代码是有些区别的,因此呢,我这里就对它做一个小小的改进。
05:00
好,这名就OK。好,这时呢,这个Z是他不知道从哪来的,所以说我直接溜一个。261个t scanner。好这就可以了,好这里面这个代码呢,在调用的时候,我这这个地方一看就应该是我们开里面的部分对吧?好这边我就不去用它了,我就直接输出一句话就可以。System。Or system.out。点out.print好,这就说出这句话好。嗯,这个地方还有一个问题,他说没有初始化,现在应该。小了一个小括号。是不是这样就可你看这个就相当于把这个final就写完了,然后这帮调它是怎么调的呢?它其实是这样调的,朋友们他是这样调的啊。它其实是直接调用这个地方还是很很有意思的,它用它去调它下面这个model,这个model是一个静态的,是不是直接可以拿来用了,以前老师讲过就是Java的基础,然后再调我们的main函数,Main函数传进去的参数是什么呢?其实就是它。
06:11
啊,你是什么就什么写完了,你看这个写完了过后,这边还有一个错误,这是什么错误,是不是我少了一个。打括号这写完了,看你看这个流程就已经跟刚跟他这个反编译过后的几乎就差不多了,你看这个它流程什么着呢,首先你这写了一个object过后呢,它会生成两个。Class一个是这个,一个是这个,那么我们真正的这个命入口呢,仍然是在这儿写的,但是你实际的代码,就你实际写的这个哈呢,是在这里面说它做了一个包装,我们可以理解成它做了一个包装,就说我们可以理解什么呢?An在运行的过程中。
07:01
在运行时,运行时做了一个包装。做了一个包装,当然有同学一定会问为什么要包装,我这先暂时不理解,不说了啊,我现在只提一句,就提一句,就是呃,SC,它是把一个类静态和非静态分成两个部分。说他做了包装。啊,如果说他只有一个,那就不会包装的,所以你会看到只要你写一个object就会生成两个啊只他只要是上他都会这么干啊,那么这样子由此你看就很像主函数进来。调用我们这个。Test test,看里面的一个Mo Dollar,然后呢,这个是个静态的,我问大家一个问题,呃,请大家思考,在我整个这个运行过程中,其实这个Mo Dollar是不是始终是同一个对象啊?这一点大家一定要清楚啊,也就是说大家以后只要看到在我们的SC里面写了一个object的这个东西,你就马上反应过来他。
08:08
就等价于test Dollar的一个静态对象,而且是单立的。啊,但是后面我还会说你就先。有这个印象在里边有,你只要看到说object,你就可以在你的形象里面就可,只要只要以后看到看到有object这个玩意儿,你应该有这么几个认识,你应该应该有这样一个认识或者一个印象啊认识,呃,什么认识呢?认认识啊认识。就是第一个。它是一个什么呢?它是一个单立的,就是它对应的这个凹,对应的是一个具体的一个静态对象是零。你这个要必须要突破啊,对应的对应的是一个这样的类型的。
09:05
这样的类型,这个类型。的一个静态对象。静态对象,而且静态啊,静态对象它的名字呢,大概都是叫这个名字,就是猫就是这个名字啊,大体都叫这个名字,它是统一的。啊,统一的就是Mo Dollar。那就到了,而且大家要知又可以知道它是一个在整个运行过程中,在程序中它是个单立对象。在我们的这个程序中,它是一个是一个单例好就可以了。以后只要看到这个东西,马上脑海里面反应过来,一看到这个就反应过来了,好,现在呢,我自己醒完了,我们现在可以跑下了,看看能不能跑起来,跟我们这个执行效果是不是一样的,跑一个运行。好,当我们运行完了过后,你会发现效果是一样的。你看效果是一样的,完全一样。哦,明白了,大体诶,好像把这个神秘感就打破了,对吧,其实说白了它就是做了一个包装,而且呢,调用的时候它是一个什么呢?是底层用了一个静态的对象来调用它的这个主函数啊就这个意思,好这个包装呢,我们就说到这里,那同学们我把这个讲完哈,然后这块我们就说完了,看程序反编译。
10:24
我把它放到这儿。我们对这个开程序做了一个反编译的一个说明和整理。和整理和说明好,第一个呢,我们看了一下它反编译的代码。就这就是它底层的东西了,反编译代码呢,就是这样子的。代码。对我就不说了啊呃,反编译代码你们可以自己以后可以自己去顺着这个工具自己来看,就至少你要有些基本认识在这。好,我把它呢放在这儿。没有这个工具的同学,好,同学们要去,呃,在我那个给的资料里面看一下,这第一个模拟代码就是使用,使用什么呢?使用Java。
11:07
加模拟了一下SC,模拟scan的一个运行SC的运行机制的代码啊,简单的模拟了一下,那么我把这段代码呢,也给同学们整理到笔记里边去啊,非常的简单。好,拿过来。给大家放到这儿。好的,那这个呢,我们就说到这里,说到这里好截取一段视频。
我来说两句