「java实用模型」java数据模型设计
本篇文章给大家谈谈java实用模型,以及java数据模型设计对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java网络io模型有几种
#BIO---Blocking IO
- 每个socket一个线程,读写时线程处于阻塞状态。
优点:实现简单
缺点:无法满足高并发,高接入的需求
- 不使用线程池的BIO模型,除了无法满足高并发需求外,由于需要为每个请求创建一个线程,还可能因为接入大量不活跃连接而耗尽服务器资源。
- 使用线程池的BIO模型,虽然控制了线程数量,但由于其本质上读写仍是阻塞的,仍无法满足高并发需求。
#NIO---Non-Blocking IO(非阻塞IO)
##非阻塞IO和多路复用
非阻塞IO和多路复用实际上是两个不用的概念,由于两者通常结合在一起使用,因此两者往往被混为一谈。下面我将试着分清这两个概念:
###非阻塞IO
与BIO相对应,非阻塞IO的读写方法无论是否有数据都立即返回,因此可以通过轮询方式来实现,但轮询方式的效率并不比BIO有显著提高,因为每个连接仍然需要占用一个线程。下面是轮询方式实现的IO模式图:
###多路复用
- 多路复用结合非阻塞IO能够明显提高IO的效率,这也是Java1.4把非阻塞IO和多路复用同时发布的原因。
- 多路复用的核心是多路复用器(Selector),它是需要操作系统底层支持的,简单的说,就是进程把多个socket和它们关心的事件(比如连接请求或数据已准备好)都注册在多路复用器上,操作系统会在事件发生时通知多路复用器,这样进程就可以通过多路复用器知道在那个socket上发生了什么时间,从而进行对应的处理。
- 多路复用的优点在于只需要一个线程监测(阻塞或轮询方式均可)多路选择器的状态,只有在有事件需要发生时才会真正的创建线程进行处理,因此更适合高并发多接入的应用环境。
- 在Linux系统下,多路复用的底层实现是epoll方法,与select/poll的顺序扫描不同,epoll采用效率更高的事件驱动方式,而且epoll方式并没有socket个数限制。
##BIO和NIO的比较
- BIO适用于连接长期保持的应用,比如一个复杂系统中模块之间通过长连接来进行通信。
- NIO加多路复用的模式更适合短连接、高并发、多接入的情形,比如网络服务器。
##NIO网络编程的常用接口
##Reactor模式
Reactor模式用于解决事件分发处理的问题,Handler把自己的channel和关注的事件注册到Selector中,当对应的事件发生在自己的channel上时,对应的handler就会得到通知并进行处理。
- 单线程的Reactor
消息的分发、读写、处理都在一个线程中处理,是Reactor最简单的实现方式,如果消息的处理需要较长时间,会影响效率。
```java
//Reactor类,负责分发事件并调用对应的handler
class Reactor implements Runnable {
final Selector selector;
final ServerSocketChannel serverSocket;
//Reactor初始化
Reactor(int port) throws IOException {
selector = Selector.open();
serverSocket = ServerSocketChannel.open();
serverSocket.socket().bind(new InetSocketAddress(port));
serverSocket.configureBlocking(false); //必须配置为非阻塞
//Acceptor会在Reactor初始化时就注册到Selector中,用于接受connect请求
SelectionKey sk = serverSocket.register(selector, SelectionKey.OP_ACCEPT);
sk.attach(new Acceptor()); //attach callback object, Acceptor
}
//分发消息并调用对应的handler
public void run() {
try {
while (!Thread.interrupted()) {
selector.select();
Set selected = selector.selectedKeys();
Iterator it = selected.iterator();
while (it.hasNext())
dispatch((SelectionKey)(it.next()); //Reactor负责dispatch收到的事件
selected.clear();
}
} catch (IOException ex) { /* ... */ }
}
void dispatch(SelectionKey k) {
Runnable r = (Runnable)(k.attachment()); //调用之前注册的callback对象
if (r != null)
r.run();
}
//Acceptor也是一个handler,负责创建socket并把新建的socket也注册到selector中
class Acceptor implements Runnable { // inner
public void run() {
try {
SocketChannel c = serverSocket.accept();
if (c != null)
new Handler(selector, c);
}
catch(IOException ex) { /* ... */ }
}
}
}
//Concrete Handler:用于收发和处理消息。
//在当前的实现中,使用Runnable接口作为每个具体Handler的统一接口
//如果在处理时需要参数和返回值,也可以为Handler另外声明一个统一接口来代替Runnable接口
final class Handler implements Runnable {
final SocketChannel socket;
final SelectionKey sk;
ByteBuffer input = ByteBuffer.allocate(MAXIN);
ByteBuffer output = ByteBuffer.allocate(MAXOUT);
static final int READING = 0, SENDING = 1;
int state = READING;
Handler(Selector sel, SocketChannel c) throws IOException {
socket = c; c.configureBlocking(false);
// Optionally try first read now
sk = socket.register(sel, 0);
sk.attach(this); //将Handler作为callback对象
sk.interestOps(SelectionKey.OP_READ); //第二步,接收Read事件
sel.wakeup();
}
boolean inputIsComplete() { /* ... */ }
boolean outputIsComplete() { /* ... */ }
void process() { /* ... */ }
public void run() {
try {
if (state == READING) read();
else if (state == SENDING) send();
} catch (IOException ex) { /* ... */ }
}
void read() throws IOException {
socket.read(input);
if (inputIsComplete()) {
process();
state = SENDING;
// Normally also do first write now
sk.interestOps(SelectionKey.OP_WRITE); //第三步,接收write事件
}
}
void send() throws IOException {
socket.write(output);
if (outputIsComplete()) sk.cancel(); //write完就结束了, 关闭select key
}
}
//上面 的实现用Handler来同时处理Read和Write事件, 所以里面出现状态判断
//我们可以用State-Object pattern来更优雅的实现
class Handler { // ...
public void run() { // initial state is reader
socket.read(input);
if (inputIsComplete()) {
process();
sk.attach(new Sender()); //状态迁移, Read后变成write, 用Sender作为新的callback对象
sk.interest(SelectionKey.OP_WRITE);
sk.selector().wakeup();
}
}
class Sender implements Runnable {
public void run(){ // ...
socket.write(output);
if (outputIsComplete()) sk.cancel();
}
}
}
```
- 多线程Reacotr
处理消息过程放在其他线程中执行
```java
class Handler implements Runnable {
// uses util.concurrent thread pool
static PooledExecutor pool = new PooledExecutor(...);
static final int PROCESSING = 3;
// ...
synchronized void read() { // ...
socket.read(input);
if (inputIsComplete()) {
state = PROCESSING;
pool.execute(new Processer()); //使用线程pool异步执行
}
}
synchronized void processAndHandOff() {
process();
state = SENDING; // or rebind attachment
sk.interest(SelectionKey.OP_WRITE); //process完,开始等待write事件
}
class Processer implements Runnable {
public void run() { processAndHandOff(); }
}
}
```
- 使用多个selector
mainReactor只负责处理accept并创建socket,多个subReactor负责处理读写请求
```java
Selector[] selectors; //subReactors集合, 一个selector代表一个subReactor
int next = 0;
class Acceptor { // ...
public synchronized void run() { ...
Socket connection = serverSocket.accept(); //主selector负责accept
if (connection != null)
new Handler(selectors[next], connection); //选个subReactor去负责接收到的connection
if (++next == selectors.length) next = 0;
}
}
```
#AIO
AIO是真正的异步IO,它于JDK1.7时引入,它和NIO的区别在于:
- NIO仍然需要一个线程阻塞在select方法上,AIO则不需要
- NIO得到数据准备好的消息以后,仍然需要自己把消息复制到用户空间,AIO则是通过操作系统的支持把数据异步复制到用户空间以后再给应用进程发出信号。
java中的“委托事件模型”做一下介绍
什么是委托事件模型
在教材上的图中,我们可以发现,用户通过键盘、鼠标等进行操纵的行为,最终都传递给了JVM,那么JVM在接收到这些事件以后该如何处理呢?我们把这种处理事件的方案,称之为事件模型。
Java中采用的是委托事件模型:jdk1.1以后,引入的一种新的事件代理模块,通过它,事件源发出的事件被委托给(注册了的)事件监听器(Listener),并由它负责执行相应的响应方法。比如:病人生病请医生。
基于这种模型,我们使用两种类型的对象来执行事件机制,这两种对象是:
事件源对象
事件的侦听对象
委托事件模型的实现步骤
在java语言中委托事件模型的处理步骤如下:
1.建立事件源对象。如各种GUI的组件。
2.为事件源对象选择合适的事件监听器。比如事件源对象如果是“按钮”,那么我们能想到的发生在按钮身上最多的,应该是单击事件了。这时我就应该选择鼠标单击事件的监听器。
3.为监听器添加适当的处理程序。比如当按钮单击事件发生后,希望完成的代码。
4.为监听器与事件源建立联系。
窗体自身实现事件监听
我们在刚才的例子中使用了两个对象,一个是事件源对象,即JFrame窗体,另外还创建了一个监听器对象。事实上在实际开发过程中,我们往往,将这两个类写在一起,就是说一个窗体类自己监听自己的事件
其他事件监听器接口的使用
Java支持的事件监听器接口非常多,常见的主要有:
ActionListener 行为监听接口
AdjustmentListener 调整监听接口
ItemListener 选项监听接口
TextListener 文本监听接口
ComponentListener 组件监听接口
KeyListener 键盘监听接口
MouseListener 鼠标点击监听接口
MouseMotionListener 鼠标移动监听接口
FocusListener 光标聚焦监听接口
WindowListener 窗体监听接口
ContainerListener 容器监听接口
KeyListener接口与KeyAdapter类
KeyListener接口:监听键盘事件。
该接口中定义了如下三个方法:
keyPressed() 键盘按下时触发
keyReleased() 键盘释放时触发
keyTyped() 键盘单击一次时触发
KeyAdpeter适配器:即使我们只想使用上述三个方法中的一种,那么我们也必须在KeyListener接口的实现类中对这三种方法进行重写,这种方式显然增加了很多无效代码,我们可以使用适配器模式解决。
匿名内部类
WindowListener接口与WindowAdapter类
WindowListener接口:监听窗体的行为。
windowListener接口常用方法:
windowActivated(WindowEvent e) 将 Window 设置为活动 Window 时 调用。
windowClosed(WindowEvent e) 因对窗口调用 dispose 而将其关闭 时调用。
windowClosing(WindowEvent e) 用户试图从窗口的系统菜单中关闭窗 口时调用。
windowDeactivated(WindowEvent e) 当 Window 不再是活动 Window 时调用。
windowDeiconified(WindowEvent e) 窗口从最小化状态变为正常状 态时调用。
windowIconified(WindowEvent e) 窗口从正常状态变为最小化状态 时调用。
windowOpened(WindowEvent e) 窗口首次变为可见时调用。
MouseListener接口与MouseAdapter类
MouseListener接口:监听鼠标点击的行为。
MouseListener接口常用方法:
mouseClicked(MouseEvent e) 鼠标按键在组件上单击(按下并释放)时调用。
mouseEntered(MouseEvent e) 鼠标进入到组件上时调用。
mouseExited(MouseEvent e) 鼠标离开组件时调用。
mousePressed(MouseEvent e) 鼠标按键在组件上按下时调用。
mouseReleased(MouseEvent e) 鼠标按钮在组件上释放时调用。
MouseMotionListener接口与MouseMotionAdapter类
MouseMotionListener接口:监听鼠标移动的行为。
MouseMotionListener接口常用方法:
mouseDragged(MouseEvent e) 鼠标按键在组件上按下并拖动时调用。
mouseMoved(MouseEvent e) 鼠标按键在组件上移动(无按键按下)时调用
Java中的模型的概念是什么样的
Java中的模型的概念是什么样的
模型其实就是java中常说的 物件的概念 也就是一个实体。究其根本其实就是一个java类
平角的模型是什么样的?
平角为180度的角度,是一条直线。
模型就是实体,在现实生活中可以有很多平角的物品可以代替理解,比如一支笔、一个平面、只要是180度的都可以。
什么样的模型是飞机模型?
飞机模型是指静态飞机模型(有别于模型飞机)
可以是真机按一定比例缩小的外观模型
也可以是自己创作的概念机模型
什么样的模型称为数学模型?
数学模型的历史可以追溯到人类开始使用数字的时代。随着人类使用数字,就不断地建立各种数学模型,以解决各种各样的实际问题。对于广大的科学技术工作者对大学生的综合素质测评,对教师的工作业绩的评定以及诸如访友,采购等日常活动,都可以建立一个数学模型,确立一个最佳方案。建立数学模型是沟通摆在面前的实际问题与数学工具之间联络的一座必不可少的桥梁。
1、真实完整。
1)真实的、系统的、完整的,形象的反映客观现象;
2)必须具有代表性;
3)具有外推性,即能得到原型客体的资讯,在模型的研究实验时,能得到关于原型客体的原因;
4)必须反映完成基本任务所达到的各种业绩,而且要与实际情况相符合。
2、简明实用。在建模过程中,要把本质的东西及其关系反映进去,把非本质的、对反映客观真实程度影响不大的东西去掉,使模型在保证一定精确度的条件下,尽可能的简单和可操作,资料易于采集。
3、适应变化。随着有关条件的变化和人们认识的发展,通过相关变数及引数的调整,能很好的适应新情况。
根据研究目的,对所研究的过程和现象(称为现实原型或原型)的主要特征、主要关系、采用形式化的数学语言,概括地、近似地表达出来的一种结构,所谓“数学化”,指的就是构造数学模型.通过研究事物的数学模型来认识事物的方法,称为数学模型方法.简称为MM方法。
数学模型是数学抽象的概括的产物,其原型可以是具体物件及其性质、关系,也可以是数学物件及其性质、关系。数学模型有广义和狭义两种解释.广义地说,数学概念、如数、集合、向量、方程都可称为数学模型,狭义地说,只有反映特定问题和特定的具体事物系统的数学关系结构方数学模型大致可分为二类:(1)描述客体必然现象的确定性模型,其数学工具一般是代数方程、微分方程、积分方程和差分方程等,(2)描述客体或然现象的随机性模型,其数学模型方法是科学研究相创新的重要方法之一。在体育实践中常常提到优秀运动员的数学模型。如经调查统计.现代的世界级短跑运动健将模型为身高1.80米左右、体重70公斤左右,100米成绩10秒左右或更好等。
用字母、数字和其他数学符号构成的等式或不等式,或用图表、影象、框图、数理逻辑等来描述系统的特征及其内部联络或与外界联络的模型。它是真实系统的一种抽象。数学模型是研究和掌握系统运动规律的有力工具,它是分析、设计、预报或预测、控制实际系统的基础。数学模型的种类很多,而且有多种不同的分类方法。
静态和动态模型 静态模型是指要描述的系统各量之间的关系是不随时间的变化而变化的,一般都用代数方程来表达。动态模型是指描述系统各量之间随时间变化而变化的规律的数学表示式,一般用微分方程或差分方程来表示。经典控制理论中常用的系统的传递函式也是动态模型,因为它是从描述系统的微分方程变换而来的(见拉普拉斯变换)。
分布引数和集中引数模型 分布引数模型是用各类偏微分方程描述系统的动态特性,而集中引数模型是用线性或非线性常微分方程来描述系统的动态特性。在许多情况下,分布引数模型借助于空间离散化的方法,可简化为复杂程度较低的集中引数模型。
连续时间和离散时间模型 模型中的时间变数是在一定区间内变化的模型称为连续时间模型,上述各类用微分方程描述的模型都是连续时间模型。在处理集中引数模型时,也可以将时间变数离散化,所获得的模型称为离散时间模型。离散时间模型是用差分方程描述的。
随机性和确定性模型 随机性模型中变数之间关系是以统计值或概率分布的形式给出的,而在确定性模型中变数间的关系是确定的。
引数与非引数模型 用代数方程、微分方程、微分方程组以及传递函式等描述的模型都是引数模型。建立引数模型就在于确定已知模型结构中的各个引数。通过理论分析总是得出引数模型。非引数模型是直接或间接地从实际系统的实验分析中得到的响应,例如通过实验记录到的系统脉冲响应或阶跃响应就是非引数模型。运用各种系统辨识的方法,可由非引数模型得到引数模型。如果实验前可以决定系统的结构,则通过实验辨识可以直接得到引数模型。
线性和非线性模型 线性模型中各量之间的关系是线性的,可以应用叠加原理,即几个不同的输入量同时作用于系统的响应,等于几个输入量单独作用的响应之和。线性模型简单,应用广泛。非线性模型中各量之间的关系不是线性的,不满足叠加原理。在允许的情况下,非线性模型往往可以线性化为线性模型,方法是把非线性模型在工作点邻域内展成泰勒级数,保留一阶项,略去高阶项,就可得到近似的线性模型。
编辑本段数学模型的定义现在数学模型还没有一个统一的准确的定义,因为站在不同的角度可以有不同的定义。不过我们可以给出如下定义。"数学模型是关于部分现实世界和为一种特殊目的而作的一个抽象的、简化的结构。"具体来说,数学模型就是为了某种目的,用字母、数字及其它数学符号建立起来的等式或不等式以及图表、图象、框图等描述客观事物的特征及其内在联络的数学结构表示式。
什么样的模型树好看?
松树!在室内盆栽的。
满意请采纳
什么样的模型飞机好
您好,很高兴为您解答
我们是深圳市飞盈佳乐航模电调,欢迎体验。模型飞机好与不好在于是否适合自己,一般新手入手飘飘机、好小子等耐摔的机型,成本也不高,而后可以慢慢的向航拍方向发展哦!希望有帮到您
真融宝背后的模型系统是什么样的?
真 融 宝背 后 的模型系统 , 能 够 通 过 对 使用者 消 费 模式 化和 日 常 的 资金 流 进 行分 析, 从 用 户 的 资 产情况 、 收 入情况 、 风险 承 受 能力等 多 维 度特征建立决策 的依据, 并 据 此 配 置 适合 的 投 资 组合 。 据 介绍 , 目前,真 融宝 已 经 可 以通 过7 个 维 度 、 3 0个行 业 、以及 千万 个细 分 标签 来 进 行 使用者 画像 。在此 基 础 上 , 能够为单 个的 客 户提供 基 于 投 资标的的 定 制化 服 务 。
枪神纪希娃 阿加塔的模型是什么样的?
原型是圣诞奶-丘妮
量子力学中,有关2分之1自旋的模型是什么样的?
1/2自旋就是自旋有“向上”和“向下”两个状态 ,然后粒子旋转720度对称。。。。
人才是什么样的概念?
人才概念内涵探析
一、现有的人才定义
什么是人才?以下是具有代表性的定义:
1.新编《辞海》对“人才”的解释是:有才识学问的人,德才兼备的人。
2.王通讯、王康说:“人才是指在一定社会条件下,能以其创造性劳动,对社会发展、人类进步做出较大贡献的人。”
3.叶忠海则说:“人才,是指那些在各种社会实践活动中,具有一定的专门知识、较高的技术和能力,能够以自己创造性劳动,对认识、改造自然和社会,对人类进步做出了某种较大贡献的人。”
4.人才,就是指为社会发展和人类进步进行了创造性劳动,在某一领域、某一行业或某一工作上做出较大贡献的人。
5.俞果在其《人才学基础》中指出,人才是“以主观的智慧创造性地运用于实际并卓有成效者”。
6.王鹏在《用人之道》中说:“人才,有脑力劳动者,也有体力劳动者;在有学历、文凭的人员中有,在无学历、无文凭的人员中也有。只要知识丰富,本领高强,对社会进步有贡献者,皆可成为人才。”
7.刘圣恩在《人才学简明教程》中论述道:“人才就是在一定的社会历史条件下在认识世界和改造世界的过程中进行创造性劳动的人。……历史性是人才构成的前提,任何一个人都是一定历史条件下、一定社会发展阶段上的人才,脱离社会、离开历史就无所谓人才。实践性是人才的基础,是重要的必要条件,人才是实践中的人才,离开实践的人才是不存在的。创造性是人才的核心,也是人才的最根本的特征,人才与非人才的界限就在于能不能进行创造性劳动。”
8.首都经贸大学黄津孚教授从学术角度阐述人才的概念:“人才是指在对社会有价值的知识、技能和意志方面有超常水平,在一定社会条件下能做出较大贡献的人。人才既包括知识超常的知识分子,又包括技能超常的能工巧匠、艺人和‘领袖’,还包括意志超常的‘英雄’。再简单一点,就是社会需要的高素质的人。”
9.人才是分层次的,有突出才能。对社会贡献较大的就是人才,许多没有大专学历但有丰富的实践经验、有相当水平的管理于部、技术工人也是人才。(1986年9月22 日《人民日报》,《技术工人也是人才》)
上述定义虽不尽相同,但却从不同角度揭示了人才的属性,归纳起来主要强调了以下几方面的内容:
1.时代性和社会性。即认为人才是一定社会历史条件下的人才,离开了社会和历史就无所谓人才。
2.内在素质的优越性。认为人才拥有优于一般人的素质,没有较高的素质,难以成才。
3.社会实践性。强调实践出人才,人才的劳动成果也必须经过实践的检验。
4.普遍性和多样性。即认为不仅“行行出状元”,而且不同劳动性质的工作岗位上也有人才。
5.劳动成果的创造性。强调人才的劳动不同于一般人模仿性和重复性的劳动人才的劳动成果是创造性的。
6.贡献的超常性。由于人才的劳动成果往往具有创造性,因而人才的贡献远大于一般人。
7.能力的差异性。即认为不同行业的人才各有所长,同一行业的人才也各有千秋。
8.作用的进步性。认为人才能以其创造活动改造自然、改造社会,因而能够推动人类社会的发展进步。
二、人才的本质属性
逻辑学认为,概念是人脑反映事物本质属性的思维形式。所谓下定义,也就是把概念所反映的客观事物本质属性揭示出来,以区别于同其相邻的概念,避免概念含糊,思想混乱。逻辑学上传统的常用定义方法是通过邻近的“属”加“种差”给概念下定义。用公式表示就是:被定义的概念二种差十邻近的属概念。通过下定义的方法明确概念,最重要的是确定种差。
“人才”,作为一个概念,它的“属概念”是“人”,其邻近的“种概念”是“一般人”或“普通人”。前面,我们分析了学者们关于“人才”概念的八条属性。那么,哪些属性是“人才”的本质属性,哪些是非本质属性呢?由此,我们可以抓住“人才’概念的本质。
1.时代性和社会性。人才具有历史时代性和社会性,不同时代和社会的人才具有不同的内涵。由于受到历史和社会条件的约束,人才作用的发挥和作用范围也会受到不同程度的限制。过去的人才无法完成现在的事情,当代的人才,也无法全部做到过去人才做到的事情。这一点毋庸置疑。那么,一般人有没有社会历史时代性呢?回答是肯定的。马克思主义认为,“人民群众是一个历史的概念。在不同的国家和各个国家的不同历史时期具有不同的内涵。”人才,作为人民群众的重要组成部分当然也具有这一属性。其次人才和一般人共同组成人类社会,人类社会具有社会历史性,一般人当然也具有社会历史性。人才具有社会历史性,一般人也当然具备。再者,我们现在的一般人同于以前吗?古代的老百姓能有现在的创举吗?所以,时代性和社会性并非人才的本质属性。
2.内在素质的优越性。一般来讲,人才都在一个或几个方面具备一般人所不具备的优越素质。这里的素质是广义的,超出我们一般所指的德。智、体、美、劳等范畴。它包含许多方面,如高学历、品德高尚、废寝忘食、智力超群、勇猛无比、能言善辩、谋略过人等等。这些都是一般人所不具有的,因此,内在素质的优越性是人才的本质属性之一。
3.社会实践性。马克思主义的经典理论认为,人的本质属性是能思维、会劳动,因而区别于其他动物。既然如此,那么,作为“人”的“种概念”的“人才”和“一般人”同样也具备该属性。人才需要参加社会实践,增加感性认识,接受实践的检验,一般群众也必须参加社会实践活动,从劳动中获取生存和发展资料。所以,社会实践性也不是人才的本质属性。
4.普遍性和多样性。的确,人才具有普遍性和多样性。行行出状元,人人有专长。然而,上帝同样赋予了一般人这一属性。有人才的地方就有一般人,没有专长就沦落为一般人。
5.劳动成果的创造性。这里的创造性也是广义的概念,既包括物质的,也包括精神的。总之,是各行各业超越前人、同时代人或某一地域的大多数人的突破、创新。人类的劳动,按其性质可分为模仿性劳动、重复性劳动和创造性劳动三种类型。前两种劳动是以继承性劳动为重要特征,其结果只是将前人创造出来的劳动形式和经验进行重复,因而在劳动成果上无法有大的收获。一般人的劳动就属于前两种。人才则不然,由于人才具有优越的内在素质,决定了他们能够和乐于以前人的经验和成果作为基础,有所创新,有所突破。他们的劳动以创造性劳动为主。因此,劳动成果的创造性是人才的一个重要的本质属性。
6.贡献的超常性。人才具备了创造性就决定了他能够取得比前人更大的成就,超过一般人所取得的成就,因而人才的贡献要远大于一般人。也正因为如此,古今中外的统治者十分看重人才,千方百计地拉拢和利用人才,维护本阶级的统治。显然,这也是人才的本质属性之一。
7.能力的差异性。当然,人才的能力是有差异的,不同行业的人才各有专长,同一行业的人才水平也参差不齐。特别是,科技含量日益增加的今天,有隔行如隔山之说。但是,谁又能否认一般人的巨大差异呢?工人不能耕地,农民不会做工。北方的农民不会种稻,南方的农民种不了谷子。大部分中国人不会说外国话,很多外国人也不能讲汉语。这是很显然的。所以,这不是人才的本质属性。
8.作用的进步性。人才的能量是巨大的,能够在改造自然、推动社会进步和发展中发挥巨大的作用。但是否可以认为一般人就不能起到促进作用了呢?不然,辩证唯物主义认为人民群众是推动历史前进的力量,人民群众创造了历史。理所当然,不能抹杀一般民众的推动作用,尽管起推动作用的主要力量是人才。因此,作用的进步性也不是人才的本质属性。
经过分析论证,我们很容易发现在上述诸多属性中,只有内在素质的优越性、劳动成果的创造性和贡献的超常性是“人才”异于“一般人”的“种差”,即本质属性,其他则是非本质属性。根据逻辑学的定义原则,我们排除掉非本质的属性,才可以正确地界定反映本质属性的“人才”概念。
现在,我们看看是不是已经穷尽人才的本质属性了呢?如果从数量的分布上考虑,我们不难发现人才具有稀缺性。古人云:人才难求。不仅人才成长需要一个艰苦的过程.需要较多的付出,甚至即使付出了很多也未必成才。这就决定了与一般人相比,人才天生是“少数派”。青出于蓝而胜于蓝。人才在广大人民群众中孕育而生,却只是满天星斗中明亮的几颗。所以,稀缺性当是人才的本质属性。
三、人才概念的内涵
现在,我们就可以套用下定义的公式,给出“人才”的科学概念。
人才,是少数具有优越的内在素质,以其创造性的劳动成果做出超常贡献的人。抓住这四个属性,我们可以较为科学地判断哪些是人才,哪些不是人才。
此概念有如下特点:
1.抓住了人才的本质。不以学历。身份、年龄、地位、行业等论人才。
2.在量的把握上,创造性劳动成果要多于非创造性劳动成果。一般人都会或多或少有创造性劳动,人才的特殊之处就在于善于创造。
3.强调人才的发展性。人才是发展变化的,一般人可以成才,人才也可以变成一般人。被竞争对手利用的“人才’为我所用也成为人才。
这个概念,至少可以解决目前的许多定义无法解决的许多问题。首先,有重大影响的反面人物,是不是人才?“反面人物”当然不是人才。他们虽然大多具备人才的一些本质属性,却不具备超常贡献这一本质属性。“贡献”一词,目前一般的解释为对国家或公众所做的有益的事,是褒义词。因此,反面人物的作用绝不能用“贡献”一词来衡量。当然,由于人才是可以变化的不否认一般人可以成为人才,反面人物成为正面人物,进而成为人才,人才成为一般人,甚至成为反面人物。
其次,高校的大学生是不是人才?不能一概而论。高校的学生是一个特殊的群体,具有良好的素质,也具备创造性的条件地有部分创造性劳动,但是由于绝大多数学生没有创造性劳动成果或主要不是创造性劳动,没有做出超常的贡献,没有发挥出自己的潜能。因此,对于大多数大学生来说,不是严格意义上的“人才”,只能称为“潜在人才”。当然,不能排除少数在校期间的大学生发挥出了较大的潜能,以其创造能力做出了超常贡献。他们当然是人才。
总之,科学地把握“人才”的概念,应科学地廓清人才的本质属性和非本质属性不能不加分别地不能混在一起,否则,得出的概念是不科学、不严格的。这将有助于我们深人地认识人才的科学内涵,有助于我们客观地发现人才,开发人才资源,提高人才资源的有效利用程度。当然,这个概念属于定性概念,无法穷尽优越的内在素质,也无法明确确定何谓超常贡献,这需要我们在实践中认真把握
java 的表格模型是什么?
DefaultTableModel是常用的java表格模型。
参考代码:
package com.dusd;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Arrays;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;
/**
* 表格模型事件示例
* p
* liA component generally gains the focus when the user clicks it,
* or when the user tabs between components, or otherwise interacts
* with a component. A component can also be given the focus programmatically,
* such as when its containing frame or dialog-box is made visible.
* The snippet of the codes below shows how to give a particular component
* the focus every time the window gains the focus.
*
* @author HAN
*
*/
public class TableModel extends JFrame {
/**
*
*/
private static final long serialVersionUID = -8581492063632813033L;
public TableModel() {
// TODO Auto-generated constructor stub
final Container container = getContentPane();
VectorString tableColumnNames = new VectorString();
tableColumnNames.add("A");
tableColumnNames.add("B");
VectorVectorString tableValues = new VectorVectorString();
for (int i = 1; i 5; i++) {
VectorString vector = new VectorString();
vector.add("A" + i);
vector.add("B" + i);
tableValues.add(vector);
}
final DefaultTableModel defaultTableModel = new DefaultTableModel(
tableValues, tableColumnNames);
final JTable table = new JTable(defaultTableModel);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(table);
container.add(scrollPane, BorderLayout.CENTER);
JPanel panel = new JPanel();
container.add(panel, BorderLayout.SOUTH);
JLabel labelA = new JLabel("A: ");
final JTextField textFieldA = new JTextField(15);
JLabel labelB = new JLabel("B: ");
final JTextField textFieldB = new JTextField(15);
JButton buttonAdd = new JButton("添加");
JButton buttonDel = new JButton("删除");
JButton buttonDeselected = new JButton("取消选择");
panel.add(labelA);
panel.add(textFieldA);
panel.add(labelB);
panel.add(textFieldB);
panel.add(buttonAdd);
panel.add(buttonDel);
panel.add(buttonDeselected);
buttonAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int[] selectedRows = table.getSelectedRows(); // table
// 默认情况容许多行选择
VectorString rowData = new VectorString();
rowData.add(textFieldA.getText());
rowData.add(textFieldB.getText());
if (selectedRows.length == 0) {
defaultTableModel.addRow(rowData);
textFieldA.setText(null);
textFieldB.setText(null);
} else if (selectedRows.length == 1) {
// System.out.println(selectedRows[0]);
defaultTableModel.insertRow(selectedRows[0] + 1, rowData);
textFieldA.setText(null);
textFieldB.setText(null);
} else {
JOptionPane.showMessageDialog(container,
"Your operation is forbidden", "Warning",
JOptionPane.WARNING_MESSAGE);
}
}
});
buttonDel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int[] selectedRows = table.getSelectedRows(); // table
// 默认情况容许多行选择
for (int i = 0; i selectedRows.length; i++) {
// System.out.println(selectedRows[i]);
defaultTableModel.removeRow(selectedRows[i] - i);
}
}
});
buttonDeselected.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
table.clearSelection();
}
});
scrollPane.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// System.out.println("here");
if (e.getClickCount() == 1
e.getButton() == MouseEvent.BUTTON1) {
table.clearSelection();
}
}
});
// make the text field focused every time the window is activated
addWindowFocusListener(new WindowAdapter() {
@Override
public void windowGainedFocus(WindowEvent e) {
// TODO Auto-generated method stub
textFieldA.requestFocus();
}
});
// **************************************************************
// This is a standard snippet to realize the desired column selection as in
// Excel
// **************************************************************
// row selection mode
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// column selection mode
TableColumnModel tableColumnModel = table.getColumnModel();
tableColumnModel.getSelectionModel().setSelectionMode(
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// allow the column selection (the row selection is allowed by default)
table.setColumnSelectionAllowed(true);
final JTableHeader tableHeader = table.getTableHeader();
tableHeader.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
// Extended modifiers represent the state of all modal keys,
// such as ALT, CTRL, META.
if (e.getClickCount() == 1
e.getButton() == MouseEvent.BUTTON1) {
// Point point = new Point(e.getX(), e.getY());
Point point = new Point(e.getPoint());
int columnNum = tableHeader.columnAtPoint(point);
// System.out.println(columnNum);
int[] selectedColumns = table.getSelectedColumns();
if (selectedColumns.length != 0) {
// System.out.println("here1");
// System.out.println(InputEvent.getModifiersExText(e.getModifiersEx()));
if (e.getModifiersEx() == (InputEvent.CTRL_DOWN_MASK)) {
// System.out.println("ctrl");
if (Arrays.binarySearch(selectedColumns, columnNum) = 0) {
table.removeColumnSelectionInterval(columnNum,
columnNum);
} else {
table.addColumnSelectionInterval(columnNum,
columnNum);
}
} else if (e.getModifiersEx() == (InputEvent.SHIFT_DOWN_MASK)) {
// System.out.println("shift");
table.setColumnSelectionInterval(
selectedColumns[0], columnNum);
} else {
table.setColumnSelectionInterval(columnNum,
columnNum);
}
} else {
// System.out.println("here2");
table.setColumnSelectionInterval(columnNum, columnNum);
}
table.setRowSelectionInterval(0, table.getRowCount() - 1);
}
}
});
defaultTableModel.addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
// TODO Auto-generated method stub
int type = e.getType();
int firstRow = e.getFirstRow();
// int lastRow = e.getLastRow(); // the last row seems to be always equal to the first row
int column = e.getColumn();
switch (type) {
case TableModelEvent.DELETE:
System.out.print("此次事件由 删除 行触发:");
System.out.println("此次删除的是第 " + firstRow + " 行");
break;
case TableModelEvent.INSERT:
System.out.print("此次事件由 插入 行触发:");
System.out.println("此次插入的是第 " + firstRow + " 行");
break;
case TableModelEvent.UPDATE:
System.out.print("此次事件由 更新 行触发:");
System.out.println("此次更新的是第 " + firstRow + " 行第 " + column + " 列");
break;
default:
System.out.println("此次事件由 其他原因 触发");
}
}
});
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TableModel frame = new TableModel();
frame.setTitle("表格模型事件示例");
frame.pack(); //Realize the components.
// frame.setBounds(100, 100, 600, 300);
// textFieldA.requestFocus();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); //Display the window.
}
}
java实用模型的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java数据模型设计、java实用模型的信息别忘了在本站进行查找喔。