- 浏览: 381997 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
793059909:
scala> def count(x:Double,n: ...
快学Scala习题解答—第二章 控制结构和函数 -
793059909:
scala> def countdown(n:Int){ ...
快学Scala习题解答—第二章 控制结构和函数 -
daquan198163:
可是奇慢无比啊,切换个页签得等一分钟啊!!!!!!!!
误会ZK Studio了!Sorry,Sorry! -
rmn190:
受教了, 今天我第一天遇到这个问题, 以前没想到fmt标签还跟 ...
JSP中的国际化(转) -
suu:
都是栈里的拷贝 这句话让我从一头雾水到豁然开朗 谢谢了.
争论话题:Java传值还是传引用?
1.JavaFX是一种静态输入的语言
与javascript不同,JavaFX是静态输入的。
如果你声明了一个变量如下。
如果你继续下面的操作将会报错。
因为a初始为String,所以不能给它赋值数值类型。
2.JavaFX是声明式脚本编制语言
脚本编制引擎在执行之前读取完整的程序,然后允许解释器采取必要的步骤正确运行程序。更准确地讲,脚本编制引擎所需的工作就是在执行开始之前进行声明,然后引擎决定如何使用所有给定声明,以完成既定目标。
3.JavaFX中字符串的连接
与java不同,javaFX不支持+连接字符串。连接方法如下。
4.JavaFX数据类型
JavaFX编程语言只提供了四种原语类型: String、 Boolean、 Number和 Integer。可以对每种类型调用现有Java方法。
5.JavaFX基础操作符
? 任意值(例如,可为null)
+ 一个或多个
* 零个或多个
5.JavaFX变量声明格式
例如:
var nums:Number* = [5, 9, 13];
声明了一个名为nums的新变量,其值被定义为由零个或多个 Number类型的实例组成,并且其初始值为3个数字:5、9和13。
声明部分中的 typeName、基数操作符和初始化程序部分是可选的,因此以下内容与前面的示例是等价的:
6.JavaFX中的字符串
javaFX中的字符串可以用双引号,也可以用单引号。
是等价的。
区别是,双引号里的字符串可以包含换行。。。
7.javaFX中的数组
数组表示对象 序列。在JavaFX中,数组本身不是对象。此外,生成嵌套序列的表达式会被自动扁平化。
如果执行 System.out.println(days),将只能看到数组的第一个元素。可以使用数组索引获得数组中的其他元素。同样,如果您指定的是一个不存在的索引,则无法像在Java中那样获得 ArrayIndexOutOfBoundsException,而仅会得到一个0值。
数组的当前大小可以使用 sizeof操作符确定:
对于数组成员组成数列的数组,JavaFX使用一种由两个句号( ..)组成的简写符号表示。例如,以下代码将创建一个包含100个元素的数组:
在处理数组时,JavaFX技术还支持 insert和 delete语句。下面的示例演示了如何向数组 插入值。
除了使用 into外,还可以使用 before和 after关键字,如下所示:
方括号里面的某些表达式看上去有些古怪,不必多虑。这实际上是 Xquery-UpdateXquery-Update(类似于XPath) 谓词.这种情形下,方括号中的句号并不是指索引,而是指索引 值。JavaFX技术将检验数组中的每个元素,直到表达式为真,然后使用 insert。例如,最后一条语句将遍历数组的每个值,在找到数组值等于2的元素(即数组的第三个元素)后,在其后插入数值13。此时,代码停止。
deletedelete语句的工作原理大致相同。注意,如果省略了方括号内的表达式,整个数组将被清除。
最后,使用 select和 for each操作符可以对数组执行更加复杂的查询。这种操作也被称为列表推导。下面是一个使用 select的简单示例:
以上代码表达的意思是“循环遍历 [1..10]数组中的每个值,将它赋予本地变量n。对于每个 n,创建一个新元素 n squared并将其添加到 Integers a数组中。”
还可以使用以下代码添加一个过滤器:
这将定义修改为:“循环遍历 [1..10]数组中的每个值, 如果数组值除以 2余数为0(即偶数),将它赋予本地变量 n。然后对于每个产生的 n,创建一个新元素 n squared并将其添加到 Integers a数组中。”
最后,还可以向选择语句添加多个列表:
这实际上是一个嵌套循环,在形式上创建了一个 笛卡尔乘积。首先获得第一个有效的 n值,即2,然后乘以第一个有效的 m值100。然后再用2乘以下一个有效的 m值200。接着使用下一个有效的 n值(即4)重新迭代有效值 m的列表(100和200),生成的结果为400和800。此时,选择语句结束,您得到了最终的数组,放置在数组 a中。
使用 foreach操作符可以表示相同的内容:
数组讲挺多,直接copy了。。。。
8.JavaFX中的格式化
format as操作符支持若干格式化指令。
9.JavaFX中的书名号<<>>
JavaFX技术将法语引用符中包含的任何字符序列视为一个标识符,包括空格。这样允许您使用class、variable、f unction或属性名这些JavaFX关键字。下面提供了一个示例:
这个特性使您能够调用以JavaFX关键字命名的Java方法,如下所示:
import javax.swing.JTextArea;
10.JavaFX中类的声明
JavaFX中对类进行声明的语法为:在 class关键字之后紧跟类名,然后是可选的 extends关键字和以逗号分隔的基类名列表。注意,与Java不同,JavaFX技术可以扩展多个类。之后是一个起始的大括号({),一个属性列表,函数和操作,一个关闭的大括号( }),在大括号中间的每一项都使用分号( ;)结尾。下面给出了一个例子:
11.JavaFX中的属性、函数和操作
现在进一步查看三种类成员声明类型。 属性使用 attribute关键字声明,后跟属性名、一个冒号( :)、属性类型、可选的 基数说明,一个可选的反向子句.如果使用了基数,该属性通常被称为 多值属性。
下面展示了更正式的声明,属性使用了以下语法:
可选的 inverse语句位于末尾,说明了与另一个属性的双向关系。如果出现了反向语句,那么当属性被修改时,JavaFX技术将自动更新反向语句中说明的属性——根据更新类型和属性的基数分别使用 insert或 delete或 replace。
函数JavaFX表示编程语言中的纯函数部分。换而言之,函数体可能只包含一些变量声明和一个 return语句。这使它们非常适合于accessors – –getters– – 属性和简单的数学程序。下面是一些示例函数:
JavaFX中使用 operation关键字声明 操作。与函数不同,操作可能包含一些语句,例如条件语句、循环语句、 try和 catch语句等等。这一特点使操作非常类似于Java技术中的类方法。声明的主要内容包括操作名,后跟输入变量(使用圆括号括起)、一个冒号和return变量类型。下面是一个例子:< /p>
12.初始化声明后的属性
和函数和过程一样,属性值的初始化声明在类定义外进行。在新建对象的上下文中,初始化程序按照类声明中指定的属性顺序被逐一求值:
JavaFX使用由类名、用大括号包含的属性初始化程序列表构成的 声明式语法来完成对象的初始化。每个初始化程序由属性名、冒号、定义属性值的表达式构成,注意, new关键字被忽略。下面是一个等价的示例:
JavaFX技术经常使用到声明式语法。但是同样支持Java对象分配语法。在Java类中,可以像Java技术一样将属性传递给类的构造函数,或者可以使用声明式语法:
13.函数和操作定义
与Java方法不同的是,所有成员函数体和操作体都是在类声明 之外定义的。Java程序员最初会对这种语法感觉不习惯,但是执行起来 相当简单。在JavaFX技术中,函数或操作的定义为:函数和操作所属的类、一个句号、函数或操作名。返回值将列于函数或操作名后,前面加一个冒号。参数 也可包含在括号中,使用逗号分隔并遵循前面操作部分所示的 name: type语法。如下所示:
在类声明中,操作和函数声明部分需要包含参数和返回类型。然而,外部定义中可能会忽略这些内容。因此,可以使用下面这种简单的方式:
14.触发器
与Java技术不同,JavaFX类不具备构造函数,JavaFX属性一般没有“setter”方法。相反,JavaFX技术提供了类似SQL风格的触发器,允许您处理数据修改事件。这些触发器使用 trigger关键字。
(1)对象创建触发器
通过指定一个创建触发器,可以在新建的对象上下文中触发某个操作,如下所示:
上面这个例子中定义的触发器将在创建一个新的X类实例时执行。在这个例子中,将向 nums属性插入两个数值。注意,这里使用了 this关键字表示触发器上下文的当前对象。
(2)Insert 触发器
当元素被插入到多值属性中时,也可以触发一个操作:
(3)Delete触发器
同样,当从多值属性中删除某个元素时,可以触发一个操作:
(4)Replace触发器
最后,当替代某个属性的值时可以执行一个操作。在下面的例子中, oldValue和 newValue两个任意变量名,引用被替换变量的前一个值和当前值。您可以随意选择其他变量名。
15.语句
JavaFX技术支持一些与Java技术中的同类语句类似但不完全相同的语句。这一节将介绍它们之间的区别。
If语句
JavaFX的 if语句用法类似Java,但是大括号必须像下面这样:
While语句
JavaFX while语句中的大括号必须环绕语句体之外:
Try、 Catch和 Throw语句
JavaFX的 try和 catch语句类似Java技术,但是具有JavaFX变量声明语法。注意,在JavaFX技术中,可以抛出和捕捉任何对象,而不仅仅是 java.lang.Throwable的扩展类。
For语句
JavaFX的 for语句头与前面讨论的 foreach列表推导操作符使用相同的语法。但是,在下面示例中for语句体处理的是由列表推导生成的成员:
Return语句
JavaFX的 return语句类似于Java技术:
Break和 Continue语句
JavaFX的 break和 continue语句类似于Java技术,不同之处是,这里不支持标签。在Java语言中, break和 continue必须位于 while或 for语句的语句体内。
Do和 Do Later语句
JavaFX的 do语句运行执行JavaFX代码块。但是, do语句体通常在后台线程执行。通常,JavaFX代码都在AWT事件调度线程(Event Dispatch Thread,EDT)中执行——只允许包含在 do语句体内的代码在另一个线程执行。考虑下面的示例:
在EDT中正在执行的代码将在执行 do语句体期间被阻塞。但是,在等待后台线程完成期间,将在堆栈中创建一个新的事件调度循环。因此,在处理do语句时,将继续执行图形用户界面(GUI)事件。
do语句的第二种形式 do later,运行在EDT中异步执行语句体,而不是在后台线程中同步执行,这类似于 java.awt.EventQueue.invokeLater()提供的功能。见下面的例子:
运行代码将生成以下输出:
Goodbye Cruel World!
Hello World!
16.增量式求值
JavaFX技术的一个最令人兴奋的特性就是增量式求值。它允许程序员声明式地定义复杂的动态GUI。在JavaFX技术中,属性初始化程序能够使用 bind操作符进行增量式求值。使用bind初始化的属性类似于包含公式(而不是字母值)的电子表格中的单元格。只要在初始化表达式右侧引用的任何对象发生改变,其左侧的对象属性值将被自动更新。
示例如下:
上例中, x2的 b属性被绑定到 x1的 b属性。这意味着,当 x1的 b属性被更新时, x2的 b属性也会相应地被更新。
注意:函数体无需 bind操作符便可被增量地求值,但操作体则做不到。与函数不同,在改变本地变量的操作中并不触发增量式求值。增量式求值不能在操作体内执行,除非表达式明确地以 bind为前缀。
您也可以对示例进行修改,从而使用懒惰增量式求值。这种情况下,绑定只有在首次访问 attribute值时才会起作用。
懒惰增量式求值通常用于处理递归数据结构,例如树和图。
与javascript不同,JavaFX是静态输入的。
如果你声明了一个变量如下。
var a="Hello";
如果你继续下面的操作将会报错。
a=123;
因为a初始为String,所以不能给它赋值数值类型。
2.JavaFX是声明式脚本编制语言
脚本编制引擎在执行之前读取完整的程序,然后允许解释器采取必要的步骤正确运行程序。更准确地讲,脚本编制引擎所需的工作就是在执行开始之前进行声明,然后引擎决定如何使用所有给定声明,以完成既定目标。
3.JavaFX中字符串的连接
与java不同,javaFX不支持+连接字符串。连接方法如下。
var a="Hello"; var b="{a} World";
4.JavaFX数据类型
JavaFX编程语言只提供了四种原语类型: String、 Boolean、 Number和 Integer。可以对每种类型调用现有Java方法。
5.JavaFX基础操作符
? 任意值(例如,可为null)
+ 一个或多个
* 零个或多个
5.JavaFX变量声明格式
var variableName [: typeName] [? | + | *] [= initializer];
例如:
var nums:Number* = [5, 9, 13];
声明了一个名为nums的新变量,其值被定义为由零个或多个 Number类型的实例组成,并且其初始值为3个数字:5、9和13。
声明部分中的 typeName、基数操作符和初始化程序部分是可选的,因此以下内容与前面的示例是等价的:
var nums = [5, 9, 13];
6.JavaFX中的字符串
javaFX中的字符串可以用双引号,也可以用单引号。
var a='Hello'; var b="Hello";
是等价的。
区别是,双引号里的字符串可以包含换行。。。
var a="Hello World";
7.javaFX中的数组
数组表示对象 序列。在JavaFX中,数组本身不是对象。此外,生成嵌套序列的表达式会被自动扁平化。
var weekdays = ["Mon","Tue","Wed","Thur","Fri"]; var days = [weekdays, ["Sat","Sun"]]; days == ["Mon","Tue","Wed","Thur","Fri","Sat","Sun"]; // returns true
如果执行 System.out.println(days),将只能看到数组的第一个元素。可以使用数组索引获得数组中的其他元素。同样,如果您指定的是一个不存在的索引,则无法像在Java中那样获得 ArrayIndexOutOfBoundsException,而仅会得到一个0值。
数组的当前大小可以使用 sizeof操作符确定:
var n = sizeof days; // n = 7
对于数组成员组成数列的数组,JavaFX使用一种由两个句号( ..)组成的简写符号表示。例如,以下代码将创建一个包含100个元素的数组:
var oneToAHundred = [1..100]; var arraySize = sizeof oneToAHundred; // size == 100
在处理数组时,JavaFX技术还支持 insert和 delete语句。下面的示例演示了如何向数组 插入值。
var x = [1,2,3]; insert 12 into x; // yields [1,2,3,12] insert 10 as first into x; // yields [10,1,2,3,12] insert [99,100] as last into x; // yields [10,1,2,3,12,99,100]
除了使用 into外,还可以使用 before和 after关键字,如下所示:
var x = [1,2,3]; insert 10 after x[. == 3]; // yields [1,2,3,10] insert 12 before x[1]; // yields [1,12,2,3,10] insert 13 after x[. == 2]; // yields [1, 12, 2, 13, 3, 10];
方括号里面的某些表达式看上去有些古怪,不必多虑。这实际上是 Xquery-UpdateXquery-Update(类似于XPath) 谓词.这种情形下,方括号中的句号并不是指索引,而是指索引 值。JavaFX技术将检验数组中的每个元素,直到表达式为真,然后使用 insert。例如,最后一条语句将遍历数组的每个值,在找到数组值等于2的元素(即数组的第三个元素)后,在其后插入数值13。此时,代码停止。
deletedelete语句的工作原理大致相同。注意,如果省略了方括号内的表达式,整个数组将被清除。
var x = [1,2,3]; insert 10 into x; // yields [1,2,3,10] insert 12 before x[1]; // yields [1,12,2,3,10] delete x[. == 12]; // yields [1,2,3,10] delete x[. >= 3]; // yields [1,2] insert 5 after x[. == 1]; // yields [1,5,2]; insert 13 as first into x; // yields [13, 1, 5, 2]; delete x; // clears the array and yields []
最后,使用 select和 for each操作符可以对数组执行更加复杂的查询。这种操作也被称为列表推导。下面是一个使用 select的简单示例:
var a:Integer* = select n*n from n in [1..10]; // yields [1,4,9,16,25,36,49,64,81,100]
以上代码表达的意思是“循环遍历 [1..10]数组中的每个值,将它赋予本地变量n。对于每个 n,创建一个新元素 n squared并将其添加到 Integers a数组中。”
还可以使用以下代码添加一个过滤器:
var a:Integer* = select n*n from n in [1..10] where (n%2 == 0); // yields [4,16,36,64,100]
这将定义修改为:“循环遍历 [1..10]数组中的每个值, 如果数组值除以 2余数为0(即偶数),将它赋予本地变量 n。然后对于每个产生的 n,创建一个新元素 n squared并将其添加到 Integers a数组中。”
最后,还可以向选择语句添加多个列表:
var a:Integer* = select n*m from n in [1..4], m in [100,200] where (n%2 == 0); // yields [200, 400, 400, 800]
这实际上是一个嵌套循环,在形式上创建了一个 笛卡尔乘积。首先获得第一个有效的 n值,即2,然后乘以第一个有效的 m值100。然后再用2乘以下一个有效的 m值200。接着使用下一个有效的 n值(即4)重新迭代有效值 m的列表(100和200),生成的结果为400和800。此时,选择语句结束,您得到了最终的数组,放置在数组 a中。
使用 foreach操作符可以表示相同的内容:
var a:Integer* = foreach(n in [1..4], m in [100,200] where (n%2 == 0) ) n*m; // also yields [200, 400, 400, 800]
数组讲挺多,直接copy了。。。。
8.JavaFX中的格式化
format as操作符支持若干格式化指令。
import java.util.Date; 100.896 format as <<%f>>; // yields '100.896000' 31.intValue() format as <<%02X>>; // yields '1F' var d = new Date(); d format as <<yyyy-MM-dd'T'HH:mm:ss.SSSZ>>; // yields '2005-10-31T08:04:31.323-0800' 0.00123 format as <<00.###E0>>; // yields '12.3E-4'
9.JavaFX中的书名号<<>>
JavaFX技术将法语引用符中包含的任何字符序列视为一个标识符,包括空格。这样允许您使用class、variable、f unction或属性名这些JavaFX关键字。下面提供了一个示例:
var <<while>> = 100;
这个特性使您能够调用以JavaFX关键字命名的Java方法,如下所示:
import javax.swing.JTextArea;
var textArea = new JTextArea(); textArea.<<insert>>("Hello", 0);
10.JavaFX中类的声明
JavaFX中对类进行声明的语法为:在 class关键字之后紧跟类名,然后是可选的 extends关键字和以逗号分隔的基类名列表。注意,与Java不同,JavaFX技术可以扩展多个类。之后是一个起始的大括号({),一个属性列表,函数和操作,一个关闭的大括号( }),在大括号中间的每一项都使用分号( ;)结尾。下面给出了一个例子:
class Person { attribute name: String; attribute parent: Person; attribute children: Person*; function getFamilyIncome(): Number; function getNumberOfChildren(): Number; operation marry(spouse: Person): Boolean; }
11.JavaFX中的属性、函数和操作
现在进一步查看三种类成员声明类型。 属性使用 attribute关键字声明,后跟属性名、一个冒号( :)、属性类型、可选的 基数说明,一个可选的反向子句.如果使用了基数,该属性通常被称为 多值属性。
下面展示了更正式的声明,属性使用了以下语法:
attribute AttributeName [: AttributeType] [? | + | *] [inverse ClassName. InverseAttributeName];
可选的 inverse语句位于末尾,说明了与另一个属性的双向关系。如果出现了反向语句,那么当属性被修改时,JavaFX技术将自动更新反向语句中说明的属性——根据更新类型和属性的基数分别使用 insert或 delete或 replace。
函数JavaFX表示编程语言中的纯函数部分。换而言之,函数体可能只包含一些变量声明和一个 return语句。这使它们非常适合于accessors – –getters– – 属性和简单的数学程序。下面是一些示例函数:
function z(a,b) { var x = a + b; var y = a - b; return sq(x) / sq (y); } function sq(n) {return n * n; }
JavaFX中使用 operation关键字声明 操作。与函数不同,操作可能包含一些语句,例如条件语句、循环语句、 try和 catch语句等等。这一特点使操作非常类似于Java技术中的类方法。声明的主要内容包括操作名,后跟输入变量(使用圆括号括起)、一个冒号和return变量类型。下面是一个例子:< /p>
operation substring(s:String, n:Number): String { try { return s.substring(n); } catch (e:StringIndexOutOfBoundsException) { throw "sorry, index out of bounds"; } }
12.初始化声明后的属性
和函数和过程一样,属性值的初始化声明在类定义外进行。在新建对象的上下文中,初始化程序按照类声明中指定的属性顺序被逐一求值:
import java.lang.System; class X { attribute a: Number; attribute b: Number; } attribute X.a = 10; attribute X.b = -1; var x = new X(); System.out.println(x.a); // prints 10 System.out.println(x.b); // prints -1
JavaFX使用由类名、用大括号包含的属性初始化程序列表构成的 声明式语法来完成对象的初始化。每个初始化程序由属性名、冒号、定义属性值的表达式构成,注意, new关键字被忽略。下面是一个等价的示例:
var myXClass = X { a: 10 b: -1 };
JavaFX技术经常使用到声明式语法。但是同样支持Java对象分配语法。在Java类中,可以像Java技术一样将属性传递给类的构造函数,或者可以使用声明式语法:
import java.util.Date; import java.lang.System; var date1 = new Date(95, 4, 23); // call a Java constructor var date2 = Date { // create the same date as an object literal month: 4 date: 23 year: 95 }; System.out.println(date1 == date2); // prints true
13.函数和操作定义
与Java方法不同的是,所有成员函数体和操作体都是在类声明 之外定义的。Java程序员最初会对这种语法感觉不习惯,但是执行起来 相当简单。在JavaFX技术中,函数或操作的定义为:函数和操作所属的类、一个句号、函数或操作名。返回值将列于函数或操作名后,前面加一个冒号。参数 也可包含在括号中,使用逗号分隔并遵循前面操作部分所示的 name: type语法。如下所示:
operation Person.marry(spouse: Person): Boolean { // Body of operation }
在类声明中,操作和函数声明部分需要包含参数和返回类型。然而,外部定义中可能会忽略这些内容。因此,可以使用下面这种简单的方式:
operation Person.marry() { // Body of operation }
14.触发器
与Java技术不同,JavaFX类不具备构造函数,JavaFX属性一般没有“setter”方法。相反,JavaFX技术提供了类似SQL风格的触发器,允许您处理数据修改事件。这些触发器使用 trigger关键字。
(1)对象创建触发器
通过指定一个创建触发器,可以在新建的对象上下文中触发某个操作,如下所示:
import java.lang.System; class X { attribute nums: Number*; } trigger on new X { insert [3,4] into this.nums; } var x = new X(); System.out.println(x.nums == [3,4]); // prints true
上面这个例子中定义的触发器将在创建一个新的X类实例时执行。在这个例子中,将向 nums属性插入两个数值。注意,这里使用了 this关键字表示触发器上下文的当前对象。
(2)Insert 触发器
当元素被插入到多值属性中时,也可以触发一个操作:
import java.lang.System; class X { attribute nums: Number*; } trigger on insert num into X.nums { System.out.println("just inserted {num} into X.nums at position {indexof num}"); } var x = new X(); insert 12 into x.nums; // prints just inserted 12 into X.nums at position 0 insert 13 into x.nums; // prints just inserted 13 into X.nums at position 1
(3)Delete触发器
同样,当从多值属性中删除某个元素时,可以触发一个操作:
import java.lang.System; class X { attribute nums: Number*; } trigger on delete num from X.nums { System.out.println("just deleted {num} from X.nums at position {indexof num}"); } var x = X { nums: [12, 13] }; delete x.nums[1]; // prints just deleted 13 from X.nums at position 1 delete x.nums[0]; // prints just deleted 12 from X.nums at position 0
(4)Replace触发器
最后,当替代某个属性的值时可以执行一个操作。在下面的例子中, oldValue和 newValue两个任意变量名,引用被替换变量的前一个值和当前值。您可以随意选择其他变量名。
import java.lang.System; class X { attribute nums: Number*; attribute num: Number?; } trigger on X.nums[oldValue] = newValue { System.out.println("X.nums: replaced {oldValue} with {newValue} at position {indexof newValue}"); } trigger on X.num[oldValue] = newValue { System.out.println("X.num: replaced {oldValue} with {newValue}"); } var x = X { nums: [12, 13] num: 100 }; x.nums[1] = 5; // prints replaced 13 with 5 at position 1 in X.nums x.num = 3; // prints X.num: replaced 100 with 3 x.num = null; // prints X.num: replaced 3 with null
15.语句
JavaFX技术支持一些与Java技术中的同类语句类似但不完全相同的语句。这一节将介绍它们之间的区别。
If语句
JavaFX的 if语句用法类似Java,但是大括号必须像下面这样:
if (condition1) { System.out.println("Condition 1"); } else if (condition2) { System.out.println("Condition2"); } else { System.out.println("not Condition 1 or Condition 2"); }
While语句
JavaFX while语句中的大括号必须环绕语句体之外:
var i = 0; while (i < 10) { if (i > 5) { break; } System.out.println("i = {i}"); i += 1; }
Try、 Catch和 Throw语句
JavaFX的 try和 catch语句类似Java技术,但是具有JavaFX变量声明语法。注意,在JavaFX技术中,可以抛出和捕捉任何对象,而不仅仅是 java.lang.Throwable的扩展类。
try { throw "Hello"; } catch (s:String) { System.out.println("caught a String: {s}"); } catch (any) { System.out.println("caught something not a String: {any}"); } finally { System.out.println("finally..."); }
For语句
JavaFX的 for语句头与前面讨论的 foreach列表推导操作符使用相同的语法。但是,在下面示例中for语句体处理的是由列表推导生成的成员:
for (i in [0..10]) { System.out.println("i = {i}"); } // print only the even numbers using a filter for (i in [0..10] where (i%2 == 0) ) { System.out.println("i = {i}"); } // print only the odd numbers using a range expression for (i in [1,3..10]) { System.out.println("i = {i}"); } // print the cartesian product for (i in [0..10], j in [0..10]) { System.out.println(i); System.out.println(j); }
Return语句
JavaFX的 return语句类似于Java技术:
operation add(x, y) { return x + y; }
Break和 Continue语句
JavaFX的 break和 continue语句类似于Java技术,不同之处是,这里不支持标签。在Java语言中, break和 continue必须位于 while或 for语句的语句体内。
operation foo() { for (i in [0..10]) { if (i > 5) { break; } if (i % 2 == 0) { continue; } System.out.println(i); } } operation bar() { var i = 0; while (i < 10) { if (i > 5) { break; } if (i % 2 == 0) { continue; } System.out.println(i); i += 1; } }
Do和 Do Later语句
JavaFX的 do语句运行执行JavaFX代码块。但是, do语句体通常在后台线程执行。通常,JavaFX代码都在AWT事件调度线程(Event Dispatch Thread,EDT)中执行——只允许包含在 do语句体内的代码在另一个线程执行。考虑下面的示例:
import java.net.URL; import java.lang.StringBuffer; import java.lang.System; import java.io.InputStreamReader; import java.io.BufferedReader; // in the AWT Event Dispatch Thread (EDT) var result = new StringBuffer(); do { // now in a background thread var url = new URL("http://www.foo.com/abc.xml"); var is = url.openStream(); var reader = new BufferedReader(new InputStreamReader(is)); var line; while (true) { line = reader.readLine(); if (line == null) { break; } result.append(line); result.append("\n"); } } // now back in the EDT System.out.println("result = {result}");
在EDT中正在执行的代码将在执行 do语句体期间被阻塞。但是,在等待后台线程完成期间,将在堆栈中创建一个新的事件调度循环。因此,在处理do语句时,将继续执行图形用户界面(GUI)事件。
do语句的第二种形式 do later,运行在EDT中异步执行语句体,而不是在后台线程中同步执行,这类似于 java.awt.EventQueue.invokeLater()提供的功能。见下面的例子:
import java.lang.System; var saying1 = "Hello World!"; var saying2 = "Goodbye Cruel World!"; do later { System.out.println(saying1); } System.out.println(saying2);
运行代码将生成以下输出:
Goodbye Cruel World!
Hello World!
16.增量式求值
JavaFX技术的一个最令人兴奋的特性就是增量式求值。它允许程序员声明式地定义复杂的动态GUI。在JavaFX技术中,属性初始化程序能够使用 bind操作符进行增量式求值。使用bind初始化的属性类似于包含公式(而不是字母值)的电子表格中的单元格。只要在初始化表达式右侧引用的任何对象发生改变,其左侧的对象属性值将被自动更新。
示例如下:
import java.lang.System; class X { attribute a: Number; attribute b: Number; } var x1 = X { a: 1 b: 2 }; var x2 = X { a: x1.a // nonincremental b: bind x1.b // incremental }; System.out.println(x2.a); // prints 1 System.out.println(x2.b); // prints 2 x1.a = 5; x1.b = 5; System.out.println(x2.a); // prints 1 System.out.println(x2.b); // prints 5
上例中, x2的 b属性被绑定到 x1的 b属性。这意味着,当 x1的 b属性被更新时, x2的 b属性也会相应地被更新。
注意:函数体无需 bind操作符便可被增量地求值,但操作体则做不到。与函数不同,在改变本地变量的操作中并不触发增量式求值。增量式求值不能在操作体内执行,除非表达式明确地以 bind为前缀。
您也可以对示例进行修改,从而使用懒惰增量式求值。这种情况下,绑定只有在首次访问 attribute值时才会起作用。
import java.lang.System; class X { attribute a: Number; } var x1 = X { a: 1 }; var x2 = X { a: bind lazy x1.a // no value is assigned yet }; System.out.println(x2.a); // Now the value is accessed, so x2.a is set to 1
懒惰增量式求值通常用于处理递归数据结构,例如树和图。
发表评论
-
JavaFX与后台交互
2009-04-05 22:16 9826目前JavaFX相关的资料都是基本语法,以及界面相关。 ... -
Flex使用点滴
2009-03-10 14:30 0学习Grails时,发现Grails可以和Flex集成 ... -
JavaFX GUI------1动画效果
2009-02-24 22:50 5590之前翻译了JavaFX Script,后来一段时间就 ... -
学习JavaFX脚本语言(翻译)pdf下载
2008-12-19 14:35 7153呵呵,JavaEye提供的制作pdf功能真是太好了。 之前比较 ... -
学习JavaFX脚本语言----10,11(完)
2008-12-12 16:30 2650Lesson 10: Packages 目录 - St ... -
学习JavaFX脚本语言----8,9
2008-12-11 18:01 2328Lesson 8: Data Binding and Trig ... -
学习JavaFX脚本语言----6,7
2008-12-10 15:10 2193Lesson 6: Operators 目录: ... -
学习JavaFX脚本语言----5
2008-12-09 20:23 2212Lesson 5: Sequences 目录 - 创建 ... -
学习JavaFX脚本语言----3,4
2008-12-07 16:52 2267Lesson 3: Using Objects 目录 - ... -
学习JavaFX脚本语言----1,2
2008-12-06 21:39 4060很遗憾,JavaFX目前没有发布Linux版本!我使用 ... -
JavaFX Demo学习2-----ImageRollover
2008-11-10 22:46 3820今天偷个懒。一个很简单的程序,响应鼠标事件,效果如下。代码在附 ... -
JavaFX Demo学习1-----Clock
2008-11-09 14:25 5861第一个附件是使用JavaFX编写一个Clock的教程,很详细。 ... -
JavaFX学习准备工作
2008-11-08 15:19 2979找了一遍网络,现在最好的JavaFX开发工具应该就是NetBe ... -
NetBeans6.1---新的JavaFX开发体验
2008-11-07 23:56 1785之前看过一点JavaFX,后来就没再关心。这几天看网上 ... -
Netbeans5.5.1的JavaFX插件好像有问题
2007-12-25 15:00 1444如下语法。。应该没问题的。。 在eclipse下运行成功。。 ...
相关推荐
JavaFX+Jfoenix 学习笔记系列文章的JavaFX+Jfoenix 学习笔记(十)--系统托盘及解决中文乱码问题源码
JavaFX+Jfoenix 学习笔记系列文章的JavaFX+Jfoenix 学习笔记(五)--ContextMenu右键菜单源码
JAVAFX第一张学习笔记,第一张的学习源代码!
JavaFX+Jfoenix 学习笔记系列的JavaFX+Jfoenix 学习笔记(四)--MenuBar菜单栏的源码
JavaFX+Jfoenix 学习笔记系列文章JavaFX+Jfoenix 学习笔记(九)--KeyCombination快捷键源码
JavaFX+Jfoenix 学习笔记系列文章的JavaFX+Jfoenix 学习笔记(七)--多线程、延迟加载源码
JavaFX+Jfoenix 学习笔记(一)--环境搭建及多款Hello World演示的源码 JavaFX的简单展示,主要是为了配合文章学习使用
JavaFX+Jfoenix 学习笔记系列文章的JavaFX+Jfoenix 学习笔记(八)--事件、监听、属性绑定源码
JavaFX+Jfoenix 学习笔记谢列文章的TableView数据表格章节源码(包括之前几章的源码)
JavaFX+Jfoenix 学习笔记(二)--Stage和Scene文章中用到的源码,主要是展示了Stage的一些常用属性
用JAVAFX在棒图显示时自己收集的一些富贵资料,跟大家一起共享一下哈。 。
主要作用是减少网页浏览器对于需要插件的丰富性网络应用服务,例如:Adobe Flash、Microsoft Silverlight与Oracle JavaFX的需求,并且提供更多能有效加强网络应用的标准集。 通过对HTML5的定义,我们可以了解到...
学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的...
一款颇具创意的javafx应用软件。...电影下载链接、电影番号、学习资料网址、告白情诗、记录心情笔记等。 支持链接一键在浏览器打开,支持内容的导出。 对内容进行加密,并支持对图片的密码设置,提高安全性。
Docker映像,可轻松设置JavaFX应用程序的CI 常见组件类型的现成样板对平台特定功能的支持(自我更新,本地系统通知...) 通过示例学习EasyFXML笔记该项目大量(有时不是很明显)大量使用JavaFX和Spring Boot功能,...
Javafx的公寓租赁系统 COSC1295 高级编程 计算机科学与信息技术 RMIT 理学院 作业 1 - 2018 年第 2 学期 提交截止日期:8 月 26 日(星期日)晚上 11:59 前(第 6 周结束) 介绍 这项作业占您最终成绩的 15%。 笔记 ...
学习Java和Oracle和Java开发人员社区推荐的在生产环境中与JavaFX应用程序一起使用的模式。 尽管该工具目前处于有用状态,但在接下来的几个月中将添加大量功能(和文档)。 笔记 该项目最初是由IntelliJ 13中的...
本资源使用Java和JavaFX模拟了单处理器系统进程调度的...该资源的文字版信息请访问博客《操作系统实验:单处理器系统的进程调度(学习笔记)》(https://blog.csdn.net/weixin_40589192/article/details/107168093)。
Java课程是一种教授学生如何使用...图形用户界面(GUI): 学习使用图形库(如Swing或JavaFX)创建桌面应用程序的用户界面。 网络编程: 学习如何使用Java编写网络应用程序,包括客户端-服务器通信和Web应用程序开发。
课程特定的学习成果LO2.e:(部分)利用软件解决方案中的现有通用方法,接口和类。 LO7.a:(部分)在软件项目中设计和实现图形用户界面。参考和先决条件问题在您的笔记中,明确回答以下问题。 这些说明假定您已登录...