I think the willcode code will be closest to the key point expression here, and it probably all means, but not clear.
The problem is that there is something very wrong with what you ask: "If I write all the instructions after the catch block instead of writing them to the finally block, then will there be something wrong?"
If you write all the instructions after the catch block, then you mean that
1) You will always catch an exception.
2) After you catch the exception, you will always continue with the following instructions.
This means that you will always continue to execute "normally" after the exception, which usually means that you really never .
Exceptions should be just that - exceptional. If you can really handle the exception, it is always best to write your own code to consider these conditions first and not lead to an exception at all. If you follow this model, the exceptions are really exceptional - conditions that you could not foresee or, at most, cannot be corrected. Do not really expect that you should work. This means that in general you cannot handle true exceptions, which also means that you should not just continue execution, often you end the application.
What is usually done, you allow the error to distribute a backup of the call stack. Some say that this is done in case someone higher up in the chain can handle it. I would say that essentially never happens, there are two real goals for this. One of them may be something that the user can fix if he is. This way you spread the error until you get to where you can report it to the user. Or two, the user cannot fix this, but you want to get the whole call stack for debugging. Then you catch him upstairs to fail gracefully.
The finally block should now have more meaning to you. As everyone says, it always works. The clearest use is finally really in an attempt ... to finally block. Now you say that the code works fine, fine. We still need to clean up a bit, and finally, we always execute and then continue. But if some kind of exception occurs, we really need this block to be finally blocked, because we still need to clear a bit, but we no longer catch the exceptions here, so we will no longer move on. The finally block is needed to provide cleanup.
The idea of an exception that always stops execution can be difficult for someone until they have a certain experience, but in fact it is a way to always do something. If an error occurred, or it was so insignificant that you had to take it into account, or simply more and more errors awaiting what would happen along the line.
The "swallowing" errors - catching them and moving on - this is the worst thing you can do, because your program becomes unpredictable and you cannot find and fix errors.
Well-written code will contain as many attempts ... finally blocks as necessary to ensure that resources will always be released regardless of the result. But well-written code usually contains only a small number of try ... catch blocks, which exist primarily so that the application can fail as gracefully as possible, or put off to the user, which means at least always send a message user etc. But you usually do not just catch the mistake and keep going.