A.4.4 Java接口函数

以下函数是Java接口的核心。它们提供了一种创建Java对象、获取和设置其数据字段以及调用Java方法的方法,这些方法将结果返回给Octave。

 
: jobj = javaObject (classname)
: jobj = javaObject (classname, arg1, …)

创建类的Java对象classsname,通过使用参数调用类构造函数arg1, …

下面的第一个示例创建了一个未初始化的对象,而第二个示例为构造函数提供了一个初始参数。

x = javaObject ("java.lang.StringBuffer")
x = javaObject ("java.lang.StringBuffer", "Initial string")

详见: javaMethod, javaArray.

广告
 
: jary = javaArray (classname, sz)
: jary = javaArray (classname, m, n, …)

创建大小为的Java数组sz具有类元素classname.

classname可以是表示类的Java对象,也可以是包含完全限定类名的字符串。对象的大小也可以用单独的整数参数指定m, n

生成的数组未初始化。如果classname是引用类型,或默认值(通常为0),如果classname是一个基元类型。

示例代码:

jary = javaArray ("java.lang.String", 2, 2);
jary(1,1) = "Hello";

详见: javaObject.

广告

Octave中有许多不同的变量类型,但只有一种通过创建javaObject可以使用Java函数。在将Java与未知对象一起使用之前,可以使用检查类型isjava.

 
: tf = isjava (x)

如果返回truex是一个Java对象。

详见: class, typeinfo, isa, javaObject.

广告

一旦创建了一个对象,就很自然地会查找该对象具有哪些字段,并读取(获取)和写入(设置)这些字段。

在Octave中fieldnames结构体的函数被重载以返回Java对象的字段。例如

dobj = javaObject ("java.lang.Double", pi);
fieldnames (dobj)
⇒
{
  [1,1] = public static final double java.lang.Double.POSITIVE_INFINITY
  [1,2] = public static final double java.lang.Double.NEGATIVE_INFINITY
  [1,3] = public static final double java.lang.Double.NaN
  [1,4] = public static final double java.lang.Double.MAX_VALUE
  [1,5] = public static final double java.lang.Double.MIN_NORMAL
  [1,6] = public static final double java.lang.Double.MIN_VALUE
  [1,7] = public static final int java.lang.Double.MAX_EXPONENT
  [1,8] = public static final int java.lang.Double.MIN_EXPONENT
  [1,9] = public static final int java.lang.Double.SIZE
  [1,10] = public static final java.lang.Class java.lang.Double.TYPE
}

物体与结构体的类比被带入阅读和写作物体field。若要读取字段,将使用“”对对象进行索引.结构体中的运算符。这是读取字段的首选方法,但Octave也提供了一个读取字段的函数接口java_get。下面显示了这两种样式的示例。

dobj = javaObject ("java.lang.Double", pi);
dobj.MAX_VALUE
⇒  1.7977e+308
java_get ("java.lang.Float", "MAX_VALUE")
⇒  3.4028e+38
 
: val = java_get (obj, name)

获取字段的值nameobj.

对于静态场,obj可以是表示相应类的完全限定名称的字符串。

obj是一个常规的Java对象,类似索引的结构体可以用作快捷语法。例如,以下两个语句是等效的

  java_get (x, "field1")
  x.field1

详见: java_set, javaMethod, javaObject.

广告
 
: obj = java_set (obj, name, val)

设置字段的值nameobjval.

对于静态场,obj可以是表示相应Java类的完全限定名称的字符串。

obj是一个常规的Java对象,类似索引的结构体可以用作快捷语法。例如,以下两个语句是等效的

  java_set (x, "field1", val)
  x.field1 = val

详见: java_get, javaMethod, javaObject.

广告

要查看对象可以调用哪些函数,请使用methods。例如,使用以前创建的dobj:

methods (dobj)
⇒
Methods for class java.lang.Double:
boolean equals(java.lang.Object)
java.lang.String toString(double)
java.lang.String toString()
...

调用具有相同结构体索引运算符的对象的方法.isused。Octave还提供了一个函数接口,用于通过调用另一个对象的方法javaMethod。下面显示了显示两种样式的示例。

dobj = javaObject ("java.lang.Double", pi);
dobj.equals (3)
⇒  0
javaMethod ("equals", dobj, pi)
⇒  1
 
: ret = javaMethod (methodname, obj)
: ret = javaMethod (methodname, obj, arg1, …)

调用方法methodname在Java对象上obj与参数arg1, ….

对于静态方法,obj可以是表示相应类的完全限定名称的字符串。

obj是一个常规的Java对象,类似索引的结构体可以用作快捷语法。例如,以下两个语句是等效的

  ret = javaMethod ("method1", x, 1.0, "a string")
  ret = x.method1 (1.0, "a string")

javaMethod返回方法调用的结果。

详见: methods, javaObject.

广告

以下三个函数用于显示和修改Java虚拟机使用的类路径。这与Octave的完全不同路径变量,JVM使用它来查找要执行的正确代码。

 
: javaclasspath ()
: dpath = javaclasspath ()
: [dpath, spath] = javaclasspath ()
: clspath = javaclasspath (what)

以字符串数组的形式返回Java虚拟机的类路径。

如果在没有输入的情况下调用:

如果使用单个输入参数调用what:

"-dynamic"

返回动态类路径。

广告
"-static"

返回静态类路径。

广告
"-all"

在单个cellstr中返回静态和动态类路径。

广告

详见: javaaddpath, javarmpath.

广告
 
: javaaddpath (clspath)
: javaaddpath (clspath1, …)
: javaaddpath ({clspath1, …})
: javaaddpath (…, "-end")

添加clspath到Java虚拟机的动态类路径的开头。

clspath可以是其中的目录找到文件,或者罐子包含Java类的文件。可以通过指定额外的参数或使用字符串的cellarray来同时添加多个路径。

如果最后的参数是"-end",将新元素附加到当前类路径的末尾。

详见: javarmpath, javaclasspath.

广告
 
: javarmpath (clspath)
: javarmpath (clspath1, …)
: javarmpath ({clspath1, …})

去除clspath从Java虚拟机的动态类路径。

clspath可以是其中的目录找到文件,或者罐子包含Java类的文件。通过指定额外的参数或使用字符串的元胞数组,可以同时删除多个路径。

详见: javaaddpath, javaclasspath.

广告

以下函数提供Octave和Java虚拟机之间接口的信息和控制。

 
: msg = javachk (feature)
: msg = javachk (feature, caller)

检查Java是否存在feature在当前会话中。如果feature不可用、未启用或无法识别。

可能识别的函数包括:

"awt"

GUI的抽象窗口工具包。

广告
"desktop"

交互式桌面正在运行。

广告
"jvm"

Java虚拟机。

广告
"swing"

用于轻量级GUI的Swing组件。

广告

如果feature不支持,带有字段的标量结构体"message""identifier"返回。该field"message"包含一条错误消息,其中提到feature以及指定的可选用户caller。此结构体可用于传递到error作用

如果feature支持并且可用,则返回一个带有字段的空结构体数组"message""identifier".

javachk确定Octave会话中是否有特定的Java函数可用。此函数是为脚本提供的,这些脚本可以根据Java或特定Java运行时函数的可用性来更改其行为。

兼容性说明:该函数"desktop"永远不可用,因为Octave没有基于Java的桌面。

详见: usejava, error.

广告
 
: tf = usejava (feature)

如果Java元素feature可用。

可能的函数包括:

"awt"

GUI的抽象窗口工具包。

广告
"desktop"

交互式桌面正在运行。

广告
"jvm"

Java虚拟机。

广告
"swing"

用于轻量级GUI的Swing组件。

广告

usejava确定Octave会话中是否有特定的Java函数可用。此函数是为脚本提供的,这些脚本可以根据Java的可用性更改其行为。函数"desktop"总是返回false因为Octave没有基于Java的数据sktop。如果Octave是使用Java接口编译的,并且安装了Java,则可能会提供其他函数。

详见: javachk.

广告
 
: javamem ()
: jmem = javamem ()

显示Java虚拟机(JVM)的当前内存使用情况,并运行内存收集器。

当没有给出返回参数时,信息会打印到屏幕上。否则,输出元胞数组jmem包含最大内存、总内存和可用内存(以字节为单位)。

所有基于Java的子程序都在JVM的共享内存池中运行,这是JVM语句的专用内存,与计算机的总内存(包括物理RAM和硬盘上的虚拟内存/交换空间)分开。

可以使用文件配置最大允许内存使用率java.端口。此文件所在的目录从环境变量决定OctaveJAVA_DIR 。如果未设置,则为目录,其中javaaddpath.m而是使用resident(通常Octave主机 /份额/Octave/Octave版本 /m/java/).

java.端口是一个纯文本文件,每行有一个参数。默认的初始内存大小和默认的最大内存大小(两者都依赖于系统)可以被重写,如下所示:

-Xms64m

-Xmx512米

(在本例中以兆字节为单位)。如果系统的可用物理内存有限或出现Java内存错误,您可以根据自己的需求调整这些值。

"Total memory"是操作系统当前赋值给JVM的内容,取决于实际和活动内存的使用情况。"Free memory"不言自明。在运行基于Java的Octave函数期间,从于Java自己的清理和操作系统的内存管理,Total和Free内存量会有所不同。

广告
 
: val = java_matrix_autoconversion ()
: old_val = java_matrix_autoconversion (new_val)
: old_val = java_matrix_autoconversion (new_val, "local")

查询或设置内部变量,该变量控制Java数组是否自动转换为Octave矩阵。

默认值为false。

当从具有的函数内部调用时"local"参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。

详见: java_unsigned_autoconversion, debug_java.

广告
 
: val = java_unsigned_autoconversion ()
: old_val = java_unsigned_autoconversion (new_val)
: old_val = java_unsigned_autoconversion (new_val, "local")

查询或设置内部变量,该变量控制整数类在以下情况下的转换方式java_matrix_autoconversion已启用。

启用时,Byte或Integer类的Java数组将分别转换为uint8或uint32类的矩阵。默认值为true。

当从具有的函数内部调用时"local"参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。

详见: java_matrix_autoconversion, debug_java.

广告
 
: val = debug_java ()
: old_val = debug_java (new_val)
: old_val = debug_java (new_val, "local")

查询或设置内部变量,该变量决定是否打印有关JVM初始化和任何Java异常的额外调试信息。

当从具有的函数内部调用时"local"参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。

详见: java_matrix_autoconversion, java_unsigned_autoconversion.

广告

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2