Java入門：第11回 メソッドとフィールド

前回、擬似的にActivityクラスを定義してみました。その後、mainメソッド内でオブジェクトを生成しましたが、Activiryクラスの中身が空でした。そこで今回はActivityクラスの中にメソッドやフィールドを定義していきます。

##メソッドの定義と利用

クラスの中にはメソッドを記述することができます。次のようにonCreate()メソッドを追加してみましょう。

```java:Activity.java
public class Activity {
     void onCreate() {
           System. out.println( "これはonCreateメソッドです" );
     }
}
```

このように定義したメソッドは外部から呼び出すことができます。mainメソッドに次のように記述してみましょう。

```java:Hello.java
     static public  void main(String [] args) {
           Activity actA = new Activity();
           actA.onCreate();
     }
```

実行すると、次のように表示されます。

```java
これはonCreateメソッドです
```

次に、onCreateメソッドを次のように書き換えてみましょう。

```java:Activity.java
     void onCreate() {
           System. out.println( this);
     }
```

そして、mainメソッドを次のように書き換え実行すると、

```java:Hello.java
     static public  void main(String [] args) {
           Activity actA = new Activity();
           Activity actB = new Activity();
           actA.onCreate();
           actB.onCreate();
     }
```

```java:実行結果
Activity@4c76ec2d
Activity@138ba593
```

と出力されます。thisというキーワードは、今の場合、actAやactBというオブジェクト変数が結びついているActivityのオブジェクトそのものを示しています。

クラス内にはメソッドを複数記述することができます。AndroidのActivityのライフサイクルに習って、複数のメソッドを定義してみましょう。

```java:Activity.java
public class Activity {
     void onCreate() {
           System. out.println( "onCreateです");
     }
     void onStart() {
           System. out.println( "onStartです");
     }
     void onResume() {
           System. out.println( "onResumeです");
     }
     void onPause() {
           System. out.println( "onPauseです");
     }
     void onStop() {
           System. out.println( "onStopです");
     }
     void onDestroy() {
           System. out.println( "onDestroyです");
     }
}
```

そしてmainメソッドを次のように書き換えましょう。

```java:Hello.java
     static public  void main(String [] args) {
           Activity actA = new Activity();
           actA.onCreate();
           actA.onStart();
           actA.onResume();
           actA.onPause();
           actA.onStop();
           actA.onDestroy();
     }
```

実行すると、次のように表示されます。

```java:実行結果
onCreateです
onStartです
onResumeです
onPauseです
onStopです
onDestroyです
```

実際のAndroidアプリケーションでの正確な動作はもっと複雑ですが、Androidがアプリケーションを起動し、終了するまではこれらのメソッドが呼び出され、Activityのライフサイクルを実現することができました。

##フィールドの定義と利用

クラス内部には変数を定義することができます。クラスの内部の定義した変数をフィールドと呼びます。次のようにフィールドをActivityに定義してみましょう。

```java:Activity.java
public class Activity {
     String message = "こんにちは";
//～略～
```

フィールドとして定義した変数は、各メソッド内で利用することができます。onCreate()などのメソッド内に次のように記述して利用することができます。

```java:Activity.java
     void onCreate() {
           System. out.println( "onCreateです");
           System. out.println( message);
     }
```

次のように、mainメソッドから呼び出すと

```java:Hello.java
     static public  void main(String [] args) {
           Activity actA = new Activity();
           actA.onCreate();
     }
```

```java:実行結果
onCreateです
こんにちは
```

と表示されます。

###ローカル変数

一方、メソッド内に定義した変数はローカル変数と呼ばれます。onCreate()メソッドを次のように記述するとmessageはローカル変数となります。

```java:Activity.java
     void onCreate() {
           String message = "こんばんは" ;
           System. out.println( "onCreateです");
           System. out.println(message);
     }
```

フィールドとローカル変数の名前が同じ場合は、そのメソッド内ではローカル変数が優先されます。またローカル変数は他のメソッドから利用することはできません。

###フィールドへの直接アクセス

mainメソッドなど外部のクラス内のメソッドからフィールドにアクセすることもできます。onCreate()メソッドを次の形に戻し、

```java:Activity.java
public class Activity {
     String message = "こんにちは";
     void onCreate() {
           System. out.println( "onCreateです");
           System.out.println(message);
     }
//～略～
```

mainメソッドを次のようにすると、

```java:Hello.java
     static public  void main(String [] args) {
           Activity actA = new Activity();
           actA. message = "おはようございます" ;
           actA.onCreate();
     }
```

```java:実行結果
onCreateです
おはようございます
```

と表示されます。フィールドやローカル変数を利用する場合は変数がどこからどこまで有効かという変数のスコープを意識する必要があります。