实验四Java_《Java实验四》

实验4--附录三代码/*问题如下:

编译如下代码,分析结果;将“注释这行”所在的行注释,再将

注释的call2方法和main方法中的“StaticTest.call2(obj);”方

去掉注释,再次编译,观察结果分析其原因。

回答如下:

(1)在没有去掉注释之前进行编译,会发生如下错误:

========================================================================

StaticTest.java:13: 错误: 无法从静态上下文中引用非静态 方法 nonstaticmethod()

nonstaticmethod();//注释这行.

^

1 个错误

===========================================================================

这个错误说明:在用类名直接调用静态方法时可以的,但在此例中(没有去掉代码中的注释),

直接用类名调用了call1方法(StaticTest.call1();)但是在call1方法中有调用到了静态的

staticmethod()方法,这是没错的,但是在call1方法中又调用了非静态的nonstaticmethod

方法。此时编译器出现报错提示如上。

从而也就是说:静态的方法可以有类名直接调用,非静态的方法不能有类名调用。

(2)按照题目要求的做法后,在编译不会出现问题;

运行结果是:

静态方法被调用

非静态方法被调用

非静态方法被调用

分析运行结果如下:

首先在主函数中创建了一个StaticTest类的对象obj,然互直接由类名调用静态方法

call1,在call1方法中又调用到了静态的staticmethod方法,然后输出(1)“静态方法被调用”。

接着用类名直接调用了静态的方法call2,并把对象obj传递给静态方法的形式参数o1.在

静态的call2方法中,传递过来的对象调用了非静态的方法nonstaticmethod,此时便打印输出

了(2)“非静态方法被调用”,紧接着又在静态的call2方法中创建了一个本类对象o2,然后用o2对象

也调用了非静态的方法nonstaticmethod.便输出了(3)“非静态方法被调用”

从以上分析(和自己在代码中的测试)来看:可以总结的是,静态方法可以由类名直接调用,

也可以由对象调用,而非静态的方法只能由对象调用*/

public classStaticTest

{public static voidcall1()

{

staticmethod();//nonstaticmethod();//注释这行.

}public static voidcall2(StaticTest o1)

{

o1.nonstaticmethod();/**o1.staticmethod();

*这一句是测试用的,是用于测试静态的方法也能由对象直接调用

*如果加上这一句,编译运行都没有错,运行的结果是:

* 静态方法被调用

* 非静态方法被调用

* 静态方法被调用

* 非静态方法被调用

*则说明了静态的方法也能被对象直接调用。*/StaticTest o2= newStaticTest();

o2.nonstaticmethod();

}public voidnonstaticmethod()

{

System.out.println("非静态方法被调用");

}public static voidstaticmethod()

{

System.out.println("静态方法被调用");

}public static voidmain(String[] args)

{

StaticTest obj= newStaticTest();

StaticTest.call1();

StaticTest.call2(obj);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值