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);
}
}
java笔记--局部内部类认识与理解的更多相关文章
- java 笔记(2) —— 内部类的作用
一.内部类简介 个人觉得内部类没多少研究价值,GUI中的事件响应算是非常典型的应用了. Java内部类其实在J2EE编程中使用较少,不过在窗口应用编程中特别常见,主要用来事件的处理.其实,做非GUI编 ...
- Java实现局部内部类的简单应用
日常生活中,闹钟的应用非常广泛.使用它可以更好地帮助人们安排时间.编写程序,实现一个非常简单的闹钟,控制台会不断输出当前的时间,并且每隔一秒钟会发出提示音.用户可以单击“确定”按钮来退出程序. 思路分 ...
- Java笔记:内部类
1.把一个类放在另一类内部定义,这个定义在其他类里面的类就叫做内部类,包含内部类的类叫做外部类.内部类成员可以直接访问外部类的私有数据,但是外部类不能访问内部类的实现细节. 2.非静态内部类(没有st ...
- JAVA面向对象-----局部内部类
局部内部类 局部内部类概述:包含在外部类的函数中的内部类称之为局部内部类. 访问:可以在包含局部内部类的方法中直接创建局部内部类的对象调用局部内部类的成员. 注意:局部内部类只能访问所在函数的fana ...
- java笔记--匿名内部类和静态内部类的理解和使用
匿名内部类 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3889467.html "谢谢-- 1.由于局部内部类并不可见 ...
- java笔记--对信号量Semaphore的理解与运用
java Semaphore 信号量的使用: 在java中,提供了信号量Semaphore的支持. Semaphore类是一个计数信号量,必须由获取它的线程释放, 通常用于限制可以访问某些资源(物理或 ...
- java笔记--关于多线程状态的理解和应用
关于多线程的状态 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3890266.html "谢谢-- 线程共有6种状态:1 ...
- Java学习笔记23---内部类之局部内部类只能访问final的局部变量
局部内部类是定义在方法体或代码块中的类,在笔记19中已有过简单介绍. 今天要讨论的是局部内部类为什么只能访问为常量的局部变量. 作者: 博客园--蝉蝉 请尊重作者劳动成果,转载请在标题注明“转载”字样 ...
- Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案
内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...
随机推荐
- 在MVC程序中使用MongoDB数据库
.net项目中混搭数据库 安装和部署 C#中使用MongoDB MongoDb与关系型数据库区别 开机自启动 关系型数据库和非关系型数据口可以混搭 MongoDB是一个高性能,开源,无模式的,基于分布 ...
- DB2 命令大全
check Archiving processing 查看日志归档情况 db2 "SELECT DATE(CAST(START_TIME as TIMESTAMP)) as DATE, co ...
- 【ORACLE】Bulk Processing with BULK COLLECT and FORALL
https://orablogspot.blogspot.com/2014/09/ https://blogs.oracle.com/oraclemagazine/bulk-processing-wi ...
- 《LeetBook》leetcode题解(11):Container With Most Water[M] ——用两个指针在数组内移动
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- C#(winform)的label自动换行
Label 是没有自动换行属性的,不像Textbox有WordWrap属性 尽管没有自动换行的属性,但也能够自动换行, 首先 AutoSize改成false; 然后调整 Label的大小,长和宽 (也 ...
- STL 排序(转载)
这篇文章关于STL中的排序写的虽不深入,但是还是挺好的. 1.sort sort有两种形式,第一种形式有两个迭代器参数,构成一个前开后闭的区间,按照元素的 less 关系排序:第二种形式多加一个指定排 ...
- [PY3]——时间处理——datetime | calendar
Python3的日期/时间处理模块 datetime的格式化符号 格式化符号 表示 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 日 ...
- SQL Serever学习11——数据库的安全管理
公司管理软件设计完成,但是日常工作繁忙,向领导提出增加几个管理员,帮助管理和维护系统,领导同意了,但是要求一定要管理好这几个管理员用户,保证数据库的安全. 修改身份验证模式 数据库验证机制 sqlse ...
- 如鹏网学习笔记(十)DOM
DOM笔记一.DOM简介 Document Object Model 文档对象模型 DOM的节点树模型:整个文档按照从大到小的节点划分,每一个内容都算作一个节点 DOM API 编程接口 可以用来操作 ...
- JAVA注释方式
1.单行(single-line)注释 //…… 2.块(block)注释 /*……*/ 3.文档注释 /**……*/