1. 程式人生 > >Java中instanceof運算子用法詳解

Java中instanceof運算子用法詳解

一、 instanceof運算子可以確定物件是否屬於一個特定的類。

該運算子是二目運算子,左邊的操作元是一個物件,右邊是一個類,當左邊的物件是右邊的類或子類建立的物件時,該運算子運算的結果是true,否則是false。
例:
class instanceOfDemo{
public static void main(String []args){
instanceOfDemo t=new instanceOfDemo();
    if(t instanceof instanceOfDemo){
    System.out.println("t是instanceOfDemo的例項");
    }
    }
}

二、物件 instanceof 運算子

前面我們只是簡單提到instanceof運算子,因為掌握該運算子號需要類和子類的知識,instanceof運算子是Java獨有的雙目運算子,其左面的操作元是物件,右面的操作元是類,當左面的操作元是右面的類或其子類所建立的物件時,instanceof運算的結果是true,否則是false。

三、下面我們來看一下instanceof具體在元件及事件處理的MouseEvent事件中的使用(仔細觀察其中的instanceof語句)

(1)Example9_10.java
public class Example9_10{
public static void main(String[] args){
WindowMouse win=new WindowMouse();
win.setTitle(“處理滑鼠事件”);
win.setBounds(10,10,460,360);
}
}
(2)WindowMouse.java
import java.awt.*;
import javax.swing.*;
public class WindowMouse extends JFrame{
JTextField text;//一個JTextField
JButton button;//一個JButton
JTextArea textArea;//一個JTextArea
MousePolice police;
WindowMouse(){
init();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init(){
setLayout(new FlowLayout());
text=new JTextField(8);
textArea=new JTextArea(5,28);
police=new MousePolice();
police.setJTextArea(textArea);
text.addMmouseListener(police);
button=new JButton(“按鈕”);
button.addMouseListener(police);
addMouseListener(police);
add(button);
add(text);
add(new JScorollPane(textArea));
}
}
(3)MousePolice.java
import java.awt.event.*;
inport javax.swing.*;
public class MousePolice implements MouseListener{//監視器
JTextAream area;
public void setJTextArea(JTextArea area){
this.area=area;
}
public void mousePressed(MouseEvent e){
area.append(“\n滑鼠按下,位置:”+”(“+e.getX()+”,”+e.getY()+”)”);
public void mouseReleased(MouseEvent e){
area.append(“\n滑鼠釋放,位置:”+”(“+e.getX()+”,”+e.getY()+”)”);
}
public void mouseEntered(MouseEvent e){
if(e.getSource() instanceof JButton)//獲取發生滑鼠事件的事件源(按鈕)
area.app(“\n滑鼠進入按鈕,位置:”+”(“+e.getX()+”,”+e.getY()+”)”);
if(e.getSource() instanceof JTextField)//獲取發生滑鼠事件的事件源(文字框)
area.app(“\n滑鼠進入文字框,位置:”+”(“+e.getX()+”,”+e.getY()+”)”);
if(e.getSource() instanceof JFrame)//獲取發生滑鼠事件的事件源(視窗)
area.app(“\n滑鼠進入視窗,位置:”+”(“+e.getX()+”,”+e.getY()+”)”);
}

public void mouseExited(MouseEvent e){
area.append(“\n滑鼠退出,位置:”+”(“+e.getX()+”,”+e.getY()+”)”);
}
publiv void mouseClicked(MouseEvent e){
if(e.getClickCount()>=2)
area.setText(“滑鼠連擊,位置:”+”(“+e.getX()+”,”+e.getY()+”)”);
}
}
總結:注意其中的instanceof語句為
if(e.getSource() instanceof JButton)因為這個程式中只有一個JButton按鈕所以用instanceof
而當程式中有多個JButton按鈕時,
例如:JButton button1,button2;
則可以判斷獲取發生滑鼠事件的事件源具體為button1時
即:if(e.getSource() ==button1)