提交 623030e2 编写于 作者: W wizardforcel

2020-06-22 21:05:39

上级 e8fc8822
......@@ -121,7 +121,7 @@ set CLASSPATH=
`**无法找到或加载主类 HelloWorldApp.class**`
初学者程序员常犯的一个错误就是尝试在编译器创建的`.class`文件上运行`java`启动程序。例如,如果您尝试使用`java HelloWorldApp.class`而不是`java HelloWorldApp`运行程序,则会出现此错误。请记住,参数是您要使用的类的*名称,*而不是*文件名。_
初学者程序员常犯的一个错误就是尝试在编译器创建的`.class`文件上运行`java`启动程序。例如,如果您尝试使用`java HelloWorldApp.class`而不是`java HelloWorldApp`运行程序,则会出现此错误。请记住,参数是您要使用的类的*名称*,*而不是*文件名。
**`Exception in thread "main" java.lang.NoSuchMethodError: main`**
......@@ -153,7 +153,7 @@ unset CLASSPATH
`**线程“main”中的异常 java.lang.NoClassDefFoundError:HelloWorldApp / class**`
初学者程序员常犯的一个错误就是尝试在编译器创建的`.class`文件上运行`java`启动程序。例如,如果您尝试使用`java HelloWorldApp.class`而不是`java HelloWorldApp`运行程序,则会出现此错误。请记住,参数是您要使用的类的*名称,*而不是*文件名。_
初学者程序员常犯的一个错误就是尝试在编译器创建的`.class`文件上运行`java`启动程序。例如,如果您尝试使用`java HelloWorldApp.class`而不是`java HelloWorldApp`运行程序,则会出现此错误。请记住,参数是您要使用的类的*名称*,*而不是*文件名。
**`Exception in thread "main" java.lang.NoSuchMethodError: main`**
......
......@@ -52,7 +52,7 @@ Example of a Symbolic Link.
符号链接通常对用户是透明的。读取或写入符号链接与读取或写入任何其他文件或目录相同。
解析链接的短语*意味着用文件系统中的实际位置替换符号链接。在该示例中,解析`logFile`产生`dir/logs/HomeLogFile`。_
解析链接的短语*意味着*用文件系统中的实际位置替换符号链接。在该示例中,解析`logFile`产生`dir/logs/HomeLogFile`。
在实际场景中,大多数文件系统都可以自由使用符号链接。偶尔,粗心创建的符号链接可能会导致循环引用。当链接的目标指向原始链接时,会发生循环引用。循环引用可能是间接引用:目录`a`指向目录`b`,它指向目录`c`,其中包含指向目录`a`的子目录。当程序递归地遍历目录结构时,循环引用可能会导致严重破坏。但是,此方案已被考虑,并且不会导致程序无限循环。
......
......@@ -108,7 +108,7 @@ Files.walkFileTree(startingDir, opts, Integer.MAX_VALUE, finder);
例如,如果您正在编写递归删除,则首先删除目录中的文件,然后再删除目录本身。在这种情况下,您删除`postVisitDirectory`中的目录。
如果您正在编写递归副本,则在尝试将文件复制到`visitFiles`之前,在`preVisitDirectory`中创建新目录(在`visitFiles`中)。如果要保留源目录的属性(类似于 UNIX `cp -p`命令),则需要在复制文件后在`postVisitDirectory`中执行*[``Copy`` ](examples/Copy.java)示例显示了如何执行此操作。_
如果您正在编写递归副本,则在尝试将文件复制到`visitFiles`之前,在`preVisitDirectory`中创建新目录(在`visitFiles`中)。如果要保留源目录的属性(类似于 UNIX `cp -p`命令),则需要在复制文件后在`postVisitDirectory`中执行[``Copy``](examples/Copy.java)示例显示了如何执行此操作。
如果您正在编写文件搜索,则在`visitFile`方法中执行比较。此方法查找符合条件的所有文件,但找不到目录。如果要查找文件和目录,还必须在`preVisitDirectory``postVisitDirectory`方法中执行比较。 [``Find`` ](examples/Find.java)示例显示了如何执行此操作。
......
......@@ -37,7 +37,7 @@ if (matcher.matches(filename)) {
```
搜索与特定模式匹配的文件与遍历文件树同时进行。你知道文件系统中的某个文件 __ 有多少次,但在哪里?或者您可能需要在文件树中找到具有特定文件扩展名的所有文件。__
搜索与特定模式匹配的文件与遍历文件树同时进行。你知道文件系统中的某个文件有多少次,但在哪里?或者您可能需要在文件树中找到具有特定文件扩展名的所有文件。
[`Find`](examples/Find.java) 就是这样做的。 `Find`类似于 UNIX `find`实用程序,但在功能上已经减少了。您可以扩展此示例以包含其他功能。例如,`find`实用程序支持`-prune`标志以从搜索中排除整个子树。您可以通过在`preVisitDirectory`方法中返回`SKIP_SUBTREE`来实现该功能。要实现符号链接后面的`-L`选项,可以使用四参数`walkFileTree`方法并传入`FOLLOW_LINKS`枚举(但请确保在`visitFile`方法中测试循环链接)。
......
......@@ -4,7 +4,7 @@
创建`Thread`实例的应用程序必须提供将在该线程中运行的代码。有两种方法可以做到这一点:
* _ 提供`Runnable`对象。_ [`Runnable`](https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html) 接口定义了一个方法`run`,意味着包含线程中执行的代码。 `Runnable`对象传递给`Thread`构造器,如 [``HelloRunnable``](examples/HelloRunnable.java)示例:
* 提供`Runnable`对象。[`Runnable`](https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html) 接口定义了一个方法`run`,意味着包含线程中执行的代码。 `Runnable`对象传递给`Thread`构造器,如 [``HelloRunnable``](examples/HelloRunnable.java)示例:
```java
public class HelloRunnable implements Runnable {
......@@ -21,7 +21,7 @@
```
* _ 子类`Thread`。_ `Thread`类本身实现`Runnable`,尽管它的`run`方法什么都不做。应用程序可以子类化`Thread`,提供自己的`run`实现,如 [``HelloThread``](examples/HelloThread.java)示例:
* 子类化`Thread``Thread`类本身实现`Runnable`,尽管它的`run`方法什么都不做。应用程序可以子类化`Thread`,提供自己的`run`实现,如 [``HelloThread``](examples/HelloThread.java)示例:
```java
public class HelloThread extends Thread {
......
......@@ -143,7 +143,7 @@ export PATH
`CLASSPATH`变量是告诉应用程序(包括 JDK 工具)查找用户类的一种方法。 (属于 JRE,JDK 平台和扩展的类应该通过其他方式定义,例如引导类路径或扩展目录。)
指定类路径的首选方法是使用`-cp`命令行开关。这允许为每个应用程序单独设置`CLASSPATH`,而不会影响其他应用程序。*设置`CLASSPATH`可能很棘手,应小心执行。_
指定类路径的首选方法是使用`-cp`命令行开关。这允许为每个应用程序单独设置`CLASSPATH`,而不会影响其他应用程序。*设置`CLASSPATH`可能很棘手,应小心执行*
类路径的默认值为“。”,表示仅搜索当前目录。指定 CLASSPATH 变量或`-cp`命令行开关将覆盖此值。
......
......@@ -209,7 +209,7 @@ public static void arraycopy(Object src, int srcPos,
```
两个`Object`参数指定要从复制*的数组和将*复制到*的数组。三个`int`参数指定源数组中的起始位置,目标数组中的起始位置以及要复制的数组元素的数量。_
两个`Object`参数指定要*从它复制*的数组和将*复制到它*的数组。三个`int`参数指定源数组中的起始位置,目标数组中的起始位置以及要复制的数组元素的数量。
以下程序 [`ArrayCopyDemo`](examples/ArrayCopyDemo.java) 声明了一系列`char`元素,拼写单词“decafffeinated”。它使用`System.arraycopy`方法将数组组件的子序列复制到第二个数组中:
......
......@@ -50,7 +50,7 @@ No match found.
### 否定
要匹配除以外的所有字符*,请在字符类的开头插入“`^`”元字符。这种技术称为*否定*。_
要匹配除一些字符以外的*所有字符*,请在字符类的开头插入“`^`”元字符。这种技术称为*否定*
```java
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/essential/regex/bounds.html](https://docs.oracle.com/javase/tutorial/essential/regex/bounds.html)
到目前为止,我们只对在特定输入字符串中某个位置是否找到匹配*感兴趣。我们从不关心*匹配正在发生的字符串中的*。_
到目前为止,我们只对在特定输入字符串中某个位置是否找到匹配*感兴趣*。我们从不关心*正在发生的字符串中的*匹配。
通过使用*边界匹配器*指定此类信息,可以使模式匹配更精确。例如,您可能对查找特定单词感兴趣,但前提是它出现在行的开头或结尾。或者您可能想知道匹配是在字边界上还是在上一场比赛结束时发生。
......
......@@ -79,7 +79,7 @@ frame.setIconImage(new ImageIcon(imgURL).getImage());
```
如前面的代码片段所示,您必须在创建您希望影响其装饰的帧之前调用`setDefaultLookAndFeelDecorated`方法*。使用`setDefaultLookAndFeelDecorated`设置的值用于随后创建的所有`JFrame`。您可以通过调用`JFrame.setDefaultLookAndFeelDecorated(false)`切换回使用窗口系统装饰。有些外观可能不支持窗户装饰;在这种情况下,使用窗户系统装饰。_
如前面的代码片段所示,您必须在创建您希望影响其装饰的帧之前调用`setDefaultLookAndFeelDecorated`方法。使用`setDefaultLookAndFeelDecorated`设置的值用于随后创建的所有`JFrame`。您可以通过调用`JFrame.setDefaultLookAndFeelDecorated(false)`切换回使用窗口系统装饰。有些外观可能不支持窗户装饰;在这种情况下,使用窗户系统装饰。
创建上图所示框架的应用程序的完整源代码位于 [`FrameDemo2.java`](../examples/components/FrameDemo2Project/src/components/FrameDemo2.java) 中。除了展示如何选择窗口装饰外,FrameDemo2 还展示了如何禁用所有窗口装饰并给出了定位窗口的示例。它包括两个创建用作图标的`Image`对象的方法 - 一个从文件加载,另一个从头开始绘制。
......
......@@ -92,7 +92,7 @@ pictureScrollPane.setMinimumSize(minimumSize);
拆分窗格的调整大小权重介于 0.0 和 1.0 之间,并确定在设置拆分窗格大小时如何在两个包含的组件之间分配空间 - 无论是以编程方式还是由用户调整拆分窗格大小(例如,放大其包含窗口) 。默认情况下,拆分窗格的调整大小为 0.0,表示左侧或顶部组件的大小是固定的,右侧或底部组件调整其大小以适合剩余空间。将调整大小权重设置为 0.5 会在两个组件之间平均分配任何额外或缺失的空间。将调整大小权重设置为 1.0 会使右侧或底部组件的大小保持固定。但是,当用户拖动分隔符时,调整大小权重不起作用。
只要既不包含组件低于其最小尺寸,用户也可以将分隔线拖动到任何位置*。如果分隔器具有单触按钮,则用户可以使用它们使分隔器完全移动到一侧或另一侧 - 无论组件的最小尺寸是多少。_
只要既不包含组件低于其最小尺寸,用户也可以将分隔线拖动到*任何位置*。如果分隔器具有单触按钮,则用户可以使用它们使分隔器完全移动到一侧或另一侧 - 无论组件的最小尺寸是多少。
现在您已了解影响拆分窗格大小和分隔符位置的因素,下面是一些使它们运行良好的规则:
......
......@@ -2,4 +2,4 @@
> 原文: [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flowsummary.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flowsummary.html)
`if-then`语句是所有控制流语句中最基本的语句。只有当特定测试评估为`true`时,它才会告诉程序执行某段代码*。当“if”子句求值为`false`时,`if-then-else`语句提供次要执行路径。与`if-then``if-then-else`不同,`switch`语句允许任意数量的可能执行路径。 `while``do-while`语句在特定条件为`true`时不断执行语句块。 `do-while``while`之间的区别在于`do-while`评估其在循环底部而不是顶部的表达式。因此,`do`块中的语句总是至少执行一次。 `for`语句提供了一种迭代一系列值的简洁方法。它有两种形式,其中一种用于循环集合和数组。_
\ No newline at end of file
`if-then`语句是所有控制流语句中最基本的语句。只有当特定测试评估为`true`时,它才会告诉程序执行*某段代码*。当“if”子句求值为`false`时,`if-then-else`语句提供次要执行路径。与`if-then``if-then-else`不同,`switch`语句允许任意数量的可能执行路径。 `while``do-while`语句在特定条件为`true`时不断执行语句块。 `do-while``while`之间的区别在于`do-while`评估其在循环底部而不是顶部的表达式。因此,`do`块中的语句总是至少执行一次。 `for`语句提供了一种迭代一系列值的简洁方法。它有两种形式,其中一种用于循环集合和数组。
\ No newline at end of file
......@@ -46,7 +46,7 @@ SwingWorker worker = new SwingWorker<ImageIcon[], Void>() {
请注意,`SwingWorker`是一个泛型类,有两个类型参数。第一个类型参数指定`doInBackground`的返回类型,也指定`get`方法,由其他线程调用以检索`doInBackground`返回的对象。 `SwingWorker`的第二个类型参数指定后台任务仍处于活动状态时返回的中间结果的类型。由于此示例未返回中间结果,因此 [`Void`](https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html) 用作占位符。
您可能想知道设置`imgs`的代码是否不必要地复杂化。为什么让`doInBackground`返回一个对象并使用`done`来检索它?为什么不直接设置`doInBackground` `imgs`?问题是对象`imgs`引用是在工作线程中创建的,并在事件派发线程中使用。以这种方式在线程之间共享对象时,必须确保在一个线程中进行的更改对另一个线程可见。使用`get`可以保证这一点,因为使用`get`会在创建`imgs`的代码与使用它的代码之间的关系之前创建*。有关关系之前发生的更多信息,请参阅[并发](../../essential/concurrency/index.html)课程中的[内存一致性错误](../../essential/concurrency/memconsist.html)。_
您可能想知道设置`imgs`的代码是否不必要地复杂化。为什么让`doInBackground`返回一个对象并使用`done`来检索它?为什么不直接设置`doInBackground` `imgs`?问题是对象`imgs`引用是在工作线程中创建的,并在事件派发线程中使用。以这种方式在线程之间共享对象时,必须确保在一个线程中进行的更改对另一个线程可见。使用`get`可以保证这一点,因为使用`get`会在创建`imgs`的代码与使用它的代码之间的关系之前创建。有关关系之前发生的更多信息,请参阅[并发](../../essential/concurrency/index.html)课程中的[内存一致性错误](../../essential/concurrency/memconsist.html)
实际上有两种方法可以检索`doInBackground`返回的对象。
......
......@@ -4,7 +4,7 @@
现在我们来看一个名为`BasicDnD`的简单演示,它向您展示免费获得的内容。从屏幕截图中可以看出,BasicDnD 包含一个表,一个列表,一个树,一个颜色选择器,一个文本区域和一个文本字段。
除列表的外,所有这些组件都是标准的开箱即用组件*。此列表已自定义,以显示一个对话框,显示丢弃的位置,如果接受丢弃。_
除列表的外,所有这些组件都是标准的*开箱即用组件*。此列表已自定义,以显示一个对话框,显示丢弃的位置,如果接受丢弃。
以下区域接受下降:
......
......@@ -151,7 +151,7 @@ After invoking passMethod, x = 3
## 传递参考数据类型参数
参考数据类型参数(例如对象)也通过值传递到方法*中。这意味着当方法返回时,传入的引用仍然引用与以前相同的对象。*但是*,如果对象的字段*的值具有适当的访问级别,则可以在方法中更改*。_
参考数据类型参数(例如对象)也通过值传递到方法中。这意味着当方法返回时,传入的引用仍然引用与以前相同的对象。*但是*,如果对象的字段的值具有适当的访问级别,则可以在方法中更改。
例如,考虑移动`Circle`对象的任意类中的方法:
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/uiswing/events/treewillexpandlistener.html](https://docs.oracle.com/javase/tutorial/uiswing/events/treewillexpandlistener.html)
_tree-will-expand_ 监听器可防止[](../components/tree.html)节点扩展或折叠。要在发生扩展或崩溃后立即通知*,您应该使用*树扩展监听器*。_
_tree-will-expand_ 监听器可防止[](../components/tree.html)节点扩展或折叠。要在发生扩展或崩溃后*立即通知*,您应该使用*树扩展监听器*
该演示将一个 tree-will-expand 监听器添加到[如何编写树扩展监听器](treeexpansionlistener.html)中讨论的`TreeExpandEventDemo`示例中。这里添加的代码演示了 _tree-will-expand_ 监听器可以防止节点扩展和崩溃:每次尝试扩展节点时,监听器都会提示您进行确认。
......
......@@ -106,7 +106,7 @@ class MyPanel extends JPanel {
但最重要的变化是`repaint`方法的调用。此方法由`java.awt.Component`定义,并且是允许您以编程方式重绘任何给定组件的表面的机制。它有一个无参数版本(重新绘制整个组件)和一个多参数版本(仅重新绘制指定区域。)此区域也称为*剪辑*。调用`repaint`的多 arg 版本需要一些额外的努力,但保证您的绘图代码不会浪费重新绘制未更改的屏幕区域的周期。
因为我们手动设置剪辑,所以我们的`moveSquare`方法不是一次调用重绘方法,而是调用两次。第一次调用告诉 Swing 重新绘制以前之前的方块*所在的组件区域(继承的行为使用 UI 委托以当前背景颜色填充该区域。)第二次调用绘制了区域广场*目前*所在的组件。值得注意的一点是,尽管我们在同一个事件处理器中连续两次调用了重绘,但 Swing 足够聪明,可以在一次绘制操作中获取该信息并重新绘制屏幕的这些部分。换句话说,Swing 不会连续两次重新绘制该组件,即使这是代码似乎正在执行的操作。_
因为我们手动设置剪辑,所以我们的`moveSquare`方法不是一次调用重绘方法,而是调用两次。第一次调用告诉 Swing 重新绘制以前之前的方块*所在的组件区域*(继承的行为使用 UI 委托以当前背景颜色填充该区域。)第二次调用绘制了区域广场*目前*所在的组件。值得注意的一点是,尽管我们在同一个事件处理器中连续两次调用了重绘,但 Swing 足够聪明,可以在一次绘制操作中获取该信息并重新绘制屏幕的这些部分。换句话说,Swing 不会连续两次重新绘制该组件,即使这是代码似乎正在执行的操作。
练习:
......
......@@ -5,7 +5,7 @@
* 在 Swing 中,绘画以`paint`方法开始,然后调用`paintComponent``paintBorder``paintChildren`。当组件首次被绘制,调整大小或被另一个窗口隐藏后变为暴露时,系统将自动调用此方法。
* 通过调用组件的`repaint`方法完成程序重绘。*不是*直接调用`paintComponent`。调用`repaint`会使绘制子系统采取必要的步骤,以确保在适当的时间调用`paintComponent`方法。
* `repaint`的多参数版本允许您缩小组件的*剪辑矩形*(受绘画操作影响的屏幕部分),以便绘画变得更有效。我们在`moveSquare`方法中使用了这种技术,以避免重新绘制未更改的屏幕部分。此方法还有一个无参数版本,它将重新绘制组件的整个表面区域。
* 因为我们缩小了剪辑矩形,我们的`moveSquare`方法不会调用`repaint`一次,而是调用两次。第一次调用重新绘制以前之前的方块*所在的组件区域(继承的行为是用当前背景颜色填充区域。)第二次调用绘制正方形组件的区域*目前*是。_
* 因为我们缩小了剪辑矩形,我们的`moveSquare`方法不会调用`repaint`一次,而是调用两次。第一次调用重新绘制以前之前的方块*所在的组件区域*(继承的行为是用当前背景颜色填充区域。)第二次调用绘制正方形组件的*目前*区域。
* 您可以在同一个事件处理器中多次调用`repaint`,但 Swing 将获取该信息并在一次操作中重新绘制该组件。
* 对于具有 UI 委托的组件,您应该将`Graphics`参数与行`super.paintComponent(g)`作为`paintComponent`覆盖中的第一行代码传递。如果不这样做,那么您的组件将负责手动绘制其背景。您可以通过注释掉该行并重新编译来查看背景不再被绘制来进行实验。
* 通过将我们的新代码分解为单独的`RedSquare`类,应用程序维护面向对象的设计,这使得`MyPanel`类的`paintComponent`方法不会混乱。绘画仍然有效,因为我们通过调用`paintSquare(Graphics g)`方法将`Graphics`对象传递到红色方块。请记住,此方法的名称是我们从头开始创建的名称;我们没有从 Swing API 中的任何地方覆盖`paintSquare`
\ No newline at end of file
......@@ -10,7 +10,7 @@
[`PriorityQueue`](https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html) 类是基于*堆*数据结构的优先级队列。此队列根据构造时指定的顺序对元素进行排序,这可以是元素的自然顺序或由显式`Comparator`强加的排序。
队列检索操作 - `poll``remove``peek``element` - 访问队列头部的元素。队列的*是关于指定排序的最小元素。如果多个元素被绑定为最小值,则头部是这些元素之一;关系被任意打破。_
队列检索操作 - `poll``remove``peek``element` - 访问队列头部的元素。队列的*头*是关于指定排序的最小元素。如果多个元素被绑定为最小值,则头部是这些元素之一;关系被任意打破。
`PriorityQueue`及其迭代器实现`Collection``Iterator`接口的所有可选方法。方法`iterator`中提供的迭代器无法保证以任何特定顺序遍历`PriorityQueue`的元素。对于有序遍历,请考虑使用`Arrays.sort(pq.toArray())`
......
......@@ -136,7 +136,7 @@ English (United States), US Dollar: $9,876,543.21
[ISO 4217](http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/currency_codes.htm) 是国际标准组织发布的标准。它指定三个字母的代码(和等效的三位数字代码)来表示货币和资金。该标准由外部机构维护,独立于 Java SE 平台发布。
假设一个国家采用不同的货币,ISO 4217 维护机构发布货币更新。要实现此更新,从而在运行时取代默认货币,请创建名为`_&lt; JAVA_HOME&gt;的属性文件。_ /lib/currency.properties` 。此文件包含 [ISO 3166](http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm) 国家/地区代码的键/值对以及 ISO 4217 货币数据。值部分由三个以逗号分隔的 ISO 4217 货币值组成:字母代码,数字代码和次要单元。以散列字符(`#`)开头的任何行都被视为注释行。例如:
假设一个国家采用不同的货币,ISO 4217 维护机构发布货币更新。要实现此更新,从而在运行时取代默认货币,请创建名为`<JAVA_HOME>/lib/currency.properties`的属性文件。此文件包含 [ISO 3166](http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm) 国家/地区代码的键/值对以及 ISO 4217 货币数据。值部分由三个以逗号分隔的 ISO 4217 货币值组成:字母代码,数字代码和次要单元。以散列字符(`#`)开头的任何行都被视为注释行。例如:
```java
# Sample currency property for Canada
......
......@@ -146,15 +146,15 @@ JDBC 驱动程序有许多可能的实现。这些实现分类如下:
| `MYSQLDRIVER` | MySQL 驱动程序的完整路径名。对于 Connector / J,这通常是`_&lt; Connector / J 安装目录&gt;_ / mysql-connector-java- _version-number_ .jar` 。 |
| `JAVADBDRIVER` | Java DB 驱动程序的完整路径名。这通常是`_&lt; Java DB 安装目录&gt;_ /lib/derby.jar` 。 |
| `XALANDIRECTORY` | 包含 Apache Xalan 的目录的完整路径名。 |
| `CLASSPATH` | JDBC 教程使用的类路径。*您无需更改此值。_ |
| `CLASSPATH` | JDBC 教程使用的类路径。*您无需更改此值* |
| `XALAN` | 文件的完整路径名`xalan.jar`。 |
| `DB.VENDOR` | 值`derby``mysql`取决于您是分别使用 Java DB 还是 MySQL。本教程使用此值构造连接到 DBMS 所需的 URL,并标识特定于 DBMS 的代码和 SQL 语句。 |
| `DB.DRIVER` | JDBC 驱动程序的标准类名。对于 Java DB,这是`org.apache.derby.jdbc.EmbeddedDriver`。对于 MySQL,这是`com.mysql.jdbc.Driver`。 |
| `DB.HOST` | 托管 DBMS 的计算机的主机名。 |
| `DB.PORT` | 托管 DBMS 的计算机的端口号。 |
| `DB.SID` | 教程创建和使用的数据库的名称。 |
| `DB.URL.NEWDATABASE` | 用于在创建新数据库时连接到 DBMS 的连接 URL。*您无需更改此值。_ |
| `DB.URL` | 用于连接到 DBMS 的连接 URL。*您无需更改此值。_ |
| `DB.URL.NEWDATABASE` | 用于在创建新数据库时连接到 DBMS 的连接 URL。*您无需更改此值* |
| `DB.URL` | 用于连接到 DBMS 的连接 URL。*您无需更改此值* |
| `DB.USER` | 有权访问 DBMS 中的数据库的用户的名称。 |
| `DB.PASSWORD` | `DB.USER`中指定的用户密码。 |
| `DB.DELIMITER` | 用于分隔 SQL 语句的字符。*请勿更改此值。*它应该是分号字符(`;`)。 |
......
......@@ -125,7 +125,7 @@
### 使用 Apache Ant 创建表
要创建与教程示例代码一起使用的表,请在目录`_&lt; JDBC 教程目录&gt;中运行以下命令。_`
要创建与教程示例代码一起使用的表,请在目录`<JDBC 教程目录>`中运行以下命令
```java
ant setup
......
......@@ -88,7 +88,7 @@ java -cp /home/ann/src:/home/ann/public_html/classes/compute.jar
上面的`java`命令定义了以下系统属性:
* `java.rmi.server.codebase`属性指定位置,即代码库 URL,从中可以下载来自此服务器的*的定义。如果代码库指定了目录层次结构(而不​​是 JAR 文件),则必须在代码库 URL 的末尾包含一个尾部斜杠。_
* `java.rmi.server.codebase`属性指定位置,即代码库 URL,从中可以下载来自此服务器的*类*的定义。如果代码库指定了目录层次结构(而不​​是 JAR 文件),则必须在代码库 URL 的末尾包含一个尾部斜杠。
* `java.rmi.server.hostname`属性指定要放入此 Java 虚拟机中导出的远程对象的存根中的主机名或地址。此值是客户端在尝试传递远程方法调用时使用的主机名或地址。默认情况下,RMI 实现使用`java.net.InetAddress.getLocalHost` API 指示的服务器 IP 地址。但是,有时,此地址不适用于所有客户端,并且完全限定的主机名将更有效。要确保 RMI 使用可从所有潜在客户端路由的服务器的主机名(或 IP 地址),请设置`java.rmi.server.hostname`属性。
* `java.security.policy`属性用于指定包含您要授予的权限的策略文件。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册