我已经开始使用JAVA,并使用RxTx进行串行通信。
指:http://rxtx.qbang.org/wiki/index.php/Event_based_two_way_Communicationhttp://henrypoon.wordpress.com/2011/01/01/serial-communication-in-java-with-example-program/
在第二个链接中,我无法解读“this”的用法:请任何人解释一下:
沟通者。JAVA
public class Communicator implements SerialPortEventListener
{
GUI window = null;
..
..
public Communicator(GUI window)
{
this.window = window;
}
...
..
}
在GUI. java
public class GUI extends javax.swing.JFrame {
Communicator communicator = null;
Communicator communicator = null;
//KeybindingController object
KeybindingController keybindingController = null;
/** Creates new form GUI */
public GUI() {
initComponents();
createObjects();
communicator.searchForPorts();
keybindingController.toggleControls();
keybindingController.bindKeys();
}
private void createObjects()
{
**communicator = new Communicator(this);**
keybindingController = new KeybindingController(this);
}
...
..}
我很困惑这是如何用来创建一个对象的通信类,如上面的代码(出现通信=新的通信器(这);)
另一个困惑是:沟通者。JAVA
public class Communicator implements SerialPortEventListener
{
...
...
public void connect()
{
String selectedPort = (String)window.cboxPorts.getSelectedItem();
selectedPortIdentifier = (CommPortIdentifier)portMap.get(selectedPort);
CommPort commPort = null;
try
{
//the method below returns an object of type CommPort
commPort = selectedPortIdentifier.open("TigerControlPanel", TIMEOUT);
//the CommPort object can be casted to a SerialPort object
serialPort = (SerialPort)commPort;
....
...}
public void initListener()
{
try
{
**serialPort.addEventListener(this);**
serialPort.notifyOnDataAvailable(true);
}
catch (TooManyListenersException e)
{
logText = "Too many listeners. (" + e.toString() + ")";
window.txtLog.setForeground(Color.red);
window.txtLog.append(logText + "\n");
}
}
....
}
我再次混淆了这里使用的this(seralPort.addEventListener(this);)
我把代码和http://rxtx.qbang.org/wiki/index.php/Event_based_two_way_Communication
这表明
...
InputStream in = serialPort.getInputStream();
**serialPort.addEventListener(new SerialReader(in));**
...
public static class SerialReader implements SerialPortEventListener
{
private InputStream in;
private byte[] buffer = new byte[1024];
public SerialReader ( InputStream in )
{
this.in = in;
}
public void serialEvent(**SerialPortEvent arg0**) {
int data;
try
{
int len = 0;
while ( ( data = in.read()) > -1 )
{
if ( data == '\n' ) {
break;
}
buffer[len++] = (byte) data;
}
System.out.print(new String(buffer,0,len));
}
catch ( IOException e )
{
e.printStackTrace();
System.exit(-1);
}
}
}
addEventListener的描述http://docs.oracle.com/cd/E17802_01/products/products/javacomm/reference/api/
ADEventListener
公共抽象void addEventListener(SerialPortEventListener lsnr)抛出java。util。ToomAnyListenerException注册SerialPortEventListener对象以侦听SerialEvents。可以使用notifyOnXXX调用来表达对特定事件的兴趣。SerialPorteEventListener的serialEvent方法将使用描述事件的serialEvent对象调用。
我想知道它的用法,因为它是如何传递'SerialPortEventListener lsnr'作为上述代码中addEventListener的参数。
谢啦
这里有很多东西需要消化来回答你最初的问题,我不确定它是否都有关系,但是让我们具体解决这个问题。下面的代码演示了使用this
来消除当前范围中的歧义:
public Communicator(GUI window)
{
this.window = window;
}
此
表示当前类的当前实例。所以在你第一次困惑的时候,这个
是通信器的一个例子,所以
这个。窗口
已存在。在第二种情况下,此
是GUI
的一个实例,因此可以作为参数传递给通信器
,因为这是它所接受的。
在
通信器
的构造函数中,因为两个事物具有相同的名称,并且将在相同的范围内使用,所以我们需要消除我们正在做的事情的歧义。我们这样做是通过说“将外部窗口
事物分配给我们本地的、已知的、拥有的窗口
事物。”
想想一群人,有许多约翰,你只是喊着那个名字。谁会期待回应?如果你指了指,或者有其他指标,比如当他们都看的时候,正确的约翰认出了你<代码>这个
就是那个指标,给出了使某个东西与另一个不同所需的特殊性。
否则,想象一下试图将窗口
分配给窗口
时的困惑。我们的意思是将本地版本分配给本地版本,将参数分配给参数,将参数分配给本地版本,还是将本地版本分配给参数?
这是一个伪变量,表示“调用此方法的对象”(或在构造函数中:“当前正在构造的对象”)。我不知道你发布的代码有什么问题,因为它包含了很多显然与问题无关的代码,我不会开始猜测你的问题到底在哪里。
this
关键字是对正在执行代码的当前实例的引用。因此,由于this
是一个引用,您可以将其用作任何其他引用。这没问题。
现在让我们看看你的用法:
new Communicator(this);
由于此语句在GUI
类的方法中使用,因此,this
指的是当前正在执行代码的GUI实例。现在,通过将其传递给构造函数,您只需将当前实例的引用传递给它。它非常有效,因为
Communicator
constructor引用类型为GUI
:-
public Communicator(GUI window)
{
this.window = window;
}
现在让我们继续下一个陈述:
serialPort.addEventListener(this);
在这里,您正在用
由EventListener
注册序列端口
,该this
引用。因为,这是在类-通信器
内部使用的,它实现了SerialPortEventListener
,所以基本上您正在注册一个通信器
实例,它只不过是一个SerialPortEventListener
。因此,您正在注册该事件。
就您的其他代码而言:
serialPort.addEventListener(new SerialReader(in));
在这里,您刚刚使用了一个新的实例
而不是这个
,因为您不在SerialReader
类中。因此,您没有对任何SerialReader
实例的这个
引用,因此您需要手动创建该类的对象。
所以,没有区别。因为,在任何情况下,您都只注册了实现SerialPortEventListener
的类。
涵义 this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。 前一章已经提到,this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象。 简单说,this就是属性或方法“当前”所在的对象。 this.property 上面代码中,this就代表property属性当前所在
在 C# 中,可以使用 this 关键字来表示当前对象,日常开发中我们可以使用 this 关键字来访问类中的成员属性以及函数。不仅如此 this 关键字还有一些其它的用法,下面就通过一些示例来分别演示一下。 1) 使用 this 表示当前类的对象 运行结果如下: 小牛知识库 https://www.xnip.cn/ 2) 使用 this 关键字串联构造函数 运行结果如下: 无参构造函数 小牛知识库
主要内容:this.属性名,this.方法名,this( )访问构造方法this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。 下面我们根据示例分别讲解 this 关键字的作用。 this.属性名 大部分时候,普通方法访问其他方法、成员变量时无须使用 this 前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀
问题内容: “ this”关键字如何工作? 问题答案: [§11.1.1]的关键字 所述关键字的计算结果为当前执行上下文的ThisBinding的值 这个绑定是JavaScript解释器在评估JavaScript代码时所维护的,例如特殊的CPU寄存器,其中包含对对象的引用。每当在以下三种情况之一中建立执行上下文时,解释器都会更新ThisBinding: 1.初始全局执行上下文 在顶级代码中评估的J
本文向大家介绍this关键字详解,包括了this关键字详解的使用技巧和注意事项,需要的朋友参考一下 Java提供了一个this关键字,this关键字总是指向调用该方法的对象。根据this出现的位置的不同,this作为对象的默认引用有两种情形。 1)构造器中引用该构造器正在初始化的对象。 2)在方法中引用调用该方法的对象。 this关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或者实例变
问题内容: 我刚刚遇到了一个有趣的JavaScript情况。我有一个类,该类的方法使用对象文字表示法定义了多个对象。在这些对象内部,正在使用指针。从程序的行为,我推断出指针是指向在其上调用方法的类,而不是由文字创建的对象。 尽管这是我期望的工作方式,但这似乎是任意的。这是定义的行为吗?跨浏览器安全吗?是否有任何推理依据说明它超出了“规格说明”的范围(例如,这是某些更广泛的设计决策/理念的结果)吗?