MATLAB®外部接口编程在MATLAB中使用Java2本章概述 MATLAB和Java接口概述 Java接口的能力 创建Java对象 引入Java类 执行Java对象方法 浏览对象的方法 使用Java对象引用 处理数据 Java数据 使用Java编写GUI 使用Java与Internet连接3MATLABJava接口概述 Java是什么?f一种面向对象的编程语言f平台独立yJava源代码(.java)被编译成为Java字节码(.class).yJava虚拟机(JVM)负责解释Java字节码,转变成为本地计算机的处理器指令执行f由于其平台无关性和可移植性,Java在互联网上被广泛应用 从MATLAB5.3起,Java虚拟机就已经被包含fMATLAB的集成开发环境(IDE)使用Java来实现4Java接口的能力 MATLAB的Java接口可以:f调用JavaAPI类(class)和包(package),完成核心功能f调用第三方Java类(class)f在MATLAB环境下创建Java对象f使用Java语法或者MATLAB语法使用Java对象的方法f在Java对象和MATLAB之间交互数据 检查当前使用的Java虚拟机(JVM)版本:version–javaeditjavafrommatlab.m%Containscommandsthataredisplayedontheslide5创建Java对象 使用javaObject方法:f当使用的Java类的名称超过31个字符时f利用字符串表示一个类的名称作为函数的输入,可以方便地接受用户输入指定类调用Java类构造器fa=java.awt.Frame('FrameA')(推荐使用)fb=javaObject('java.awt.Frame','FrameB')(被选语法形式)6导入Java类导入Java类:importjava.awt.*调用构造方法:f2=Frame('SecondFrame')已经导入的类:import清除导入的类:clearimportJavaPackageJavaClassAJavaClassBDataA1DataA2...MethodMA1MethodMA2...7执行Java方法setTitle(fa,'newtitle')t=getTitle(fa)t=newtitle执行Java方法MATLAB语法Java语法fb.setTitle('newtitletoo')t=fb.getTitlet=newtitletoo8浏览Java对象的方法 浏览Java对象的方法methodsjava.lang.DoubleMethodsforclassjava.lang.Double:DoublefindstrsetxorNumberfloatValueshortValue... 获取完成的描述methodsjava.lang.Double–full9浏览Java对象的方法(续)通过图形用户界面浏览Java对象的方法:methodsviewjava.lang.Double10引用 Java对象使用引用:fc=fbfc=java.awt.Frame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,resizable,title=newtitletoo]fc.setTitle('FrameC')fc.getTitleans=FrameC这时,fc和fb引用同一个对象:fb.getTitleans=FrameC11引用(续)fb=java.awt.Frame('FrameB')fb引用了java.awt.Frame的对象java.awt.Frame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,resizable,title=FrameB]fbfcfc=fb;赋值操作创建了针对同一个对象的另一个引用fc.setTitle('FrameC')调用方法修改被引用的对象java.awt.Frame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,resizable,title=FrameC]12对象的属性get(f2)set(f2,'Title')getTitle(f2)%Sometimesmethodsareavailableforparticularproperties对象的属性获取属性设置属性与句柄图形对象的操作十分类似!set(f2,'Title','NewTitle)13使用数据 Java方法返回值使用Java的数据类型:fpoint=getLocation(f2)fpoint=java.awt.Point[x=0,y=0] 在MATLAB环境中创建的对象保留其Java数据类型:jD=java.lang.Double(5)jD=5.0class(jD)ans=java.lang.Double14数据类型转换 在Java对象和MATLAB变量之间的数据类型转换往往自动完成,一般地,Java数据类似于在MATLAB环境下创建的数据: 存在例外:fJava方法返回的数值类型变量转换成为相关的MATLAB类型:jd1=java.lang.Double(33);class(floatValue(jd1))ans=doubleclass(isInfinite(jd1))ans=logicalfJava字符串转变成为MATLAB字符数组;Java字符串数组转变成为MATLAB元胞数组15Java数组 使用java_array创建Java对象数组:dArray=java_array('java.lang.Double',3,4);fori=1:3forj=1:4dArray(i,j)=java.lang.Double(i*10+j);endenddArraydArray=java.lang.Double[][]:[11.00][12.00][13.00][14.00][21.00][22.00][23.00][24.00][31.00][32.00][33.00][34.00]16Java数组(续) Java数组是一维向量f2-Djava数组实际是1-Djava数组的数组f3-Djava数据实际是1-D数组,每一个元素都包含了一个数组的数组 Java数组以行优先.dArray=[11][12][13][14][21][22][23][24][31][32][33][34]dArray(2)[21][22][23][24]RowMajor17Java数组(续) Java数组可以任意创建,它的每一行或列不一定具有同样的元素个数,也就是说不一定是完整的矩阵:dArray(2,5)=java.lang.Double(25)dArray=java.lang.Double[][]:[4elementarray][5elementarray][4elementarray] 很多MATLAB方法被重载,可以操作Java数组size(dArray)ans=3.001.0018例子:JavaGUIeditsampleguisampleguiHelloWorldHelloWorldHelloWorld19Samplegui代码20使用Java连接Internet示例:读取URL 构建URL对象. 打开对应的连接 设置读取流缓冲 读取文本构建URL:url=java.net.URL([');打开对应连接:is=openStream(url);editurldemo21使用Java连接Internet(续)设置读取流缓冲:步骤1:创建输入流isr=java.io.InputStreamReader(is);步骤2:创建读取缓冲br=java.io.BufferedReader(isr);读取文本fork=1:108%SkipinitialHTMLformattingliness=readLine(br);endfork=1:4%Readthefirst4linesoftexts=readLine(br);endurldemo%RuntheURLdemofile22本章小节 MATLAB和Java接口概述 Java接口的能力 创建Java对象 引入Java类 执行Java对象方法 浏览对象的方法 使用Java对象引用 处理数据 Java数据 使用Java编写GUI 使用Java与Internet连接