2014-04-13 30 views
0

我使用NetBeans IDE在JavaFX中执行项目。 IDE会自动导入所有必需的导入语句。它具体做到这一点,那只是必要的进口报表被导入。以下是我的一个Java应用程序中的导入语句列表 -为什么NetBeans IDE专门使用import语句?

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 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语句?

+1

从我已阅读和理解的内容中,导入这样一个原因是它可以改进编译。它还可以减少两个类具有相同名称时的歧义性 – MadProgrammer

+0

@MadProgrammer您的意思是“显式”:)它也使得所有类的依赖性变得明显,并且不会由于编译类路径中的更改而隐含地更改代码语义。 –

+0

如果您使用高级IDE之一,您可以将导入折叠为1行:-) –

回答

2

让我演示一下最糟糕的问题之一通配符进口:

import org.example.mylib.*; 
import java.util.*; 

class X { 
    List<String> xs; 
} 

在2.0版本的mylib你添加一个名为List<T>类。你根本不用触及源代码,而源代码与那个添加的类无关。

如果您添加的List定义了类X使用的所有方法,代码将会成功构建,但运行时行为将因深层次的原因而发生变化。

+0

这是一个有效的陈述;感谢分享。然而,这并不是对原始问题的回答。 – OliBlogger

+0

@OliBlogger这个问题说'为什么他们不使用像以下这样的导入语句?'这就是这个问题的答案。 –

2

可以选择在NetBeans中配置星型导入。从菜单中选择工具 - >选项。点击顶部的编辑器按钮,然后点击格式选项卡。从语言下拉选择Java,并从类别下拉选择导入。现在您会看到几个选项来声明导入:单个类,包导入或不导入,但在源中使用完全限定的名称。可以进一步指定单个类,例如,使用明星导入之前从包输入的数量。