this単体のことを学ぶよりも、オブジェクト指向の基本概念を学ぶのがいいかもしれません。
オブジェクト指向( 以降、OOP ) に this は必須ではないですが、ある意味関係してくるので。
まず、OOPの基本概念は、
『データ(= フィールド)と処理(= メソッド)をひとまとめにしたオブジェクト』を中心に見る発想法です。
C言語等のような非OOPだと、データと処理(つまりデータと関数) は別物でした。
そこでデータと処理をひとまとめにし、(これをオブジェクトと言います)
対象データと処理方法はオブジェクトだけが知っているという状態にし、オブジェクトに管理や処理を任せる発想法です。
そのオブジェクトを使うときは、呼び出し側(mainメソッドとか)からすれば、
Java
1TestClass1 obj = new TestClass();
2
3int n = obj.method1( 100 ); // <- オブジェクトが管理や処理等を行う
と出来ます。
さらに呼び出し側からすれば obj がオブジェクト名のようなものです。
でも、そのオブジェクトの内側( method1メソッドの内部とか )からはオブジェクト名が見えません。
そのため、thisという予約語(?) で**『吾輩のメンバであるぞ』(場合によっては『吾輩のことであるぞ』)と指定しているだけ**です。
[追記1]
返信への返信としてここに書きますね。
グローバル変数がオブジェクト外...
グローバル変数っていうのは、C言語でいう、『どこからでもアクセスできる変数』です。
JavaやC#だと説明しづらい(基本的にグローバル変数を使えないようにしているため。苦肉の策でやろうと思えばできるが)ですが。
まずグローバル変数は基本的に非推奨です。
基本的に業務ではチーム開発らしいです。
Aさんがこの機能担当、Bさんがこの機能担当、Cさんがこの機能担当、Dさんが……
と言う風に。
で、仮に一括処理程度のものとして、『テストの点数で合格・不合格を決める』系のプログラムを作るとします。
で、たとえば『80点以上(p≧80)が合格、それ以外(p<80)が不合格』とします。
それで、仕様的にグローバル変数 int point を使うとしたとき、
ある人(たとえばCさん) が間違って(あるいは故意に) pointの値を書き換えてしまったとします。
そうするとバグります。
たとえば本来なら 81点 なので 『合格』とすべきですが、間違って(あるいは故意に) 31点に書き換えられたらどうなりますか?
不合格になりますよね。
本来は合格なのに。
確かに引数や戻り値を使っても同じミスは起きる可能性はあります。
でも引数や戻り値を使ってのものであれば、『範囲が絞られている』のでデバッグは比較的簡単。
対象データの流れや戻り値・引数を追っていけばいいだけです。
でもグローバル変数だと、『どこからでもアクセスが出来る』ので範囲は『全部』となってしまいます。
関係のない関数やクラス、メソッド等からでもアクセスができるので。
なので基本、非推奨。
ただし、競技プログラミング等で動的計画法なんかを使う場合はグローバル変数を使ったりします。
でもそれはあくまで「危険性を理解した上で」です。
そして追記の『グローバル変数はオブジェクトの外』かどうかは『合っている』です。
メソッド内でもないし、フィールドでもないです。
ローカル変数は、『メソッド内』です。
オブジェクトが持つデータ(変数とか)は『フィールド』です。(言語によっては『プロパティ』とかっていったりするが(JavaScriptとか))
クラスからインスタンスを生成する時は...
Context context = new Context();
だと、『Contextクラスでnew(生成)して Contextとして保持する』オブジェクトです。
(ちなみに context の方がインスタンス(あるいはオブジェクト))