public class A { int a1 = 10;

public void Set1(){
            a1 = a1++;
}

public static void main(String[] args) {
     Set1();
     System.out.println(a1);
}}
目的:我想让a1的值改变一下,然后打印出来。
IDE 告诉我需要声明为 static 的变量和方法 ?
请问:1、如果我不将它们声明为 static ,如何达到目的?以下我声明了 static 变量 和 方法
public class A { static int a1 = 10;

public static void Set1(){
    a1 = a1++;
}

public static void main(String[] args) {
    Set1();
    System.out.println(a1);
        }}
请问:2、为什么打印出来的值还是 10

解决方案 »

  1.   

    public class A {
      int a1 = 10;  public void Set1() {
        a1 = a1++;
      }  public static void main(String[] args) {
        A a = new A(); // 得到一个实例即可,这个是最简单,也是最标准的方法
        a.Set1();
        System.out.println(a.a1);
      }
    }至于为什么是10
    因为你用的是
    a1 = a1++;
    ++在后面,是先把a1 赋值给a1(等同于没有变)
    如果你想变,可以用
    a1 = ++a1;
    a1++;
    a1 = a1+1;
    a1 +=1;任何一种都可以
      

  2.   

    public class B {
       int b1;
       public B(){
       b1= 20;
       }
       public void Set1(){
       b1=b1++;
       }
    }现在我有一个类 B , 我需要在类 A 中执行以下操作:public class A {

    static int a1 = 10;

    B b = new B();

    public static void Set1(){
    a1 = a1++;
    }

    public void Set2(){
    b.Set1();
    }

    public static void main(String[] args) {
                   Set2();
           System.out.println("b.b1="+b.b1);
    }}问题: 3、该如何更改b.b1, 并打印?现在 我需要在类 B 中改变 类 A 的 a1 ,在类 B 中添加(其中:a 是类 A 的实例 )
        public void Set2(){
       a.a1 = b1 + a1;
       }并在类 A 中打印
         public static void main(String[] args) {
               System.out.println("a.a1="+a.a1);
         }问题:4、该如何实现。请朋友们给出完整代码!急盼!谢谢!
      

  3.   

    请注意看下面2个代码的不同结果
    a1 = a1++;

    int a2 = a1++;第一种, a1++执行完毕的结果为11, 但因为语法问题,返回的是++前的结果,也就是10,结果又把11给赋值回去了!这是++在后面的语法决定的
    第二种,a1++执行完毕后为11, 赋值给了a2,并不影响a1,所以执行完毕后,a1==11了。
      

  4.   

    我先声明一下,你为何非得用static来访问呢?这不是一个正确的使用普通类的方法。你new一个A的实例,所有问题都解决了!
    public class A {
      int a1 = 10;  B b = new B();  public void Set1() {
        a1 = a1++;
      }  public void Set2() {
        b.Set1();
      }  public static void main(String[] args) {
        A a = new A(); // 这里
        a.Set2(); // 访问实例的方法
        System.out.println("b.b1=" + a.b.b1); // 访问实例的属性的属性
      }
    }class B {
      int b1;  public B() {
        b1 = 20;
      }  public void Set1() {
        b1 = b1++;
      }
    }
      

  5.   

    想在B中使用A,必须传一个A的实例过去,请参考!
    public class A {
      int a1 = 10;  B b = new B(this);  public static void main(String[] args) {
        A a = new A();
        a.b.Set2();
        System.out.println("a.a1=" + a.a1);
      }
    }class B {
      int b1;  A a;  public B(A a) {
        this.a = a;
        b1 = 20;
      }  public void Set1() {
        b1 = b1++;
      }  public void Set2() {
        a.a1 = b1 + a.a1;
      }
    }
      

  6.   

    如果 A extends JFrame 也可以这么用吗?
    如果 a1 = new JList();
    我要在 B 中更改 a1 的背景色,也是是这样吗?
      

  7.   

    做好类之间的关系。
    A 如果需要使用 B, 则必须有B的一个实例,除非B里面的方法是 static 的,就像你前面提到的。反过来 你要在 B 里面使用  A 也一样的处理。
      

  8.   

    你刚才说 a1   =   a1++; 没有改变 a1 值,
    那循环当中 for(int i=0; i<10; i++) i 的值被改变了吗?