以下函数是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)
¶获取字段的值name的obj.
对于静态场,obj可以是表示相应类的完全限定名称的字符串。
当obj是一个常规的Java对象,类似索引的结构体可以用作快捷语法。例如,以下两个语句是等效的
java_get (x, "field1") x.field1
详见: java_set, javaMethod, javaObject.
obj =
java_set (obj, name, val)
¶设置字段的值name的obj到val.
对于静态场,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的完全不同PATH
变量,JVM使用它来查找要执行的正确代码。
()
¶dpath =
javaclasspath ()
¶[dpath, spath] =
javaclasspath ()
¶clspath =
javaclasspath (what)
¶以字符串数组的形式返回Java虚拟机的类路径。
如果在没有输入的情况下调用:
如果使用单个输入参数调用what:
"-dynamic"
返回动态类路径。
"-static"
返回静态类路径。
"-all"
在单个cellstr中返回静态和动态类路径。
详见: javaaddpath, javarmpath.
(clspath)
¶(clspath1, …)
¶({clspath1, …})
¶(…, "-end")
¶添加clspath到Java虚拟机的动态类路径的开头。
clspath可以是其中的目录.class找到文件,或者.jar包含Java类的文件。可以通过指定额外的参数或使用字符串的cellarray来同时添加多个路径。
如果最后的参数是"-end"
,将新元素附加到当前类路径的末尾。
详见: javarmpath, javaclasspath.
(clspath)
¶(clspath1, …)
¶({clspath1, …})
¶去除clspath从Java虚拟机的动态类路径。
clspath可以是其中的目录.class找到文件,或者.jar包含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的桌面。
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.
()
¶jmem =
javamem ()
¶显示Java虚拟机(JVM)的当前内存使用情况,并运行内存收集器。
当没有给出返回参数时,信息会打印到屏幕上。否则,输出元胞数组jmem包含最大内存、总内存和可用内存(以字节为单位)。
所有基于Java的子程序都在JVM的共享内存池中运行,这是JVM语句的专用内存,与计算机的总内存(包括物理RAM和硬盘上的虚拟内存/交换空间)分开。
可以使用文件配置最大允许内存使用率java.opts。此文件所在的目录从环境变量决定OCTAVE_JAVA_DIR
。如果未设置,则为目录,其中javaaddpath.m而是使用resident(通常OCTAVE_HOME
/share/octave/OCTAVE_VERSION
/m/java/).
java.opts是一个纯文本文件,每行有一个参数。默认的初始内存大小和默认的最大内存大小(两者都依赖于系统)可以被重写,如下所示:
-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"
参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。
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"
参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。
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