1

私は新しいJava学習者で、静的メソッドで非静的データメンバーの値にアクセスしたいプログラムを作成していますが、ルールはこれを行うことはできないと言っていますが、オブジェクトを作成した後にアクセスできます私の質問はそのクラスのオブジェクトを作成すると、そのデータメンバーの古い値が消去されるのはなぜですか? 静的メソッドで非静的データ メンバーの古い値を使用するにはどうすればよいですか

import java.util.Scanner;
class emp
{
     String name;
     int rate;
     static String c_name="TCS";


     void setdata(String n,int s)

     {
       name=n;
       rate=s;  

     }
     static void employee_salary_cal(int t)
      {
        int day,rate1,Total;
        day=t;
        emp e2=new emp();
        rate1=e2.rate;
        Total=rate1*day;

        System.out.println("Total salary " +Total);
      }  

     void showData()
     {
       System.out.println("Employee name = " +name);
       System.out.println("Employee pay rate per day = " +rate);
     }


}

class emp_main
{
  public static void main(String args[])
     { 
        int da;
        emp e1=new emp();
        e1.setdata("alex",100);
        System.out.println("Company name = " +emp.c_name);
        e1.showData();
        System.out.println("Enter Work days in months ");
        Scanner sc=new Scanner(System.in);
        da=sc.nextInt();
        emp.employee_salary_cal(da);



     }
}

プログラム出力:

Company name = TCS
Employee name = alex
Employee pay rate per day = 100
Enter Work days in months
25
Total salary 0
4

5 に答える 5

5

empオブジェクトの新しいインスタンスを作成する代わりに、オブジェクトを静的メソッドに渡すだけです。「ルール」は、インスタンス変数とメソッドにアクセスできないことですが、静的メソッドは外部オブジェクトを受け取り、それらをいじることができます。

static void employee_salary_cal(emp e, int t)
{
    System.out.println("Total salary " + e.rate * t);
}

別の注意として、あなたは本格的なプログラミングの基礎を欠いています。もう一度、本当に基本的なチュートリアルに従うことをお勧めします。

于 2013-09-09T20:42:41.383 に答える
2

関数に static を使用するのはなぜですか?コンテキストを使用しthisます。

 void employee_salary_cal(int day)
  {
    System.out.println("Total salary " + (this.rate * day));
  }  

次に、そのようにインスタンス関数として呼び出すことができます

emp e = new emp();
e.employee_salary_cal(5);
于 2013-09-09T20:46:37.760 に答える
0

操作するオブジェクトを静的関数に引数として渡します。

static void employee_salary_cal(emp employee, int t)
于 2013-09-09T20:42:55.073 に答える
0

静的コンテキストからインスタンス変数にアクセスできるのは意味がありません。

クラスごとに、静的フィールドのセットが 1 つだけあります。ただし、各クラスはそれぞれのインスタンス変数のコピーをいくつでも持つことができます。JVM は、あなたが話しているインスタンス変数のコピーを認識できません。

他の人が述べたように、静的からインスタンスにアクセスする場合は、インスタンスを静的メソッドに渡すことにより、どのインスタンスかを静的メソッドに伝える必要があります。

于 2013-09-09T20:46:58.557 に答える
0

静的と非静的の違い:

class MyClass {
    public int nonStatic=1;
    public static int isStatic = 2;
}

MyClass a=new MyClass();  
a.nonStatic = 3          // nonStatic =3; isStatic=2
MyClass b=new MyClass(); // nonStatic =1; isStatic=2
MyClass.isStatic = 3;    // nonStatic =1; isStatic=3
MyClass c=new MyClass(); // nonStatic =1; isStatic=3

私が説明したいのは、MyClass の N インスタンスを作成すると、nonStatic には N 個の値 (またはメモリ内のより正確な int ポインター) も作成されますが、isStatic には 1 つだけです。

于 2013-09-09T20:54:56.693 に答える