Java中GUI编程和内部类的学习
目录
GUI的概念
GUI(Graphical User Interface)即图形用户界面,是指采用图形方式显示的用户界面,与早
期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
Swing概述
swing 是一个为Java设计的GUI工具包javax.swing,该包中包括了图形用户界面的各种组件支持
一个 Java 的图形界面,由各种不同类型的“元素”组成,这些“元素”被称为组件(Component)
swing中的组件可以分为两大类:容器(如窗口,对话框,面板)和功能组件(如按钮,输入框,菜单等)
容器组件
功能组件不能独立地显示出来,必须将组件放在一定的容器(container)中才可以显示出来。
容器可以容纳多个组件,通过调用容器的add(Component comp)方法向容器中添加组件。
窗口(JFrame)和面板(JPanel)是最常用的两个容器。
窗口(JFrame)
public class LoginFrame1 extends JFrame{
public LoginFrame1(){
//在构造方法中对创建的窗口特征进行设置
this.setSize(300, 300);//设置窗口大小
this.setTitle("欢迎登录");//设置标题
//this.setLocation(500,200);设置窗口位置
this.setLocationRelativeTo(null);//设置窗口水平垂直居中
this.setResizable(false);//设置窗口不可以调整大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE-关闭窗口时,程序退出运行
this.setVisible(true);//让窗口显示出来, 放在设置的最后一行
}
public static void main(String[] args) {
new LoginFrame1();//创建一个窗口
}
}
面板(JPanel)
JPanel面板,它是轻量级的容器。
面板中可以添加其它组件,也可以设置布局,我们一般使用面板来实现布局嵌套。
自己创建Jpanel面板对象,把JPanel作为一个组件添加到窗口或某个面板中
常用方法:
void setBackground(Color bg)设置面板的背景色,由参数bg指定颜色
void setLayout(LayoutManager mgr)设置面板的布局,参数是布局管理器
Component add(Component comp)往面板中添加一个组件
public class LoginFrame2 extends JFrame{
public LoginFrame2(){
//在构造方法中对创建的窗口特征进行设置
this.setSize(300, 300);//设置窗口大小
this.setTitle("欢迎登录");//设置标题
//this.setLocation(500,200);设置窗口位置
this.setLocationRelativeTo(null);//设置窗口水平垂直居中
this.setResizable(false);//设置窗口不可以调整大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE-关闭窗口时,程序退出运行
//创建面板
JPanel jPanel = new JPanel();
//jPanel.setBackground(Color.GREEN);
jPanel.setBackground(new Color(117, 136, 133));//自定义颜色
//创建一个功能组件 按钮组件
JButton jButton = new JButton("保 存");
//把按钮添加到,面板上
jPanel.add(jButton);
//把面板添加到窗口上
this.add(jPanel);
this.setVisible(true);//让窗口显示出来, 放在设置的最后一行
}
public static void main(String[] args) {
new LoginFrame2();//创建一个窗口
}
}
布局管理器
swing中,提供了布局管理器类的对象可以管理
每个Jpanel都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其大小尺寸时,
就会调用其对应的布局管理器,调用Jpanel的setLayout方法改变其布局管理器对象或通过构造方法
设置。
Java中的图形界面在布局管理上采用容器和布局管理相分离的方案,也就是说容器只是把组件
放进来,但它不管怎样放置。至于如何放置需要用到布局管理器(Container) 。Java中有几种常
用的布局管理器,分别是:FlowLayout , BorderLayout, GridLayout。
FlowLayout
FlowLayout布局管理器是流式布局管理器,它将组件按照从左到右、从上到下的顺序来安排,
并在默认情况下使组件尽量居中放置。
this.setLayout(new FlowLayout());
FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。
不改变组件的大小,按组件原有尺寸显示组件,可设置不 同的组件间距,行距以及对齐方式。
构造方法:
new FlowLayout(FlowLayout.RIGHT,20,40);右对齐,组件之间水平间距20个像素,垂直间距40
个像素。
new FlowLayout(FlowLayout.LEFT);左对齐,水平和垂直间距为缺省值(5)。
new FlowLayout();使用缺省的居中对齐方式,水平和垂直间距为缺省值(5)。
public class LoginFrame3 extends JFrame {
public LoginFrame3(){
//在构造方法中对创建的窗口特征进行设置
this.setSize(300, 300);//设置窗口大小
this.setTitle("欢迎登录");//设置标题
//this.setLocation(500,200);设置窗口位置
this.setLocationRelativeTo(null);//设置窗口水平垂直居中
this.setResizable(false);//设置窗口不可以调整大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE-关闭窗口时,程序退出运行
/*
创建面板
面板可以设置布局管理器
流式布局
组件在面板上从左到右排列, 一行占满重新换行 b不影响组件的大小
*/
//JPanel jPanel = new JPanel(new FlowLayout());//设置流式布局 默认是水平居中 上下左右为5个像素间距
JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));//设置流式布局 设置组件左对齐 上下左右为5个像素间距
//JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,20,50));//设置流式布局 设置组件左对齐 水平 垂直间距
JButton jButton1 = new JButton("按钮1");
JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");
JButton jButton5 = new JButton("按钮5");
jPanel.add(jButton1);
jPanel.add(jButton2);
jPanel.add(jButton3);
jPanel.add(jButton4);
jPanel.add(jButton5);
//把面板添加到窗口上
this.add(jPanel);
this.setVisible(true);//让窗口显示出来, 放在设置的最后一行
}
public static void main(String[] args) {
new LoginFrame3();//创建一个窗口
}
}
BorderLayout
BorderLayout布局管理器只允许在容器内放置5个组件,这5个组件的位置是由BorderLayout类中
的North、South、East、West和Center5个常量来确定的,他们对应着容器中的上下左右中,用法
如下:
this.add(new Button(“按钮”) ,BorderLayout.NORTH);
this.add(new Button(“按钮”) ,BorderLayout.CENTER);
组件在BorderLayout中的大小都是可以改变的。一般情况下可以让中间区域大一些,而且可以只用其中几个区域。
BorderLayout将整个容器的布局划分成 东(EAST) 西(WEST) 南(SOUTH) 北(NORTH)中 (CENTER)五个区域,组件只能被添加到指定的区域。
如不指定组件的加入部位,则默认加入到CENTER区。
每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。
public class LoginFrame4 extends JFrame {
public LoginFrame4(){
//在构造方法中对创建的窗口特征进行设置
this.setSize(300, 300);//设置窗口大小
this.setTitle("欢迎登录");//设置标题
//this.setLocation(500,200);设置窗口位置
this.setLocationRelativeTo(null);//设置窗口水平垂直居中
this.setResizable(false);//设置窗口不可以调整大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE-关闭窗口时,程序退出运行
/*
创建面板
面板可以设置布局管理器
边界布局(共有5个区域)
上北
下南
左西
右东
中间(是不能少的)
添加到某个区域的组件,会默认撑开与此区域一样大
*/
JPanel jPanel = new JPanel(new BorderLayout());
JButton jButton1 = new JButton("按钮1");
JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");
JButton jButton5 = new JButton("按钮5");
jPanel.add(jButton1,BorderLayout.NORTH);
//jPanel.add(jButton2,BorderLayout.SOUTH);
jPanel.add(jButton3,BorderLayout.WEST);
//jPanel.add(jButton4,BorderLayout.EAST);
jPanel.add(jButton5,BorderLayout.CENTER);
//把面板添加到窗口上
this.add(jPanel);
this.setVisible(true);//让窗口显示出来, 放在设置的最后一行
}
GridLayout
GridLayout布局管理器是矩形网格,在网格中放置组件,每个网格的高度和宽度都相等,组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的大小和创建网格的多少来确定的。其用法如下:
this.setLayout(new GridLayout(2 , 3)); //创建一个2行3列的网格
this.add(new Button(“按钮”));
在 GridLayout 构造方法中指定分割的行数和列数
public class LoginFrame5 extends JFrame{
public LoginFrame5(){
//在构造方法中对创建的窗口特征进行设置
this.setSize(300, 300);//设置窗口大小
this.setTitle("欢迎登录");//设置标题
//this.setLocation(500,200);设置窗口位置
this.setLocationRelativeTo(null);//设置窗口水平垂直居中
this.setResizable(false);//设置窗口不可以调整大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE-关闭窗口时,程序退出运行
/*
创建面板
面板可以设置布局管理器
网格布局
设置行 列
*/
JPanel jPanel = new JPanel(new GridLayout(4, 1));
JButton jButton1 = new JButton("按钮1");
JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");
jPanel.add(jButton1);
jPanel.add(jButton2);
jPanel.add(jButton3);
jPanel.add(jButton4);
//把面板添加到窗口上
this.add(jPanel);
this.setVisible(true);//让窗口显示出来, 放在设置的最后一行
}
public static void main(String[] args) {
new LoginFrame5();//创建一个窗口
}
}
常用组件
标签(JLabel)
标签是容纳文本和图标的控件,通常用来在界面中标识别的控件。
构造函数:JLabel()
创建一个空的标签JLabel(String text)
创建一个带文本的标签方法:void setText(String text)
设置标签上的文本String getText()
获得标签上的文本setFont(new Font(“宋体”,Font.BOLD, 18)); 设置字体
单行文本(JTextField)
JTextField的构造函数: JTextField(int columns)
方法:
void setText(String text) 设置文本框中的文本
String getText() 获得文本框中的文本
密码框(JPasswordField)
构造函数:
JPasswordField(String text)
JPasswordField(String text, int columns)
方法:
char[] getPassword()
public class LoginFrame6 extends JFrame{
public LoginFrame6(){
//在构造方法中对创建的窗口特征进行设置
this.setSize(300, 300);//设置窗口大小
this.setTitle("欢迎登录");//设置标题
//this.setLocation(500,200);设置窗口位置
this.setLocationRelativeTo(null);//设置窗口水平垂直居中
this.setResizable(false);//设置窗口不可以调整大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE-关闭窗口时,程序退出运行
/*
*/
JPanel jPanel = new JPanel(new FlowLayout());
//标签组件, 可以放文字
JLabel label = new JLabel("账号");
//label.setText("密码");
label.setFont(new Font("楷体", Font.BOLD,20));//设置字体
//创建输入框组件
JTextField jTextField = new JTextField(15);
jTextField.getText();//获得输入框内容
JLabel label1 = new JLabel("密码");
//创建密码框
JPasswordField jPasswordField = new JPasswordField(15);
//jPasswordField.getText();
String password = new String(jPasswordField.getPassword());//获取密码
jPanel.add(label);
jPanel.add(jTextField);
jPanel.add(label1);
jPanel.add(jPasswordField);
//把面板添加到窗口上
this.add(jPanel);
this.setVisible(true);//让窗口显示出来, 放在设置的最后一行
}
public static void main(String[] args) {
new LoginFrame6();//创建一个窗口
}
}
构造函数:
JTextArea(int rows, int columns) 创建一个指定行数和列数的空文本域
方法:
void setText(String text) 设置文本域中的文本
String getText() 获得文本域中的文本
void setFont(Font font) 设置文本域中文本的字体
void setLineWrap(boolean wrap) //是否自动换行,默认false
如果需要文本区自动出现滚动条,可将文本区对象放入滚动窗格(JScrollPane)中:
JScrollPane scrollPane = new JScrollPane(txtArea);
add(scrollPane );
构造方法:
JButton(String text) 创建一个带文本的标签
方法:
void setBackground(Color bg) 设置按钮的背景色
void setEnabled(boolean b) 设置启用(或禁用)按钮,由参数b决定
void setToolTipText(String text) 设置按钮的悬停提示信息
public class LoginFrame7 extends JFrame{
public LoginFrame7(){
//在构造方法中对创建的窗口特征进行设置
this.setSize(300, 300);//设置窗口大小
this.setTitle("欢迎登录");//设置标题
//this.setLocation(500,200);设置窗口位置
this.setLocationRelativeTo(null);//设置窗口水平垂直居中
this.setResizable(false);//设置窗口不可以调整大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE-关闭窗口时,程序退出运行
/*
*/
JPanel jPanel = new JPanel(new FlowLayout());
//创建文本域(多行多列)
JTextArea area = new JTextArea(10,20);
area.setLineWrap(true);//设置内容强制换行
//带滚动条的面板
JScrollPane jScrollPane = new JScrollPane(area);
JButton jButton = new JButton("保存");
//jButton.setEnabled(false);//设置按钮是否可用
jButton.setToolTipText("点击保存");
jPanel.add(jScrollPane);
jPanel.add(jButton);
//把面板添加到窗口上
this.add(jPanel);
this.setVisible(true);//让窗口显示出来, 放在设置的最后一行
}
public static void main(String[] args) {
new LoginFrame7();//创建一个窗口
}
}
菜单栏组件
构造方法:JMenuBar();
方法:add(menu); 向菜单栏添加菜单
菜单组件:
构造方法:JMenu(“菜单名称");
方法:add(menuItem); 向菜单添加菜单选项
菜单项组件:
构造方法:JMenuItem(“菜单项名称");
将菜单栏添加到窗口 setJMenuBar(menuBar);
public class LoginFrame8 extends JFrame {
public LoginFrame8(){
//在构造方法中对创建的窗口特征进行设置
this.setSize(300, 300);//设置窗口大小
this.setTitle("欢迎登录");//设置标题
//this.setLocation(500,200);设置窗口位置
this.setLocationRelativeTo(null);//设置窗口水平垂直居中
this.setResizable(false);//设置窗口不可以调整大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE-关闭窗口时,程序退出运行
//创建菜单栏
JMenuBar jMenuBar = new JMenuBar();
//创建菜单
JMenu jMenu1 = new JMenu("文件");
JMenu jMenu2 = new JMenu("编辑");
JMenu jMenu3 = new JMenu("帮助");
//创建菜单选项
JMenuItem jMenuItem1 = new JMenuItem("新建");
JMenuItem jMenuItem2 = new JMenuItem("保存");
JMenuItem jMenuItem3 = new JMenuItem("关于我们");
jMenu1.add(jMenuItem1);
jMenu1.add(jMenuItem2);
jMenu3.add(jMenuItem3);
jMenuBar.add(jMenu1);
jMenuBar.add(jMenu2);
jMenuBar.add(jMenu3);
this.setJMenuBar(jMenuBar);//把菜单栏添加到窗口上
/*
*/
JPanel jPanel = new JPanel(new FlowLayout());
//把面板添加到窗口上
this.add(jPanel);
this.setVisible(true);//让窗口显示出来, 放在设置的最后一行
}
public static void main(String[] args) {
new LoginFrame8();//创建一个窗口
}
}
事件处理(事件监听)
对于采用了图形用户界面的程序来说,事件控制是非常重要的;到目前为止,我们编写的图形用
户界面程序都仅仅只是完成了界面,而没有任何实际的功能,要实现相应的功能,必须进行事件处
理。
用户与GUI组件进行交互就会发生事件,如:按下一个按钮、用键盘输入一个字符、点击鼠标
等等;
当前我们要关注的并不是“事件是如何产生的” ,而是讨论当发生事件后,我们应当“如何处理”
Java中,事件处理的基本思路如下:
一个事件源产生一个事件并把它送到监听器那里,监听器一直等待,直到它收到一个事件,
一旦事件被接受,监听器将处理这些事件。
案例
由于我们想要处理按钮的点击事件,因此,按钮便是事件源。
监听器类型是ActionListener。
添加事件监听器(此处即为匿名类)
按钮对象. addActionListener(new ActionListener() {
// 事件处理
@Override
public void actionPerformed(ActionEvent e) {
执行操作
}
});
public class LoginFrame9 extends JFrame{
JTextField jTextField ;
public LoginFrame9(){
//在构造方法中对创建的窗口特征进行设置
this.setSize(300, 300);//设置窗口大小
this.setTitle("欢迎登录");//设置标题
//this.setLocation(500,200);设置窗口位置
this.setLocationRelativeTo(null);//设置窗口水平垂直居中
this.setResizable(false);//设置窗口不可以调整大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE-关闭窗口时,程序退出运行
//创建菜单栏
JMenuBar jMenuBar = new JMenuBar();
//创建菜单
JMenu jMenu1 = new JMenu("文件");
JMenu jMenu2 = new JMenu("编辑");
JMenu jMenu3 = new JMenu("帮助");
//创建菜单选项
JMenuItem jMenuItem1 = new JMenuItem("新建");
JMenuItem jMenuItem2 = new JMenuItem("保存");
JMenuItem jMenuItem3 = new JMenuItem("关于我们"); //菜单项就是一个事件源,为事件源添加事件监听,处理程序
jMenu1.add(jMenuItem1);
jMenu1.add(jMenuItem2);
jMenu3.add(jMenuItem3);
jMenuBar.add(jMenu1);
jMenuBar.add(jMenu2);
jMenuBar.add(jMenu3);
this.setJMenuBar(jMenuBar);//把菜单栏添加到窗口上
/*
*/
JPanel jPanel = new JPanel(new FlowLayout());
jTextField = new JTextField(15);
JButton jButton = new JButton("保存");
jPanel.add(jTextField);
jPanel.add(jButton);
//把面板添加到窗口上
this.add(jPanel);
this.setVisible(true);//让窗口显示出来, 放在设置的最后一行
//为文本框添加事件监听
jTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) { //按键输入完成释放时触发
System.out.println(jTextField.getText());
}
});
//为组件添加监听 及 事件处理程序
jMenuItem3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("记事本v1.0");
}
});
/*
new 接口/抽象类 不是new接口/抽象类的对象
java为了简化语法,为接口和抽象类提供了一个匿名的类来实现继承他们
*/
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String account = jTextField.getText();
if(account.length()==0){
//对话框组件
JOptionPane.showMessageDialog(null,"请输入账号");
return;
}
}
});
}
//此种场景下使用内部类更加合适, 内部类中可以直接使用外部类的成员
/*class ActionImpl implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("我被点击了"+ jTextField.getText());
}
}*/
public static void main(String[] args) {
new LoginFrame9();//创建一个窗口
}
}
JOptionPane对话框
showMessageDialog():消息对话框
主要有五种消息类型,类型不同,图标不同:
ERROR_MESSAGE 错误消息提示
INFORMATION_MESSAGE 信息提示
WARNING_MESSAGE 警告提示
QUESTION_MESSAGE 问题提示
PLAIN_MESSAGE 简洁提示
showConfirmDialog():确认对话框
主要有四种消息类型,类型不同,图标不同:
DEFAULT_OPTION 默认选项
YES_NO_OPTION 是/否选项
YES_NO_CANCEL_OPTION 是/否/取消选项
OK_CANCEL_OPTION 确定/取消
public class LoginFrame extends JFrame {
public LoginFrame() {
//在构造方法中对创建的窗口特征进行设置
this.setSize(300, 300);//设置窗口大小
this.setTitle("欢迎登录");//设置标题
//this.setLocation(500,200);设置窗口位置
this.setLocationRelativeTo(null);//设置窗口水平垂直居中
this.setResizable(false);//设置窗口不可以调整大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE-关闭窗口时,程序退出运行
/*
*/
JPanel jPanel = new JPanel(new FlowLayout());
JButton jButton = new JButton("保存");
jPanel.add(jButton);
//把面板添加到窗口上
this.add(jPanel);
this.setVisible(true);//让窗口显示出来, 放在设置的最后一行
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//消息框
//JOptionPane.showMessageDialog(null,"提示信息");
//JOptionPane.showMessageDialog(null,"账号不能为空","登录提示",JOptionPane.ERROR_MESSAGE);
//JOptionPane.showMessageDialog(null,"账号不能为空","登录提示",JOptionPane.INFORMATION_MESSAGE);
//JOptionPane.showMessageDialog(null,"账号不能为空","登录提示",JOptionPane.QUESTION_MESSAGE);
//JOptionPane.showMessageDialog(null,"账号不能为空","登录提示",JOptionPane.WARNING_MESSAGE);
//选择对话框
//int res = JOptionPane.showConfirmDialog(null,"您确定要删除吗?"); //是-0 否-1 取消-2
//确认-0, 取消-2
int res = JOptionPane.showConfirmDialog(null, "您确定要删除吗?", "操作提示", JOptionPane.OK_CANCEL_OPTION);
System.out.println(res);
//输入对话框
String name = JOptionPane.showInputDialog(null, "请输入姓名");
System.out.println(name);
}
});
}
public static void main(String[] args) {
new LoginFrame();//创建一个窗口
}
内部类
什么是内部类
把类定义在另一个类的内部,该类就被称为内部类。
如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而
类 Outer 则称为外部类(或称为宿主类)。
内部类定义
内部类的特点
内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外
部类的类名和$符号。
内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类
的成员变量,无论是否为 private 的。
匿名内部类
匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口。
new 接口名称/抽象类名称() {
重写抽象方法;
}
在实际开发中,我们常常遇到这样的情况:一个接口/抽象类的方法的某个实现方式在程序中只
会执行一次,但为了使用它,我们需要创建它的实现类。此时可以使用匿名内部类的方式,可以无
需创建新的类,减少代码冗余。
public class InternalA {
private int num = 10;
public void test(){
JButton jButton = new JButton("");
//jButton.addActionListener(new B());
//new + 接口/抽象类 不是创建接口和抽象类的对象, 创建了接口和抽象类的匿名类对象, 省去创建一个类,简化了语法
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
}
/*
内部类
在一个类的内部定义的类称为内部类, 内部类也是外部类的成员
为什么用内部类
1.内部类中可以直接访问外部类成员
2.内部类只服务当前外部类, 其他地方用不到此类
匿名内部类
new + 接口/抽象类 不是创建接口和抽象类的对象, 创建了接口和抽象类的匿名类对象, 省去创建一个类,简化了语法
内部类意义
封装性
实现多继承
*/
/* private class B implements ActionListener {
public void test(){
System.out.println(num);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}*/
public static void main(String[] args) {
new ArrayList<>().iterator();//其中就用到了内部类
}
}
/*
类C中需要用到类中的成员, 类C是一个外部类,无法使用到类A中的成员
就可以把类C定义到类A中去.
还有原因,就是类C只服务于类A,其他类中用不到类C, 此种情况下也可以将类C定义为类A的内部类
*/
public class InternalC {
}
内部类的意义
1.封装性
将只有在某个类中使用的功能定义在内部中,并可以使用不同访问权限修饰控制.
原文地址:https://blog.csdn.net/zyb1147582433/article/details/145230647
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!