我使用NetBeans IDE在JavaFX中做一个项目。IDE会自动导入所有必要的导入语句。它具体做到了这一点,即只导入必要的导入语句。以下是我的一个java应用程序中的导入语句列表
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
如图所示,这是一长串导入语句。我发现的一个问题是它需要更多的代码行。他们为什么不使用如下的import语句呢?
import java.sql.*;
import java.util.logging.*;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.collections.*;
import javafx.event.*;
import javafx.geometry.Insets;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.text.*;
import javafx.stage.Stage;
这节省了大量的代码行。
两组导入语句之间的实际区别是什么?为什么NetBeans专门使用import语句?
让我演示通配符导入最糟糕的问题之一:
import org.example.mylib.*;
import java.util.*;
class X {
List<String> xs;
}
在mylib
的2.0版本中,您添加了一个名为List<T>
的类。您根本不接触源代码,并且源代码与添加的类无关。
如果您添加的List
定义了类X
使用的所有方法,则代码将成功构建,但运行时行为将由于非常神秘的原因而发生变化。
在NetBeans中有配置星形导入的选项。从菜单中,选择工具->选项。单击顶部的"编辑器"按钮,然后单击"格式"选项卡。从"语言"下拉列表中选择"Java",从"类别"下拉列表选择"导入"。现在您可以看到几个声明导入的选项:Single Class、Package imports或no imports,但在源中使用完全限定的名称。可以进一步指定Single Class,例如,在使用星形导入之前从包中导入的次数。