简介

  • AWT(译:抽象窗口工具包),是Java的平台独立的窗口系统,图形和用户界面器件工具包。
  • Swing 是为了解决 AWT 存在的问题而以 AWT 为基础新开发的包(在使用Swing时也常会用到java.awt.*包)。

JFrame

JFrame容器允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。我们可以直接new一个JFrame对象,也可以自己实现一个类继承它(常用)。

常用方法

  • 设置窗口可见:setVisible(true);//默认为false
  • 设置窗口标题;setTitle(String title)
  • 设置点击窗口的×后执行的操作:setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

各参数定义:

EXIT_ON_CLOSE 隐藏窗口,并退出程序
DO_NOTHING_ON_CLOSE 无任何操作
HIDE_ON_CLOSE 隐藏窗体,但不停止程序
DISPOSE_ON_CLOSE 释放窗体资源

  • 设置窗体的大小(单位:像素):setSize(int width, int height);
  • 设置窗体坐标(单位:像素):setLocation(int x, int y);
  • 坐标大小一起设置:setBounds(int x, int y, int width, int height);
  • 获取窗口坐标:横坐标:getX();纵坐标:getY()
  • 获取窗口大小:宽:getWidth();高:getHeight()
  • 获取窗口容器:Container contentPane = getContentPane();

设置背景:contentPane.setBackground(Color.GREEN)

添加组件:contentPane.add(Component comp)

验证容器中的组件(相当于刷新):contentPane.validate()

重新载入容器可实现刷新效果:setContentPane(contentPane) //一般使用validate()

设置布局:contentPane.setLayout(LayoutManager mgr);

 常见组件

按钮:JButton

复选框组件:JCheckbox

下拉列表框:JCombox

标签组件:JLabel

单选按钮:JRadioButton

框列表框:JList

文本框:JTextField

密码框:JPasswordField

文本域:JTextArea

对话框:JOptionPane

代码示例

JDialog对话框

 package com.czm;

 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; /**
* 对话框
*/
public class Demo02 extends JDialog { public Demo02(JFrame jFrame) {
/**
* 父窗体对象,对话框标题, 是否阻塞父窗体(只能弹出一个对话框,弹出后不能点击父窗体)
*/
super(jFrame, "对话框标题", true);
Container contentPane = getContentPane();
contentPane.add(new JLabel("这是一个对话框"));
setBounds(300, 300, 300, 300);
} public static void main(String[] args) {
JFrame jFrame = new JFrame("父窗体");
jFrame.setBounds(200,200,500,500);
Container contentPane = jFrame.getContentPane();
JButton button = new JButton("弹出对话框");
//设置布局,使用流布局
contentPane.setLayout(new FlowLayout());
contentPane.add(button);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // button.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// Demo02 demo02 = new Demo02(jFrame);
// //设置对话框可见
// demo02.setVisible(true);
// }
// }); //Lambda 表达式
button.addActionListener((e)->{
Demo02 demo02 = new Demo02(jFrame);
//设置对话框可见
demo02.setVisible(true);
}); }
}

使用JLabel标签添加图片

 package com.czm;

 import javax.swing.*;
import java.awt.*;
import java.net.URL; /**
* 使用JLabel标签添加图片
*/
public class Demo03 extends JFrame {
public Demo03(){
setTitle("显示图片窗口");
setVisible(true);
setBounds(300, 300, 400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane(); contentPane.setBackground(Color.cyan); JLabel jLabel = new JLabel();
// URL url = Demo03.class.getResource("/picture.jpg");
// //获取相应路径下的图片
// Icon icon = new ImageIcon(url); ImageIcon icon = new ImageIcon("src/picture.jpg");
System.out.println(icon.getIconHeight()+"#"+icon.getIconWidth());
//使图片适应窗口
icon.setImage(icon.getImage().getScaledInstance(getWidth(), getHeight(), Image.SCALE_DEFAULT));
//添加图片
jLabel.setIcon(icon);
// 即使设置标签大小,也不会改变图片大小
// jLabel.setSize(20, 20); System.out.println(icon.getIconHeight()+"#"+icon.getIconWidth()); contentPane.add(jLabel);
//刷新
contentPane.validate();
} public static void main(String[] args) {
new Demo03();
}
}

设置布局

 package com.czm;

 import javax.swing.*;
import java.awt.*; /**
* 设置布局
*/
public class Demo04 extends JFrame { public Demo04(){
setTitle("布局");
setBounds(300, 300, 400, 400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = getContentPane();
/**
* 绝对布局(参数为null时为绝对布局),即各组件位置按像素设定
* 各组件位置大小不会随窗口改变而该变
*
contentPane.setLayout(null);
JButton bb = new JButton("按钮1");
JButton bb2 = new JButton("按钮2");
// 设置组件在窗体位置及大小(不设置无法显示)
bb.setBounds(10, 10,100,100);
bb2.setBounds(200, 200,100,100);
contentPane.add(bb);
contentPane.add(bb2);
*/
/**
* 设置布局,不设置默认边界布局
* 使用流布局(组件会随窗体大小而改变),不传参数默认居中对齐,
* 参数:对齐方式、水平间距、垂直间距
* contentPane.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 30));
for (int i = 0; i < 10; i++){
contentPane.add(new JButton("b"+i));
}
*/
/**
//使用边界布局
contentPane.setLayout(new BorderLayout());
JButton b1 = new JButton("中"),
b2 = new JButton("东"),
b3 = new JButton("西"),
b4 = new JButton("南"),
b5 = new JButton("北");
//中部添加(不指明方位默认为中部)
contentPane.add(b1, BorderLayout.CENTER);
//东部
contentPane.add(b2, BorderLayout.EAST);
//西部
contentPane.add(b3, BorderLayout.WEST);
//南部
contentPane.add(b4, BorderLayout.SOUTH);
//北部
contentPane.add(b5, BorderLayout.NORTH);
//新组件会覆盖旧组件
contentPane.add(new JButton("覆盖"), BorderLayout.NORTH); */ /**
* 网格布局GridLayout(行数, 列数,列距,行距)(列距,行距可省略,默认为0) contentPane.setLayout(new GridLayout(4, 5,5,10));
for (int i=0; i < 20; i++){
contentPane.add(new JButton("按钮"+i));
}
//超过规格会自动扩充适应
contentPane.add(new JButton("超过的按钮"));
*/ //刷新
contentPane.validate();
} public static void main(String[] args) {
new Demo04();
}
}

网格组布局管理

 package com.czm;

 import javax.swing.*;
import java.awt.*; /**
* 网格组布局管理
*/
public class Demo05 {
JFrame jFrame = new JFrame();
Container container;
void createFrame(){
//设置网格组布局
container = jFrame.getContentPane();
container.setLayout(new GridBagLayout());
jFrame.setSize(800, 600);
//先设置大小再设置默认居中
// jFrame.setLocationRelativeTo(null);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init(){
//创建约束条件
GridBagConstraints g1 = new GridBagConstraints();
//第一行第一列
g1.gridx = 0;
g1.gridy = 0;
container.add(new JButton("组件1"), g1);
GridBagConstraints g2 = new GridBagConstraints();
//第二行第二列
g2.gridx = 1;
g2.gridy = 1;
container.add(new JButton("组件2"), g2);
GridBagConstraints g3 = new GridBagConstraints();
//第四行第四列(由于第三行第三列没组件,自动补齐)
g3.gridx = 3;
g3.gridy = 3;
container.add(new JButton("组件3"), g3);
} void init2(){
//创建约束条件
GridBagConstraints g1 = new GridBagConstraints();
//第一行第一列
g1.gridx = 1;
g1.gridy = 1;
//宽高各占一格
g1.gridwidth = 1;
g1.gridheight = 1;
container.add(new JButton("none"), g1);
GridBagConstraints g2 = new GridBagConstraints();
//第二行第二列
g2.gridx = 2;
g2.gridy = 1;
g2.gridwidth = 2;
g2.gridheight = 1;
//水平填充
g2.fill = GridBagConstraints.HORIZONTAL;
container.add(new JButton("HORIZONTAL"), g2);
GridBagConstraints g3 = new GridBagConstraints();
//第四行第四列(由于第三行第三列没组件,自动补齐)
g3.gridx = 4;
g3.gridy = 1;
g3.gridwidth = 2;
g3.gridheight = 2;
//垂直填充
g3.fill = GridBagConstraints.VERTICAL;
container.add(new JButton("VERTICAL"), g3);
GridBagConstraints g4 = new GridBagConstraints();
//第四行第四列(由于第三行第三列没组件,自动补齐)
g4.gridx = 6;
g4.gridy = 1;
g4.gridwidth = 2;
g4.gridheight = 2;
//全填充
g4.fill = GridBagConstraints.BOTH;
container.add(new JButton("BOTH"), g4);
} /**
* anchor属性(确定方位,默认CENTER居中)
*/
void init3(){
//创建约束条件
GridBagConstraints g1 = new GridBagConstraints();
//第一行第一列
g1.gridx = 1;
g1.gridy = 1;
g1.gridheight = 2;
g1.gridwidth = 2;
g1.anchor = GridBagConstraints.NORTHEAST;
container.add(new JButton("@"), g1);
//创建面板
// g1.anchor = GridBagConstraints.CENTER;
g1.fill = GridBagConstraints.BOTH;
JPanel jPanel = new JPanel();
jPanel.setBackground(Color.green);
container.add(jPanel, g1);
} /**
* insert自定义位置
*/
void init4(){
//创建约束条件
GridBagConstraints g1 = new GridBagConstraints();
//第一行第一列
g1.gridx = 1;
g1.gridy = 1;
g1.insets = new Insets(5,5,5,10);
container.add(new JButton("@"), g1); }
/**
* ipadx和ipady组件的首选大小(正数放大,负数缩小)
*/
void init5(){
//创建约束条件
GridBagConstraints g1 = new GridBagConstraints();
//第一行第一列
g1.gridx = 1;
g1.gridy = 1;
g1.ipadx = 100;
g1.ipady = 10;
container.add(new JButton("@"), g1); GridBagConstraints g2 = new GridBagConstraints();
g2.gridx = 4;
g2.gridy = 2;
g2.ipadx = -10;
g2.ipady = -10;
container.add(new JButton("@"), g2); } /**
* weightx,weighty用来设置窗口变大时,各组件跟着变大的比例
* 窗体放大时组件2的x轴放大倍速是组件1的10倍
*/
void init6(){
//创建约束条件
GridBagConstraints g1 = new GridBagConstraints();
//第一行第一列
g1.gridx = 1;
g1.gridy = 1;
g1.weightx = 0.1;
g1.weighty = 0.5;
container.add(new JButton("组件1"), g1); GridBagConstraints g2 = new GridBagConstraints();
//第一行第一列
g2.gridx = 2;
g2.gridy = 1;
g2.weightx = 1;
g2.weighty = 0.5;
container.add(new JButton("组件2"), g2); }
void createButton(){
for (int i=0; i<10; i++){
GridBagConstraints gg = new GridBagConstraints();
gg.gridx = i;
gg.gridy = 0;
container.add(new JButton("网格"), gg);
}
for (int i=0; i<10; i++){
GridBagConstraints gg2 = new GridBagConstraints();
gg2.gridx = 0;
gg2.gridy = i;
container.add(new JButton("网格"), gg2);
} }
public static void main(String[] args) {
Demo05 demo05 = new Demo05();
demo05.createFrame();
demo05.createButton();
demo05.init6();
demo05.jFrame.setVisible(true);
}
}

下拉列表(JComboBox)

 package com.czm;

 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; /**
* 下拉列表(JComboBox)
*/
public class Demo06 extends JFrame {
public Demo06(){
setBounds(200,200, 400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = getContentPane();
contentPane.setLayout(null); //下拉框
//向下拉框添加选项一
// JComboBox<String> jComboBox = new JComboBox<>();
// jComboBox.addItem("苹果");
// jComboBox.addItem("荔枝");
// jComboBox.addItem("桃");
//向下拉框添加选项二(用String数组)
// String items[] = new String[]{"苹果","荔枝","芒果"};
// JComboBox<String> jComboBox = new JComboBox<>(items); //向下拉框添加选项三(下拉列表模型)
JComboBox<String> jComboBox = new JComboBox<>();
String items[] = new String[]{"苹果","荔枝","芒果"};
ComboBoxModel<String> comboBoxModel = new DefaultComboBoxModel<>(items);
jComboBox.setModel(comboBoxModel);
//设置是否可输入(默认false)输入后获取的下标为-1
jComboBox.setEditable(true); jComboBox.setBounds(100, 100, 100, 30); JButton jButton = new JButton("打印");
jButton.setBounds(200, 100, 100, 30);
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("选中项下标:"+jComboBox.getSelectedIndex());
System.out.println("选中项:"+jComboBox.getSelectedItem());
}
}); contentPane.add(jButton);
contentPane.add(jComboBox);
setVisible(true);
} public static void main(String[] args) {
new Demo06();
}
}

列表框JList

 package com.czm;

 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List; /**
* 列表框JList
*/
public class Demo07 extends JFrame {
public Demo07(){
setBounds(200,200, 400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(null); String[] items = new String[]{"a", "b", "c", "d", "e", "f", "g"};
//创建列表数据的模型
DefaultListModel<String> defaultListModel = new DefaultListModel<>();
for (String tem: items){
//向列表模型添加元素
defaultListModel.addElement(tem);
}
//列表
JList<String> jList = new JList<>();
jList.setModel(defaultListModel); /**
* 设置选择模式
* MULTIPLE_INTERVAL_SELECTION:(默认)随便选
* SINGLE_INTERVAL_SELECTION:只能选择相邻的元素
* SINGLE_SELECTION:单选
*/
jList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); //创建滚动条并添加列表
JScrollPane jScrollPane = new JScrollPane(jList);
jScrollPane.setBounds(100, 100, 100, 100); //使用模型可随时添加元素
defaultListModel.addElement("添加元素"); contentPane.add(jScrollPane);
setVisible(true); JButton jButton = new JButton("打印");
jButton.setBounds(200,100,100,30);
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
List<String> selectedValuesList = jList.getSelectedValuesList();
for (String tmp: selectedValuesList){
System.out.println(tmp);
}
System.out.println("_______end________");
}
}); contentPane.add(jButton);
} public static void main(String[] args) {
new Demo07();
}
}

文本框JTextField

 package com.czm;

 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; /**
* 文本框JTextField
*/
public class Demo08 extends JFrame {
public Demo08(){
setBounds(100, 100, 400, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout()); //创建文本框
JTextField jTextField = new JTextField();
//设置文本框长度(单位字符)
jTextField.setColumns(20);
//设置初始值
jTextField.setText("初始值");
//设置字体格式
jTextField.setFont(new Font("黑体", Font.PLAIN,20)); contentPane.add(jTextField); JButton jButton = new JButton("确认");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("文本框的内容:"+jTextField.getText());
//清空文本框
jTextField.setText("");
//获取焦点
jTextField.requestFocus();
}
}); contentPane.add(jButton);
setVisible(true);
} public static void main(String[] args) {
new Demo08();
}
}

密码框

 package com.czm;

 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; /**
* 密码框
*/
public class Demo09 extends JFrame {
public Demo09(){
setBounds(200, 200, 400, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout()); //创建密码框组件
JPasswordField jPasswordField = new JPasswordField();
//设置密码框长度,20个字符
jPasswordField.setColumns(20); //设置回显字符(屏幕上看到我们输入的字符)
jPasswordField.setEchoChar('#');
//设置字体
jPasswordField.setFont(new Font("黑体", Font.BOLD, 18)); //添加监听(回车时触发)
jPasswordField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
char[] password = jPasswordField.getPassword();
System.out.println(new String(password));
}
}); contentPane.add(jPasswordField); setVisible(true); } public static void main(String[] args) {
new Demo09();
}
}

文本域

 package com.czm;

 import javax.swing.*;
import java.awt.*; /**
* 文本域
*/
public class Demo10 extends JFrame {
public Demo10(){
setBounds(200, 200, 400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout()); //创建文本域
JTextArea jTextArea = new JTextArea();
//设定文本内容
jTextArea.setText("初始内容");
//设定行
jTextArea.setRows(5);
//设定列数
jTextArea.setColumns(20);
//添加内容
jTextArea.append("添加内容");
//在第二个字符后面插入内容
jTextArea.insert("【插入内容】", 2);
//给文本域添加滚动条
JScrollPane jScrollPane = new JScrollPane(jTextArea);
contentPane.add(jScrollPane);
setVisible(true);
} public static void main(String[] args) {
new Demo10();
}
}

事件监听

 package com.czm;

 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener; /**
* 事件监听
*/
public class Demo11 extends JFrame {
public Demo11(){
setBounds(200, 200, 400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout()); JLabel jLabel = new JLabel("标签");
JButton jButton = new JButton("按钮");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jLabel.setText("按钮被点击");
}
}); JTextField jTextField = new JTextField();
//设置文本框长度(单位字符)
jTextField.setColumns(20);
//设置初始值
jTextField.setText("初始值");
//设置字体格式
jTextField.setFont(new Font("黑体", Font.PLAIN,20)); jTextField.addFocusListener(new MyFocusListenter()); // jTextField.addFocusListener(new FocusListener() {
// @Override
// public void focusGained(FocusEvent e) {
//
// }
//
// @Override
// public void focusLost(FocusEvent e) {
//
// }
// }); contentPane.add(jTextField);
contentPane.add(jLabel);
contentPane.add(jButton);
setVisible(true);
} //实现焦点事件监听器
class MyFocusListenter implements FocusListener{
//获取焦点
@Override
public void focusGained(FocusEvent e) {
//获取触发事件的文本框
JTextField source = (JTextField) e.getSource();
//给获取焦点的文本框设置绿色边框
source.setBorder(BorderFactory.createLineBorder(Color.green));
source.setText("获得焦点");
} //离焦
@Override
public void focusLost(FocusEvent e) {
//获取触发事件的文本框
JTextField source = (JTextField) e.getSource();
//给失去焦点的文本框设置绿色边框
source.setBorder(BorderFactory.createLineBorder(Color.red));
source.setText("失去焦点");
}
}
public static void main(String[] args) {
new Demo11();
}
}

  

JavaGUI之Swing简单入门示例的更多相关文章

  1. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  2. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  3. Web Service简单入门示例

    Web Service简单入门示例     我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...

  4. spring简单入门示例

    1 控制反转IOC\依赖注入DI,因为翻译的不同,因此有两个名字.       控制反转意思就是说,当我们调用一个方法或者类时,不再有我们主动去创建这个类的对象,控制权交给别人(spring). 依赖 ...

  5. C# 之 Socket 简单入门示例

    这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消 ...

  6. 【java开发系列】—— struts2简单入门示例

    前言 最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的. struts2其实就是为我们封装了servlet,简化了js ...

  7. 百度 WebUploader 简单入门示例

    首先一定要引入:jquery.js 然后是webuploader的一个 css和还一个js 三个必须引用. <!DOCTYPE html> <html xmlns="htt ...

  8. shell的case脚本的简单入门

    shell的case脚本的简单入门 示例1: #/bin/bash a=$ case "$a" in ") echo 'hell 2';; ") echo 'h ...

  9. spring security 简单入门

    spring security 简单入门示例 一.概述 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架 . 其中最主要的安全操作有两 ...

随机推荐

  1. RecyclerView设置空视图

    RecyclerView貌似不能直接设置空视图,所以可以自定义一个RecyclerView继承自RecyclerView并设置一个数据监听者监视数据状态. MyCyclerView.java pack ...

  2. DOM事件操作

    DOM事件:对事件做出反应 当事件发生时,可以执行 JavaScript,比如:点击时 onClick="" 例:当用户点击时,会改变 <h1> 元素的内容: < ...

  3. postman~界面介绍

    本文摘抄自https://www.jianshu.com/p/b8b02afa74b1 官方文档:https://learning.getpostman.com/docs/postman/launch ...

  4. PHP password_verify() 函数

    password_verify() 函数用于验证密码是否和散列值匹配. PHP 版本要求: PHP 5 >= 5.5.0, PHP 7高佣联盟 www.cgewang.com 语法 bool p ...

  5. Electron~增量更新

    增量更新说明文档 English Version 提前准备 准备本地或者远程服务器或者远程静态文件url npm i -g http-server cd yourFileFolder // 进入任意文 ...

  6. Spring学习总结(7)-AOP

    参考资料:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aop 1 ...

  7. 用var声明变量,在java中居然有这么多细节,你都了解么?

    简介 Java SE 10引入了局部变量的类型推断.早先,所有的局部变量声明都要在左侧声明明确类型. 使用类型推断,一些显式类型可以替换为具有初始化值的局部变量保留类型var,这种作为局部变量类型 的 ...

  8. 041_go语言中的panic

    代码演示: package main import "os" func main() { // panic("a problem") _, err := os. ...

  9. java_内部类、匿名内部类的使用

    内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类. 内部类的分类 成员内部类,类定义在了成员位置 (类中方法外称为成员位置) 局部内部类,类定义在方法内 成员内部类 ...

  10. 大型Java进阶专题(十一) 深入理解JVM (下)

    前言 ​ 前面我们了解了JVM相关的理论知识,这章节主要从实战方面,去解读JVM. 类加载机制 ​ Java源代码经过编译器编译成字节码之后,最终都需要加载到虚拟机之后才能运行.虚拟机把描述类的数据从 ...