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具有类元素类的名称.

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

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

示例代码:

jary=javaArray(“java.lang.String”,2,2);jary(1,1)=“你好”;

详见: javaObject.

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

 
: tf = isjava (x)

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

详见: , 类型信息, isa, javaObject.

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

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

dobj=javaObject(“java.lang.Double”,pi);字段名(dobj)⇒{[1,1]=公共静态最终双精度java.lang.double.POSITIVE_INFINITY[1,2]=公共静态最后双精度java.lang.double.NEGATIVE_INFINITIY[1,3]=公共静态终精度java.lang.double.NaN[1,4]=公共静态末精度java.lang_double.MAX_VALUE[1,5]=公共静电最终双精度java.lang.double.MIN_NORMAL[1,6]=公共静电最后双精度java.long.double_MIN_VALUE[1,7]=公共静态终端int java.lang.Ddouble.MAX_EXPONENT[1,8]=公共静态终极int java.lang.ddouble.MIN _EXPONENT[1,9]=公共静态最终int java.lang.double.SIZE[1,10]=公共静态最后int java.lang.Class java.lang.Ddouble.TYPE}

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

dobj=javaObject(“java.lang.Double”,pi);dobj。最大值(_V)⇒  1.7977e+308java_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.

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

方法(dobj)⇒类java.lang.Double的方法:boolean等于(java.lang.Object)java.lang.String toString(Double)java.lang.String to String()。。。

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

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

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

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

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

ret=javaMethod(“method1”,x,1.0,“字符串”)ret=x.method1(1.0,“一个字符串”)

javaMethod返回方法调用的结果。

详见: 方法, javaObject.

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

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

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

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

  • 如果没有指定输出,则将动态和静态类路径打印到标准输出。
  • 如果一个输出值dpath被指定,结果是动态类路径。
  • 如果两个输出值dpath飞溅被指定时,第一个变量将包含动态类路径,第二个变量将包括静态类路径。

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

动态

返回动态类路径。

静止的

返回静态类路径。

全部的

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

详见: javaaddpath, javarmpath.

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

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

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

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

详见: javarmpath, javaclasspath.

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

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

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

详见: javaaddpath, javaclasspath.

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

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

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

可能识别的函数包括:

awt

GUI的抽象窗口工具包。

桌面

交互式桌面正在运行。

jvm

Java虚拟机。

摆动

用于轻量级GUI的Swing组件。

如果特色不支持,带有字段的标量结构体message标识符返回。该fieldmessage包含一条错误消息,其中提到特色以及指定的可选用户呼叫者。此结构体可用于传递到错误作用

如果特色支持并且可用,则返回一个带有字段的空结构体数组message标识符.

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

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

详见: 使用java, 错误.

 
: tf = usejava (feature)

如果Java元素特色可用。

可能的函数包括:

awt

GUI的抽象窗口工具包。

桌面

交互式桌面正在运行。

jvm

Java虚拟机。

摆动

用于轻量级GUI的Swing组件。

使用java确定Octave会话中是否有特定的Java函数可用。此函数是为脚本提供的,这些脚本可以根据Java的可用性更改其行为。函数桌面总是返回错误的因为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内存错误,您可以根据自己的需求调整这些值。

总内存是操作系统当前赋值给JVM的内容,取决于实际和活动内存的使用情况。可用内存不言自明。在运行基于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。

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

详见: java_unsigned_autoversion, 调试_java.

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

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

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

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

详见: java_matrix_autoversion, 调试_java.

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

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

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

详见: java_matrix_autoversion, java_unsigned_autoversion.


版权所有 © 2024 Octave中文网

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