質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

3回答

803閲覧

this変数の使い方

2r4h8k3m

総合スコア22

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2021/06/17 06:44

以下のソースで出てくるthisがどういう意味で使われているのかが分かりません。下のURLで使い方を調べたのですが、ローカル変数、クラス変数を区別して使ったり別のコンストラクタを呼び出すなどのやり方は調べたのですが、
どれも「this.変数」といった書き方がされているのにこれは単体で使われています。

お手間ある方宜しければご返答お願いします。

this使い方
https://techacademy.jp/magazine/19074

thisの使い方2
https://www.sejuku.net/blog/19815

private void startCamera() {
final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
Context context = this;
cameraProviderFuture.addListener(new Runnable()

...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/06/17 06:54

昔から頻出の質問なので teratailの検索窓に「tag:Java this」と入れて検索してみたら同じような疑問を抱いた質問が 沢山あります。
2r4h8k3m

2021/06/18 08:29

ありがとうございます。確かに全く同じ内容の質問ございますね汗、参考にしてみます。
guest

回答3

0

「自身(実体と言ったほうがいいか)」です。
this.変数名やthis.メソッド名()となっているときも「自身の変数」「自身のメソッド」です。

getInstance()の機能とか調べたほうが分かるもしれません。

投稿2021/06/17 06:47

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

2r4h8k3m

2021/06/18 08:29 編集

お返事ありがとうございます、メソッド調べてみて自身を読み込む理由と日付と時間を立ち上げる際更新しているのかなと検討つけることができました、大変助かりました汗
guest

0

thisは予約語で、そのクラスのオブジェクト自身を表します。

とそこに書いてあります

投稿2021/06/17 06:46

y_waiwai

総合スコア87778

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

2r4h8k3m

2021/06/18 08:27

定数や空の状態で定義しているものしかよく分かってなかったのかと...こちらはContext context=this;は書き換えるとContext context=Context();というような感じなのかな、、どうもありがとうございます。
guest

0

ベストアンサー

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 の方がインスタンス(あるいはオブジェクト))

投稿2021/06/17 08:14

編集2021/06/18 09:20
BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

2r4h8k3m

2021/06/18 08:06 編集

長文でご回答ありがとうございます、オブジェクト思考苦手意識あったのですが、復習になりました... グローバル変数がオブジェクト外、ローカル変数がオブジェクト内、this単体の自分自身というセットなのかなとぼんやり思ったのと、 クラスからインスタンスを生成する時は Context context = new Context();のような書き方をすると思うのですが、 インスタンスを生成するのではなくてそのオブジェクト自身を実行するイメージなのかな、的射てなかったらすみません汗
BeatStar

2021/06/18 09:00

本文に追記しますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問