zoukankan      html  css  js  c++  java
  • java笔记局部内部类认识与理解

    java内部类

    内部类应用最多的场景是在编写GUI程序时,将大量的事件监听处理放在了内部类中进行

    --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3885340.html "谢谢--

    局部内部类:
    1.在java中将类定义在方法的内部,成为局部内部类。
    2.此类不能使用public、private修饰,
    3.其作用域被限定在声明此类的方法中。
    4.和其他内部类相比,它具有可以访问方法参数的优点。
    5.被局部内部类使用的方法参数必须是final的。

    例如:
    public void funtion(){
    class ObjectA{}
    }
    注意:由于局部内部类并不可见,因此不如使用匿名内部类替代。
    只有当需要定义或重写类的构造方法,或者需要多个类的对象时,才建议使用局部内部类。

    例1:

    /**
    * 局部内部类的实现信息录入
    *
    * @author XIEHEJUN
    *
    */

    package com.xhj.OOP;
    public class InerClass {
    /**
    * 学校名称
    */
    private String schoolName;
    /**
    * 入学时间
    */
    private String inTime;
    /**
    * 离校时间
    */
    private String outTime;

    /**
    * 初始化数据
    *
    * @param schoolName
    * @param inTime
    * @param outTime
    */
    public InerClass(String schoolName, String inTime, String outTime) {
    this.schoolName = schoolName;
    this.inTime = inTime;
    this.outTime = outTime;
    }

    /**
    * 获取学校名称
    *
    * @return
    */
    public String getSchoolName() {
    return schoolName;
    }

    /**
    * 获取入学时间
    *
    * @return
    */
    public String getInTime() {
    return inTime;
    }

    /**
    * 获取离校时间
    *
    * @return
    */
    public String getOutTime() {
    return outTime;
    }

    /**
    * 局部内部类实现人员添加
    *
    * @param name
    */
    public void addUser(String name) {
    /**
    * 学生姓名
    */
    final String userName = name;
    /**
    * 局部内部类
    *
    * @author XIEHEJUN
    *
    */
    class Inner {
    public void print() {
    System.out.println("\t" + userName + "\t" + schoolName + "\t"
    + inTime + "\t" + outTime);
    }
    }
    new Inner().print();

    }

    public static void main(String[] args) {
    InerClass input = new InerClass("A", "20100901", "20140624");
    System.out.println("\t姓名\t学校\t入学时间\t\t离校时间");
    input.addUser("李伟");
    input.addUser("小红");
    input = new InerClass("B", "20090901", "20130625");
    input.addUser("李小伟");
    input.addUser("小小红");
    }

    }

    例2:

    package com.xhj.OOP;

    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    import javax.swing.JOptionPane;
    import javax.swing.Timer;

    /**
    * 局部内部类实现时钟提示
    *
    * @author XIEHEJUN
    *
    */
    public class InnerAlarmClock {
    /**
    * 定义延迟时间
    */
    private int delay;
    /**
    * 电脑是否发出声音
    */
    private boolean flag;

    /**
    * 类初始化
    *
    * @param delay
    * @param flag
    */
    public InnerAlarmClock(int delay, boolean flag) {
    this.delay = delay;
    this.flag = flag;
    }

    /**
    * 局部内部类
    */
    public void start() {
    class Printer implements ActionListener {

    @Override
    /**
    * 局部内部类动作监控
    */
    public void actionPerformed(ActionEvent e) {
    //格式化当前日期
    SimpleDateFormat sdf = new SimpleDateFormat("k:m:s");
    String result = sdf.format(new Date());
    System.out.println("当前时间是:" + result);
    //判断是否发出声音
    if (flag) {
    Toolkit.getDefaultToolkit().beep();
    }
    }
    }
    new Timer(delay, new Printer()).start();
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    InnerAlarmClock clock = new InnerAlarmClock(1000, true);
    clock.start();
    //弹出消息对话框
    JOptionPane.showMessageDialog(null, "是否退出?");
    System.exit(0);

    }
    }

  • 相关阅读:
    Can you answer these queries?(HDU4027+势能线段树)
    Tunnel Warfare(HDU1540+线段树+区间合并)
    Computer(HDU2196+树形dp+树的直径)
    Anniversary party(树上dp+HDU1520)
    2018 Multi-University Training Contest 1-1002 -Balanced Sequence(括号匹配+贪心)
    暑假集训——cf热身赛部分题有感加其题解
    Educational Codeforces Round 47 (Rated for Div. 2) 题解
    计蒜客 Goldbach Miller_Rabin判别法(大素数判别法)
    多种方法过Codeforces Round #270的A题(奇偶法、打表法和Miller_Rabin(这个方法才是重点))
    Codeforces Round #494 (Div. 3)
  • 原文地址:https://www.cnblogs.com/XHJT/p/3885340.html
Copyright © 2011-2022 走看看