Javaで同じクラスを2回インポートしても問題ない?JVMがクラスをロードする仕組みを徹底解説
Javaでは、互いに関連するクラスやインターフェースを「パッケージ」という単位でグループ化します。パッケージとは、特定の概念に属するクラスやインターフェースを格納するディレクトリのことです。たとえば、入出力操作に関連するすべてのクラスやインターフェースは、java.io パッケージにまとめられています。
パッケージの作成方法
必要なクラスやインターフェースをひとつのパッケージにまとめるには、クラスファイル(またはインターフェースファイル)の先頭で package キーワードを使って宣言します。
コード例
package com.tutorialspoint.mypackage;
public class Sample{
public void demo(){
System.out.println("This is a method of the sample class");
}
public static void main(String args[]){
System.out.println("Hello how are you......");
}
}通常のコンパイルとは異なり、パッケージを持つプログラムをコンパイルする際は、javac コマンドの -d オプションを使って、パッケージを作成する保存先のパスを指定する必要があります。
実行例
javac -d . Sample.java
保存先のパスを指定しなかった場合は、カレントディレクトリ(現在のディレクトリ)にパッケージが作成されます。
クラスのインポート方法
パッケージにまとめられたクラスやインターフェースにアクセスするには、クラスパス変数にそのパッケージの場所を追加するか(あるいはパッケージがカレントディレクトリにあることを確認し)、import キーワードを使って対象のクラスやインターフェースをインポートします。
コード例
import com.tutorialspoint.mypackage.Sample;
public class Test{
public static void main(String args[]){
Sample obj = new Sample();
obj.demo();
}
}実行結果
This is a method of the sample class
同じクラスを2回インポートできるのか
結論から言うと、はい、Javaでは同じクラスを何度でもインポートできます。重複してインポートしてもエラーにはなりません。ただし、インポートの回数に関係なく、JVMがクラスをロードするのは最初の1回だけです。以降のインポート文は単に無視されるため、パフォーマンスへの影響もありません。
コード例
次のJavaプログラムでは、com.tutorialspoint.mypackage パッケージの Sample クラスを意図的に2回インポートしています。
import com.tutorialspoint.mypackage.Sample;
import com.tutorialspoint.mypackage.Sample;
public class Test{
public static void main(String args[]){
Sample obj = new Sample();
obj.demo();
}
}実行結果
Sample class loaded This is a method of the sample class
まとめ
このように、同じクラスやパッケージを複数回インポートしてもコンパイルエラーは発生せず、プログラムは正常に動作します。ただし、JVMによるクラスのロードは一度きりであるため、重複したインポート文には実質的な意味がありません。可読性の観点からも、不要な重複インポートは避け、IDEの自動整理機能などを活用してコードを清潔に保つことをおすすめします。
-
JavaのSwingUtilities.invokeLater()メソッドの使い方を徹底解説
invokeLater()メソッドとはinvokeLater()メソッドは、SwingUtilitiesクラスが提供するstaticメソッドの一つで、AWTイベントディスパッチスレッド(Event Dispatch Thread)上でタスクを非同期に実行するために使用されます。このメソッドはSwingUtilities.invokeAndWait()とよく似た動作をしますが、大きな違いは、処理のリクエストをイベントキューに登録した後、すぐに呼び出し元へ制御を返すという点です。つまり、invokeLater()は引数で渡されたRunnableオブジェクト内のコードブロックの実行完了を待ちません。
-
JavaでJComboBoxの項目をソートする方法!DefaultComboBoxModelのカスタマイズ例
JComboBoxはJComponentクラスのサブクラスであり、テキストフィールドと、ユーザーが値を選択できるドロップダウンリストを組み合わせたSwingコンポーネントです。ユーザーがコンボボックスを操作すると、ActionListener、ChangeListener、ItemListenerといったインターフェースを通じてイベントを受け取ることができます。 ただし、標準のJComboBoxにはアイテムを並べ替える(ソートする)機能は用意されていません。そこで本記事では、DefaultComboBoxModelクラスを継承した独自のモデルクラスを作成し、コンボボックスの項目を常に整序された