ビデオ: Android教材 Android基礎&Androidアプリ15本の作成 要素1「アプリの構成要素」 2024
Androidアプリで名前を再利用するときに考えるべきことがいくつかあります。 2つの異なる
BagOfCheese
オブジェクトを参照するために、2つのJava変数、
bag1
と
bag2
を宣言できます。それはいいです。しかし、時には、1つの変数しか持たず、2番目のオブジェクトのためにそれを再利用することは、ここに示すように、まったく同じように機能します。
package com。オールマイコード。 a09_03;
インポートアンドロイド。サポート。 v7。アプリ。 AppCompatActivity;
インポートアンドロイド。 os。バンドル;
インポートアンドロイド。ウィジェット。 TextView;
import com。オールマイコード。 a09_01。 BagOfCheese;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState){
スーパー。 onCreate(savedInstanceState);
setContentView(R。レイアウト。activity_main);
textView =(TextView)findViewById(R。id。textView);
BagOfCheeseバッグ=新しいBagOfCheese();
バッグ。 kind = "チェダー";
バッグ。重量= 2.43;
バッグ。 daysAged = 30;
バッグ。 isDomestic = true;
textView。 setText( "");
textView。 "+バッグの重量+"、 "+ 999バッグの日数+"、 "+バッグの種類" + " n");
bag = new BagOfCheese();
バッグ。 kind = "青";
バッグ。重量= 5.987;
バッグ。 daysAged = 90;
バッグ。 isDomestic = false;
textView。 "+バッグの重量+"、 "+ 999バッグの日数+"、 "+バッグの種類" + " n");
}
}
このコードでは、Javaが2番目の
bag = new BagOfCheese(999)ステートメントを実行するとき、古いオブジェクト(チェダーを含むバッグ)は消えています。そのチェダーオブジェクトを参照するバッグ(または他の変数)がなければ、コードがチェダーオブジェクトで何かを行うことはできません。幸いにも、2番目の
bag = new BagOfCheese()
ステートメントに達するまでに、元のチェダーバッグでやりたいことをすべて終えました。この場合、bag変数の再利用は許容されます。
変数(上記の
bag
変数のようなもの)を再利用する場合は、初期化ではなく代入文を使用します。言い換えれば、あなたのコードに
BagOfCheeseバッグ
をもう一度書き込まないでください。そうすると、Android Studioのエディタにエラーメッセージが表示されます。
正確に言えば、実際には同じコードに
BagOfCheeseバッグ
を複数回書くことができます。
BagOfCheese
クラスのフィールドは
final
になりません。つまり、クラスのコードでは、
BagOfCheese
オブジェクト内のフィールドに値を再割り当てできます。この情報を念頭に置いて、ここに示すように、上のコードをさらに1行短くすることができます。
package com。オールマイコード。 a09_04;
インポートアンドロイド。サポート。 v7。アプリ。 AppCompatActivity;
インポートアンドロイド。 os。バンドル;
インポートアンドロイド。ウィジェット。 TextView;
import com。オールマイコード。 a09_01。 BagOfCheese;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState){
super。 onCreate(savedInstanceState);
setContentView(R。レイアウト。activity_main);
textView =(TextView)findViewById(R。id。textView);
BagOfCheeseバッグ=新しいBagOfCheese();
バッグ。 kind = "チェダー";
バッグ。重量= 2.43;
バッグ。 daysAged = 30;
バッグ。 isDomestic = true;
textView。 setText( "");
textView。 "+バッグの重量+"、 "+ 999バッグの日数+"、 "+バッグの種類" + " n");
// bag = new BagOfCheese();
バッグ。 kind = "青";
バッグ。重量= 5.987;
バッグ。 daysAged = 90;
バッグ。 isDomestic = false;
textView。 "+バッグの重量+"、 "+ 999バッグの日数+"、 "+バッグの種類" + " n");
}
}
このコードの2番目のコンストラクタ呼び出しがコメントアウトされた状態で、
bag
変数を新しいオブジェクトを参照するようにしません。代わりに、既存のオブジェクトのフィールドに新しい値を割り当てることで節約できます。
ある状況では、オブジェクトのフィールドを再利用する方が、新しいオブジェクトを作成するより効率的(実行が速くなる)になります。しかし、選択肢があるときはいつでも、実際のデータを反映するコードを書くことをお勧めします。実際のバッグの内容がチェダーチーズからブルーチーズに変わらない場合、
Baghefheese
オブジェクトの種類フィールドを「
チェダー
」から「
Blue」に変更しない方が良いでしょう