黑马程序员技术交流社区
标题:
关于内部类??
[打印本页]
作者:
董波
时间:
2013-5-6 08:17
标题:
关于内部类??
本帖最后由 董波 于 2013-5-6 11:46 编辑
abstract class WeekDay{
private WeekDay(){};
public final static WeekDay SUN=new WeekDay(){
public WeekDay nextDay(){
return MON;//执行该段代码的时候,“MON”不是还没被创建吗,怎么能返回它呢??
}
};
public final static WeekDay MON=new WeekDay(){
public WeekDay nextDay(){
return SUN;
}
};
public abstract WeekDay nextDay();
public String toString(){
return this==SUN?"SUN":"MON";
}
}
class Test{
public static void main(String[] args){
WeekDay weekday=WeekDay.MON;
System.out.println(weekday.nextDay());
}
}
复制代码
问题如代码中所示。
一直对内部类比较困惑,想知道这段代码的执行顺序。求指教。。
作者:
殇_心。
时间:
2013-5-6 09:23
因为MON和SUN都被static静态修饰。
所以会随着类的加载而加载。
也就是说会在这里new WeekDay();
WeekDay weekday=WeekDay.MON;//这里你调用的是MON。
System.out.println(weekday.nextDay());//返回结果就是SUN。
作者:
刘海东
时间:
2013-5-6 09:35
本帖最后由 刘海东 于 2013-5-6 09:36 编辑
abstract class WeekDay
{
private WeekDay(){};
public final static WeekDay SUN=new WeekDay()//SUN修饰之后为全局对象
{ //这里是用内部类的形式将抽象方法复写再实例化
public WeekDay nextDay()
{
return MON;//执行该段代码的时候,“MON”不是还没被创建吗,怎么能返回它呢??
}
};
public final static WeekDay MON=new WeekDay()//MON修饰之后为全局对象
{ //这里是用内部类的形式将抽象方法复写再实例化
public WeekDay nextDay()
{
return SUN;
}
};
public abstract WeekDay nextDay();//这里是一个抽象方法,返回值类型为WeekDay类型
public String toString()
{
return this==SUN?"SUN":"MON";
}
}
class Test2
{
public static void main(String[] args)
{
WeekDay weekday=WeekDay.MON;//创建weekDay对象等于MON
System.out.println(weekday.nextDay());//MON的nextDay()方法返回的是SUN
}
}
复制代码
我也是似懂非懂
我的理解是你的那两个对象被static修饰之后
就随类的加载而一起加载了
作者:
胡帅冰
时间:
2013-5-6 10:54
被static修饰的成员,是随着类的加载而加载的,随着类的消失而消失的,静态成员的生命周期是很长的。你的代码中的MON和SUN 是被static修饰的WeekDay类型的变量,所以在主函数中使用 这个语句 WeekDay weekday=WeekDay.MON;的时候,首先:WeekDay类在内存中得到加载,这时候静态变量MON和SUN便被加载了,也就是说MON和SUN变量已经存在了。然后 =WeekDay.MON 这时候才开始进行MON内部类的加载。
这是我的理解,希望各位能够指正其中错误的地方,谢谢。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2