Java
大约 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编译
略