请教各位,张孝祥的那本教材中有如下源程序:
class A
{ string name;
public A(string x)
{name=x;} public void func1()
{ system.out.println("func1 of" +name+"is calling");} public void func2()
{ A a2 =new A("a2");
a2.func1(); }
}
请问:
为什么类的定义还没结束 但在public void func2()却可以创建对象 a2呢?
谢谢!!
class A
{ string name;
public A(string x)
{name=x;} public void func1()
{ system.out.println("func1 of" +name+"is calling");} public void func2()
{ A a2 =new A("a2");
a2.func1(); }
}
请问:
为什么类的定义还没结束 但在public void func2()却可以创建对象 a2呢?
谢谢!!
解决方案 »
- JAVA怎么用位运算求一个int的绝对值
- HashSet的内容如何排序?
- 求教事件处理问题
- 请问xp下哪里可以添加execution path?(dos时代可以在autoexec.bat里添加的那个路径)
- 【江湖救急啊】**JEditPane显示html页面,怎么可以实现点击下载链接能够象在IE里那样可以下载(可以选择保存或运行)**up有分
- 难道CSDN上就没有人能回答这个问题吗?
- 关于System.arraycopy()方法的一个发现,不知道各位是否认可,或是偶的理解有误也肯请帮忙指正
- 定义一个a类, a类是基类,b类是a类的子类,用b创建的对象是a类还是b类的实例?
- 各位大虾请进,送分哦!!!!!!!!!!!
- 哪位大神帮忙把这段代码转换为js代码
- ObjectInputStream类和ObjectOutputStream类问题,高手指教啊!
- 看看这个程序
分配资源,即你的a2对象在加载时候并没有创建
只有你创建一个对象,用这个对象
调用这个方法(你的:func2)时a2对象才会创建
{
int num;
static A a1 = new A();
static
{
try
{
System.out.print("please inout a num(0~9):");
a1.num = System.in.read() - '0';
}
catch(Exception e)
{
System.exit(0);
}
a1.func1(a1.num);
} public void func1(int n)
{
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= i; j++)
{
System.out.print(i + "*" + j + "=" + (i*j < 10 ? " " : "") + i*j + " ");
}
System.out.print("\n");
}
}
}
//这段代码更有意思呢,不用main就做完了我要做的事
但是运行完后仍然报出了没有main的异常
Exception in thread "main" java.lang.NoSuchMethodError: main
不过,static的方法中可以new本类的对象,还是不太明白啊
?一楼的看了,不过,static的方法中可以new本类的对象,还是不太明白啊
回复人:chinham() ( ) 信誉:100 2006-9-25 10:13:36 得分:0
?类比递归.
---------------------------------------------------
在C++中,数据成员和对象不能在类定义时初始化
但是在java中可以.不会引起C++的无限递归
其时也没什么不好理解的,就想像java边解释边执行
先加载类,但是没有给该类成员分配任何资源
加载完类再给静态成员初始化(即给静态成员分配资源)时直接就在堆上去构造这个对象
但此时的对象数据成员也没有分配资源(因为我们没给它初始化,此时在static块中使用a.num会出错)
然后就是给对象数据成员初始化,使用一个初始化一个(即我们a1.num = System.in.read() - '0';也在同时给a1.num初始化)