基于PyQt Canvas Matplotlib图形绘制-程序员宅基地

技术标签: Matplotlib  传递变量  绘图  PyQt  Python学习  

关键技术:变量传递, Pyqt Canvas, 信号槽

定义三种不同的绘图样式:第一个是静态图,第二个是动态图,最后一个是变量可控视图。

		sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)
		dc = MyDynamicMplCanvas(self.main_widget, width=5, height=4, dpi=100)
		cc = MyControlMplCanvas(self.main_widget, width=5, height=4, dpi=100)
		self.horizontalLayout.addWidget(sc)
		self.horizontalLayout.addWidget(dc)
		self.horizontalLayout.addWidget(cc)

 变量传递,通过lambda函数实现。

self.horizontalSlide.valueChanged['int'].connect(lambda: cc.update_figure(self.horizontalSlide.value()))

完整程序: 

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '.\mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!
import sys
import random

import matplotlib
matplotlib.use("Qt5Agg")
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QVBoxLayout, QSizePolicy, QMessageBox, QWidget

from numpy import arange, sin, pi
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure


class MyMplCanvas(FigureCanvas):#画布基类
	"""这是一个窗口部件,即QWidget(当然也是FigureCanvasAgg)"""
	def __init__(self, parent=None, width=50, height=50, dpi=100):
		fig = Figure(figsize=(width, height), dpi=dpi)
		self.axes = fig.add_subplot(111)
		# 每次plot()调用的时候,我们希望原来的坐标轴被清除(所以False)
		self.axes.hold(False)
		self.compute_initial_figure()

		#
		FigureCanvas.__init__(self, fig)
		self.setParent(parent)

		FigureCanvas.setSizePolicy(self,
									QSizePolicy.Expanding,
									QSizePolicy.Expanding)
		self.axes.set_xlabel('x')
		self.axes.set_ylabel('y')
		FigureCanvas.updateGeometry(self)

	def compute_initial_figure(self):
		pass

class MyStaticMplCanvas(MyMplCanvas):#单个画布
	"""静态画布:一条正弦线"""
	def compute_initial_figure(self):
		t = arange(0.0, 3.0, 0.01)
		s = sin(4*pi*t)
		self.axes.plot(t, s)

class MyControlMplCanvas(MyMplCanvas):#单个画布
	"""动态画布:每秒自动更新,更换一条折线。"""
	def __init__(self, *args, **kwargs):
		MyMplCanvas.__init__(self, *args, **kwargs)
		timer = QtCore.QTimer(self)
		timer.timeout.connect(self.update_figure)
		timer.start(1000)

	def compute_initial_figure(self):
		self.axes.plot([0, 0, 0, 0], [1, 2, 3, 4], 'r')

	def update_figure(self,x=1):
		# 构建4个随机整数,位于闭区间[0, 10]
		t = arange(0.0, 3.0, 0.01)
		print x
		s = sin(2*pi*t+x/100.*2*pi)
		self.axes.plot(t, s ,'r')
		self.axes.set_xlabel('x')
		self.axes.set_ylabel('y')
		self.draw()

class MyDynamicMplCanvas(MyMplCanvas):#单个画布
	"""动态画布:每秒自动更新,更换一条折线。"""
	def __init__(self, *args, **kwargs):
		MyMplCanvas.__init__(self, *args, **kwargs)
		timer = QtCore.QTimer(self)
		timer.timeout.connect(self.update_figure)
		timer.start(1000)

	def compute_initial_figure(self):
		self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')

	def update_figure(self):
		# 构建4个随机整数,位于闭区间[0, 10]
		l = [random.randint(0, 10) for i in range(4)]
		self.axes.plot([0, 1, 2, 3], l, 'r')
		self.axes.set_xlabel('x')
		self.axes.set_ylabel('y')
		self.draw()

class Ui_MainWindow(object):
	
	def setupUi(self, MainWindow):
		MainWindow.setObjectName("MainWindow")
		MainWindow.resize(519, 387)
		self.centralWidget = QtWidgets.QWidget(MainWindow)
		self.centralWidget.setObjectName("centralWidget")
		self.gridLayout = QtWidgets.QGridLayout(self.centralWidget)
		self.gridLayout.setContentsMargins(11, 11, 11, 11)
		self.gridLayout.setSpacing(6)
		self.gridLayout.setObjectName("gridLayout")
		#
		self.verticallayout = QtWidgets.QVBoxLayout()
		self.verticallayout.setContentsMargins(11, 11, 11, 11)
		self.verticallayout.setSpacing(6)
		self.verticallayout.setObjectName("verticallayout")
		#
		self.horizontalLayout = QtWidgets.QHBoxLayout()
		self.horizontalLayout.setContentsMargins(11, 11, 11, 11)
		self.horizontalLayout.setSpacing(6)
		self.horizontalLayout.setObjectName("horizontalLayout")
		#
		self.lcd = QtWidgets.QLCDNumber(self.centralWidget)
		self.lcd.setObjectName("lcd1")
		self.verticallayout.addWidget(self.lcd)
		self.horizontalSlide = QtWidgets.QSlider(self.centralWidget)
		self.horizontalSlide.setOrientation(QtCore.Qt.Horizontal)
		self.horizontalSlide.setObjectName("horizontalSlide")
		self.verticallayout.addWidget(self.horizontalSlide)
		#
		self.main_widget = QWidget()
		sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)
		dc = MyDynamicMplCanvas(self.main_widget, width=5, height=4, dpi=100)
		cc = MyControlMplCanvas(self.main_widget, width=5, height=4, dpi=100)
		self.horizontalLayout.addWidget(sc)
		self.horizontalLayout.addWidget(dc)
		self.horizontalLayout.addWidget(cc)
		#
		self.verticallayout.addLayout(self.horizontalLayout)
		#
		self.gridLayout.addLayout(self.verticallayout, 0, 0, 1, 1)
		MainWindow.setCentralWidget(self.centralWidget)
		self.menuBar = QtWidgets.QMenuBar(MainWindow)
		self.menuBar.setGeometry(QtCore.QRect(0, 0, 519, 23))
		self.menuBar.setObjectName("menuBar")
		self.menuF = QtWidgets.QMenu(self.menuBar)
		self.menuF.setObjectName("menuF")
		self.menuE = QtWidgets.QMenu(self.menuBar)
		self.menuE.setObjectName("menuE")
		self.menuW = QtWidgets.QMenu(self.menuBar)
		self.menuW.setObjectName("menuW")
		self.menuH = QtWidgets.QMenu(self.menuBar)
		self.menuH.setObjectName("menuH")
		MainWindow.setMenuBar(self.menuBar)
		self.mainToolBar = QtWidgets.QToolBar(MainWindow)
		self.mainToolBar.setObjectName("mainToolBar")
		MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
		MainWindow.insertToolBarBreak(self.mainToolBar)
		self.statusBar = QtWidgets.QStatusBar(MainWindow)
		self.statusBar.setObjectName("statusBar")
		MainWindow.setStatusBar(self.statusBar)
		self.actionNew = QtWidgets.QAction(MainWindow)
		icon = QtGui.QIcon()
		icon.addPixmap(QtGui.QPixmap("images/new.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionNew.setIcon(icon)
		self.actionNew.setObjectName("actionNew")
		self.actionOpen = QtWidgets.QAction(MainWindow)
		icon1 = QtGui.QIcon()
		icon1.addPixmap(QtGui.QPixmap("images/open.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionOpen.setIcon(icon1)
		self.actionOpen.setObjectName("actionOpen")
		self.actionSave = QtWidgets.QAction(MainWindow)
		icon2 = QtGui.QIcon()
		icon2.addPixmap(QtGui.QPixmap("images/save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionSave.setIcon(icon2)
		self.actionSave.setObjectName("actionSave")
		self.actionSaveAs = QtWidgets.QAction(MainWindow)
		icon3 = QtGui.QIcon()
		icon3.addPixmap(QtGui.QPixmap("images/saveAs.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionSaveAs.setIcon(icon3)
		self.actionSaveAs.setObjectName("actionSaveAs")
		self.actionExit = QtWidgets.QAction(MainWindow)
		icon4 = QtGui.QIcon()
		icon4.addPixmap(QtGui.QPixmap("images/exit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionExit.setIcon(icon4)
		self.actionExit.setObjectName("actionExit")
		self.actionUndo = QtWidgets.QAction(MainWindow)
		icon5 = QtGui.QIcon()
		icon5.addPixmap(QtGui.QPixmap("images/undo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionUndo.setIcon(icon5)
		self.actionUndo.setObjectName("actionUndo")
		self.actionRedo = QtWidgets.QAction(MainWindow)
		icon6 = QtGui.QIcon()
		icon6.addPixmap(QtGui.QPixmap("images/redo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionRedo.setIcon(icon6)
		self.actionRedo.setObjectName("actionRedo")
		self.actionCut = QtWidgets.QAction(MainWindow)
		icon7 = QtGui.QIcon()
		icon7.addPixmap(QtGui.QPixmap("images/cut.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionCut.setIcon(icon7)
		self.actionCut.setObjectName("actionCut")
		self.actionCopy = QtWidgets.QAction(MainWindow)
		icon8 = QtGui.QIcon()
		icon8.addPixmap(QtGui.QPixmap("images/copy.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionCopy.setIcon(icon8)
		self.actionCopy.setObjectName("actionCopy")
		self.actionPaste = QtWidgets.QAction(MainWindow)
		icon9 = QtGui.QIcon()
		icon9.addPixmap(QtGui.QPixmap("images/paste.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionPaste.setIcon(icon9)
		self.actionPaste.setObjectName("actionPaste")
		self.actionClose = QtWidgets.QAction(MainWindow)
		self.actionClose.setObjectName("actionClose")
		self.actionCloseAll = QtWidgets.QAction(MainWindow)
		self.actionCloseAll.setObjectName("actionCloseAll")
		self.actionTile = QtWidgets.QAction(MainWindow)
		self.actionTile.setObjectName("actionTile")
		self.actionCascade = QtWidgets.QAction(MainWindow)
		self.actionCascade.setObjectName("actionCascade")
		self.actionNext = QtWidgets.QAction(MainWindow)
		icon10 = QtGui.QIcon()
		icon10.addPixmap(QtGui.QPixmap("images/next.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionNext.setIcon(icon10)
		self.actionNext.setObjectName("actionNext")
		self.actionPrevious = QtWidgets.QAction(MainWindow)
		icon11 = QtGui.QIcon()
		icon11.addPixmap(QtGui.QPixmap("images/previous.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionPrevious.setIcon(icon11)
		self.actionPrevious.setObjectName("actionPrevious")
		self.actionAbout = QtWidgets.QAction(MainWindow)
		icon12 = QtGui.QIcon()
		icon12.addPixmap(QtGui.QPixmap("images/about.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
		self.actionAbout.setIcon(icon12)
		self.actionAbout.setObjectName("actionAbout")
		self.actionAboutQt = QtWidgets.QAction(MainWindow)
		self.actionAboutQt.setObjectName("actionAboutQt")
		self.menuF.addAction(self.actionNew)
		self.menuF.addAction(self.actionOpen)
		self.menuF.addSeparator()
		self.menuF.addAction(self.actionSave)
		self.menuF.addAction(self.actionSaveAs)
		self.menuF.addSeparator()
		self.menuF.addAction(self.actionExit)
		self.menuE.addAction(self.actionUndo)
		self.menuE.addAction(self.actionRedo)
		self.menuE.addSeparator()
		self.menuE.addAction(self.actionCut)
		self.menuE.addAction(self.actionCopy)
		self.menuE.addAction(self.actionPaste)
		self.menuW.addAction(self.actionClose)
		self.menuW.addAction(self.actionCloseAll)
		self.menuW.addSeparator()
		self.menuW.addAction(self.actionTile)
		self.menuW.addAction(self.actionCascade)
		self.menuW.addSeparator()
		self.menuW.addAction(self.actionNext)
		self.menuW.addAction(self.actionPrevious)
		self.menuH.addAction(self.actionAbout)
		self.menuH.addAction(self.actionAboutQt)
		self.menuBar.addAction(self.menuF.menuAction())
		self.menuBar.addAction(self.menuE.menuAction())
		self.menuBar.addAction(self.menuW.menuAction())
		self.menuBar.addAction(self.menuH.menuAction())
		self.mainToolBar.addAction(self.actionNew)
		self.mainToolBar.addAction(self.actionOpen)
		self.mainToolBar.addSeparator()
		self.mainToolBar.addAction(self.actionSave)
		self.mainToolBar.addAction(self.actionSaveAs)
		self.mainToolBar.addSeparator()
		self.mainToolBar.addAction(self.actionCut)
		self.mainToolBar.addAction(self.actionCopy)
		self.mainToolBar.addAction(self.actionPaste)
		self.mainToolBar.addSeparator()
		self.mainToolBar.addAction(self.actionUndo)
		self.mainToolBar.addAction(self.actionRedo)

		self.retranslateUi(MainWindow)
		self.horizontalSlide.valueChanged['int'].connect(self.lcd.display)
		self.horizontalSlide.valueChanged['int'].connect(lambda: cc.update_figure(self.horizontalSlide.value()))
		# x = self.horizontalSlide.value()
		# dc.update_figure()
		QtCore.QMetaObject.connectSlotsByName(MainWindow)

	def retranslateUi(self, MainWindow):
		_translate = QtCore.QCoreApplication.translate
		MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
		self.menuF.setTitle(_translate("MainWindow", "文件(&F)"))
		self.menuE.setTitle(_translate("MainWindow", "编辑(&E)"))
		self.menuW.setTitle(_translate("MainWindow", "窗口(&W)"))
		self.menuH.setTitle(_translate("MainWindow", "帮助(&H)"))
		self.actionNew.setText(_translate("MainWindow", "新建文件(&N)"))
		self.actionNew.setToolTip(_translate("MainWindow", "新建文件"))
		self.actionNew.setShortcut(_translate("MainWindow", "Ctrl+N"))
		self.actionOpen.setText(_translate("MainWindow", "打开文件(&O)..."))
		self.actionOpen.setToolTip(_translate("MainWindow", "打开文件"))
		self.actionOpen.setShortcut(_translate("MainWindow", "Ctrl+O"))
		self.actionSave.setText(_translate("MainWindow", "保存(&S)"))
		self.actionSave.setToolTip(_translate("MainWindow", "保存"))
		self.actionSave.setShortcut(_translate("MainWindow", "Ctrl+S"))
		self.actionSaveAs.setText(_translate("MainWindow", "另存为(&A)..."))
		self.actionSaveAs.setToolTip(_translate("MainWindow", "另存为"))
		self.actionExit.setText(_translate("MainWindow", "退出(&X)"))
		self.actionExit.setToolTip(_translate("MainWindow", "退出"))
		self.actionUndo.setText(_translate("MainWindow", "撤销(&U)"))
		self.actionUndo.setToolTip(_translate("MainWindow", "撤销"))
		self.actionUndo.setShortcut(_translate("MainWindow", "Ctrl+Z"))
		self.actionRedo.setText(_translate("MainWindow", "恢复(&R)"))
		self.actionRedo.setToolTip(_translate("MainWindow", "恢复"))
		self.actionRedo.setShortcut(_translate("MainWindow", "Ctrl+Y"))
		self.actionCut.setText(_translate("MainWindow", "剪切(&T)"))
		self.actionCut.setToolTip(_translate("MainWindow", "剪切"))
		self.actionCut.setShortcut(_translate("MainWindow", "Ctrl+X"))
		self.actionCopy.setText(_translate("MainWindow", "复制(&C)"))
		self.actionCopy.setToolTip(_translate("MainWindow", "复制"))
		self.actionCopy.setShortcut(_translate("MainWindow", "Ctrl+C"))
		self.actionPaste.setText(_translate("MainWindow", "粘贴(&P)"))
		self.actionPaste.setToolTip(_translate("MainWindow", "粘贴"))
		self.actionPaste.setShortcut(_translate("MainWindow", "Ctrl+V"))
		self.actionClose.setText(_translate("MainWindow", "关闭(&O)"))
		self.actionClose.setToolTip(_translate("MainWindow", "关闭"))
		self.actionCloseAll.setText(_translate("MainWindow", "关闭所有窗口(&A)"))
		self.actionCloseAll.setToolTip(_translate("MainWindow", "关闭所有窗口"))
		self.actionTile.setText(_translate("MainWindow", "平铺(&T)"))
		self.actionTile.setToolTip(_translate("MainWindow", "平铺"))
		self.actionCascade.setText(_translate("MainWindow", "层叠(&C)"))
		self.actionCascade.setToolTip(_translate("MainWindow", "层叠"))
		self.actionNext.setText(_translate("MainWindow", "下一个(&X)"))
		self.actionNext.setToolTip(_translate("MainWindow", "下一个"))
		self.actionNext.setShortcut(_translate("MainWindow", "Ctrl+Tab"))
		self.actionPrevious.setText(_translate("MainWindow", "前一个(&V)"))
		self.actionPrevious.setToolTip(_translate("MainWindow", "前一个"))
		self.actionPrevious.setShortcut(_translate("MainWindow", "Ctrl+Shift+Backtab"))
		self.actionAbout.setText(_translate("MainWindow", "关于(&A)"))
		self.actionAbout.setToolTip(_translate("MainWindow", "关于"))
		self.actionAboutQt.setText(_translate("MainWindow", "关于Qt(&Q)"))
		self.actionAboutQt.setToolTip(_translate("MainWindow", "关于Qt"))
if __name__ == "__main__":
	app = QtWidgets.QApplication(sys.argv)
	ex = Ui_MainWindow()
	w = QtWidgets.QMainWindow()
	ex.setupUi(w)
	w.show()
	sys.exit(app.exec_())

Q1: axes.hold(False) 报错问题。

解决方案,注释该语句,在图片更新位置添加,self.axes.cla()

class MyDynamicMplCanvas(MyMplCanvas):#单个画布
	"""动态画布:每秒自动更新,更换一条折线。"""
	def __init__(self, *args, **kwargs):
		MyMplCanvas.__init__(self, *args, **kwargs)
		timer = QtCore.QTimer(self)
		timer.timeout.connect(self.update_figure)
		timer.start(1000)

	def compute_initial_figure(self):
		self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')

	def update_figure(self):
		# 构建4个随机整数,位于闭区间[0, 10]
		l = [random.randint(0, 10) for i in range(4)]
		self.axes.cla()
		self.axes.plot([0, 1, 2, 3], l, 'r')
		self.axes.set_xlabel('x')
		self.axes.set_ylabel('y')
		self.draw()

 

参考:https://blog.csdn.net/fengyu09/article/details/39498777

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/battlestar/article/details/82728800

智能推荐

机器学习之感知器和线性回归、逻辑回归以及SVM的相互对比-程序员宅基地

文章浏览阅读552次。线性回归是回归模型感知器、逻辑回归以及SVM是分类模型线性回归:f(x)=wx+b感知器:f(x)=sign(wx+b)其中sign是个符号函数,若wx+b>=0取+1,若wx+b<0取-1它的学习策略是最小化误分类点到超平面的距离,逻辑回归:f(x)=sigmoid(wx+b)取值范围在0-1之间。感知器和SVM的对比:它俩都是用于分类的模型,且都以s..._逻辑函数与svm、感知机区别和联系

webpack 理解 babel-polyfill 和 babel-runtime 及 babel-plugin-transform-runtime的配置-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏4次。一:理解 babel之配置文件.babelrc 基本配置项 1. 什么是babel? 它是干什么用的? ES6是2015年发布的下一代javascript语言标准,它引入了新的语法和API,使我们编写js代码更加得心应手,比如class,let,for...of promise等等这..._8004 silly decomposeactions finalize babel-plugin-transform-es2015-block-sco

uni-app小程序,实现根据中文首字母排序功能_uniapp js-pinyin-程序员宅基地

文章浏览阅读4.2k次,点赞7次,收藏17次。描述:从后端调用接口获取所有热的姓名,将这些名字的首字母排序,然后放到对应字母下面,最终效果图如下:实现过程**总体实现的思路是:**首先调用接口,获取所有员工的姓名以及其他信息,将获取回来的中文名字转换为拼音,这里做的是转为姓名首字母大写的简写格式(比如:“张三” 转为“ZS”)这里只需要名字的第一个字的首字母,使用js的截取功能就能实现,中文转拼音这里我使用的是js-pinyin,将转换好的内容渲染到页面上。1、下载js-pinyin包npm install js-pinyin2、在mai_uniapp js-pinyin

windows 10 更新后无法使用远程桌面_remote desktop is available for these editions:-程序员宅基地

文章浏览阅读1w次。远程桌面部分服务器可以连接错误消息An authentication error has occurred. The function requested is not supported This could be due to CredSSP encryption oracle remediation. For more information, see https://go.m..._remote desktop is available for these editions:

黑马程序员_JAVA_反射-程序员宅基地

文章浏览阅读358次。一、反射技术 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射就是把Java类中的各种成分映射成相应的java类。二、Class类所有的类文件都有共同属性,所以可以向上抽取,把这些共性内容封装

SVG 保姆级入门知识详解,一篇文章带你上手!-程序员宅基地

文章浏览阅读2.1k次,点赞6次,收藏27次。SVG,即可缩放矢量图形(Scalable Vector Graphics),是一种基于 XML 的矢量图形格式,用于描述二维图形和动画。相比于基于位图的图像格式,如 PNG 和 JPEG,SVG 图像可以无限放大或缩小且不会失真。这篇文章带你了解一下SVG的魅力吧。_svg

随便推点

领扣LintCode算法问题答案-488. 快乐数_488 。 。 。 8 。 872552554545422225425225555255555417-程序员宅基地

文章浏览阅读815次。领扣LintCode算法问题答案-488. 快乐数目录488. 快乐数题解鸣谢488. 快乐数写一个算法来判断一个数是不是"快乐数"。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。样例 1:输入:19输出:true说明:19是一个快乐的数字1 ^ 2 + 9 ^ 2 = 828 ^ 2 + 2 ^ 2 = 686 ^ 2 + 8 ^ ._488 。 。 。 8 。 87255255454542222542522555525555541774。 ,:,。冫、、丶

Memory Model -- 06 -- 运行时数据区(五、方法区)_java内存模型5大块-程序员宅基地

文章浏览阅读189次。一、方法区 (Method Area)方法区 (Method Area) 与 Java 堆一样,是各个线程共享的内存区域,用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据当方法区无法满足内存分配的需求时,将会抛出 OutOfMemoryError 异常二、永久代与元空间在 Java 虚拟机规范中,只规定了方法区的概念及其作用,但并没有规..._java内存模型5大块

JAVA实验六_用java模拟向货船上装集装箱-程序员宅基地

文章浏览阅读1.4k次,点赞6次,收藏14次。JAVA实验六实验六一共四题,附上题目及完整代码。8702题目內容:建立Person类,成员变量为姓名和年龄,具有构造方法、get/set方法。创建NoAgesException类,当年龄为负数或大于200岁抛出异常IllegalArgumentException,正常输出“姓名年…龄从”,键盘输入姓名和年龄建立Person对象,测试该对象。输入输出说明:张三 300年龄数值非法李四 77李四…77代码编辑:import java.util.Scanner;class NoAges._用java模拟向货船上装集装箱

“不念过往,不畏将来”——2017年山东省第八届ACM大学生程序设计竞赛总结_2017年山东省acm程序设计大赛-程序员宅基地

文章浏览阅读627次。不念过往,不畏将来今天去参加了第八届山东ACM省赛,也是自己第一次参加正式的ACM比赛,有诸多感想。先说说去比赛的经过吧,整个大体上还是比较顺利的,青科大的志愿者也十分的负责用心(排队排的很有意思),住宿环境也还不错,但是宾馆的隔音的效果实在是有一点差,第二天比赛还算是清醒,迅速进入了状态,我们队还算顺利的A掉了I,G两个水题,然后开了两道题,一开始读错题导致错了两次,但是还好及时发现,A_2017年山东省acm程序设计大赛

IRC_tcp服务器支持irc-程序员宅基地

文章浏览阅读1.2k次。转载自 mst_beach 最终编辑 mst_beach IRC(Internet Relay Chat的缩写,“因特网中继聊天”)是一种通过网络的即时聊天方式。其主要用于群体聊天,但同样也可以用于个人对个人的聊天。 芬兰人雅尔口·欧伊卡林恁(Jarkko Oikarinen)于1988年8月创造了IRC来取代一个叫做MUT的程序。 连接方法 以连接到 FreeNode (chat.freenode.net) 上的 #wikipedia-zh 聊天室为例: 在支持 IRC 协议的浏览器地址栏中输_tcp服务器支持irc

特殊教育学校计算机教学计划,特殊教育学校七年级环境教育教学计划.doc-程序员宅基地

文章浏览阅读106次。特殊教育学校七年级环境教育教学计划特殊教育学校七年级环境教育教学计划李红榜◆学生情况分析:七年级共有学生10人,学生有一定的环保意识和环保知识,但不系统、不全面。极少开展综合实践活动。通过本册教材的学习,使他们掌握环保的有关知识,通过开展大量的实践活动,做环保的小主人。◆教学总目标1、学生了解一些生态环境问题的产生和发展,感知这些环境问题带来的危害,树立环保意识,转变浪费资源、破环环境的生活方式。...