简单的Java程序
Elora Rinta!
It has been 0 days since the last update of this post. Some contents may be outdated. Please pay attention to screening.

简单的Java程序

Java程序的类型

  • Application 应用程序
  • Applet 小应用程序
  1. 结构和运行环境不同
  2. 前者是独立的程序,需要执行器(调用虚拟机)来运行
  3. 后者是嵌在HTML网页中的非独立的程序
    • 由专门的appletViewer来运行
    • 或者由Web浏览器(调用Java虚拟机)来运行

Application程序

  • HelloWorld.java

    1
    2
    3
    4
    5
    public class HelloWorldApp{//定义类
    public static void main (String args[]){//main方法
    System.out.println("Hello world!");//显示并换行
    }
    }
  • 要点

    • class是主体
    • public类名与文件同名
    • main()的写法是固定的
    • System.out.print 及println及printf

Applet程序

  • HelloWorldApplet.java

    1
    2
    3
    4
    5
    6
    7
    8
    import java.awt.*;
    import java,applet.*;
    import javax.swing.*;
    public class HelloWorldApplet extends JApplet{
    public void paint(Graphics g){
    g.drawString("Hello World!",20,20
    }
    }
    • import表示导入

    • extends JApplet表示继承

      Applet或JApplet都可以

    • paint()方法表示如何绘制

    • 没有main()方法

  • HelloWorldApplet.html

1
2
3
4
5
6
7
8
9
10
<html>
<head>
<title>An Applet</title>
</head>
<body>
<applet code="HelloWorldApplet.class" width=200 height=40 background=white>
</applet>
</body>
</html>

Java程序的基本构成

  • HelloDate.java

    1
    2
    3
    package edu.pku.tds.ch02;//package语句(0或1句)文件位于包的路径,没有说明在当前路径下
    import java.util.*;//import 语句(0或1句),导入其他类的库。.*表示这个包的一系列类
    public class HelloDate{}//类定义——class(1个或多个),一个文件只能有一个public类(与文件同名)
  • 类=类头+类体

  • 类成员=字段(field)+方法(method)

    • 字段(field):属性,变量
    • 方法(method):函数
  • 方法=方法头+方法体

Java程序开发的步骤

  • 源程序编辑:可用任一文本编辑器
  • 程序编译:jdk中的javac工具 将.java转化成.class文件
  • 程序运行:java工具

JDK安装后的文件夹

  • bin :该目录存放工具文件
  • jre:存放与java运行环境相关的文件,与官网下载的jre有区别
  • demo:存放一些示例文件
  • include:存放与C相关的头文件
  • lib:存放程序库
  • db:数据库相关

Application的编辑、编译与运行

  • 程序编辑:编辑器——文件名要与public class的类名一致(区分大小写)

  • 程序编译——转换为字节码(bytecode)文件

    • (.class文件中包含jvm的指令)
    • 编译可以使用jdk工具javac.exe
    • 如javac Hello.java
  • 程序的运行——执行.class文件中的指令过程

    • 如 java Hello
    • 注意:不要写成java Hello.class因为这里需要的是类名,不是文件名

设定path和classpath

  • path是命令(java和javac)的路径,classpath是所要引用的类的路径

  • 可以在命令行上设定

    1
    set path=.;c:\jdk\bin   //.表示当前文件夹,..代表上一文件夹,:代表多个路径的分隔符
  • 也可以在系统环境中设定(环境变量)

  • 在javac及java命令行上使用-classpath(或-cp)选项可以引用别的库

1
2
javac -cp libxx.jar 源文件名.java
java -cp libxx.jar 类名

使用package时的编译

  • 文件及路径一致
  • 程序中使用package语句
  • 使用import语句
  • 编译及运行
1
2
3
4
5
//-d表示生成的类放在哪个文件夹下面去
javac -d classes src\edu\pku\tds\ui\*.java
src\edu\pku\tds\util\*.java src\edu\pku\tds\.java
/-cp表示运行类时寻找的路径
java -cp classes edu.pku.tds.PackageTest

其他的工具

  • 主要的工具

    • javac :编译

    • java:运行(控制台及图形界面程序)

    • javaw:运行图形界面程序

    • appletViewer:运行applet程序

  • 另外几个常用的工具

    • jar:打包工具
    • javadoc:生成文档
    • javap:查看类信息及反汇编

使用jar打包

  1. 编译:javac A.java

  2. 打包:jar cvfm A.jar A.man A.class

    c表示创建(create),v表示显示详情(verbose),f表示指定文件名,m表示清单文件

  3. 运行 java -jar A.jar

  • 其中A.man 是清单文件(maniifest),内容如下:

    • Manifest-Version:1.0
    • Class-Path:.
    • Main-Class:A
  • 清单文件可以任意命名,常见的是用MANIFEST.MF

使用JavaDoc生成文档

  • javadoc -d 目录名xxx.java
  • /** */ 这其中可以用以下标记
    • @author:对类的说明,标明开发该类模块的作者
    • @version:对类的说明,标明该类模块的版本
    • @see:对类、属性、方法的说明,参考转向,也就是相关主题
    • @param:对方法的说明,对方法中某参数的说明
    • @return:对方法的说明,对方法返回值的说明
    • @exception:对方法的说明,对方法可能抛出的异常进行说明

java的api文档

使用javap

  • 使用javap查看类的信息:javap 类名

  • 使用javap反汇编:javap -c 类名

    生成为jvm的指令

输入与输出

文本界面的输入输出

  • java application的输入输出可以是文本界面和图形界面
  • java applet只能是图形界面
  1. 文本界面:使用java.util.Scanner类 Since JDK1.5

    • 用nextIInt(),nextDouble()方法

    • next()得到下一个单词

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      //ScannerTest.java
      import java.util.Scanner;
      class ScannerTest{
      public static void main ( String[] args){
      Scanner scanner = new Scanner(System.in);
      System.out.print("请输入一个数");
      int a = scanner.nextint();
      System.out.pritntf("%d的平方是%d\n",a,a*a);
      }
      }
  2. 文本界面:使用in及out

    • java.io包

    • System.in.read()

    • System.out.print()及println、printf

      1
      2
      3
      4
      5
      6
      7
      //AppCharInOut.java
      char c = ' ';
      System.out.print("Please input a char:");
      try{
      c= (char)System.in.read();
      }catch(IOException e){}//试图读入,catch ioexception
      System.out.println("You have entered :"+c);
      1
      2
      3
      4
      5
      6
      //AppLineInOut.java 输入输出行
      try{
      BufferedReader in = new BufferedReader(
      new InputStreamReader(System in));//封装字符流
      s= in.readLine();
      }catch(IOException e){}
      1
      2
      3
      4
      5
      6
      //AppNumInOut.java 输入输出数字
      BufferedReader in new BufferedReader(
      new InputStreamReader(System.in));
      System.out.print("Please input an int:");
      s - in,readLine();
      n =Integer.parseInt( s );//实数:Double.parseDouble(s)

图形界面的输入输出

在图形界面下可以

  • 使用文本框对象(TextFeild)获取用户输入的数据
  • 使用标签对象(Label)或文本框对象输出数据
  • 使用命令按钮(Button)来执行命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//先创建自己的图形界面,new一个AppGraphInOut,java
//通过创建一个Frame创建自己的用户界面,在构建AppFrame试,设置该Frame的大小,并用setVisible(true)方法显示出来
setLayout( new FlowLayout());
add(in);
add(btn);
add(out);
//add(xxxx)加入对象
btn.addActionListener( new BtnActionAdapter());//添加动作监听器,处理事件
class BtnActionAdapter implements ActionListener//事件处理器
{
public void actionPerformed( ActionEvent e)
//actionPerformed方法
{
String s = in.getText();
double d = Double.parseDouble(s);
double sq = Math.sqrt(d);
out.setText(d + "平方根是:"+ sq);
}
}

完整代码(通过控件显示输入输出):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AppGraphInOut
{
public static void main (String args[])
{
new AppFrame();//构造窗口对象
}
}
class AppFrame extends JFrame//swing包里JFrame,J可以不写
{
JTextField in = new JTextField(10);
JButton btn = new JButton("求平方");
JLabel out = new JLabel("用于显示结果的标签");

public AppFrame()//AppFrame的构造方法
{
setLayout( new FlowLayout());//设定布局为流式布局(加进来的东西一个个的放进来)
getContentPane().add(in);//直接写add也可以,JFrame在内容上添加
getContentPane().add(btn);
getContentPane().add(out);
btn.addActionListener( new BtnActionAdapter() );//添加事件监听对象
setSize(400,100);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);//默认关闭按钮退出程序
setVisible(true);//显示出来
}
class BtnActionAdapter implements ActionListener
{
public void actionPerformed (ActionEvent e)//actionevent:动作事件
{
String s = in.getText();//从文本框获取文本
double d = Double.parseDouble(s);//转化成实数
double sq = d * d;
out.setText( d + "的平方是:"+ sq);//显示出来
}
}
}

在java8中可简写为e->(lambda表达式)

1
2
3
4
5
6
btn.addActionListener( e->{
String s = in.getText();//从文本框获取文本
double d = Double.parseDouble(s);//转化成实数
double sq = Math.sqrt(d);
out.setText( d + "的平方是:"+ sq);//显示出来
})

开发环境

(1)直接使用jdk

javac,java,appletViewer

(2)文本工具+调用jdk命令

notepad++

(3)集成开发环境(IDE:integrated development environment)

 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
This site is deployed on
Total words 75.1k Unique Visitor Page View