跳至主要內容

Java

LincZero大约 2 分钟

Java

目录

编译详解

代码的手动编译(javac工具)

HelloWorld_Demo

Java应用程序

/**
 * This program displays a greeting for the reader.
 * @version 1.30 2014-02-27
 * @author Cay Horstmann
 */
public class Welcome
{
   public static void main(String[] args)
   {
      String greeting = "Welcome to Core Java!";
      System.out.println(greeting);
      for (int i = 0; i < greeting.length(); i++)
         System.out.print("=");
      System.out.println();
   }
}

编译

javac Welcome.java	# 会生成Welcome.class文件
java Welcome		# Java虚拟机将从指定类中的main方法开始执行

ImageViewer_Demo

Java应用程序

程序

import java.awt.*;
import java.io.*;
import javax.swing.*;

/**
 * A program for viewing images.
 * @version 1.30 2014-02-27
 * @author Cay Horstmann
 */
public class ImageViewer
{
   public static void main(String[] args)
   {
      EventQueue.invokeLater(() -> {
         JFrame frame = new ImageViewerFrame();
         frame.setTitle("ImageViewer");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setVisible(true);
      });
   }
}

/**
 * A frame with a label to show an image.
 */
class ImageViewerFrame extends JFrame
{
   private JLabel label;
   private JFileChooser chooser;
   private static final int DEFAULT_WIDTH = 300;
   private static final int DEFAULT_HEIGHT = 400;

   public ImageViewerFrame()
   {
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

      // use a label to display the images
      label = new JLabel();
      add(label);

      // set up the file chooser
      chooser = new JFileChooser();
      chooser.setCurrentDirectory(new File("."));

      // set up the menu bar
      JMenuBar menuBar = new JMenuBar();
      setJMenuBar(menuBar);

      JMenu menu = new JMenu("File");
      menuBar.add(menu);

      JMenuItem openItem = new JMenuItem("Open");
      menu.add(openItem);
      openItem.addActionListener(event -> {
         // show file chooser dialog
            int result = chooser.showOpenDialog(null);

            // if file selected, set it as icon of the label
            if (result == JFileChooser.APPROVE_OPTION)
            {
               String name = chooser.getSelectedFile().getPath();
               label.setIcon(new ImageIcon(name));
            }
         });

      JMenuItem exitItem = new JMenuItem("Exit");
      menu.add(exitItem);
      exitItem.addActionListener(event -> System.exit(0));
   }
}

编译

javac ImageViewer.java
# 然后多了两个文件:ImageViewer.class和ImageViewerFrame.class

java ImageViewer	# Java虚拟机将从指定类中的main方法开始执行

applet

applet项目

编译

# 原文件:makejar, RoadApplet.html, RoadApplet.jar, RoadApplet.java, RoadApplet.mf, RoadComponent.java
javac RoadApplet.java
# 编译java文件
# 生成文件:Road.class, RoadApplet.class, RoadComponent.class

jar cvfm RoadApplet.jar RoadApplet.mf *.class
# 使用jar工具将类文件打包到一个“JAR文件”
# 报错:'jar' 不是内部或外部命令,也不是可运行的程序

appletiviewer RoadApplet.html
# 调用appletviewer程序,这是JDK自带的一个工具,可以用来快速测试applet

其中html内容

<html xmlns="http://www.w3.org/1999/xhtml">
    <!---->
    <p>
        <applet code="RoadApplet.class" archive="RoadApplet.jar" 
                 width="400" height="400" alt="Traffic jam visualization">
		</applet>
    </p>
    <!---->
</html>    

多文件编译(javac工具)

如果一个源文件包含了两个类,直接编译该java文件即可

许多程序员习惯于将每一个类存在一个单独的源文件中

例如,将Employee类存放在文件Employee.java中,将EmployeeTest类存放在文件EmployeeTest.java中

可以有两种编译源程序的方法

使用通配符调用Java编译器

javac Employee*.java

通过依赖自动编译关联文件

javac EmployeeTest.java
  • 其他语言关联编译的方法(与C/C++不同)
    • 如果熟悉UNIX的“make”工具(或者是Windows中的“nmake”等工具),可以认为Java编译器内置了“make”功能
    • C++一般是使用makefile,即qmake (QT) 或 cmake (通用) 来辅助变异
  • 详细过程
    • 没有显式地编译Employee.java。然而,当Java编译器发现EmployeeTest.java使用了Employee类时会查找名为Employee.class的文件
    • 如果没有找到这个文件,就会自动地搜索Employee.java,然后,对它进行编译
    • 更重要的是:如果Employee.java版本较已有的Employee.class文件版本新,Java编译器就会自动地重新编译这个文件

IDE编译