Javaを学びます。 2番目のカップ:ヒープにクラスを収集します。 アプレットを試す

Javaの構造を決定するものは何ですか?



既に聞いたように、Javaは互換性を考慮して設計されています。 このような制限により、Java開発者は、言語の論理的な調和を確保しながら、アプリケーションの展開を簡素化するように開発を余儀なくされました。



クラスはどのようにロードされますか?



クラスを呼び出すときに名前でクラスを見つけるために、Javaの標準クラスローダーがあります。 彼はクラスパスの概念を使用しています。 クラスパスリストは、クラスファイルを検索するパスのセットです。 各クラスパスは、ディレクトリまたはいわゆるjarファイル(「ya java-archive!」などのコンパイルされた.classおよび.jarパーミッションを持つ圧縮ディレクトリ)を指すことができます。 デフォルトでは、クラスパスには標準ライブラリファイルと、Java自体を呼び出したディレクトリが含まれます。 これにより、HelloWorldクラスが見つかりました-javaはHelloWorld.classファイルを見つけ、その中のメインメソッドを起動しました。 実際、ほとんどのプログラムは、最も複雑なプログラムでも動作します。 それはすべて1つのメインで始まります...



クラスパッケージ



パッケージは、意味によって結合されたクラスのコレクションです。 パッケージは通常、相互にネストされており、その理由を明確にする階層を形成しています。 ファイルシステムでは、このような階層は、ソースコードが互いに埋め込まれたディレクトリのように見えます。 したがって、パッケージaのソースコードはフォルダーaにあり、パッケージabのソースコードはフォルダーa / bにあります。 典型的なパッケージパスは次のようになります。

org.apache.commons.collectons



。 必要な理由はすぐにわかります。 別のクラスのコードでクラスを使用するには、クラス宣言の前に行を記述してインポートする必要があります

import ...;





さらに、同じパッケージのクラスを頻繁に使用する場合は、パッケージ全体をインポートできます。

import ...*;





これはjava.langを除くすべてのパッケージに適用されます-デフォルトでインポートされました。最後の例でClassクラスとStringクラスが取得されたのはこのシステムからでした。 実際、それらは何らかの種類のjar、java / langディレクトリにあります。



さて、これでクラスローダーの仕組みがわかりました。 実際のプロジェクトでは、クラスパスの数は数十または数百で測定されます。



コード編成



最初の小さな例を書いて、クラス階層を作成するのが面倒なら、それをあなたの権利にしてください。 ただし、深刻なプロジェクトでは、クラスをパッケージに分解する必要があることを忘れないでください。 通常、ルートパッケージは、コードの作成者が誰で、何が参照されているかを明確にするために作成されます。

例:

ru.vasiapupkin.photomaker



はルートパッケージによって選択されます

ru.vasiapupkin.photomaker.core



ここにロジックを担当するクラスを書きます

ここにru.vasiapupkin.photomaker.visual



、すべてのアプリケーションウィンドウがあるとします



などなど。

クラスを作成するには

ru.vasiapupkin.photomaker.Starter





あなたがする必要があります:

ru / vasiapupkin / photomaker /フォルダーにStarter.javaファイルを作成します

最初の行に登録します(より正確には、インポートの前に)

パッケージru.vasiapupkin.photomaker;



コリンズ



「同じ名前のクラスが2つあるとどうなりますか?」 「見る」と答えます。

あなたがJavaより賢く、独自の文字列クラス-Stringを作成したと決めたとします。 しかし、ここに問題があります。すでに問題があります!

そのため、クラスをパッケージ(ru.vp.stuffなど)に入れて、ru.vp.stuff.Stringのようにアクセスする必要があります。

Javaで各クラスを一意に定義する必要があるため、クラスパスのルートにクラスを直接配置することはお勧めしません。 そのため、次のように書くことはできません。

import ru.vp.SuperClass;

import ru.mashka.SuperClass;






コンパイラーは、どちらを使用するかわからないので、これに対してあなたを罰します。

道徳:名前クラスとパッケージ名を正しく選択してください。



追いかけて?



最初のアプリケーションを改善しましょう。 ああ、インターネットの定番...アプレットを作成しましょう。



ええ、多分アプレット...



import java.applet.Applet ;

import java.awt.Graphics ;



public class HelloWorld extends Applet{



public void paint( Graphics g){

g.drawString( "Hello World" ,15,15);

}



}



* This source code was highlighted with Source Code Highlighter .








ここに何がありますか? 2つのクラスがインポートされました。そのうちの1つは標準の空のアプレットで、これを拡張します。 2つ目はグラフィックです。 グラフィックスはAWTライブラリの概念です。 ちなみに、少し遠足。 AWT(Abstract Window Toolkit)は最初のJavaの一部であり、主に表示に関連する多くのタスク用に設計されました。

したがって、グラフィックスタイプのオブジェクトを使用すると、線、線、円など、あらゆる種類のものを自分で描画できます。 この例では、インデントされた行を書きました。

ここでのpaintメソッドは、ブルドーザーから作成されたものではありません。Appletクラスの同様のメソッドと重複しており、javaがこの特定のアプレットを再描画すると、このメソッドが呼び出されます。



アプレットを見るのはとても簡単です-少しHTMLを書いてください:

< body >

< applet code ="HelloWorld.class" codebase ="file:///home/devgru/" width ="150" height ="30" ></ applet >

</ body >



* This source code was highlighted with Source Code Highlighter .








...または多分アプリケーション...



スタンドアロンアプリケーションでHelloWorldを作成してみましょう。



import java.awt.* ;

import javax.swing.* ;

public class HelloWorld extends JFrame{



public static void main( String [] args){

new HelloWorld();

}



{

add( new JLabel( "Hello world" ));

setSize(200,200);

setVisible( true );

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

}

}




* This source code was highlighted with Source Code Highlighter .






ここでは、メインのSwingおよびAWTパッケージクラスを完全にインポートします。 SwingはAWTよりも新しいライブラリであり、Javaアプリケーションのグラフィカルインターフェイスの主要部分を表示できるようになりました。

したがって、メインでは、HelloWorldクラスのインスタンスを作成するだけです。

これで、クラスはJFrameクラスを継承します。 これはSwingのクラスであり、閉じられるまで表示されるウィンドウです。

{...}ブロックは「一般的なコンストラクター」です。 クラスのコンストラクタに追加されます。 単一のものはないため、パラメータなしの空のコンストラクタに追加されます。これは、クラスに何もない場合、その場で作成されます。

JLabelタイプの新しいオブジェクト(つまり、碑文)をウィンドウに追加し、ウィンドウのサイズを設定して表示します。 最後の行は、ウィンドウが閉じられたときにアプリケーションを完了するために必要です。 したがって、ウィンドウを閉じた後、アプリケーションがメモリに残っていないことを確認できます。

過去と同じように実行する必要があります。書き込み、コンパイル、実行です。



それともサーブレットですか? おそらく後で。



これら2つの記事では、Javaの一般的な可能性についての最初のアイデアを提供しようとしました。 サーブレットおよびJSPページなどのサーバー部分のその他の楽しみ、およびMIDlet(携帯電話用のアプリケーション)は、今日の記事の範囲外でした(おそらく明日)。 私はこれとそれを考慮することができました、しかし、私は読者がもっと欲しいものを知りたいです。 さらに、言語の基本について話す必要があるかもしれません。 この記事の最初とほぼ同じレベルの詳細。 コメントにあなたが次に見たい記事を書いてください:

-クラスとインターフェース:JavaのOOP。

-文字、数字、行:基本タイプで動作します。

-Swingを使用してウィンドウアプリケーションを作成します。

-小さいものから大きいものへ:サーブレット、ミッドレット、およびポートレットに関する2つの単語。



登録を解除すると、さらに掘り下げる場所が明確になります。 ご清聴ありがとうございました。



明日を待つのが面倒な人のためのリンク: 言語基礎(英語)



All Articles