JavaA2Z

KAB-studio > プログラミング > JavaA2Z > 引数とは

引数

日本語 引数
英語 parameter
ふりがな ひきすう、いんすう
フリガナ ヒキスウ、インスウ

解説

メソッド呼び出す際に渡された値を受け取る変数
 
メソッドは「戻り値 メソッド( 引数の 引数の変数 )」という書式で「引数」を指定することができる。
形式は「引数宣言」とほぼ同じだが、「初期化」をうことはできない。
複数の引数を宣言する場合には「戻り値 メソッド( 引数の 引数の変数1, 引数の 引数の変数2, 引数の 引数の変数3 )」という形式でう。
 
呼び出す際に「メソッド( 引数に渡す値 );」という書式で「引数の変数」に「引数に渡す値」をコピーすることができる。
このコピーは、変数代入と全く同じである。
 
メソッドの中では、引数はローカル変数と同じ扱いとなり、普通のローカル変数と全く同じように使用できる。
メソッドから抜けた際には、引数はスコープから外れるため寿命が来て使用することができなくなる。この点もローカル変数と同様。
 
引数に渡された値はあくまでコピーであり、この値をどう変えようと、呼び出し元の変数にはなんら影響しない。
ただし、これは「値の変更」の話である。もしこの値が「インスタンスへの参照」の場合、つまり引数がクラスもしくは配列の場合には、呼び出し元のインスタンスに対して操作できることになるため注意が必要である。
 
メソッドの引数は、呼び出し時に省略したり変更したりすることはできない。
メソッド呼び出し方法にバリエーションを持たせる場合には「オーバーロード」でメソッドを複数用意する必要がある。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    //                        ↓このargsも引数です。
    public static void main( String[] args )
    {
        // とりあえず変数の準備。
        Sample sample = new Sample();
        int i = 100;
        String string = "あいうえお";
        StringBuffer strbuf = new StringBuffer();
        strbuf.append( "かきくけこ" );

        // メソッドを呼び出す前に、出力します。
        System.out.println( i );
        System.out.println( string );
        System.out.println( strbuf.toString() );
        // 100
        // あいうえお
        // かきくけこ

        // method3Parameter()メソッドを呼び出します。
        sample.method3Parameter( i, string, strbuf );
        // 100
        // あいうえお
        // かきくけこ

        // メソッドを呼び出した後に、出力します。
        System.out.println( i );
        System.out.println( string );
        System.out.println( strbuf.toString() );
        // 100
        // あいうえお
        // かきくけこさしすせそ
    }

    /**
    *   引数を3つ持つメソッド。
    */
    private void method3Parameter( int data, String name, StringBuffer retMessage )
    {
        // とりあえず渡された引数を全部出力します。
        System.out.println( "Sample#method3Parameter()" );
        System.out.println( data );
        System.out.println( name );
        System.out.println( retMessage );

        // 引数に入っているのは、元々の変数に入っていた値のコピーです。
        // dataにはiに格納されていた数値100のコピー、
        // nameにはstringに格納されていた、Stringクラスのインスタンスへの参照のコピー、
        // retMessageにはstrbufに格納されていた、StringBufferクラスのインスタンスへの参照のコピーが
        // 渡されています。
        // 特にnameとretMessageは、参照が渡されているだけで、
        // インスタンス全然関係ないことに注意してください。

        data = 1000;
        // このように引数の値を変更しても、呼び出し元の変数iには
        // なんの影響もありません。dataには、iの値のコピーが格納されていた
        // だけだからです。

        // retMessageに文字列を追加します。
        retMessage.append( "さしすせそ" );
        // これで、最初にnewしたStringBufferクラスのインスタンスに文字列を追加しました。
        
        // 理論上は、nameもクラスなので同じような処理ができるのですが、
        // Stringクラスには「格納している文字列を変更する」機能がないのでできません。
        name = "たちつてと";
        // これだと、nameに格納されている参照が、新しく作られた
        // Stringクラスのインスタンスへの参照に置き換えられただけなので、
        // 呼び出し元で持っているnameにはなんの影響もありません。
    }
}
// Sample.java
public class Sample
{
    //                        ↓このargsも引数です。
    public static void main( String[] args )
    {
        // とりあえず変数の準備。
        Sample sample = new Sample();
        int i = 100;
        String string = "あいうえお";
        StringBuffer strbuf = new StringBuffer();
        strbuf.append( "かきくけこ" );

        // メソッドを呼び出す前に、出力します。
        System.out.println( i );
        System.out.println( string );
        System.out.println( strbuf.toString() );
        // 100
        // あいうえお
        // かきくけこ

        // method3Parameter()メソッドを呼び出します。
        sample.method3Parameter( i, string, strbuf );
        // 100
        // あいうえお
        // かきくけこ

        // メソッドを呼び出した後に、出力します。
        System.out.println( i );
        System.out.println( string );
        System.out.println( strbuf.toString() );
        // 100
        // あいうえお
        // かきくけこさしすせそ
    }

    /**
    *   引数を3つ持つメソッド。
    */
    private void method3Parameter( int data, String name, StringBuffer retMessage )
    {
        // とりあえず渡された引数を全部出力します。
        System.out.println( "Sample#method3Parameter()" );
        System.out.println( data );
        System.out.println( name );
        System.out.println( retMessage );

        // 引数に入っているのは、元々の変数に入っていた値のコピーです。
        // dataにはiに格納されていた数値100のコピー、
        // nameにはstringに格納されていた、Stringクラスのインスタンスへの参照のコピー、
        // retMessageにはstrbufに格納されていた、StringBufferクラスのインスタンスへの参照のコピーが
        // 渡されています。
        // 特にnameとretMessageは、参照が渡されているだけで、
        // インスタンス全然関係ないことに注意してください。

        data = 1000;
        // このように引数の値を変更しても、呼び出し元の変数iには
        // なんの影響もありません。dataには、iの値のコピーが格納されていた
        // だけだからです。

        // retMessageに文字列を追加します。
        retMessage.append( "さしすせそ" );
        // これで、最初にnewしたStringBufferクラスのインスタンスに文字列を追加しました。
        
        // 理論上は、nameもクラスなので同じような処理ができるのですが、
        // Stringクラスには「格納している文字列を変更する」機能がないのでできません。
        name = "たちつてと";
        // これだと、nameに格納されている参照が、新しく作られた
        // Stringクラスのインスタンスへの参照に置き換えられただけなので、
        // 呼び出し元で持っているnameにはなんの影響もありません。
    }
}

この単語を含むページ

「解説」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2006/02/27
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。