站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题求助:java 初学者 菜鸟类问题

求助:java 初学者 菜鸟类问题

摘要: 求助:java 初学者 菜鸟类问题


import java.awt.*;
import java.applet.*;
class cc
{
static int n;
int nn;
static
{ n=20;}
cc()
{ nn=n++;}

}
public class c48 extends Applet
{
public void paint(Graphics g)
{
cc m=new cc();
cc m1=new cc();
g.drawString("m1="+m1.nn,20,50);
g.drawString("m="+m.nn,20,90);

}
}


为什么输出 m1=21 m=20
个人认为m=21
还有g.drawString("m="+m.nn,20,90); 中的20 90是什么意思
谢谢


N是 STATIC的
[20 | 90 ]X Y坐标


n++


关于static我一直不懂到底是怎么回事 看书也没看懂 高手能给具体解释一下吗??


用static修饰的数据成员是不属于任何一个类的具体对象,而是属于类的静态数据成员。
它被保存在类的内存的公共存储单元中,而不是保存在某个对象的内存区中。
一个类的任何对象都可以访问它,因此,它的值会增加!!!
谢谢!!!


静态变量是类级的.在一个类里只存在一份.


class cc
{
static int n;
int nn;
//java虚拟机在装载时,默认设置int类为0,n=0;nn=0;
static
{ n=20;}
//但静态的数据在类加载时得到初始化,n=20;
cc()
{ nn=n++;}

}
public class c48 extends Applet
{
public void paint(Graphics g)
{
cc m=new cc();
//调用构造方法,里面有nn=n++;它的意思是:nn=n; n=n+1; 所以有nn=20;n=21;
cc m1=new cc();
g.drawString("m1="+m1.nn,20,50);
g.drawString("m="+m.nn,20,90);

}
}


nn=n;
n++;


public class c48 extends Applet
{
public void paint(Graphics g)
{
cc m=new cc();
cc m1=new cc();
g.drawString("m1="+m1.nn,20,50);
g.drawString("m="+m.nn,20,90);

}
}
m1是第二次实力化,nn=n++,所以m1是21
m是第一次实力化,nn=n,nn=20


g.drawString("m="+m.nn,20,90); 中的20 90是:在控制台上划出字符,20,90应该是
g.drawString(String str,int length,int width)的参数;
为什么输出 m1=21 m=20
个人认为m=21
还有g.drawString("m="+m.nn,20,90); 中的20 90是什么意思
谢谢


关注
学习


虽然这个是静态块的问题,但大家好像都没有注意++的问题, cc(){ nn=n++;},++在后边,就是说第一次创建对象的时候,把n赋给nn,赋完后才加的1,所以第一次创建输出的是20,第二次也是先输出21后,才加的1.


我也讲讲吧~~其实st2107() ,yhaipsha(冰河) 说得都有道理,也就是这个道理
只是讲得有点不好理解
以下是我改成Applection的程序的,结果的上一样:
class cc
{
//java虚拟机在装载时,默认设置int类为0,n=0;nn=0;
static int n;
int nn;
//但静态的数据在类加载时得到初始化,n=20;
static
{ n=20;}
cc()
{ nn=n++;}

}
public class CTest
{
public static void main(String[] args)
{
//注意实例的次序m,m1
cc m=new cc();//实例化一个CC类型
cc m1=new cc();//实例别一个CC类型
System.out.println("m1.nn="+m1.nn);//注意输出的次序m1.m,与实例化次序是相反的
System.out.println(" m.nn="+m.nn);

}
}
首先你得明白n++的意思,这是先使用一次,再将n的值相加1
n是个static变量,是属于类cc的,也就是说类的任何对象都可以访问它并修改它,但修改后的结果还是共享的

所以第一次实例时,cc(){ nn=n++;}n的值等于20;后将n的值加1
第二次实例时,cc(){ nn=n++;}由第一次实例得出n的值为21了,传给nn的就是21,再将n的值加1
如果还有实例则nn的值会不段增加~~








第一次创建对象 得到的是n
第二次创建对象 得到的是n++

最后20 90 是坐标XY

左上角XY 0,0


楼主可以揭帖了

-------揭帖是一种美德




静态变量是类级的.在一个类里只存在一份
__
这里static用的概念不多,n++先赋值后自增,所以m=20,然后m1得自增后的n不就是21了吗..
20,90是坐标,20距边框左侧像素,90距边框上侧像素..


要弄清楚 n++,++n的区别.
n++ 是先计算后++
++n 是先++后计算
如果这两个句话做为表达式的话,区别如上.

但是如果做为语句的话,则是一样的.


十分感谢大家 这次懂了~!~!


谢谢大家的帮助 小弟有问题还会向大家请教的~!~!


↑返回目录
前一篇: 关于内部类
后一篇: java的那个中文文档叫什么.哪里可以下啊