内部类 生存期

问题描述

/***源代码如下*不解处:TalkingClock.start方法执行(clock.start(1000,true);)后,方法内部生成的Timert对象已经不处于生存期,有点糊涂?*希望能说得透彻些!*/importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjavax.swing.*;importjavax.swing.Timer;publicclassAnonymousInnerClassTest{publicstaticvoidmain(String[]args){TalkingClockclock=newTalkingClock();clock.start(1000,true);//keepprogramrunninguntiluserselects"Ok"JOptionPane.showMessageDialog(null,"Quitprogram?");System.exit(0);}}/***Aclockthatprintsthetimeinregularintervals.*/classTalkingClock{/***Startstheclock.*@paramintervaltheintervalbetweenmessages(inmilliseconds)*@parambeeptrueiftheclockshouldbeep*/publicvoidstart(intinterval,finalbooleanbeep){ActionListenerlistener=newActionListener(){publicvoidactionPerformed(ActionEventevent){Datenow=newDate();System.out.println("Atthetone,thetimeis"+now);if(beep)Toolkit.getDefaultToolkit().beep();}};Timert=newTimer(interval,listener);t.start();}}

解决方案

解决方案二:
/***源代码如下*不解处:TalkingClock.start方法执行(clock.start(1000,true);)后,方法内部生成的Timert对象已经不处于生存期,有点糊涂?*希望能说得透彻些!*/【code=Java】importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjavax.swing.*;importjavax.swing.Timer;publicclassAnonymousInnerClassTest{publicstaticvoidmain(String[]args){TalkingClockclock=newTalkingClock();clock.start(1000,true);//keepprogramrunninguntiluserselects"Ok"JOptionPane.showMessageDialog(null,"Quitprogram?");System.exit(0);}}/***Aclockthatprintsthetimeinregularintervals.*/classTalkingClock{/***Startstheclock.*@paramintervaltheintervalbetweenmessages(inmilliseconds)*@parambeeptrueiftheclockshouldbeep*/publicvoidstart(intinterval,finalbooleanbeep){ActionListenerlistener=newActionListener(){publicvoidactionPerformed(ActionEventevent){Datenow=newDate();System.out.println("Atthetone,thetimeis"+now);if(beep)Toolkit.getDefaultToolkit().beep();}};Timert=newTimer(interval,listener);t.start();}}【/code】
解决方案三:
/***源代码如下*不解处:TalkingClock.start方法执行(clock.start(1000,true);)后,方法内部生成的Timert对象已经不处于生存期,有点糊涂?*希望能说得透彻些!*/importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjavax.swing.*;importjavax.swing.Timer;publicclassAnonymousInnerClassTest{publicstaticvoidmain(String[]args){TalkingClockclock=newTalkingClock();clock.start(1000,true);//keepprogramrunninguntiluserselects"Ok"JOptionPane.showMessageDialog(null,"Quitprogram?");System.exit(0);}}/***Aclockthatprintsthetimeinregularintervals.*/classTalkingClock{/***Startstheclock.*@paramintervaltheintervalbetweenmessages(inmilliseconds)*@parambeeptrueiftheclockshouldbeep*/publicvoidstart(intinterval,finalbooleanbeep){ActionListenerlistener=newActionListener(){publicvoidactionPerformed(ActionEventevent){Datenow=newDate();System.out.println("Atthetone,thetimeis"+now);if(beep)Toolkit.getDefaultToolkit().beep();}};Timert=newTimer(interval,listener);t.start();}}

解决方案四:
我的天,在这里提问有用吗?这是个很常见的问题,只是请教一个方法内定义生成的对象超出方法生存期,程序是如何执行下去的罢了。
解决方案五:
什么是“对象生存期”、“方法生存期”?我干了N年头一回听说。请楼下指教。
解决方案六:
我的意思是,在方法内定义的对象在方法执行完之后objectreference已经作废,对象也变成一个垃圾内存空间,在这种情况下程序怎么能正常运作下去呢?
解决方案七:
1.Thestartmethodiscalled.2.TheobjectvariablelistenerisinitializedbyacalltotheconstructoroftheinnerclassTimePrinter.3.ThelistenerreferenceispassedtotheTimerconstructor,thetimerisstarted,andthestartmethodexits.Atthispoint,thebeepparametervariableofthestartmethodnolongerexists.4.Asecondlater,theactionPerformedmethodexecutes就是说从上面第3步到第4步,是如何良好运转的,我有迷惑。
解决方案八:
Timer对象是在方法当中定义的,但这并不表示方法退出后Timer对象就会要回收。当Timer开始运行后,虽然方法退出了,但Timer对象的引用仍然存在。垃圾回收是一个复杂的过程,但同时也是很严谨的。楼主不需要担心运行中的线程会被回收。这是不可能的。
解决方案九:
帮顶..
解决方案十:
对象引用是作废了,根据java的基本语法规则。但Timer类里有静态成员,这些是不会作废的。
解决方案十一:
这是timer的实现问题,属于类库部分,如果仅仅使用就不要关心了吧。

时间: 2024-10-25 16:44:51

内部类 生存期的相关文章

spring+ibatis的dao接口 能使用内部类吗?

问题描述 spring+ibatis的dao接口 能使用内部类吗? spring+ibatis的dao接口 能使用内部类吗? spring扫描xml加载的 要怎么配置? 现在加载不到namespace指定的内部类 public interface MissionTypeMatterMapper { int deleteByPrimaryKey(Integer mission_matter_id); void insert(MissionTypeMatter record); List<Missi

Java基础-10总结形式参数,包,修饰符,内部类

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 类,抽象类,接口的综合小练习 /* 教练和运动员案例(学生分析然后讲解) 乒乓球运动员和篮球运动员. 乒乓球教练和篮球教练. 为了出国交流,跟乒乓球相关的人员都需要学习英语. 请用所学知识: 分析,这个案例中有哪些

内部类-java方法参数的修饰符问题

问题描述 java方法参数的修饰符问题 java在写方法时,为什么有的方法参数用final修饰? 还有就是内部类存在的意义是什么? 也就是说方法中的内部类和类中的内部类各有什么应用场景(请有实战经验的大神各自举个例子)? //问题补充(关于方法中的内部类) 我的意思是: pubic class TestClass{ public void fun(){ public class Test1{ //........ } } } 解决方案 为了实现一些内容,常常需要这么玩: public void

使用技巧:内部类和匿名类优化Java代码

技巧|优化 Java 1.1通过对Java语言规范进行修改,显著简化了一些实用结构的实现.在那些修改中,最引人注目的就是内部类和匿名类.如运用得当,它们可使程序更易理解和维护.下面来看看这些特性具体是如何工作的,如何正确使用它们,以及如何避免一些常见的错误. 内部类 简单地说,"内部类"是在另一个类的内部声明的类.从Java 1.1开始,你可在一个类中声明另一个类,这与声明字段和方法非常相似.包装了内部类声明的类就称为"外部类". 实际上,Java语言规范还允许你做

java内部类的总结

内部类总结: 1内部类的嵌套可以理解成类的链关系,在构造一个内部类(非static)的实例的时候,会将直接外层类的实例作为参数传进构造函数,而外层类的实例也是用其外层类的实例构造,所以是一种链状关系,内部的类可以使用所有外层的类的实例,而外层的类不能使用内层的类, 应用a.this(最外层类实例) ,a.b.c.this(链中某个外层的实例). class TheOuter{ class kk { class gg { int tt = 100; } } class aa { class bb

关于继承内部类——java编程思想示例程序分析

编程|程序|继承|示例 关于继承内部类--java编程思想示例程序分析:class Egg2 { protected class Yolk { public Yolk() { System.out.println("Egg2.Yolk()"); } public void f() { System.out.println("Egg2.Yolk.f()"); } } private Yolk y = new Yolk(); public Egg2() { System

Java内部类this$0字段产生的一个小bug

首先查看下面一段代码,我指出了问题代码的所在,读者先自己思考一下这段代码会有什么问题. 这是用clone方法完整拷贝一个二项堆(BinomialHeap)结构的代码.二项堆中包含一个内部类BinomialHeapEntry,这个内部类的对象即二项堆中的每一个结点,除了包含结点对应的关键字外,还记录父节点parent,下一个兄弟结点sibling和第一个孩子结点child三个指针.二项堆的根表通过每棵二项树根节点的sibling指针链接. cloneBinomialTree(BinomialHea

浅析Java中的嵌套类和内部类

以前看<Java编程思想>的时候,看到过嵌套类跟内部类的区别,不过后来就把它们的概念给忘了吧.昨天在看<数据结构与算法分析(Java语言版)>的时候,又遇到了这个概念,当时就很大的疑惑:嵌套类跟内部类有什么区别?只有是否有关键字static的区别吗? 所以今天找了个时间查了一下两者的详细区别,总结在这篇博客中,既方便自己的复习和学习,也启示他人吧. 1,概念: 定义在一个类内部的类,叫作"嵌套类".嵌套类分为两种:static的和非static的.后者又有一个专

为什么要用内部类:控制框架

到目前为止,大家已接触了对内部类的运作进行描述的大量语法与概念.但这些并不能真正说明内部类存在的原因.为什么Sun要如此麻烦地在Java 1.1里添加这样的一种基本语言特性呢?答案就在于我们在这里要学习的"控制框架". 一个"应用程序框架"是指一个或一系列类,它们专门设计用来解决特定类型的问题.为应用应用程序框架,我们可从一个或多个类继承,并覆盖其中的部分方法.我们在覆盖方法中编写的代码用于定制由那些应用程序框架提供的常规方案,以便解决自己的实际问题."控