Java Application是什么,怎么编写相应程序

Java Application是什么,怎么编写相应程序,第1张

java Application 就是Java应用程序

public class Student {

public static void main(String[] args) {

Student student = new Student();

}

}

JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系结构的缩写 通过 JPDA 提供的 API 开发人员可以方便灵活的搭建 Java 调试应用程序 JPDA 主要由三个部分组成 Java 虚拟机工具接口(JVMTI) Java 调试线协议(JDWP) 以及 Java 调试接口(JDI) 本系列将会详细介绍这三个模块的内部细节 通过实例为读者揭开 JPDA 的面纱 本文是该系列的第一篇 将会着重从整体上介绍 JPDA 的各个组成 阐述它们彼此之间的内在关联

JPDA 概述

所有的程序员都会遇到 bug 对于运行态的错误 我们往往需要一些方法来观察和测试运行态中的环境 在 Java 程序中 最简单的 您是否尝试过使用 System out println() 来输出您的 Java 程序的执行中的各种变量状态来发现您的 Java 程序运行时的问题?这种方式方便易用 在一些简单的情况下能够解决您的问题 但是如果当您的程序运行在远程环境上 或者当前环境不允许控制台终端输出(比如 考虑一下虚拟机初始化之时) 您无法获取终端输出的时候呢?或者 如果您根本无法本地修改运行您的程序?

无须担心 您可以通过很多的调试工具来帮助您解决这个问题 常见的 IDE 都附带一个非常直观简单的调试工具 比如 Eclipse(图 )就提供一个功能非常全面 *** 作非常简单的调试器

图 使用 Eclipse 调试 Java 程序

其他的一些常见的 Java IDE 比如 Netbeans 和 IntelliJ 等等也都提供了类似的功能 您甚至能不用 IDE 提供的图形界面 使用 JDK 自带的 jdb 工具 以文本命令的形式来调试您的 Java 程序 这些形形 的调试器都支持本地和远程的程序调试 那么它们是如何被开发的?它们之间存在着什么样的联系呢?我们不得不提及 Java 的调试体系—— JPDA

我们知道 Java 程序都是运行在 Java 虚拟机上的 我们要调试 Java 程序 事实上就需要向 Java 虚拟机请求当前运行态的状态 并对虚拟机发出一定的指令 设置一些回调等等 那么 Java 的调试体系 就是虚拟机的一整套用于调试的工具和接口

对于 Java 虚拟机接口熟悉的人来说 您一定还记得 Java 提供了两个接口体系 JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface) 而它们 以及在 Java SE 中准备代替它们的 JVMTI(Java Virtual Machine Tool Interface) 都是 Java 平台调试体系(Java Platform Debugger Architecture JPDA)的重要组成部分 Java SE 自 版就开始推出 Java 平台调试体系结构(JPDA)工具集 而从 JDK x 开始 Java SDK 就提供了对 Java 平台调试体系结构的直接支持 顾名思义 这个体系为开发人员提供了一整套用于调试 Java 程序的 API 是一套用于开发 Java 调试工具的接口和协议 本质上说 它是我们通向虚拟机 考察虚拟机运行态的一个通道 一套工具 理解这一点对于学习 JPDA 非常重要

换句话说 通过 JPDA 这套接口 我们就可以开发自己的调试工具 通过这些 JPDA 提供的接口和协议 调试器开发人员就能根据特定开发者的需求 扩展定制 Java 调试应用程序 开发出吸引开发人员使用的调试工具 前面我们提到的 IDE 调试工具都是基于 JPDA 体系开发的 区别仅仅在于它们可能提供了不同的图形界面 具有一些不同的自定义功能 另外 我们要注意的是 JPDA 是一套标准 任何的 JDK 实现都必须完成这个标准 因此 通过 JPDA 开发出来的调试工具先天具有跨平台 不依赖虚拟机实现 JDK 版本无关等移植优点 因此大部分的调试工具都是基于这个体系的

JPDA 组成模块

JPDA 定义了一个完整独立的体系 它由三个相对独立的层次共同组成 而且规定了它们三者之间的交互方式 或者说定义了它们通信的接口 这三个层次由低到高分别是 Java 虚拟机工具接口(JVMTI) Java 调试线协议(JDWP)以及 Java 调试接口(JDI) 这三个模块把调试过程分解成几个很自然的概念 调试者(debugger)和被调试者(debuggee) 以及他们中间的通信器 被调试者运行于我们想调试的 Java 虚拟机之上 它可以通过 JVMTI 这个标准接口 监控当前虚拟机的信息 调试者定义了用户可使用的调试接口 通过这些接口 用户可以对被调试虚拟机发送调试命令 同时调试者接受并显示调试结果 在调试者和被调试着之间 调试命令和调试结果 都是通过 JDWP 的通讯协议传输的 所有的命令被封装成 JDWP 命令包 通过传输层发送给被调试者 被调试者接收到 JDWP 命令包后 解析这个命令并转化为 JVMTI 的调用 在被调试者上运行 类似的 JVMTI 的运行结果 被格式化成 JDWP 数据包 发送给调试者并返回给 JDI 调用 而调试器开发人员就是通过 JDI 得到数据 发出指令 图 展示了这个过程

图 JPDA 模块层次

当然 开发人员完全可以不使用完整的三个层次 而是基于其中的某一个层次开发自己的应用 比如您完全可以仅仅依靠通过 JVMTI 函数开发一个调试工具 而不使用 JDWP 和 JDI 只使用自己的通讯和命令接口 当然 除非是有特殊的需求 利用已有的实现会使您事半功倍 避免重复发明轮子

这三个模块我们会在后续文章中分别详细介绍 这里我们简单介绍它们的主要功能

Java 虚拟机工具接口(JVMTI)

JVMTI(Java Virtual Machine Tool Interface)即指 Java 虚拟机工具接口 它是一套由虚拟机直接提供的 native 接口 它处于整个 JPDA 体系的最底层 所有调试功能本质上都需要通过 JVMTI 来提供 通过这些接口 开发人员不仅调试在该虚拟机上运行的 Java 程序 还能查看它们运行的状态 设置回调函数 控制某些环境变量 从而优化程序性能 我们知道 JVMTI 的前身是 JVMDI 和 JVMPI 它们原来分别被用于提供调试 Java 程序以及 Java 程序调节性能的功能 在 J SE 之后 JDK 取代了 JVMDI 和 JVMPI 这两套接口 JVMDI 在最新的 Java SE 中已经不提供支持 而 JVMPI 也计划在 Java SE 后被彻底取代

Java 调试线协议(JDWP)

JDWP(Java Debug Wire Protocol)是一个为 Java 调试而设计的一个通讯交互协议 它定义了调试器和被调试程序之间传递的信息的格式 在 JPDA 体系中 作为前端(front end)的调试者(debugger)进程和后端(back end)的被调试程序(debuggee)进程之间的交互数据的格式就是由 JDWP 来描述的 它详细完整地定义了请求命令 回应数据和错误代码 保证了前端和后端的 JVMTI 和 JDI 的通信通畅 比如在 Sun 公司提供的实现中 它提供了一个名为 jdwp dll(jdwp so)的动态链接库文件 这个动态库文件实现了一个 Agent 它会负责解析前端发出的请求或者命令 并将其转化为 JVMTI 调用 然后将 JVMTI 函数的返回值封装成 JDWP 数据发还给后端

另外 这里需要注意的是 JDWP 本身并不包括传输层的实现 传输层需要独立实现 但是 JDWP 包括了和传输层交互的严格的定义 就是说 JDWP 协议虽然不规定我们是通过 EMS 还是快递运送货物的 但是它规定了我们传送的货物的摆放的方式 在 Sun 公司提供的 JDK 中 在传输层上 它提供了 socket 方式 以及在 Windows 上的 shared memory 方式 当然 传输层本身无非就是本机内进程间通信方式和远端通信方式 用户有兴趣也可以按 JDWP 的标准自己实现

Java 调试接口(JDI)

JDI(Java Debug Interface)是三个模块中最高层的接口 在多数的 JDK 中 它是由 Java 语言实现的 JDI 由针对前端定义的接口组成 通过它 调试工具开发人员就能通过前端虚拟机上的调试器来远程 *** 控后端虚拟机上被调试程序的运行 JDI 不仅能帮助开发人员格式化 JDWP 数据 而且还能为 JDWP 数据传输提供队列 缓存等优化服务 从理论上说 开发人员只需使用 JDWP 和 JVMTI 即可支持跨平台的远程调试 但是直接编写 JDWP 程序费时费力 而且效率不高 因此基于 Java 的 JDI 层的引入 简化了 *** 作 提高了开发人员开发调试程序的效率

表 总结了三个模块的不同点

表 JPDA 层次比较 模块 层次 编程语言 作用 JVMTI 底层 C 获取及控制当前虚拟机状态 JDWP 中介层 C 定义 JVMTI 和 JDI 交互的数据格式 JDI 高层 Java 提供 Java API 来远程控制被调试虚拟机

JPDA 实现

关于 Apache Harmony 项目 Apache Harmony 旨在开发出一个独立且与现有 JDK 兼容的 Java SE 实现 它以 Apache 软件许可证 版发行 它建立了一个开放的模块化运行时架构 包括虚拟机和类库之间及其内部的模块化 通过这个平台 社区能在已有实现的基础上自由定制自己的 Java 实现 或者对某个模块单独进行创新

每一个虚拟机都应该实现 JVMTI 接口 但是 JDWP 和 JDI 本身与虚拟机并非是不可分的 这三个层之间是通过标准所定义的交互的接口和协议联系起来的 因此它们可以被独立替换或取代 但不会影响到整体调试工具的开发和使用 因此 开发和使用自己的 JDWP 和 JDI 接口实现是可能的

Java 软件开发包(SDK)标准版里提供了 JPDA 三个层次的标准实现 事实上 调试工具开发人员还有很多其他开源实现可以选择 比如 Apache Harmony 提供了 JDWP 的实现 而 JDI 我们可以在 Eclipse 一个子项目 eclipse jdt debug 里找到其完整的实现(Harmony 也使用了这套实现 作为其 J SE 类库的一部分) 通过标准协议 Eclipse IDE 的调试工具就可以完全在 Harmony 的环境上运行

Java 调试接口的特点

Java 语言是第一个使用虚拟机概念的流行的编程语言 正是因为虚拟机的存在 使很多事情变得简单而轻松 掌握了虚拟机 就掌握了内存分配 线程管理 即时优化等等运行态 同样的 Java 调试的本质 就是和虚拟机打交道 通过 *** 作虚拟机来达到观察调试我们自己代码的目的 这个特点决定了 Java 调试接口和以前其他编程语言的巨大区别

以C/C++ 的调试为例 目前比较流行的调试工具是 GDB 和微软的 Visual Studio 自带的 debugger 在这种 debugger 中 首先 我们必须编译一个 debug 模式的程序 这个会比实际的 release 模式程序大很多 其次 在调试过程中 debugger 将会深层接入程序的运行 掌握和控制运行态的一些信息 并将这些信息及时返回 这种介入对运行的效率和内存占用都有一定的需求 基于这些需求 这些 Debugger 本身事实上是提供了 或者说 创建和管理了一个运行态 因此他们的程序算法比较复杂 个头都比较大 对于远端的调试 GDB 也没有很好的默认实现 当然 C/C++ 在这方面也没有特别大的需求

而Java 则不同 由于 Java 的运行态已经被虚拟机所很好地管理 因此作为 Java 的 Debugger 无需再自己创造一个可控的运行态 而仅仅需要去 *** 作虚拟机就可以了 Java 的 JPDA 就是一套为调试和优化服务的虚拟机的 *** 作工具 其中 JVMTI 是整合在虚拟机中的接口 JDWP 是一个通讯层 而 JDI 是前端为开发人员准备好的工具和运行库

从构架上说 我们可以把 JPDA 看作成是一个 C/S 体系结构的应用 在这个构架下 我们可以方便地通过网络 在任意的地点调试另外一个虚拟机上的程序 这个就很好地解决了部署和测试的问题 尤其满足解决了很多网络时代中的开发应用的需求 前端和后端的分离 也方便用户开发适合于自己的调试工具

从效率上看 由于 Java 程序本身就是编译成字节码 运行在虚拟机上的 因此调试前后的程序 内存占用都不会有大变化(仅仅是启动一个 JDWP 所需要的内存) 任意程度都可以很好地调试 非常方便 而 JPDA 构架下的几个组成部分 JDWP 和 JDI 都比较小 主要的工作可以让虚拟机自己完成

从灵活性上 Java 调试工具是建立在强大的虚拟机上的 因此 很多前沿的应用 比如动态编译运行 字节码的实时替换等等 都可以通过对虚拟机的改进而得到实现 随着虚拟机技术的逐步发展和深入 各种不同种类 不同应用领域中虚拟机的出现 各种强大的功能的加入 给我们的调试工具也带来很多新的应用

总而言之 一个先天的 可控的运行态给 Java 的调试工作 给 Java 调试接口带来了极大的优势和便利 通过 JPDA 这个标准 我们可以从虚拟机中得到我们所需要的信息 完成我们所希望的 *** 作 更好地开发我们的程序

结束语

lishixinzhi/Article/program/Java/JSP/201311/19143

java题目 编写一个应用程式,计算1~10之间各个整数的阶乘,并将结果输出到屏 public class Test {

public static void main (String[] args)

{

long result = 1;

for (int i = 1; i <= 10; i++)

{

result = i;

Systemoutprintln(result);

}

}

}

屏输出:

1

2

6

24

120

720

5040

40320

362880

3628800

资料结构:编写一个应用程式,计算并输出5!(5的阶乘)。

void main()

{

int sum=1;

for(int i = 1;i <= 5;i++)

sum = sumi;

}

sum就是结果,不知道你要的是不是这个,因为这个演算法不复杂,只是纯粹的相乘而已

用java编写:计算任意一个给定整数的阶乘,并将结果输出到萤幕上,拜托了!

public static int jiecheng(int n){ if(n <= 1){ return 1; } return njiecheng(n-1)}public void main(String[] args){ Systemoutprintln (jiecheng(9));}

编写一个JAVA应用程式,使用者从键盘只能输入整数,程式输出这些整数的乘积!

import javautilScanner;

public class Multi

{

public static void main(String[] args)

{

Scanner read = new Scanner(Systemin);

long mul=1;

long a;

a= readnextInt();

while (a!=0)

{

mul=mula;

a=readnextInt();

}

Systemoutprintln("the answer is "+mul);

}

}

这个程式要储存名字为Multijava

使用的时候,可以无限输入,遇到0就结束输入,计算成绩并输出。

编写一个java小程式 求50阶乘并输出到萤幕

Java程式:

import javamathBigInteger;public class Main { public static void main(String[] args) { Systemoutprintln(func(50)toString()); } public static BigInteger func(int n) { BigInteger f = BigIntegerONE; for(int i=2; i<=n; i++) { f = fmultiply(BigIntegervalueOf(i)); } return f; }}

执行测试:

30414093201713378043612608166064768844377641568960512000000000000

public class Test { public static void main(String[] args) { Systemoutprintln(method(5));第一种方法,用递回 int sum = 1;第二种方法用回圈 for(int i = 1;i<=5;i++){ sum=i; } Systemoutprintln(sum); } public static long method(int n){ if(n==0||n==1){ return 1; }else{ return nmethod(n-1); } }}

编写一个java应用程式,在键盘上输入数20,计算并输出1!+2!+…+20!的结果

import javautilScanner;public class exp { public static void main(String[] args) { Scanner scanner = new Scanner(Systemin); Systemoutprint("输入数:"); int n = scannernextInt(); int temp = 1, sum = 0; for (int i = 1; i <= n; i++) { temp储存每一个数的阶乘 temp = temp i; sum储存所有数的阶乘的和 sum = sum + temp; } Systemoutprintln("结果是:" + sum); }}

试编写程式计算10阶乘并结果输出到萤幕上

int nRet = 1;

for(int i = 1; i <=10; i++

{

nRet = i;

}

printf("10的阶乘为%d", nRet);

望采纳

编写一个vb函式过程,计算 1~10的阶乘之和 ,并将执行结果输出在窗体上

参考程式码:

Private Sub Command1_Click() Dim i As Integer For i = 1 To 10 Sum = Sum + jc(i) Next MsgBox SumEnd SubFunction jc(a As Integer) jc = 1 For i = 1 To a jc = jc i NextEnd Function

编写一个Java程式求1到10之间所以奇数的和,并输出结果

int sum = 0;

for (int i=1; i<11; i++) {

if (i%2 != 0) {

sum += i;

}

}

Systemoutprint(sum);

希望对你有帮助!

一结构上的区别

(1)运行方式不同。 Java Application,可以独立运行(有java虚拟机的地方他都可以运行)。Java Applet程序不能单独运行,它必须依附于一个用HTML语言编写的网页并嵌入其中,通过与Java兼容的浏览器来控制执行。

(2)运行工具不同。运行Java Applet程序的解释器不是独立的软件,而是嵌在浏览器中作为浏览器软件的一部分。Java Application程序被编译以后,用普通的Java 解释器就可以使其边解释边执行,而Java Applet必须通过网络浏览器或者Applet观察器才能执行。

(3)程序结构不同。每个Java Application程序必定含有一个并且只有一个main方法,程序执行时,首先寻找main方法,并以此为入口 点开始运行。含有main方法的那个类,常被称为主类,也就是说,Java Application程序都含有一个主类。而Applet程序则没有含 main方法的主类,这也正是Applet程序不能独立运行的原因。尽管Applet没有含main方法的主类,但Applet一定有一个 从 javaappletApplet派生的类,它是由Java系统提供的。

(4)Java Applet程序可以直接利用浏览器或AppletViewer提供的图形用户界面,而Java Application程序则必须另外书写专用代码来营建自己的图形界面。

(5)受到的限制不同Java Application程序可以设计成能进行各种 *** 作的程序,包括读/写文件的 *** 作,但是 Java Applet 对站 点的磁盘文件既不能进行读 *** 作,也不能进行写 *** 作。然而,由于 Applet的引入,使Web页面具有动态多媒体效果和可交互性能,这使由名为超文本、实为纯文本的HTML语言编写成的Web页面真正具有了超文本功 能,不但可以显示文本信息,而且还可以有各种效果和动态图形效果,从而使页面显得生动美丽;另外,Applet使Web页面增加了按钮等功能,从而增 加了交互性。

二执行方面:

Java Application一般是在本地运行,而Java Applet一般在服务端运行。

Java对于服务器 个人电脑和移动设备来说是一项伟大的技术 由于需要java的跨平台的特性 因此java在服务器和移动设备方面的应用是非常成功的 但java在个人电脑应用方面的情况和在服务器及移动设备方面的应用有所不同 但是这很快就会有所改变 至少比你想象得要快 在这篇文章中 我会分析一下java在桌面环境中的应用将怎样得到提升 然后具体说一下java GUI(用户图形接口)的三个主要的工具:AWT Swing 和SWT 在下文中 我将会开发一个完整的java桌面应用程序 Java与桌面端 现在 流行的桌面平台要数Windows Mac and Linux了 但它们不是十全十美的 Windows主宰著桌面 *** 作系统的市场 其上有巨大的应用和开发群体 但它昂贵且有许多安全漏洞 Linux有着稳固的基础 它是开源的软件 比Windows更可靠 Macs非常容易 *** 作且不是黑客的目标 但与Windows和Linux比起来 Mac的硬件和软件可选的余地非常的有限 公司和个人选择他们的 *** 作系统基于许多因素 花费少且安全性高是首选的因素 这导致一些组织从Windows 系统转而选择Linux 对许多用户来说 可用性及对原有应用程序的支持是非常重要的因素 这意味着Windows 将继续享有巨大的市场 Mac有其自己忠诚的用户 这使得苹果机仍然可以存活 Linux 在桌面的流行及Mac的成功创造了多样性 这种多样性正是Java需要的 这种多样性使得Java在桌面有举足轻重的地位 跨平台的支持 Java 运行于所有相关的 *** 作系统 包括Windows Mac和Linux 对于任何组织 他想把现有的应用从一个 *** 作系统移植到另一个 *** 作系统而不用做太多的改动 那么Java正是他们首选的桌面开发平台 或许用微软的可视化工具很容易构建 NET应用 但是这将使你被绑定在了Windows平台上了 很多人也许想立刻用Linux 代替Windows 从而避免由微软件 *** 作系统的漏洞带来的问题 用户不能容忍的问题之一是当从Windows移植到Linux带来的巨大的费用 如果你的应用程序用Java构建 你就没有了这些问题 Java的图形用户界面看上去会跟你用的 *** 作系统一样 而并不需要做什么改动 假如有一天又有一种桌面 *** 作系统出现的话 java 是个安全的赌注 因为它现在能够运行在Windows和Linux 上 那么可以推测它也可以运行在将来可能出现的 *** 作系统上 这些 *** 作系统可能或迟或早地由微软 或是开源社区 或是其它的人开发出来 丰富的特征 最初 Java只有非常有限的一些特征去构建图形用户界面 思想就是用平台无关的Java应用程序接口打包不同的 *** 作系统的本地图形用户界面 称之为抽象的窗口工具 仅有普通的部件如文件域 文本区 选择框 单选按钮 列表框和按钮被AWT支持 图形和图像的特性支持非常有限 也就是说 只足够构建简单的applet程序 认识到需要更高级的图形用户界面组件和图形能力 Sun公司开发了Swing Java D Java D 图像的输入/输出 Java高级图像(JAI)和很多其它的 这些中的一些窗体组件现在已经是Java 标准版(J SE)里的一部分 并且其它的一些扩展必须和你的应用程序打包在一起 例如Swing Java D 图像的输入/输出都是Java的核心API 随着Java开发工具包(JDK)和Java运行环境一起提供 让我们不要忘了J EE平台 如果你开发服务器端的应用程序并且需要丰富的图形用户界面 那么你毫无疑问应该选择Java 这允许你把服务器端的一些代码移到客户端 反之亦然 例如 一个项目可能开始是基于WEB和图形界面 在某些时候 用户可能要求图形元素不能在HTML中实现 如果你选择java做客户端应用 那么你可以重用这些当初用来做服务器端的代码 如果你用远程调用 一些类会真正地实现服务器和客户端的共享 通过页面服务器 Java桌面应用也能够和其它的Java 或非Java应用程序通信 如CORBA TCP/IP 或是 >

以上就是关于Java Application是什么,怎么编写相应程序全部的内容,包括:Java Application是什么,怎么编写相应程序、深入Java调试体系: 第1部分,JPDA体系概览、java题目 编写一个应用程式,计算1~10之间各个整数的阶乘,并将结果输出到屏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9465007.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存