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内部类(); 静态内部类 ...
随机推荐
- 自定义 checkbox 样式
前言:最近在做一个网站,为了统一风格,需要自定义checkbox的样式.所以花了点时间参考了 研究了一下.感觉上面的方法略微麻烦.所以自己重新写了下面的代码,欢迎大家指教.同时,感谢w3cplus提供 ...
- 创建自己的区块链游戏SLOT——以太坊代币(三)
一个以太坊合约版本的轮盘游戏,向合约转账ETH,有几率获得3,5,10,100倍奖励 合约地址:0x53DA598E70a1505Ad95cBF17fc5DCA0d2c51174b 捐赠ETH地址:0 ...
- python-select异步IO
#实现多任务在同一个线程切换 #!/usr/bin/python from socket import * from select import * from time import ctime so ...
- manjaro 清理系统
sudo pacman -Rsn $(pacman -Qdtq) sudo pacman -Scc sudo rm /var/lib/systemd/coredump/. sudo journalct ...
- Difference between $.ajax() and $.get() and $.load()
转自:Difference between $.ajax() and $.get() and $.load() $.ajax() is the most configurable one, where ...
- 文本相似度分析(基于jieba和gensim)
基础概念 本文在进行文本相似度分析过程分为以下几个部分进行, 文本分词 语料库制作 算法训练 结果预测 分析过程主要用两个包来实现jieba,gensim jieba:主要实现分词过程 gensim: ...
- Node.js的基础知识(一)
一.Buffer类 1.创建缓冲区的三种方式 var buffer = new Buffer(10); console.log(buffer); var buffer2 = new Buffer([1 ...
- Shell 编程-常见的文件处理命令
touch 命令 touch命令用于创建空文件,例如有时应用程序希望在它们写入数据之前,某个日志文件就已经存在.这时可用touch命令创建一个空文件:touch test1:touch命令还可以用来改 ...
- AJAX同步问题
@using ShippingRen.CommonV2.CloudStorage; @using ShippingRen.Api.ServiceModel.PublicDataEntity.Looku ...
- android 使用图片轮播图---banner 使用
转自:https://github.com/youth5201314/banner 使用步骤 Step 1.依赖banner Gradle dependencies{ compile 'com.you ...