关于在事件代码中如何访问类中的变量

简介:

事件代码访问类中变量的3种方法.

在写事件代码的时候,常常需要引用主类中的变量.要访问这些变量是需要一些技巧的.

方法一:加上final修饰符.

复制代码
 1 public class HelloWorld5 {
 2     public static void main(String[] args) {
 3         // 在变量前加上final,否则在事件代码里不能引用.
 4         final String str = "kxh";
 5 
 6         Display display = Display.getDefault();
 7         Shell shell = new Shell();
 8         shell.setSize(450, 300);
 9         shell.setText("SWT Application");
10 
11         Text text = new Text(shell, SWT.BORDER);
12         text.setBounds(71, 90, 76, 21);
13         text.addMouseListener(new MouseAdapter() {
14             public void mouseDoubleClick(MouseEvent e) {// 鼠标双击事件的方法
15                 // 打开一个信息框
16                 System.out.println(str);// str变量前要加上final
17                 //如果前面str前不加上final,eclipse就会提示 
18                 //Cannot refer to the non-final local variable str defined in an enclosing scope
19             }
20         });
21         shell.open();
22         shell.layout();
23         while (!shell.isDisposed()) {
24             if (!display.readAndDispatch()) {
25                 display.sleep();
26             }
27         }
28     }
29 }
复制代码

上面程序的运行结果就是:每次双击文本框的时候都会在控制台打印"kxh"

方法二:将变量str变成类的实例变量.但这种扩大了str变量的有效范围.

复制代码
 1 public class HelloWorld6 {
 2     // 由于引用它的代码在静态方法内才加上static,否则不必要加上static
 3     static String str = "kxh";
 4     public static void main(String[] args) {
 5 
 6         Display display = Display.getDefault();
 7         Shell shell = new Shell();
 8         shell.setSize(450, 300);
 9         shell.setText("SWT Application");
10 
11         Text text = new Text(shell, SWT.BORDER);
12         text.setBounds(71, 90, 76, 21);
13         text.addMouseListener(new MouseAdapter() {
14             @Override
15             public void mouseDoubleClick(MouseEvent e) {// 鼠标双击事件的方法
16                 // 打开一个信息框
17                 System.out.println(str);// str变量前要加上final
18             }
19         });
20         shell.open();
21         shell.layout();
22         while (!shell.isDisposed()) {
23             if (!display.readAndDispatch()) {
24                 display.sleep();
25             }
26         }
27     }
28 }
复制代码

运行结果和上面的一样.

方法三:将事件代码写成命名内部类,然后通过构造函数的参数来传入.这种方法比较繁琐.

复制代码
 1 public class HelloWorld7 {
 2     public static void main(String[] args) {
 3         String str = "kxh";
 4         // 通过构造函数参数将str值传入.
 5         
 6         Display display = Display.getDefault();
 7         Shell shell = new Shell();
 8         shell.setSize(450, 300);
 9         shell.setText("SWT Application");
10 
11         Text text = new Text(shell, SWT.BORDER);
12         text.setBounds(71, 90, 76, 21);
13         text.addMouseListener(new MyMouseDoubleClick(str));
14 
15         shell.open();
16         shell.layout();
17         while (!shell.isDisposed()) {
18             if (!display.readAndDispatch()) {
19                 display.sleep();
20             }
21         }
22     }
23 
24     // 匿名内部类MyMouseDoubleClick
25     public static final class MyMouseDoubleClick extends MouseAdapter {
26         private String string;// 建一个变量引用str的值.
27         public MyMouseDoubleClick(String str) {// 通过构造函数参数接受str值
28             this.string = str;
29         }
30         @Override
31         public void mouseDoubleClick(MouseEvent e) {// 鼠标双击事件的方法
32             System.out.println(string);
33         }
34     }
35 }
复制代码

 这个方法就在这里做个总结吧,我就不掌握了.......



本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4160301.html,如需转载请自行联系原作者

相关文章
|
1月前
|
设计模式
在静态方法中访问类的实例属性和方法时会发生什么?
总之,静态方法主要用于处理与类本身相关的操作和逻辑,不应该直接访问类的实例属性和方法。如果需要在静态方法中使用与实例相关的信息,应该通过合理的参数传递或其他设计模式来实现,以保持代码的清晰性和面向对象设计的原则。
55 8
|
1月前
|
搜索推荐
如何在构造函数中为类的实例添加方法?
在实际开发中,要根据具体的场景和需求来选择合适的方式来为类的实例添加方法,以确保代码的可读性、可维护性和性能。
|
7月前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
91 4
|
3月前
|
JavaScript 前端开发
js函数调用与定义
js函数调用与定义
|
编译器 C++
46 C++ - 非自动继承的函数
46 C++ - 非自动继承的函数
44 0
|
7月前
|
缓存 Java 编译器
Java 构造函数与修饰符详解:初始化对象与控制权限
Java 构造函数 是一种特殊的类方法,用于在创建对象时初始化对象的属性。它与类名相同,并且没有返回值类型。 构造函数的作用: 为对象的属性设置初始值 执行必要的初始化操作
102 0
|
C#
C#中方法函数的声明和调用
C#中方法函数的声明和调用
175 0
|
小程序 前端开发 数据库
小程序__01--后端返回类型是一个object具体类,前端小程序如何提取类中的私有变量
后端返回类型是一个object具体类,前端小程序如何提取类中的私有变量
|
小程序
为小程序自定义全局方法和全局变量
原生小程序项目开发中,有这个情景,需要将某个方法或者变量,定义到全局变量,来方便全局使用
428 0
|
编译器 C++
C++类中默认生成的函数
C++类中默认生成的函数
180 0