静的コンテキストから非静的変数、非静的メソッドを参照できない理由と解決
7709 ワード
1.原因
(1)staticで修飾する方法は静的方法であり,修飾変数は静的変数であり,クラスメソッドまたはクラス変数とも呼ばれる.これらはクラスに属し,クラス自体が備えており,インスタンスがなくても存在する.
(2)静的メソッドや変数の存在ではなくオブジェクトに依存し,オブジェクトの属性であり,インスタンスオブジェクトを作成してからオブジェクト呼び出しを行う必要がある.
したがって,一定の静的コンテキストにおいて,必ずしも存在しない非静的変数or法を簡単に引用することはできないだろうか.
2.解決
次の例では、2つの解決策を示します.
(1)staticで修飾する方法は静的方法であり,修飾変数は静的変数であり,クラスメソッドまたはクラス変数とも呼ばれる.これらはクラスに属し,クラス自体が備えており,インスタンスがなくても存在する.
(2)静的メソッドや変数の存在ではなくオブジェクトに依存し,オブジェクトの属性であり,インスタンスオブジェクトを作成してからオブジェクト呼び出しを行う必要がある.
したがって,一定の静的コンテキストにおいて,必ずしも存在しない非静的変数or法を簡単に引用することはできないだろうか.
2.解決
次の例では、2つの解決策を示します.
package com.Homework01;
import java.util.*;
// , , 。
public class Homework01 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int[] numbers = new int[4];
System.out.println("Please input 4 numbers:");
for (int i = 0; i < 4; i++)
numbers[i] = scan.nextInt();
// : , sort, Sort()!
Homework01 sort = new Homework01();
sort.Sort(numbers);
}
// : Sort , static void Sort(int[] numbers)...
void Sort(int[] numbers){
for (int j = 0; j < numbers.length-1; j++) {
for (int i = 0; i < numbers.length - 1 - j; i++) {
int temp = numbers[i];
if (numbers[i] < numbers[i + 1]) {
numbers[i] = numbers[i + 1];
numbers[i + 1] = temp;
}
}
}
for(int i = 0; i<numbers.length; i++)
System.out.println(numbers[i]);
}
}