学习JavaFX脚本语言----10,11(完)

Lesson 10: Packages

目录

- Step 1: 选择一个包名
- Step 2: 创建目录
- Step 3: 添加包声明
- Step 4: 添加访问权限
- Step 5: 编译源码
- Step 6: 使用类

到这里,你对javaFX的基础应该比较熟悉了。但是对于源文件的存放,你可能还不是很清楚(你现在可能是用的一个文件夹来存放所有的例子代码)我们将把代码放到包中,来改变你对存放代码的认识。(We can improve our overall organization by placing our code into packages.)

包能够让你按功能来将代码分类保存。它还给你的类一个唯一的命名空间。我们将在下面一步步的来将Address类存放到一个特殊的包内。

-Step 1: 选择一个包名

在我们修改代码前,我们需要给包起个名字。由于我们的Address类是假设用在addressbook应用上的,所以我们使用"addressbook"作为包名。

-Step 2: 创建目录

接着,我们必须创建一个addressbook目录。这个目录里面将包含所有我们设计的属于addressbook这个包的.fx文件。你可以在任意的地方创建目录。我们在例子里面使用
/home/demo/addressbook,但是脚本必须在一个和包名相同的目录里面,这里就是
addressbook

-Step 3: 添加包声明

现在,到addressbook目录里面创建Address.fx源代码文件。粘贴下面的代码到源代码文件里面去。第一行提供了一个包声明,这将表示这个类属于addressbook这个包。

package addressbook;

class Address {
     var street: String;
     var city: String;
     var state: String;
     var zip: String;
}


注意了,如果源代码里面有包声明,它必须在其它代码的前面,即源码文件的第一行。没个源文件只能有一个包声明。

-Step 4: 添加访问权限

接下来,我们需要在Address的类和变量上加上pulic关键字。

package addressbook;

public class Address {
     public var street: String;
     public var city: String;
     public var state: String;
     public var zip: String;
}


这个关键字是5个访问限制修饰符里面的一个。我们会在下一节介绍访问限制修饰符。现在你只要知道,public关键字使得这段代码能够被其他的类和脚本访问。

-Step 5:编译源码

依然在addressbook目录里面,像平时一样使用javafxc Address.fx命令编译即可。编译完成后,这个文件夹里面将包含编译得到的.class文件。

-Step 6: 使用类

现在我们能够测试修改后的Address类了。但是我们必须先返回到父目录 /home/demo。这里我们创建一个简单的脚本packagetest.fx类测试如何使用addressbook包。

我们有两种方法来访问这个类:

// Approach #1

addressbook.Address {
     street: "1 Main Street";
     city: "Santa Clara";
     state: "CA";
     zip: "95050";
}


Approach #1使用完整的类名创建了一个对象(addressbook.Address)。对比另一种方法,这种方法比较的笨拙,但是你还是需要知道有这种写法。

// Approach #2
import addressbook.Address;

Address {
     street: "1 Main Street";
     city: "Santa Clara";
     state: "CA";
     zip: "95050";
}


Approach #2使用import关键字,import关键字允许你以简短的名字在脚本里面使用类。当程序比较大时,推荐使用这种方法,因为它是self-documenting。


Lesson 11: Access Modifiers

目录

- 默认访问权限
- package访问权限修饰符
- protected访问权限修饰符
- public访问权限修饰符
- public-read访问权限修饰符
- public-init访问权限修饰符

-默认访问权限

当你不提供任何访问权限控制符的时候,就是默认的访问权限,也就是"script-only".这也是我们在教程里面最常使用的权限。

例子:

var x;
var x : String;
var x = z + 22;
var x = bind f(q);


这一级别的访问权限使得变量只能在脚本内被initialized, overridden, read, assigned, 或 bound.其他文件无法访问。


-package访问权限修饰符

为了让变量,方法或类能被包里的其他代码访问到,使用package访问权限修饰符

package var x;


不要把这和前一节包的声明玳瑁搞混淆。


例子:

// Inside file tutorial/one.fx
package tutorial; // places this script in the "tutorial" package
package var message = "Hello from one.fx!"; // this is the "package" access modifier
package function printMessage() {
     println("{message} (in function printMessage)");
}

// Inside file tutorial/two.fx
package tutorial;
println(one.message);
one.printMessage();


你能使用下面的命令编译和运行这个例子:

javafxc tutorial/one.fx tutorial/two.fx
javafx tutorial/two

输出:

Hello from one.fx!
Hello from one.fx! (in function printMessage)


-protected访问权限修饰符

protected访问权限修饰符使得变量或方法不仅能时包里的其他代码访问到,还能使不在同一个包内的子类访问到。

例子:

// Inside file tutorial/one.fx
package tutorial;
public class one {
     protected var message = "Hello!";
}

// Inside file two.fx
import tutorial.one;
class two extends one {
     function printMessage() {
          println("Class two says {message}");
     }
};

var t = two{};
t.printMessage();


编译运行:

javafxc tutorial/one.fx two.fx
javafx two

输出:

Class two says Hello!

Note:这个访问权限修饰符不能用在类上,这就是为什么我们在类one前面写的是public的原因。

-public访问权限修饰符

一个pulibc的类,变量,方法具有最大可见度,即,它可以被任意的类或脚本访问,不管是不是在一个包内。

例子:

// Inside file tutorial/one.fx
package tutorial;
public def someMessage = "This is a public script variable, in one.fx";
public class one {
     public var message = "Hello from class one!";
     public function printMessage() {
          println("{message} (in function printMessage)");
     }
}

// Inside file two.fx
import tutorial.one;
println(one.someMessage);
var o = one{};
println(o.message);
o.printMessage();


编译运行:

javafxc tutorial/one.fx two.fx
javafx two

输出:

This is a public script variable, in one.fx
Hello from class one!
Hello from class one! (in function printMessage)


-public-read访问权限修饰符

public-read访问权限修饰符修饰的变量是公共的但是对外是只读的,只能被当前的脚本修改。如果想扩大它的可被修改的权限范围,在前面加上package或protected(ackage public-read 或者 protected public-read)这样的话,可以使得package或protected范围的代码能修改此变量。

例子:

// Inside file tutorial/one.fx
package tutorial;
public-read var x = 1;

// Inside tutorial/two.fx
package tutorial;
println(one.x);


编译运行:

javafxc tutorial/one.fx tutorial/two.fx
javafx tutorial/two

输出是"1",这证明了x能够被tutorial/one.fx外的其他代码读取到。

现在我们来试着修改它的值:

// Inside tutorial/two.fx
package tutorial;
one.x = 2; 
println(one.x);


结果是编译期错误:

tutorial/two.fx:3: x has script only (default) write access in tutorial.one
one.x = 2;
   ^
1 error

为了让此代码能运行,我们要扩大x的写的访问权限:

// Inside file tutorial/one.fx
package tutorial;
package public-read var x = 1;

// Inside tutorial/two.fx
package tutorial;
one.x = 2;
println(one.x);


现在将打印"2"。

-public-init访问权限修饰符

public-init访问权限修饰符修饰的变量能被任何包里的对象初始化。初始化后的写操作权限限制,却是和public-read类似的访问控制。(默认是脚本级别的写操作,前面加上package或 protected就扩大了访问权限了)

例子:

// Inside file tutorial/one.fx
package tutorial;
public class one {
     public-init var message;
}

// Inside file two.fx
import tutorial.one;
var o = one {
     message: "Initialized this variable from a different package!"
}
println(o.message);


编译:

javafxc tutorial/one.fx two.fx
javafx two

打印出"Initialized this variable from a different package!", 这证明了其他包内的对象能够初始化message变量。但是,接下来的写操作权限却是script-only,我们不能修改它的值。

// Inside file two.fx
import tutorial.one;
var o = one {
     message: "Initialized this variable from a different package!"
}
o.message = "Changing the message..."; // WON'T COMPILE
println(o.message);


编译出错:

two.fx:12: message has script only (default) write access in tutorial.one
o.message = "Changing the message..."; // WON'T COMPILE
^
1 error

这证明了这个很特别的行为:对象能够被任意对象初始化,但是初始化以后却是受不同的访问级别控制的。



ps:呼!花了一周时间,终于翻译完了!还好语法比较简单,翻译难度不大!如果有时间和精力,还会翻译《Building GUI Applications With JavaFX》。

你可能感兴趣的:(浏览器,脚本,Access,D语言,JavaFX)