1

00:00:00,930  -->  00:00:07,080
Let's not do the math the lifetime effort type I ordered on the program that we saw earlier in the introductory

2

00:00:07,080  -->  00:00:07,840
lesson.

3

00:00:08,010  -->  00:00:10,120
So it was simple run that program.

4

00:00:10,410  -->  00:00:15,960
If you recall the class Nimitz class initialization Demel and it's only available for download from

5

00:00:15,960  -->  00:00:17,390
the resource section.

6

00:00:17,760  -->  00:00:18,920
So you can download it.

7

00:00:19,030  -->  00:00:23,770
And are you going to add a new package called com not semantics cleared or JVM.

8

00:00:24,030  -->  00:00:26,720
And that needs to be done within the demo project.

9

00:00:26,860  -->  00:00:28,510
Recall that we now have two projects.

10

00:00:28,560  -->  00:00:34,010
One is the demo and the other trio were three includes our real project code.

11

00:00:34,020  -->  00:00:39,520
So any new code that we write in this chapter will go under this new package called JVM.

12

00:00:39,590  -->  00:00:44,400
Now this class has been extended from what we saw in the introductory lesson.

13

00:00:44,400  -->  00:00:47,580
This was done for the monster two additional things.

14

00:00:47,580  -->  00:00:51,150
So let's just go ahead and review that and our program one more time.

15

00:00:51,150  -->  00:00:54,700
That way we can also see the new stuff that got added.

16

00:00:54,780  -->  00:01:00,210
So here is the class initialization demo and this is an instance initializer block and this is a static

17

00:01:00,210  -->  00:01:01,200
initializer block.

18

00:01:01,290  -->  00:01:06,990
So no changes there from what we signed the introductory lesson here are the new numerators that court

19

00:01:07,020  -->  00:01:07,380
ordered.

20

00:01:07,380  -->  00:01:08,220
One is get in.

21

00:01:08,250  -->  00:01:09,780
Which is a static method.

22

00:01:09,840  -->  00:01:14,070
On the other one is get in the file which is also a static method on both of them are simply retaining

23

00:01:14,070  -->  00:01:16,230
some values.

24

00:01:17,250  -->  00:01:18,660
Now we have the subclass.

25

00:01:18,690  -->  00:01:19,980
No change there.

26

00:01:20,160  -->  00:01:21,590
And it is extending superclass.

27

00:01:21,590  -->  00:01:23,070
No change with that also.

28

00:01:23,550  -->  00:01:27,930
And subclasses also implementing an new interface called Super interface.

29

00:01:27,930  -->  00:01:30,410
So that's a new interface that we just added.

30

00:01:30,480  -->  00:01:37,210
For this demo and we still have the two final few static final unstacked underscored final two.

31

00:01:37,410  -->  00:01:39,260
So both of them are static final fields.

32

00:01:39,390  -->  00:01:47,150
And one of them is a compiled and constant as the other is being initialized via a random function.

33

00:01:47,190  -->  00:01:51,000
Now it still has the static initializer block on the constructor.

34

00:01:51,030  -->  00:01:57,120
So no changes with that but a new instance initializer Rock has been added here and also a new class

35

00:01:57,120  -->  00:01:59,840
called Object Reference has been ordered ironed.

36

00:02:00,150  -->  00:02:02,810
An object of it is being created here.

37

00:02:03,030  -->  00:02:04,690
So that's a plus.

38

00:02:04,710  -->  00:02:11,340
Now let's move here to the superclass in the superclass so constructor is still there but a new starting

39

00:02:11,340  -->  00:02:16,840
condition is a block and a new instance initializer block has been added here.

40

00:02:16,890  -->  00:02:18,960
Now this is the object reference class.

41

00:02:18,990  -->  00:02:24,990
The new object reference class which is initialized which is instantiated in the subclass.

42

00:02:25,170  -->  00:02:28,130
And it just has one constructor and that's it.

43

00:02:28,410  -->  00:02:30,230
Iron here is the super interface.

44

00:02:30,270  -->  00:02:31,890
It has a static method.

45

00:02:32,280  -->  00:02:37,290
So we know that static methods and interfaces are possible only from Java 8 onwards.

46

00:02:37,470  -->  00:02:43,930
So it has this new static method and it also defines field as static final phone calls start to come

47

00:02:43,930  -->  00:02:45,340
the final three.

48

00:02:45,570  -->  00:02:51,630
And it is initialized in this way so we create an instance of class initialization demo and it has this

49

00:02:51,630  -->  00:02:52,500
get in.

50

00:02:52,500  -->  00:02:54,090
So we are invoking that.

51

00:02:54,300  -->  00:02:56,730
And here there is a comment here.

52

00:02:56,730  -->  00:02:58,820
This statement has been commented out.

53

00:02:59,100  -->  00:03:05,040
So it isn't working to get into fine matter in the class initialization will solve it and we will uncomment

54

00:03:05,040  -->  00:03:07,090
this and see what is with that.

55

00:03:08,250  -->  00:03:10,140
And next is the main matter.

56

00:03:10,260  -->  00:03:12,820
So Main and third is pretty much the same method.

57

00:03:12,870  -->  00:03:14,880
So not much or not many changes.

58

00:03:14,910  -->  00:03:16,330
So here we are printing.

59

00:03:16,540  -->  00:03:21,280
Here we are accessing the static underscored final feed in the subclass underspending it.

60

00:03:21,300  -->  00:03:22,470
So no change with that.

61

00:03:22,710  -->  00:03:28,560
And here we are providing the static underscore final proofread and we are instantiating the subclass

62

00:03:28,590  -->  00:03:30,250
which was also there earlier.

63

00:03:30,330  -->  00:03:31,840
The only new statement as this.

64

00:03:31,860  -->  00:03:37,290
Invoking the static method and later we will also uncommon this statement and we will see what it is

65

00:03:37,290  -->  00:03:37,940
.

66

00:03:37,950  -->  00:03:40,380
So that's the main method.

67

00:03:40,890  -->  00:03:43,920
So no let's just go ahead and run this program.

68

00:03:44,220  -->  00:03:48,350
But in order to see the lifetime of a type of this class.

69

00:03:48,420  -->  00:03:55,840
So what we need to do is we need to pass an option call what class do the java command.

70

00:03:56,070  -->  00:03:56,550
OK.

71

00:03:56,640  -->  00:03:59,630
And the V it's an option that we are passing to the JVM.

72

00:03:59,670  -->  00:04:03,630
And the way we do it is just right click and go here to run.

73

00:04:03,640  -->  00:04:09,060
As earlier we were just clicking on this option jaywalked application.

74

00:04:09,060  -->  00:04:18,090
Now let's get this thing run conflagrations and it opens this dialog click on arguments and here there

75

00:04:18,090  -->  00:04:23,850
are two boxes here as the option that you can pass to the GBM.

76

00:04:23,970  -->  00:04:28,810
Henri will call it as Marble's call in class.

77

00:04:29,040  -->  00:04:31,290
And so this will be passed to the GBM.

78

00:04:31,530  -->  00:04:38,050
And if you have any arguments here in program arguments those will be passed to the main method.

79

00:04:38,290  -->  00:04:40,680
OK but we don't have any right now.

80

00:04:40,680  -->  00:04:46,610
But if you just imagine that if we're running this whole thing from the command line and that is these

81

00:04:46,620  -->  00:04:50,840
arguments would be inserted after the class name itself.

82

00:04:50,850  -->  00:04:54,300
So use a Java class name on some program arguments.

83

00:04:54,480  -->  00:05:02,670
But if you want to pass any arguments to the JVM then you said Java hyphen Werben colon class and you

84

00:05:02,670  -->  00:05:07,320
would have the class named class initialization Demel and any arguments that we pass.

85

00:05:07,380  -->  00:05:10,390
So any arguments passed here will be passed to the main matter.

86

00:05:10,740  -->  00:05:15,360
So they will be assigned to those during oral argument that which is the only parameter that the main

87

00:05:15,360  -->  00:05:16,720
method has.

88

00:05:16,740  -->  00:05:24,330
Now I'm also going to include a pointer in the resource resources and that link will show all the options

89

00:05:24,330  -->  00:05:25,890
that GBM would accept.

90

00:05:25,920  -->  00:05:32,610
So you can also take a look at that that'd apply and not hurt her.

91

00:05:33,560  -->  00:05:38,010
So now the class initialization demo has been executed.

92

00:05:38,000  -->  00:05:43,050
Also just note that there are many classes here each of four each of them are docked last fall is also

93

00:05:43,050  -->  00:05:45,370
generated on the on the desk.

94

00:05:45,810  -->  00:05:49,030
OK so now let's just evaluate what we have here.

95

00:05:49,170  -->  00:05:50,610
So let's begin with this.

96

00:05:51,040  -->  00:06:00,480
And here as soon as the JVM has started GBM got created here the bootstrap classloader has kicked in

97

00:06:00,960  -->  00:06:08,510
and it is loading this rt.jar Jotham jihadi did directory and we know that Arbi as Dornheim door ajar

98

00:06:09,000  -->  00:06:11,220
and that includes the Kujawa library.

99

00:06:11,220  -->  00:06:18,080
So now or here from here from this line on what it's going to load all the classes and the Kujawa library

100

00:06:18,340  -->  00:06:21,100
that is all most of the important ones.

101

00:06:21,300  -->  00:06:25,190
So you can see that the first one is the Djala that land or object itself.

102

00:06:25,410  -->  00:06:28,830
Then here is a Java dart call that serializable.

103

00:06:28,980  -->  00:06:34,370
Dot dot dot compatible on all of these classes and interfaces are getting loaded.

104

00:06:34,440  -->  00:06:40,290
So that's the class loading process that it is done by the bootstrap class order can see so many different

105

00:06:40,290  -->  00:06:42,970
class files.

106

00:06:43,330  -->  00:06:50,700
Just go here and here at the very end is the class initialization them all which is the startup class

107

00:06:50,710  -->  00:06:54,030
classes that we how we are running here which has the main method.

108

00:06:54,180  -->  00:06:58,420
So this class is inside the JVM and that got it ordered.

109

00:06:58,540  -->  00:07:01,340
OK so that's stuck only the class loading process.

110

00:07:01,680  -->  00:07:08,360
So once that is done the GBM would actually initialize this class and that is happening here.

111

00:07:08,490  -->  00:07:14,850
So the static in the initialization stage we know that the static initializer block rule will run.

112

00:07:14,850  -->  00:07:20,350
So that's what is happening here is the static initializers block right here.

113

00:07:20,910  -->  00:07:26,340
And we also have this related comment here saying that it's the initialization stage but the instance

114

00:07:26,340  -->  00:07:27,720
initializer block.

115

00:07:27,750  -->  00:07:28,650
Although we have it.

116

00:07:28,680  -->  00:07:29,570
It's not.

117

00:07:29,910  -->  00:07:31,500
It has not been executed.

118

00:07:31,500  -->  00:07:34,740
The reason for that is an instance has not been created.

119

00:07:34,740  -->  00:07:38,280
Here an instance of class initialization Demel has not been created.

120

00:07:38,310  -->  00:07:41,990
It's just has been loaded and it just has been initialized.

121

00:07:42,030  -->  00:07:42,600
OK.

122

00:07:42,810  -->  00:07:49,620
Now after that after the static initializer walk is executed then the next thing that happens is the

123

00:07:49,620  -->  00:07:51,090
main method is invoked.

124

00:07:51,120  -->  00:07:57,150
So GBM actually invokes the main Materne and all the statements here get executed.

125

00:07:57,510  -->  00:07:58,770
Now with each statement.

126

00:07:59,000  -->  00:08:00,630
Something is happening behind the scenes.

127

00:08:00,660  -->  00:08:02,110
And we are going to look at that.

128

00:08:02,380  -->  00:08:02,600
OK.

129

00:08:02,610  -->  00:08:05,060
So the statement is GBM in Rhogam main method.

130

00:08:05,070  -->  00:08:07,210
OK so we are here in the main matter.

131

00:08:07,550  -->  00:08:11,450
And the next statement is accessing this topic find free.

132

00:08:11,670  -->  00:08:15,530
But this has been not in walk but decided not to load the subclass.

133

00:08:15,570  -->  00:08:21,240
And the reason for that is that the client is a compile time constant so that value as has got copied

134

00:08:21,240  -->  00:08:21,960
here.

135

00:08:21,960  -->  00:08:29,330
OK so sapless has not been loaded yet and we are simply printing the value 47.

136

00:08:29,340  -->  00:08:34,110
Now the next statement says in working subclause not static final do it's just printed AS-IS.

137

00:08:34,230  -->  00:08:37,760
And here we are going to access Dodik finally.

138

00:08:38,300  -->  00:08:41,290
And with that there are some interesting things that are happening.

139

00:08:41,630  -->  00:08:46,680
So hosting this starting or is not a compile time constant So let's just go here.

140

00:08:46,880  -->  00:08:52,400
So it's it's assigned disvalue value that I value by invoking this random function.

141

00:08:52,400  -->  00:08:55,380
So what exactly is happening here and on if you see here.

142

00:08:55,890  -->  00:09:03,260
So superclass subclass has got reordered now and because of this even super interfaces loader and super

143

00:09:03,260  -->  00:09:08,670
process roaded so because it's extending Supercross and implementing super interface and they are loaded

144

00:09:08,730  -->  00:09:15,930
in this particular order Moka interface first and then the superclass then the subclass after these

145

00:09:15,920  -->  00:09:22,320
three got rewarded then the static initializer block in the superclass has been that which means the

146

00:09:22,320  -->  00:09:28,050
initialization off superclass has completed and that's the reason the static condition is Godkin superclass

147

00:09:28,530  -->  00:09:29,660
got executed here.

148

00:09:29,700  -->  00:09:31,800
And that statement is getting printed here.

149

00:09:31,800  -->  00:09:35,580
So you just go here to the superclass.

150

00:09:35,730  -->  00:09:36,630
Here it is.

151

00:09:36,620  -->  00:09:42,390
So this it meant got executed but the super interface is just loaded.

152

00:09:42,540  -->  00:09:45,070
But it's it is not initialized.

153

00:09:45,090  -->  00:09:51,410
So if you recall that's what we said when we discussed initialization for what an interface it gets

154

00:09:51,410  -->  00:09:58,640
initialized only if it's static method is invoked or if it went off its use is invoked and that field

155

00:09:58,670  -->  00:10:05,810
has one off the field is accessed under you cannot be a contes compile time constant only one of those

156

00:10:05,820  -->  00:10:07,020
two things happen.

157

00:10:07,020  -->  00:10:09,740
So an interface can will be initialized.

158

00:10:09,810  -->  00:10:15,900
So that's the reason an interface is only has only been loaded but it was not initialized.

159

00:10:15,890  -->  00:10:22,610
OK so we see this statement but following that we have these three lines here.

160

00:10:22,860  -->  00:10:28,700
So that is because so it's hurting the mat something with some something related to my class.

161

00:10:28,880  -->  00:10:34,960
That's because here are in the subclass we are invoking the random function.

162

00:10:35,170  -->  00:10:41,870
So some classes are related to that are getting loaded here and what it means is it's lazy loading.

163

00:10:42,040  -->  00:10:42,340
OK.

164

00:10:42,340  -->  00:10:47,110
So these things are encountered now ironed and they are being lazy ordered.

165

00:10:47,110  -->  00:10:47,600
OK.

166

00:10:47,830  -->  00:10:49,250
So after that the start.

167

00:10:49,390  -->  00:10:55,750
So though the superclass has been initialized now the subclass is getting initialized and the static

168

00:10:55,750  -->  00:11:00,890
initializer grock in the subclause got initialized underspent in the statement on Finally the stocktake

169

00:11:00,950  -->  00:11:01,080
.

170

00:11:01,090  -->  00:11:05,740
Finally you got assigned a value of zero in the main method.

171

00:11:06,550  -->  00:11:07,710
So that's that.

172

00:11:08,080  -->  00:11:13,990
And after that we are saying instantiating subclassed and we are creating an instance of a subclass

173

00:11:13,990  -->  00:11:14,800
.

174

00:11:14,800  -->  00:11:15,360
OK.

175

00:11:15,640  -->  00:11:20,260
Now when we instantiate this subclass what happens is.

176

00:11:20,530  -->  00:11:25,540
So we need we need to loop this subclass but subclass is already loaded Onitsha in the memory on the

177

00:11:25,540  -->  00:11:26,070
heap.

178

00:11:26,200  -->  00:11:28,780
So it's not going to get loaded once again.

179

00:11:28,780  -->  00:11:36,070
So the classloader will simply use the class object class which is already in the heap for subclass

180

00:11:36,580  -->  00:11:40,040
and it's also going to do the same for superclass.

181

00:11:40,060  -->  00:11:43,200
In fact we know about constructor chaining.

182

00:11:43,270  -->  00:11:49,300
So because of that the superclass constructor will be in Rockfest before the superclass constructor

183

00:11:49,300  -->  00:11:55,000
is invoked the superclass instance initializer will be in work here.

184

00:11:55,000  -->  00:12:03,310
Harridans supercross because an instance of superclass has been created and it's following that the

185

00:12:04,080  -->  00:12:05,470
constructor is in work.

186

00:12:05,800  -->  00:12:12,040
So that's the construct of changing so fast the constructor of the superclass is invoked before this

187

00:12:12,130  -->  00:12:13,990
subclass constructor.

188

00:12:13,990  -->  00:12:16,630
So that's why you see these two statements.

189

00:12:16,630  -->  00:12:24,130
And then we the control goes into the subclass that tries to initialize all the instance variables and

190

00:12:24,160  -->  00:12:26,730
also runs the constructor call.

191

00:12:26,770  -->  00:12:33,190
But here we have this variable here object reference which is where we are instantiating this object

192

00:12:33,190  -->  00:12:34,270
reference class.

193

00:12:34,510  -->  00:12:39,850
So that's the so the lines that you see here is really is related to that.

194

00:12:40,480  -->  00:12:42,480
So this is something to do with that.

195

00:12:42,580  -->  00:12:48,640
And here we are loading the object reference class and the object reference constipate results are in

196

00:12:48,640  -->  00:12:54,820
Wilker following which subclass in the initial instance initializer unsuppressed constructor are invoked

197

00:12:54,820  -->  00:12:55,420
.

198

00:12:55,420  -->  00:12:59,590
Now here interesting thing is subclass.

199

00:12:59,800  -->  00:13:05,020
But here if you see the output here instance initializers statement is printed before the constructor

200

00:13:05,030  -->  00:13:05,370
.

201

00:13:05,620  -->  00:13:11,910
But if you look at the code instance initializer is appearing after the constructor in the source corner

202

00:13:11,920  -->  00:13:12,290
.

203

00:13:12,640  -->  00:13:18,460
So and that's because instance initializer is always copied to the beginning of constructor by the compiler

204

00:13:18,460  -->  00:13:19,030
itself.

205

00:13:19,120  -->  00:13:21,480
So compiler is doing that class.

206

00:13:21,490  -->  00:13:24,060
OK so that's about that.

207

00:13:24,100  -->  00:13:29,010
And let's look at the next statement here the static method is being invoked.

208

00:13:29,050  -->  00:13:31,300
Now the super interface will be initialized.

209

00:13:31,300  -->  00:13:33,570
So let's see what we have here.

210

00:13:34,330  -->  00:13:40,270
OK so it's calling the super interface is getting initialized.

211

00:13:40,480  -->  00:13:45,580
So because of this invocation of the static method Sinaloan Let's go into the Super interface model

212

00:13:45,610  -->  00:13:45,640
.

213

00:13:45,670  -->  00:13:51,130
So when we say it's initialized so fast this field gets this treatment gets executed.

214

00:13:51,430  -->  00:13:59,170
And here this class instance is being created instance of class initialization demo which means that

215

00:14:00,700  -->  00:14:08,910
any instance of variables or any constructor or initializer within this class will be executed.

216

00:14:09,040  -->  00:14:15,610
So that's why you see that the instance initializer within the class initialization do more has got

217

00:14:15,610  -->  00:14:16,920
executed under.

218

00:14:17,060  -->  00:14:18,450
And we're printing that.

219

00:14:18,710  -->  00:14:21,360
And after that the GET IN method is getting in walk.

220

00:14:21,370  -->  00:14:23,150
So that's what is happening.

221

00:14:23,170  -->  00:14:28,090
And finally after that the static method indecl put interfaces being in walk.

222

00:14:28,360  -->  00:14:35,860
OK so this gets initialized only when a static method is invoked or when a field is invoked which is

223

00:14:35,860  -->  00:14:37,060
not compile time constant.

224

00:14:37,060  -->  00:14:42,340
So for that let's just go here and let's uncomment this.

225

00:14:42,520  -->  00:14:49,300
So instead of static method now we are accessing the static final three which is a field and super interface

226

00:14:49,310  -->  00:14:50,240
.

227

00:14:51,250  -->  00:14:52,360
So if you go there.

228

00:14:52,360  -->  00:14:53,720
Here it is.

229

00:14:53,740  -->  00:14:59,230
So now let's run this one more time and let's examine this final code.

230

00:14:59,260  -->  00:15:06,400
So the class initialization demo has been initialized in the instance initializer is run and the get

231

00:15:06,520  -->  00:15:09,570
and method is invoked.

232

00:15:10,330  -->  00:15:13,150
And the start declining three values assigned the studio.

233

00:15:13,150  -->  00:15:17,480
So the super interface is one more is once again initialized not uncommon.

234

00:15:17,550  -->  00:15:21,790
This also and let's run it one more time.

235

00:15:21,790  -->  00:15:24,680
So here we have two trees on both of them.

236

00:15:24,730  -->  00:15:30,460
One of them is calling the get end method in class initialization Demel and the other step on the other

237

00:15:30,460  -->  00:15:32,090
field is in we can get in five.

238

00:15:32,110  -->  00:15:33,080
The second matter.

239

00:15:33,280  -->  00:15:34,350
And this.

240

00:15:34,390  -->  00:15:40,800
But over here if you see we are in we're accessing only one of the rooms start to underscore final treat

241

00:15:40,800  -->  00:15:41,390
.

242

00:15:41,740  -->  00:15:46,840
But that is also because this class interface is being initialized.

243

00:15:46,840  -->  00:15:49,250
It's also executing this second statement.

244

00:15:49,250  -->  00:15:55,180
Static underskirt final 5 is getting initialized because when it gets initialized it's going to initialize

245

00:15:55,210  -->  00:15:56,900
all the static final FIERS.

246

00:15:57,100  -->  00:15:57,780
OK.

247

00:15:58,330  -->  00:16:03,550
So that's why you'll see that when when the instances are being created in the two statements that's

248

00:16:03,550  -->  00:16:09,930
where you see that your class initialization the more instance initializer is run once ungrudging get

249

00:16:09,930  -->  00:16:14,460
in has been invoked on here instance initializer in the second statement.

250

00:16:14,590  -->  00:16:18,520
Due to the second statement it got executed.

251

00:16:18,580  -->  00:16:21,230
Get in 5 is getting involved this time.

252

00:16:21,250  -->  00:16:28,270
So as long as one of the fields is accessed which is not a compile time constant then an interface will

253

00:16:28,270  -->  00:16:35,920
be initialized and all the rest of the Foose static fruits will also be real will also be executed.

254

00:16:36,340  -->  00:16:39,140
So that's about the interface initialization.

255

00:16:39,220  -->  00:16:40,110
So that's about it.

256

00:16:40,180  -->  00:16:46,630
But finally if you just think about it you may feel that there is not much value in learning on this

257

00:16:46,630  -->  00:16:47,050
.

258

00:16:47,140  -->  00:16:52,160
For example in the main method we're accessing this topic you start to underscore find them unstarted

259

00:16:52,510  -->  00:16:58,460
final two from the subclass and all the kid is whether we are able to access those values or not.

260

00:16:58,540  -->  00:17:03,470
What difference would it make if we know whether those classes are loaded uninitialized or not.

261

00:17:03,880  -->  00:17:05,180
So that's a valid thought.

262

00:17:05,290  -->  00:17:07,750
But the thing is we want to do better than that.

263

00:17:08,020  -->  00:17:11,660
We want to know what the Java platform is doing internally.

264

00:17:11,770  -->  00:17:16,180
So we are pushing our boundaries here on trying to get a better grasp of the technology.

265

00:17:16,450  -->  00:17:22,210
And that's the reason behind having this chapter in this course but it's not just about making our self

266

00:17:22,480  -->  00:17:23,150
complete.

267

00:17:23,230  -->  00:17:28,620
But the designers also have a reason behind making making it work in this way.

268

00:17:28,720  -->  00:17:31,620
For example there is a reason behind having constructor chaining.

269

00:17:31,840  -->  00:17:34,110
You want to pretend to be initialized by fortune.

270

00:17:34,210  -->  00:17:36,130
Otherwise there can be issues.

271

00:17:36,490  -->  00:17:41,800
OK so there can be some issues on so it's important to be aware of how things are handled by the platform

272

00:17:41,840  -->  00:17:42,100
.

273

00:17:42,310  -->  00:17:46,010
OK so it's a good thing that we are studying all this.

274

00:17:46,040  -->  00:17:47,470
So that's about it.

275

00:17:47,470  -->  00:17:48,850
Hope you enjoyed this remote.

276

00:17:48,880  -->  00:17:50,350
See you in the next lesson.
