1
class a
{
a A=new a();
a() {
}
void c() {
}
}
class b
{
a B;
void f()
{ B.c();
}
public static void main(String[] args)
{ b test = new b();//这是初始创建的对象
b n; //
n.f(); //这样为什么不行
}
}
2
class a
{
a A=new a();
a() {
}
void c() {
}
}
class b
{
void f()
{ a B; //这样也不行
B.c();
}
public static void main(String[] args)
{ b = new b();
test.f();
}
}
3
class a
{
a() {
}
void c() {
}
}
class b
{
void f()
{ a A=new a();
a B; //这样还不行
B.c();
}
public static void main(String[] args)
{ b = new b();
test.f();
}
}
反正以上都是报错
只有把a 的引用放到所有的方法之外 非静态的方法才能用对象的引用去调用方法
在静态的方法中还不能建立个引用去调用方法 只能是用 创建的对象去调用这又是为什么?为什么非静态的就能用引用去调用方法呢?而且引用一定要在个方法之外呢?
class a
{
a A=new a();
a() {
}
void c() {
}
}
class b
{
a B;
void f()
{ B.c();
}
public static void main(String[] args)
{ b test = new b();//这是初始创建的对象
b n; //
n.f(); //这样为什么不行
}
}
2
class a
{
a A=new a();
a() {
}
void c() {
}
}
class b
{
void f()
{ a B; //这样也不行
B.c();
}
public static void main(String[] args)
{ b = new b();
test.f();
}
}
3
class a
{
a() {
}
void c() {
}
}
class b
{
void f()
{ a A=new a();
a B; //这样还不行
B.c();
}
public static void main(String[] args)
{ b = new b();
test.f();
}
}
反正以上都是报错
只有把a 的引用放到所有的方法之外 非静态的方法才能用对象的引用去调用方法
在静态的方法中还不能建立个引用去调用方法 只能是用 创建的对象去调用这又是为什么?为什么非静态的就能用引用去调用方法呢?而且引用一定要在个方法之外呢?
看得进度和你差不多,试着回答你一下问题,不知道对不对
第一个问题
class a
{
a A=new a();
a() {
}
void c() {
}
}
class b
{
a B;
void f()
{ B.c();
}
public static void main(String[] args)
{ b test = new b();//这是初始创建的对象
b n; //
n.f(); //这样为什么不行 在静态方法中调用实例方法,必须要创建一个对象能调用,而你这里之是申明了一个变量,所以错误。
}
}
之所以你把a B放所有函数外和函数内是有区别的,放函数内系统是不初始化的,所以报错,而放函数外的化,在执行任何一个class之前,系统会把所有的实例变量初始化。
第二个问题,和上面的差不多,B不属于类成员了,也就是说没法自动初始化造成;
第三个问题,和第二个问题一样
JAVA编程思想 第二版 P157页
里面有个初始化顺序
{
a() {
}
void c() {
}
}
class b
{a B;
void f()
{ a A=new a();
B.c();
}
public static void main(String[] args)
{ b test = new b();
test.f();
}
}
楼上的按照你的说法我这样写了也通过了 这又怎么解释,a A=new a();也是在方法中也没初始化,但是一样可以用他的引用去调用方法
你是指什么没有初始化??
之所以你把a B放所有函数外和函数内是有区别的,放函数内系统是不初始化的,所以报错,而放函数外的化,在执行任何一个class之前,系统会把所有的实例变量初始化
也就是说a A=new a();没有被初始话,但为什么通过了。 而把引用放入方法将a A=new a();放到方法之外为什么就不行了呢 ?