Java 非常简单的基础问题!求助!

zing21cn 2008-01-30 05:43:59
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
...全文
127 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zing21cn 2008-01-30
  • 打赏
  • 举报
回复
那我就不问了!谢谢未来斑竹!
老紫竹 2008-01-30
  • 打赏
  • 举报
回复
请看3楼的第一种解释,不再重复解释!
zing21cn 2008-01-30
  • 打赏
  • 举报
回复
你刚才说 a1 = a1++; 没有改变 a1 值,
那循环当中 for(int i=0; i<10; i++) i 的值被改变了吗?
老紫竹 2008-01-30
  • 打赏
  • 举报
回复
做好类之间的关系。
A 如果需要使用 B, 则必须有B的一个实例,除非B里面的方法是 static 的,就像你前面提到的。

反过来 你要在 B 里面使用 A 也一样的处理。
zing21cn 2008-01-30
  • 打赏
  • 举报
回复
如果 A extends JFrame 也可以这么用吗?
如果 a1 = new JList();
我要在 B 中更改 a1 的背景色,也是是这样吗?
老紫竹 2008-01-30
  • 打赏
  • 举报
回复
想在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;
}
}
老紫竹 2008-01-30
  • 打赏
  • 举报
回复
我先声明一下,你为何非得用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++;
}
}
老紫竹 2008-01-30
  • 打赏
  • 举报
回复
请注意看下面2个代码的不同结果
a1 = a1++;

int a2 = a1++;

第一种, a1++执行完毕的结果为11, 但因为语法问题,返回的是++前的结果,也就是10,结果又把11给赋值回去了!这是++在后面的语法决定的
第二种,a1++执行完毕后为11, 赋值给了a2,并不影响a1,所以执行完毕后,a1==11了。
zing21cn 2008-01-30
  • 打赏
  • 举报
回复
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、该如何实现。

请朋友们给出完整代码!急盼!谢谢!

老紫竹 2008-01-30
  • 打赏
  • 举报
回复
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;

任何一种都可以

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧