コンピューター ウィンドウズ インターネット

JSPページの構文。 条件付き構成

プログラミングとは、プログラミング言語の1つでプログラムのソースコードを書くことです。 沢山あります 異なる言語プログラミング、そのおかげで特定の範囲の問題を解決するあらゆる種類のプログラムが作成されます。 プログラミング言語は、プログラムのソースコードを書くために使用される予約語のセットです。 コンピュータシステムは(まだ)人間の言語、さらには人間の論理(特に女性)を理解できないため、すべてのプログラムはプログラミング言語で記述され、その後コンピュータ言語または機械語に変換されます。 プログラムのソースコードをマシンコードに変換するシステムは非常に複雑であり、原則として、12か月以上およ​​び12人以上のプログラマーによって作成されています。 このようなシステムは、統合プログラミング環境またはツールと呼ばれます。

プログラミングシステムは、プログラムのソースコードを記述し、それをマシンコードに変換し、テストし、デバッグするなど、非常に思慮深い視覚環境です。 さらに、を使用して上記のアクションを実行できるようにするプログラムがあります コマンドライン.

「プログラムはWindowsまたはLinux、Unixで書かれている」という言葉を何度も聞いたことがあるでしょう。 事実、プログラミング言語を機械語に変換するためのプログラミング環境には、コンパイラーとインタープリターの2つのタイプがあります。 プログラムをコンパイルまたは解釈することにより、プログラムがデバイス上でどのように実行され続けるかが決まります。 Java言語で書かれたプログラムは常に解釈に基づいて動作しますが、C / C ++で書かれたプログラムはコンパイルです。 これら2つの方法の違いは何ですか?

コンパイラは、コンパイル時にソースコードを記述した後、プログラムのすべてのソースコードを一度に読み取り、マシンコードに変換します。 その後、プログラムは全体として存在し、その中でのみ実行できます オペレーティング・システムそれが書かれた場所。 したがって、Windowsで作成されたプログラムは、Linuxでは機能できません。その逆も同様です。 インタプリタは、プログラムが実行されるたびに、プログラムをステップスルーまたは行ごとに実行します。 解釈中に、実行可能コードではなく仮想コードが生成され、その後Java仮想マシンによって実行されます。 したがって、WindowsまたはLinuxのどのプラットフォームでも、システムに仮想Javaマシン(ランタイムシステムとも呼ばれる)があれば、Javaプログラムを同じ方法で実行できます。

オブジェクト指向プログラミング

オブジェクト指向プログラミングはオブジェクトに基づいており、これは私たちの世界にいくぶん似ています。 あなたがあなたの周りを見れば、あなたは間違いなくあなたがそのようなプログラミングのモデルをより明確に理解するのを助ける何かを見つけることができます。 たとえば、私は今、テーブルに座って、モニター、システムユニット、キーボード、マウス、スピーカーなどで構成されるコンピューターでこの章を入力しています。 これらの部品はすべて、コンピューターを構成するオブジェクトです。 これを知っていると、コンピュータ全体の操作のある種の一般化されたモデルを定式化するのは非常に簡単です。 コンピュータのソフトウェアとハ​​ードウェアのプロパティの複雑さを理解していない場合は、システムユニットオブジェクトがMonitorオブジェクトによって示される特定のアクションを実行していると言えます。 次に、Keyboardオブジェクトは、Monitorオブジェクトの操作に影響を与えるSystemunitオブジェクトのアクションを修正または指定することもできます。 提示されたプロセスは、オブジェクト指向プログラミングシステム全体を非常によく特徴づけています。

いくつかの強力なものを想像してみてください ソフトウェア数十万行のコードが含まれています。 プログラム全体は1行ずつ、1行ずつ実行され、原則として、後続の各コード行は必ず前のコード行にリンクされます。 オブジェクト指向プログラミングを使用せず、このプログラムコードを変更する必要がある場合、たとえば、一部の要素を改善する必要がある場合は、このプログラムのすべてのソースコードで多くの作業を行う必要があります。

オブジェクト指向プログラミングははるかに簡単です。コンピュータシステムの例に戻りましょう。 17インチのモニターにもう満足していないとしましょう。 もちろん、特定の資料があれば、20インチモニターと安全に交換できます。 交換工程自体は、ドライバーを交換する必要があり、古いモニターの下からのほこりを拭き取る必要があることを除いて、大きな問題を伴うことはありません。それだけです。 オブジェクト指向プログラミングは、ほぼこの動作原理に基づいており、コードの特定の部分は、簡単に最新化または置換できる同種のオブジェクトのクラスを表すことができます。

オブジェクト指向プログラミングは、解決する問題の本質を非常に簡単かつ明確に反映し、最も重要なこととして、プログラム全体を損なうことなく、これらのオブジェクトを新しいオブジェクトに置き換えることで不要なオブジェクトを削除できるようにします。 したがって、プログラムのソースコード全体の全体的な読みやすさがはるかに簡単になります。 同じコードをまったく異なるプログラムで使用できることも重要です。

クラス

すべてのJavaプログラムの中核は、オブジェクト指向プログラミングの基礎となるクラスです。 実際、あなたはすでにクラスが何であるかを知っていますが、それについてはまだ知りません。 前のセクションでは、コンピュータ全体の構造を例として、オブジェクトについて説明しました。 コンピュータが組み立てられる各オブジェクトは、それ自体のクラスの代表です。 たとえば、Monitorsクラスは、タイプ、サイズ、および機能に関係なく、すべてのモニターを統合し、テーブル上にある1つの特定のモニターがmonitorsクラスのオブジェクトです。

このアプローチにより、プログラミングであらゆる種類のプロセスを非常に簡単にシミュレートできるため、割り当てられたタスクを簡単に解決できます。 たとえば、モニター、システムユニット、キーボード、スピーカーの4つの異なるクラスの4つのオブジェクトがあります。 サウンドファイルを再生するには、キーボードを使用してコマンドを実行します システムユニット、モニター上で視覚的にコマンドを与えるアクションそのものを観察し、その結果、スピーカーがサウンドファイルを再生します。 つまり、オブジェクトは特定のクラスの一部であり、このクラスのすべての手段と機能が含まれています。 問題を解決するために必要な数の同じクラスのオブジェクトが存在する可能性があります。

メソッド

再生例が出たとき サウンドファイル、次に、特定のアクションが実行されたことに基づいて、コマンドまたはメッセージを与えることについて言及されました。 アクションを実行するタスクは、各オブジェクトが持つメソッドを使用して解決されます。 メソッドは、オブジェクトを使用して特定のアクションを実行できるコマンドのセットです。

各オブジェクトには独自の目的があり、メソッドを使用して特定の範囲の問題を解決するように設計されています。 たとえば、キーボードオブジェクトは、キーを押すことができなくてもコマンドを発行できるとしたら、どのようなメリットがありますか? Keyboardオブジェクトには、ユーザーが入力デバイスを制御し、必要なコマンドを発行できる特定の数のキーがあります。 このようなコマンドの処理は、メソッドを使用して行われます。

たとえば、Escキーを押してアクションをキャンセルし、それによってこのキーに割り当てられたメソッドにコマンドを与えると、プログラムレベルでこの問題が解決されます。 キーボードオブジェクトのメソッドの数についてすぐに疑問が生じますが、ここでは異なる実装が存在する可能性があります-各キーのメソッドの定義(一般的には不合理です)から、一般的なものを監視する1つのメソッドの作成までキーボードの状態。 つまり、このメソッドは、キーが押されたかどうかを監視し、関係するキーに応じて、何をするかを決定します。

したがって、各オブジェクトは、さまざまな問題を解決するための一連のメソッドを自由に使用できることがわかります。 また、各オブジェクトは特定のクラスのオブジェクトであるため、クラスには、同じクラスのさまざまなオブジェクトによって使用される一連のメソッドが含まれていることがわかります。 Javaでは、作成するすべてのメソッドは、所有されているか、特定のクラスの一部である必要があります。

構文とセマンティクス Java言語

外国語を話したり読んだりするには、その言語のアルファベットと文法を学ぶ必要があります。 プログラミング言語の研究でも同様の条件が見られますが、唯一の違いは、このプロセスがやや簡単であるように思われることです。 ただし、プログラムのソースコードの記述を開始する前に、まず、発生した問題を都合のよい形式で解決する必要があります。

たとえば、電話を担当する特定のクラスを作成しましょう。このクラスには、この電話のオンとオフの2つのメソッドしかありません。 現在、Java言語の構文がわからないため、Phoneクラスを抽象言語で記述します。

クラスの電話
{
インクルード()メソッド
{
//電話をオンにする操作
}
()メソッドを無効にする
{
//電話をオフにする操作
}
}

Phoneクラスは次のようになります。 中括弧は、クラス、メソッド、またはデータのシーケンスの本体の開始と終了をそれぞれ示していることに注意してください。 つまり、括弧はメソッドまたはクラスに属することを示します。 開き括弧には、閉じ括弧が必要です。 混乱しないように、通常はコード内で同じレベルに配置されます。

それでは、Javaだけで同じクラスを書いてみましょう。

クラステレフォン
{
()の無効
{
// on()メソッドの本体
}
ボイドオフ()
{
// off()メソッドの本体
}
}

Java言語のclassキーワードはクラスを宣言し、その後にクラス自体の名前が続きます。 私たちの場合、これはTelefonです。 レコードの登録について少しだけ。 ほとんどすべてのプログラミング言語では、名前が作成された場合に名前を記録しておくことが重要です。 Telefonを作成した場合、telefonやTELefoNなどのスペルでは、コンパイル中にエラーが発生します。 最初に書いたので、さらに書く必要があります。

予約語またはキーワードは特定のケースで記述されており、メソッド、クラス、オブジェクトなどに名前を付けて使用することはできません。 コンパイラは単に単語を無視するため、単語間のスペースは重要ではありませんが、コードの可読性にとって重要です。

Telefonクラスの本体には2つのメソッドがあります。on()-電話をオンにし、off()メソッド-電話をオフにします。 どちらのメソッドにも独自の本体があり、理論的には、両方のメソッドの必要なアクションを説明するある種のソースコードが含まれている必要があります。 今のところ、これらのメソッドがどのように実装されているかは関係ありません。主なものはJava言語の構文です。

どちらのメソッドにも()に括弧があり、その中にパラメーターを書き込むことができます。たとえば、(int time)またはon(int time、int time1)です。 パラメータの助けを借りて、メソッドと外の世界との間に一種のつながりがあります。 on(int time)メソッドは、時間パラメーターを取ると言われています。 それはなんのためですか? たとえば、スマートフォンの電源を入れたい場合 一定時間..。 次に、時間パラメータの整数値がメソッドの本体に渡され、受信したデータに基づいて電話の電源がオンになります。 括弧が空の場合、メソッドはパラメーターを取りません。

コメント(1)

Telefonクラスでは、両方のメソッドの本体に2つのスラッシュの後にエントリがあります://。 このようなエントリは、コンパイラによって無視されるコメントを示しますが、コードを読みやすくするために必要です。 プログラムの作成中にコメントアウトする情報が多ければ多いほど、1年間にこれまで取り組んできたことを思い出さなければならない可能性が高くなります。

Javaのコメントには、次の3つのタイプがあります。

//、 /*…*/ と /**…*/

//演算子を使用して記述されたコメントは、1行に配置する必要があります。

// 1行
!!! エラー! 2行目に折り返すことはできません!
//最初の行
// 二行目
// …
//最後の行

/ *…* /演算子を使用したコメントは、複数行にまたがることができます。 コメントの最初に/ *を入力し、最後にコードのコメントが終了したら、* /演算子を入力します。 最後の種類のコメント/ ** ... * /は、コードを文書化するときに使用され、任意の行数に配置することもできます。

Javaデータ型

Javaには、任意の値を設定するためのデータ型が存在します。 Telefonクラスでは、2つのメソッドを作成しました。 どちらのメソッドにもパラメーターはありませんでしたが、timeパラメーターを使用したon(int time)メソッドの例を示すと、メソッドに値を渡すことが言われていました。 この値は、電話がオンになると思われる時間を示しています。 int指定子は、時間値のタイプを決定します。 Java 2MEには6つのデータ型があります。

バイト-–128から128までの小さな整数値。
short-–32768〜32767の範囲の短整数値。
int-–2147483648から2147483647までの任意の整数値が含まれます。
longは、–922337203685475808から9223372036854775807までの非常に大きな整数値です。
charはUnicode文字定数です。 範囲 このフォーマット 0から65536、つまり256文字です。 このタイプの文字はすべて一重引用符で囲む必要があります。例:「G」;
boolean-ブール型。値はfalse-falseとtrue-trueの2つだけです。 このタイプは、少し後でループでよく使用されます。 考え方は非常に単純です。ポケットにお金がある場合、おそらくこれは真実であり、そうでない場合は誤りです。 したがって、お金があればパンやビールを買いに行き(必要に応じて下線を引いて)、お金がなければ家にいます。 つまり、プログラムのさらなるアクションの選択に寄与するのは、そのような論理値です。

必要な値を宣言するには、次のエントリを使用します。

Int時間;
長いBigTime;
チャーワード;

セミコロン演算子は、エントリの後に必要であり、行の最後に配置されます。 同じタイプの複数の広告をカンマで区切って組み合わせることができます。

Mt time、time1、time2;

それでは、いくつかの値を追加してTelefonクラスを改善しましょう。 on()メソッドとoff()メソッドは不要になりました。特定の問題を実際に解決できる新しいメソッドを追加します。

クラステレフォン
{
// S-表示領域
// w-表示幅
// h-表示の高さ
int w、h、S;
//表示領域を計算するメソッド
vord Area()
{
S = w * h;
}
}

したがって、3つの変数S、w、およびhがあり、それぞれ、ピクセル単位のディスプレイの面積、幅、および高さを担当します。 Area()メソッドは、電話スクリーンの面積をピクセル単位で計算します。 操作は役に立たないが、非常にわかりやすく、理解しやすい。 Area()メソッドの本体はそれ自体を取得し、S = w * hの形式になります。 この方法では、単に幅に高さを掛けて、変数Sに結果を割り当てるか、保存します。この変数には、表示領域の値が含まれます。 この電話.

これで、あらゆる種類の操作を実行できるJava言語の演算子に近づきました。 Java言語や他のプログラミング言語の演算子には、独自の目的があります。 したがって、算術演算子、インクリメントおよびデクリメント演算子、論理演算子、および関係演算子があります。 上記の各演算子を見てみましょう。

算術演算子

すべての算術演算子は非常に単純で、数学で使用される乗算「*」、除算「/」、加算「+」、および減算「-」の演算子に似ています。 モジュロ演算子「%」があり、演算子が「=」に等しい状況は一見少し混乱します。 プログラミング言語で等しい演算子は、代入演算子と呼ばれます:

ここでは、変数xに値3を割り当てます。プログラミング言語の演算子「equal」は、2つの連続する演算子「equal」の記述に対応します:「==」。 さまざまな算術演算子でできることの例を見てみましょう。

Int x、y、z;
x = 5;
y = 3;
z = 0;
z = x + y;

この場合、zはxとyの合計の値、つまり8になります。

変数xの値は5でしたが、このようなレコードの後、前の値は失われ、積z * x(8 * 5)、つまり40が書き込まれます。コードをさらに続行すると、変数は次のようになります。こんな風に見える:

// x = 40;
// y = 3;
// z = 8;

足し算と引き算の演算子は、数学と同じ目的を持っています。 負の数も同様に関連しています。

デクリメント「-」およびインクリメント「++」演算子は非常に具体的ですが、非常に単純です。 プログラミングでは、値を1つ増減する必要がある場合がよくあります。 これはループでよく見られます。 インクリメント操作は変数を1つ増やします。

Int x = 5;
x ++;
//ここでxはすでに6です

デクリメント操作は、変数を1つ減らします。

Int x = 5;
NS - ;
// xは4です

インクリメントおよびデクリメント操作は、ポストおよびプレフィックスにすることができます。

Int x = 5;
int y = 0;
y = x ++;

コードの最後の行では、最初に値xがyに割り当てられ、これが値5になり、次に変数xが1つインクリメントされます。 それが判明しました:

プレフィックスの増分は次のとおりです。

Int x = 3;
int y = 0;
y = ++ x;

この場合、最初に変数xが1つ増加し、次にすでに増加した値がyに割り当てられます。

関係演算子

関係演算子を使用すると、式の両方の部分が等しいかどうかを確認できます。 等式演算子 "=="があり、演算子は "未満です<» и больше «>"、以下"<=» и больше или равно «>= "、および否定演算子"!= "。
9 == 10;

この式は真ではなく、9は10と等しくないため、この式の値は偽です。

ここでは、逆に、否定演算子は式の不等式を示し、値はtrueになります。 大なり記号、小なり記号、大なり記号、以下の演算子は、数学の対応する演算子に似ています。

論理演算子

2つの論理演算子があります。 &&で示されるAND演算子、および2つのスラッシュ「||」で示されるOR演算子。 たとえば、次の式があります。

A * B && B * C;

式の両方の部分のみが真である場合、式の値は真であると見なされます。 パーツの1つが間違っていると、式全体の値がfalseになります。
「&&」演算子とは対照的に、「OR」と呼ばれる無駄ではない「||」演算子があります。

A * B || B * C;

式のいずれかの部分がtrueの場合、式全体がtrueと見なされます。 両方の演算子を1つの式に組み合わせることができます。次に例を示します。

A * B || B * C && C * D || B * A;

私があなたを導いたこの表現の助けを借りて、私には困難に思われますね。 事実、Javaでは、数学と同様に、優先順位またはいわゆる演算子の階層があり、それを利用して、どちらの演算子がより重要であるかが決定されるため、最初にチェックされます。 リストを使用して、Java言語で使用可能なすべての演算子の優先順位を検討してみましょう。

, ., (),
!、〜、++、-、+(単項)、-(単項)、新規、
*, /, %,
+, –,
<<, >>, >>>,
<, <=, >, >=,
= =, !=,
&, ^, |,
&&,
||,
?:,
=, +=, –=, *=, /=, %=, |=, ^=, <<=, >>=, >>>=.

リスト内の演算子の結合性は、左から右、上から下に続きます。 つまり、左と上にあるものはすべてランクが古く、より重要です。

JSPページには、HTML仕様に準拠する標準構文と、Java ServerPages仕様で定義されているJSP構文の組み合わせ構文があります。 JSP構文は、標準のHTMLタグとJSPタグで構成されるJSPページを作成するためのルールを定義します。 JSPページには、HTMLタグに加えて、次のカテゴリのJSPタグが含まれています。

JSPディレクティブ

指令 JSPへの特定の要求に関するグローバル情報を提供し、翻訳段階で必要な情報を提供します。

指令常に他のすべてのタグの前にJSPページの先頭に配置されるため、 パーサー(パーサー)JSPは、テキストを解析するときに、最初にグローバル命令を強調表示しました。 したがって、JSPエンジン(JSPランタイム)はコードを解析し、JSPからサーブレットを作成します。 指令 JSPコンテナへのメッセージです。 構文 ディレクティブ JSPは次のよ​​うになります。

<%@ директива имяАтрибута="значение" %>タスクの構文 ディレクティブ XMLの場合: 指令複数の属性を持つことができます。 この場合 指令属性ごとに繰り返すことができます。 同時に、カップル "属性名=値"スペースを区切り文字として使用して、1つのディレクティブの下に配置できます。 ディレクティブには次の3つのタイプがあります。

  • ページ(ページ)
  • taglib(タグライブラリ)
  • インクルード(インクルード)

ページディレクティブ

指令 ページプロパティを定義します JSPページ翻訳者に影響します。 ディレクティブ内の属性の順序 ページ重要ではない。 構文に違反したり、認識されない属性が存在したりすると、翻訳エラーが発生します。 ディレクティブの例 ページ次のコードが役立ちます。<%@ page buffer="none" isThreadSafe="yes" errorPage="/error.jsp" %>このディレクティブは次のことを宣言します このページ JSPはバッファリングを使用しないため、多くのユーザーが特定のJSPページに同時にアクセスする可能性があり、エラーページの名前は error.jsp.
指令 ページページに関する情報が含まれる場合があります。<%@ page info = "JSP Sample 1" %>可能なディレクティブ属性のリスト ページ表に示されています。
属性名意味 説明
言語 ライン 翻訳されたコードの本体を含む、JSPファイルのスクリプトレット、式、または任意のインクルードファイルで使用される言語を決定します。 デフォルトは「java」です
拡張します ライン 生成されたサーブレットのスーパークラスを指定します。 サーバーがすでにスーパークラスを使用している可能性があるため、この属性は細心の注意を払って使用する必要があります。
輸入 ライン インポートするパッケージの定義。例:
&lt%@ page import = "java.util。*%>
セッション 正しいか間違っているか 意味 NS(デフォルト)は、事前定義された変数を示します セッション(タイプHttpSession)は、既存のセッションにバインドする必要があります。バインドしない場合は、新しいセッションが作成されてバインドされます。 意味 NSセッションが使用されないことを決定し、変数へのアクセスを試みます セッション JSPページをサーブレットに変換するときにエラーが発生します
バッファ なし、またはバッファのサイズ(kB)。 JspWriter出力のバッファサイズを設定します。 デフォルト値はサーバー設定によって異なり、8kBを超えてはなりません。 値が なし出力はオブジェクトに直接送られます
autoFlush 正しいか間違っているか バッファがオーバーフローしたとき、またはエラーが発生したときに、バッファを自動的に空にするかどうかを決定します。 デフォルトは NS
isThreadSafe 正しいか間違っているか 意味 NS(デフォルト)サーブレットの通常の実行モードを指定します。作成者がそのインスタンスの変数へのアクセスを同期していると仮定して、単一のサーブレットインスタンスを使用して複数のリクエストが同時に処理されます。 偽の値は、サーブレットが継承する必要があることを示します SingleThreadModel(シングルスレッドモデル)シーケンシャルリクエストまたはコンカレントリクエストがサーブレットの個別のインスタンスによって処理される場合
情報 ライン メソッドを使用してアクセスされるJSPページに関する情報の文字列を定義します サーブレット.getServletInfo()
errorPage ライン 属性値は、イベントで表示されるページのURLです。 考えられる間違い例外をスローする
isErrorPage 正しいか間違っているか このページを使用して他のJSPページのエラーを処理できるかどうかを通知します。 デフォルトは NS
contentType ライン JSPページと応答のエンコーディング、およびJSP応答のMIMEタイプを指定します。 コンテンツタイプのデフォルト値は テキスト/ html、エンコーディング- ISO-8859-1。例えば:
contentType = "text / html; charset = ISO-8859-1"
pageEncoding ライン JSPページの文字エンコードを決定します。 デフォルトは 文字コード属性から contentTypeそこで定義されている場合。 値が 文字コード属性内 contentType未定義、値 pageEncoding等しく設定されている ISO-8859-1

Taglibディレクティブ

指令 taglib特定のJSPページがタグライブラリを使用することを宣言し、URIで一意に識別し、ライブラリの操作に使用できるタグプレフィックスをマップします。 コンテナがタグライブラリを見つけられない場合、致命的な変換エラーが発生します。 指令 taglib構文は次のとおりです。<%@ taglib uri="含まれているタグライブラリのURI"プレフィックス=" プレフィックス名"%>プレフィックス" プレフィックス名「ライブラリを参照するときに使用されます。タグライブラリの使用例 mytags: <%@ taglib uri="http://www.taglib/mytags" prefix="customs" %> . . . V この例タグライブラリにはURIがあります "http://www.taglib/mytags"、文字列はプレフィックスとして割り当てられます 税関これは、タグライブラリの要素にアクセスするときにJSPページで使用されます。

ディレクティブを含める

指令 含む JSPページをサーブレットに変換するときにテキストまたはコードを挿入できます。 ディレクティブ構文 含むこのように見えます:<%@ include file="含めるページの相対URI"%>ディレクティブ 含む 1つの属性があります- ファイル..。 指定されたリソースのテキストがJSPファイルに含まれます。 このディレクティブを使用して、すべてのJSPページに標準の著作権ヘッダーを配置できます。<%@ include file="copyright.html" %>JSPコンテナはインクルードファイルにアクセスします。 インクルードファイルが変更された場合、コンテナはJSPページを再コンパイルできます。 指令 含む JSPページなどのリソースを静的オブジェクトとして扱います。 指定されたURIは通常、リンクが配置されているページのJSPを基準にして解釈されますが、他の相対URIと同様に、接頭辞を付けることで、WEBサーバーのホームディレクトリに対する対象のリソースの位置をシステムに伝えることができます。 「/」文字を含むURI。 インクルードファイルのコンテンツはプレーンJSPテキストとして扱われるため、静的HTML、スクリプト要素、ディレクティブ、アクションなどの要素を含めることができます。 多くのサイトでは、すべてのページで小さなナビゲーションバーを使用しています。 HTMLフレームの使用には問題があるため、このタスクは、ページの上または左半分に小さなテーブルを配置することで解決されることがよくあります。このテーブルのHTMLコードは、サイトのページごとに何度も繰り返されます。 指令 含む-これは、この問題を解決するための最も自然な方法であり、開発者をHTMLを個別のファイルにコピーするという悪夢から救います。 指令以来 含むページの翻訳中にファイルが含まれ、ナビゲーションバーに変更を加えた後、それを使用してすべてのJSPページを再翻訳する必要があります。 添付ファイルが頻繁に変更される場合は、アクションを使用できます jsp:含めるこれは、JSPページにアクセスするときにファイルを接続します。

JSP宣言

宣言(宣言)スクリプト言語で変数とメソッドを定義することを目的としています。これらは後でJSPページで使用されます。 構文 宣言このように見えます:<%! код Java %> 広告は宣言ブロックにあり、JSPページの式ブロックで呼び出されます。 宣言ブロックのコードは通常Javaで記述されていますが、アプリケーションサーバーは他のスクリプトの構文を使用できます。 広告 JavaBeansコンポーネントのプロパティから取得した動的データを操作するときに、機能を追加するために使用されることがあります。 の例 広告表に示されています。 発表関数の値を計算するための以下のコードのように、複数の行を含めることができます 事実(int n)、nが2未満でnの場合、これは1に等しくなります。 nの正の値で;<%! public static int fact (int n) { if (n 広告標準出力への出力を生成しません アウト..。 で宣言された変数とメソッド 発表初期化され、スクリプトレットやその他のユーザーが利用できるようになります 広告 JSPページが初期化されたとき。

JSPスクリプトレット

スクリプトレットディレクティブで定義されたスクリプト言語で記述されたさまざまなコードを含める 言語..。 コードスニペットは、言語の構文構造に準拠している必要があります スクリプトレットつまり、通常はJava言語の構文です。 スクリプトレット次の構文があります。<% текст скриптлета %>同等の構文 スクリプトレット XMLの場合: スクリプトレットテキスト
本文中の場合 スクリプトレット文字のシーケンス%>は、タグとしてではなく、文字の組み合わせとして正確に使用する必要があります-終了記号 スクリプトレット、シーケンス%>の代わりに、次の文字の組み合わせ%\>を使用します。
JSP仕様は、単純でわかりやすい例を提供します スクリプトレットこれにより、JSPページのコンテンツが1日を通して動的に変更されます。<% if (Calendar.getInstance ().get (Calendar.AM_PM) == Calendar.AM) {%>おはようございます<% } else { %>こんにちは<% } %>内部のコードは注意する必要があります スクリプトレット記述どおりに挿入され、すべての静的HTMLテキスト(テンプレートテキスト)が前後に挿入されます スクリプトレット演算子を使用して変換 印刷..。 これは、スクリプトレットに完成したJavaチャンクを含める必要がなく、開いたチャンクを残しておくと、外部の静的HTMLに影響を与える可能性があることを意味します。 スクリプトレット. スクリプト式と同じ自動定義変数にアクセスできます。 したがって、たとえば、ページに情報を表示する必要がある場合は、変数を使用する必要があります アウト. <% String queryData = request.getQueryString (); out.println ("Дополнительные данные запроса: " + queryData); %>

JSP式

表現 JSPページでは、宣言で指定されたスクリプト言語で記述された実行可能な式です。 言語(どうやって Javaルール)。 結果 必要なタイプのJSP 、標準出力に送信 アウト現在のオブジェクトを使用する JspWriter..。 結果が キャストできません 、翻訳段階で問題が検出された場合に翻訳エラーが発生するか、例外がスローされます ClassCastExceptionリクエストの実行中に不整合が検出された場合。 表現次の構文があります。&lt%=式テキスト%>の代替構文 XMLを使用する場合のJSP: 式テキスト実行順序 JSPページで左から右へ。 もしも 表現複数のランタイム属性に表示され、そのタグで左から右に実行されます。 表現特定のスクリプト(通常はJava)の完全な式である必要があります。 式は、HTTPプロトコルの実行中に実行されます。 式の値は文字列に変換され、JSPファイルの適切な位置に含まれます。 通常、JSPページ宣言ブロックで定義された、またはJSPからアクセス可能なJavaBeansから派生した変数とメソッドの文字列表現を計算して表示するために使用されます。 次のコード このページのリクエストの日付と時刻を表示するのに役立ちます。現在の時刻:&lt%= new java.util.Date()%>簡略化するため 使用できる事前定義された変数がいくつかあります。 最も一般的に使用される変数は次のとおりです。
  • リクエスト、HttpServletRequest;
  • 応答、HttpServletResponse;
  • セッション、HttpSession- リクエストに関連付けられている場合。
  • アウト、PrintWriter- クライアントにデータを送信するためのJspWriterタイプのバッファバージョン。

Javaマシンの起動時にmain()メソッドが呼び出されるクラスの名前と必ず一致する必要があります。

  • オブジェクト-継承元のクラス 全て配列や文字列を含むJavaのオブジェクト()。
  • アクセス指定子は、メンバーごとに個別です(宣言の前に指定されます)。
  • すべてのクラスメンバーは、デフォルトでスコープに対して開かれています パッケージ..。 デフォルトのスコープは、プライベートとプロテクトのクロスです。を参照してください。
  • 各* .javaファイルには次のものを含めることができます 唯一パブリックとして宣言され、外部からアクセス可能なクラス。
  • クラスの定義と宣言は常に1つのファイルにあり、プロトタイプをヘッダーに入れることはできません。
  • ポインタがありません。
  • すべてのクラス変数は、実際にはオブジェクトへの参照であり、オブジェクト自体ではありません。 使用するための初期化は、newを介して行う必要があります<конструктор-класса>(...) .
  • ベース 前の段落-あるオブジェクト変数を別のオブジェクト変数に割り当てる場合、参照のみが変更され、オブジェクトのコピーは変更されません。
  • 関数内の変数は、次の場合に値によって渡されます。 エレメンタリータイプ(int、byte、longなど...)、またはオブジェクトの場合は参照による。
  • クラスのパブリック静的メンバーには、ドット演算子を使用してアクセスします。 、::ではなく、私の意見では、外部の混乱を招きます。
  • デストラクタはありませんが、finalize()はあります。
  • Finalize()をC ++デストラクタと混同しないでください。 finalize()が呼び出されます ガベージコレクションのみ、これは、オブジェクトがスコープ外になり、このオブジェクトへの参照が少なくとも1つないこととは関係ありません。
  • ガベージコレクションは、現在のランタイムオブジェクトでRuntime.gc()メソッドを呼び出すか、静的なSystem.gc()メソッドを呼び出すことで実行できます。 実行された実験から判断すると、メモリの解放は 仮想マシン JavaとOSに割り当てられたメモリは、マシンが終了するまで戻りません。
  • Javaスタイルのコーディングでは、関数はコードを返す代わりに例外をスローします。 全身エラーまたは仮想マシンのロジックのエラー。 したがって、多くの関数は、例外を処理するtry(...)catch(...)(...)ブロック内で実行する必要があります。または、それらを呼び出すメソッドは、スローによってスローされる例外のリストを明示的に示す必要があります。それらによって処理されないこれらの関数は、呼び出しスタックの上のメソッドによって処理されます。
  • 例外はとに分けられます。
  • try(...)ブロックは、finally(...)ブロックで終了することもできます。これは、前のtry(...)ブロックでの例外の有無に関係なく実行されます。 これを使用すると、コードブロックの実行結果に関係なく、必要なアクションを実行できます。たとえば、割り当てられているすべてのリソースを自動的に解放できます。
  • charは、C / C ++のようなシングルバイト型ではなく、サポートする1​​6ビット型です。 ユニコード文字列。
  • boolは、Javaではbooleanとして知られています。
  • 条件付き構成受け入れる それだけブール型の変数または式。 これは、コードが次のようなものであることを意味します。
    int a; ...変数に対するアクションa ...; もし) (...)
    Java構文に関して正しくなく、コンパイルされません。
  • 定数はconstではなくfinalとして宣言されます。
  • すべての配列はオブジェクトです。
  • 文字列定数(「任意の文字列定数」など)でさえオブジェクトです。
  • 文字列(クラスString)の場合、1つの演算子のみが定義されます-+、連結。
  • 文字列の比較は、Stringクラスのbool equals()メソッドを介して行われます(例:s1.equals(s2))。
  • Stringオブジェクトの内容は一定であり、文字列の1つの要素を変更することを意味するものではありません。これは、パフォーマンス上の理由から行われます。 このような操作が必要な場合は、StringBufferクラスを使用できます。
  • 初期化されていない文字列を空でない文字列と連結すると、次のようになります。 null +空でない文字列、たとえばs + = "| string"; 「null | string」と等しくなります
  • 配列には、パブリックメンバーの可変長があります。 文字列にはありません代わりに、length()メソッドを使用します。
  • Java サポートしていません多重継承。 その機能の一部は「インターフェース」を介して実行されます。 インターフェイスは、単一のクラス内の複数のインターフェイスの複数の「継承」実装をサポートし、一般に、多くの(インターフェイス)から多くの(クラス)の関係、およびその逆をサポートします。
  • インターフェイスを使用すると、これらのインターフェイスを実装するクラスのオブジェクトを参照できるリンクを作成できます。 確かに、参照インターフェイスを介してアクセスするときに適切な方法を動的に検索するには、多くのオーバーヘッドが必要になるため、望ましくありません。
  • 列挙の代わりに、メソッド宣言のないインターフェイスを使用できます。 この場合、インターフェイスが定義されたときにすべてのインターフェイス変数を初期化する必要があり、それらの値は自動的に一定になります。 その後、実装を介して、定義されたクラスに「接続」できます。
  • また、JDK5以降は 外部的に古典的な列挙型-列挙型。 実際、これは名前付き定数のリストだけでなく、スーパークラスEnumから継承された特別なクラスです。 列挙の各要素は、このクラスのオブジェクトです。 列挙オブジェクトの数値は、序数の組み込み関数を使用して取得できます。
  • カスタム 演算子のオーバーロード C ++、Javaでおなじみ サポートされていません.
  • 「プリミティブ型」(int、float、charなど)を使用するオブジェクト環境で作業するために、Javaは オートボックス/オートボックスラッパータイプ(整数、浮動小数点、文字など)に変換します。 実際、これは、プリミティブ型とオブジェクトメソッドの機能を実装するいくつかの組み込みクラスの演算子オーバーロードの実装です。
  • super-サブクラスからスーパークラスのコンストラクターを呼び出すか、サブクラスの非表示メンバーのスーパークラスのメンバーにアクセスできるようにするキーワード。
    • コンストラクターとして使用する場合-スーパー 常に最初にする必要がありますサブクラスのコンストラクターの演算子。
  • 決定するため 概要メソッドでは、abstractキーワードが使用されます。抽象メソッドを含むクラスも、抽象クラスとして定義する必要があります...。
  • finalは、子クラスのメソッドのオーバーライドを禁止します。 finalとして宣言された「short」メソッドの場合、このキーワードは、関数を呼び出す代わりに、サブクラスでC ++のインラインと同じ効果があります。 多分スーパークラスメソッドのバイトコードを呼び出し元のクラスメソッドコードに挿入しました。
  • finalは、finalとして宣言されたクラスからの継承も禁止します。
  • 名前空間 Javaの(名前空間)は次のように実装されます パッケージ(パッケージ)。
  • 接続する パッケージ importを使用し、importstaticを使用することもできます ..(*|)クラスの静的メンバーをインポートします。
  • Javaは、組み込みのThreadクラスとRunableインターフェースを介してスレッドをサポートします。 同期の場合、クラス記述のメソッドの前に同期指定子を使用するか、同期( )(...)と同期されたコードのブロック ..。 同期されたスレッド間のシグナルの場合、親Objectクラスのメソッドが使用されます:wait()/ notify()/ notifyAll()。
  • 一時的-オブジェクトを保存するとき、たとえば、ディスク/データベースに書き込む前にシリアル化するときに、オブジェクト/変数の値を「保持」する必要がないことを示す修飾子。 を含む変数をマークすることは論理的です 一意の識別子 Javaプロセスの現在のインスタンスでのみ意味を持つランタイムおよびその他の同様の情報。
  • instanceof -ランタイム操作、戻り値 NSもしも クラスへのリンクがあります 、またはこのクラスへの参照にキャストできます。それ以外の場合。 NS.
  • assert-JavaアサーションはCとほぼ同じ方法で使用されます:assert [:アサーション失敗の説明]、しかし 覚えておく必要がありますそれらはコンパイルされたバイトコードに「埋め込まれ」、 Javaを実行しています-ea。
  • this(...)-クラスのコンストラクター内で使用して、引数のシグニチャーに一致する同じクラスの別のコンストラクターを呼び出すことができます。
  • それ以外の テンプレート使用されています 一般化、非常によく似ています:クラスCLASS_NAME (...)。 一般化では 禁止されています使用する 原生的タイプ ( int、byte、charなど..。)。 パラメータを使用できます クラスのみ.
    さらに、サポートされています 限定タイプ、パラメータクラスのスーパークラスを指定します。 たとえば、「ジェネリッククラス」クラスCLASS_NAMEを宣言します。 一般的な数値クラスNumberの子孫クラスのみが許可されます。
  • System.arraycopy()を使用すると、配列をすばやくコピーできるので便利です。
  • スタニスラフ・ゴルナコフ

    外国語を話したり読んだりするには、その言語のアルファベットと文法を学ぶ必要があります。 プログラミング言語の研究でも同様の条件が見られますが、唯一の違いは、このプロセスがやや簡単であるように思われることです。 ただし、プログラムのソースコードの記述を開始する前に、まず、発生した問題を都合のよい形式で解決する必要があります。

    たとえば、電話を担当する特定のクラスを作成しましょう。このクラスには、この電話のオンとオフの2つのメソッドしかありません。 現在、Java言語の構文がわからないため、Phoneクラスを抽象言語で記述します。

    クラス電話(有効()メソッド(//電話をオンにする操作)メソッドオフ()(//電話をオフにする操作))

    Phoneクラスは次のようになります。 中括弧は、クラス、メソッド、またはデータのシーケンスの本体の開始と終了をそれぞれ示していることに注意してください。 つまり、括弧はメソッドまたはクラスに属することを示します。 開き括弧には、閉じ括弧が必要です。 混乱しないように、通常はコード内で同じレベルに配置されます。

    それでは、Javaだけで同じクラスを書いてみましょう。

    クラスTelefon(void on()(//メソッドの本体on())void off()(//メソッドの本体off()))

    Java言語のclassキーワードはクラスを宣言し、その後にクラス自体の名前が続きます。 私たちの場合、これはTelefonです。 レコードの登録について少しだけ。 ほとんどすべてのプログラミング言語では、名前が作成された場合に名前を記録しておくことが重要です。 Telefonを作成した場合、telefonやTELefoNなどのスペルでは、コンパイル中にエラーが発生します。 最初に書いたので、さらに書く必要があります。

    予約語またはキーワードは特定のケースで記述されており、メソッド、クラス、オブジェクトなどに名前を付けて使用することはできません。 コンパイラは単に単語を無視するため、単語間のスペースは重要ではありませんが、コードの可読性にとって重要です。

    Telefonクラスの本体には2つのメソッドがあります。on()-電話をオンにし、off()メソッド-電話をオフにします。 どちらのメソッドにも独自の本体があり、理論的には、両方のメソッドの必要なアクションを説明するある種のソースコードが含まれている必要があります。 今のところ、これらのメソッドがどのように実装されているかは関係ありません。主なものはJava言語の構文です。

    どちらのメソッドにも()に括弧があり、その中にパラメーターを書き込むことができます。たとえば、(int time)またはon(int time、int time1)です。 パラメータの助けを借りて、メソッドと外の世界との間に一種のつながりがあります。 on(int time)メソッドは、時間パラメーターを取ると言われています。 それはなんのためですか? たとえば、特定の時間に電話の電源を入れたいとします。 次に、時間パラメータの整数値がメソッドの本体に渡され、受信したデータに基づいて電話の電源がオンになります。 括弧が空の場合、メソッドはパラメーターを取りません。

    コメント(1)

    Telefonクラスでは、両方のメソッドの本体に2つのスラッシュの後にエントリがあります://。 このようなエントリは、コンパイラによって無視されるコメントを示しますが、コードを読みやすくするために必要です。 プログラムの作成中にコメントアウトする情報が多ければ多いほど、1年間にこれまで取り組んできたことを思い出さなければならない可能性が高くなります。

    Javaのコメントには、//、/ *…* /および/ **…* /の3つのタイプがあります。 //演算子を使用して記述されたコメントは、1行に配置する必要があります。

    // 1行!!! エラー! 2行目に折り返すことはできません! //最初の行// 2番目の行//…//最後の行

    / *…* /演算子を使用したコメントは、複数行にまたがることができます。 コメントの最初に/ *を入力し、最後にコードのコメントが終了したら、* /演算子を入力します。 最後の種類のコメント/ ** ... * /は、コードを文書化するときに使用され、任意の行数に配置することもできます。

    Javaデータ型

    Javaには、任意の値を設定するためのデータ型が存在します。 Telefonクラスでは、2つのメソッドを作成しました。 どちらのメソッドにもパラメーターはありませんでしたが、timeパラメーターを使用したon(int time)メソッドの例を示すと、メソッドに値を渡すことが言われていました。 この値は、電話がオンになると思われる時間を示しています。 int指定子は、時間値のタイプを決定します。 Java 2MEには6つのデータ型があります。

    バイト-–128から128までの小さな整数値。
    short-–32768〜32767の範囲の短整数値。
    int-–2147483648から2147483647までの任意の整数値が含まれます。
    longは、–922337203685475808から9223372036854775807までの非常に大きな整数値です。
    charはUnicode文字定数です。 この形式の範囲は0〜65536で、これは256文字に相当します。 このタイプの文字はすべて一重引用符で囲む必要があります。例:「G」;
    boolean-ブール型。値はfalse-falseとtrue-trueの2つだけです。 このタイプは、少し後でループでよく使用されます。 考え方は非常に単純です。ポケットにお金がある場合、おそらくこれは真実であり、そうでない場合は誤りです。 したがって、お金があればパンやビールを買いに行き(必要に応じて下線を引いて)、お金がなければ家にいます。 つまり、プログラムのさらなるアクションの選択に寄与するのは、そのような論理値です。

    必要な値を宣言するには、次のエントリを使用します。

    Int時間; 長いBigTime; チャーワード;

    セミコロン演算子は、エントリの後に必要であり、行の最後に配置されます。 同じタイプの複数の広告をカンマで区切って組み合わせることができます。

    Mt time、time1、time2;

    それでは、いくつかの値を追加してTelefonクラスを改善しましょう。 on()メソッドとoff()メソッドは不要になりました。特定の問題を実際に解決できる新しいメソッドを追加します。

    クラスTelefon(// S-表示領域// w-表示幅// h-表示高さintw、h、S; //表示領域を計算するメソッドvoidArea()(S = w * h;))

    したがって、3つの変数S、w、およびhがあり、それぞれ、ピクセル単位のディスプレイの面積、幅、および高さを担当します。 Area()メソッドは、電話スクリーンの面積をピクセル単位で計算します。 操作は役に立たないが、非常にわかりやすく、理解しやすい。 Area()メソッドの本体はそれ自体を取得し、S = w * hの形式になります。 この方法では、単に幅に高さを掛けて、変数Sに結果を割り当てるか、保存します。この変数には、この電話の表示領域の値が含まれます。 これで、あらゆる種類の操作を実行できるJava言語の演算子に近づきました。これについては、このシリーズの記事の次のパートで説明します。


    Eclipseの目的、機能、および利点

    Eclipseは拡張可能なIDE(統合開発環境)です。 IDEは、ソフトウェアプロジェクトで作業するために必要な便利に編成されたツールのセットです。

    Eclipseは、任意のプログラミング言語でアプリケーションを開発するために使用できるユニバーサルプラットフォームです(たとえば、Pydev()接続をインストールした後にPythonを使用できますが、JavaはEclipseにネイティブです(ちなみに、Eclipseで記述されています) 。

    Eclipseの最も重要な機能は次のとおりです。

    1. クロスプラットフォーム。 Eclipseは、Windows、Linux、MacOS Xのすべての一般的なプラットフォームで実行されます。さらに重要なことに、その機能はこれらの各プラットフォームで同じです。
    2. 汎用性と拡張性。 Eclipseには、さまざまなサードパーティツールを使用する機能があります。
    3. 開放性と無償性。 Eclipseはオープンソースプロジェクトです(つまり、 ソースコード誰でも利用でき、誰でもこのツールの開発に参加できます)。 Eclipseには、プログラムの改善と機能の拡張に絶えず取り組んでいる活発なコミュニティがあります。

    Eclipseワークスペース

    Eclipseを起動したときに最初に表示されるのは、ワークスペースを配置する場所を選択できるダイアログボックスです。 ワークスペースは、作業内容が保存されるディレクトリです。

    ワークスペースを選択すると、チュートリアルや例などを表示するための提案とともに、スタートページが画面に表示されます。 ワークベンチを選択すると、ウィンドウが表示されます 作業環境 (ワークベンチ)、そこであなたのさらなる作業が行われます。

    ワークスペースの主なコンポーネントは、ビュー、エディター、およびパースペクティブです。

    パフォーマンスワークスペース内の小さなセクションであり、特定のカテゴリのオブジェクト(リソースやパッケージなど)をナビゲートし、エディターを開き、アクティブなエディターのプロパティを表示するために使用されます。 たとえば、ナビゲータービューにはプロジェクトやその他のリソースが表示され、ブックマークビューにはワークベンチ内のすべてのブックマークと、それらのブックマークが関連付けられているファイルの名前が表示されます。 この図は、アウトラインビューがアクティブな状態のワークスペースの右上隅を示しています。

    ビューに加えられた変更はすぐに保存されます。

    別のタイプのWorkbenchビジュアルコンポーネント- 編集者、一部のリソース(プログラムコードなど)を表示および編集するために使用されます。 リソースを選択すると、適切なエディターが表示されます。 たとえば、[ファイル]-> [ファイルを開く...]コマンドを使用して(拡張子が.txtの)テキストドキュメントを開くと、組み込みのプレーンテキストエディタが表示されます。 このエディターで何かを入力すると、ファイル名が書き込まれているタブにアスタリスクが表示されます。 これは、エディターに未保存の変更が含まれていることを意味します。 Ctrl + Sを押すか、[ファイル]-> [保存]コマンドを選択すると、保存されます。

    [ウィンドウ]-> [ビューの表示]コマンドを使用してワークスペースウィンドウに追加できる便利なビューが多数あります。 ただし、一度に1つずつ追加するのではなく、パースペクティブを切り替える方が便利です。 投影(また 視点)タスクを実行するために特別に調整されたビューとエディターのコレクションです。 Eclipseで起動すると、Javaパースペクティブが開き、プログラムを実際に作成するように構成されます。 デバッグプロジェクションは、プログラムのデバッグによく使用されます。 [ウィンドウ]-> [パースペクティブを開く]コマンドを使用して、投影を切り替えることができます。 現在のプロジェクションの名前は、作業環境の右上隅に表示されます(図を参照)。

    最初のJavaプログラム

    プログラミングを開始する前に、Eclipseがプログラムに関連するすべてのリソースを格納するプロジェクトを作成する必要があります。

    プロジェクトを作成するには、コマンド[ファイル]-> [新規]-> [プロジェクト]を実行します。 表示されるウィンドウで、「Javaプロジェクト」を選択し、「次へ」をクリックします。 プロジェクトの名前を入力します。 プロジェクト名のフォルダがワークスペースとして指定したディレクトリに作成されることに注意してください(もちろん、このウィンドウで設定を変更する場合を除きます。これは初めてではありません)。 [完了]ボタンをクリックします。

    これで、プロジェクトがワークスペースの左側にあるPackageExplorerビューに表示されます。 名前をクリックするといつでも削除できます 右クリックマウスを押して[削除]を選択します。 その後、Eclipseは、プロジェクトファイルを含むフォルダーを同時に破棄するかどうかを尋ねます(必要に応じて、フォルダーを破棄することもできます)。

    プロジェクトを削除していない場合は、コンテキストメニューコマンドを使用してプロジェクトにファイルとフォルダーを追加できます。 新規->ファイルおよび新規->フォルダそれぞれ。 プロジェクトが大きい場合は、ネストされたフォルダー構造が必要です。 しかし、Javaプロジェクトの場合、状況は少し異なります。 重要なのは、Javaプログラムのフラグメントがグループ化されているということです。 パッケージパッケージごとに個別のフォルダが作成されます。 パッケージは、[新規]-> [パッケージ]コマンドで作成されます。 また、パッケージの名前を考え出す必要があります。 その結果、この名前の新しいフォルダーがプロジェクトフォルダーに作成されます。 確認してもいい。

    ナビゲータービューを使用すると、プロジェクトリソースを参照する方が簡単な場合があります。 [ウィンドウ]-> [ビューの表示]コマンドで開きます。 プロジェクトディレクトリとパッケージディレクトリに加えて、Eclipseが.classpathと.projectの2つの補助ファイルを作成したことがわかります。 これらはエディターで簡単に開くことができますが、現在は特に関心がありません。

    Javaプログラムは、常に1つ以上で構成されます クラス..。 で[新規]-> [クラス]コマンドを使用してクラスを作成できます。 コンテキストメニューナビゲータービュー(またはパッケージエクスプローラーは関係ありません)。 クラスを作成するときは、クラスが属するパッケージを選択し(作成したばかりのパッケージを選択します)、クラスの名前を考え出す必要があります。 クラス名は大文字で始めるのが一般的です。 この適切な形式のルールに従わない場合、Eclipseは警告を発行しますが、悪いことは何も起こりません。

    ここでは、[クラスでどのメソッドを作成しますか?]の下のチェックボックスをオンにすると便利です。 反対のオプション public static void main(String args)..。 その結果、main()メソッド(関数)がクラス本体に生成されます。 Javaでは、プログラムのクラスの少なくとも1つにそのようなヘッダーを持つメソッドが必要です。 プログラムの開始時に実行されるのは彼です。

    アクションの結果として、クラスの名前と拡張子が.javaのファイルがpackageフォルダーに作成されます。 Eclipseは、このファイルの内容を表示するコードエディターを開きます。 次のようになります(もちろん、パッケージ名とクラス名は異なる場合があります)。

    パッケージmainPack; public class MyClass(/ ** * @param args * / public static void main(String args)())

    自動生成されたコメントの代わりに、関数の本体を構成するコマンドを記述できます。 // TODO自動生成されたメソッドスタブ..。 古典的な「Hello、world!」行を画面に出力するコマンドを1つだけ記述します。

    System.out.println( "Hello、world!");

    プログラムを実行することは残っています。 これを行うには、[実行]-> [ファイル名を指定して実行]コマンドを実行し、重要な起動設定を含むダイアログボックスを表示します。 このウィンドウの左側で、[Javaアプリケーション]を選択します( Javaアプリケーション)。 少し考えた後、Eclipseはmain()メソッドを含むクラスを見つけ、そこからプログラムを開始することを提案します(ウィンドウの右側の[メイン]タブに、プロジェクトとクラスの名前が表示されます)。 これに加えて、プログラマーの注意を引くためにさらにいくつかのタブが提供されています。 たとえば、2番目の引数(引数)では、コマンドラインパラメータを入力するように求められます(プログラムがパラメータを使用してコマンドラインから呼び出されるように設計されている場合)。 私たちの単純なプログラムでは、他に何も指定する必要はありません。 [実行]ボタンをクリックするだけです。

    プログラムの作業の結果として、データはいわゆるコンソールに出力されます。 MS DOSオペレーティングシステムでは、モニター画面全体がコンソールとして機能していました。 Eclipseはコンソールビューを開きます。ここには(すべてが正しく行われている場合)「Hello、world!」という行が表示されます。 私たちのプログラムの出力です。

    ここで、プログラムを再実行するには(たとえば、プログラムに変更を加えることにした場合、または教師に表示する必要がある場合)、より簡単な方法を実行できます-コマンド[実行]-> [最後に起動したファイルを実行]を実行します(前のアプリケーションを再度)またはCtrl + F11を押します。

    Java構文の基本

    定義

    オペランドは、演算に関係する値です。

    メソッド(関数)は、独自の名前を持つプログラムの一部です。 この名前は、プログラムのコマンドとして使用できます(このようなコマンドはメソッド呼び出しと呼ばれます)。 メソッドが呼び出されると、そのメソッドを構成するコマンドが実行されます。 操作と同様のメソッドは、結果値を返すことができます。

    式は、特定の順序で実行される一連の操作とメソッド呼び出し(括弧を考慮した操作の優先順位による)であり、計算中に特定の値を提供します。

    変数は、プログラムが特定のタイプのデータを格納できるコンピュータメモリの名前付き領域です( 変数値)そして変数名を使用してこのデータにアクセスします。

    プログラムとアルゴリズムの概念(繰り返し)

    任意の予定 コンピュータープログラム-入力データの出力データへの変換。 プログラムアルゴリズムは、入力データを出力データに変換する方法を決定します。


    入力データは、さまざまなソースから取得できます。 教育プロジェクトでは、これらのデータは、プログラムの実行中にキーボードとマウスを使用して入力されることがほとんどです。 実際のプログラムでは、ファイル、データベース、ネットワークから、さまざまなセンサーから直接取得することもできます。

    出力データ(プログラムの作業の結果)は、ほとんどの場合画面に表示されますが、ファイルまたはデータベースに保存してネットワークに送信することもできます。 組み込みプログラムは、プログラムが関連付けられているデバイスに何らかのアクションを実行させる出力として、特別なエスケープシーケンスを生成します。

    プログラムの作成を開始するには、すぐに理解する必要があります。

    1. このプログラムは何のためにあるのですか(一般的には何をしますか)?
    2. このプログラムにはどのような入力データがありますか(そしてそれはどこから来ていますか)?
    3. このプログラムの出力(およびそれを送信する場所)は何ですか?
    4. 入力を出力(アルゴリズム)にどのように変換する必要がありますか? これはプログラマーの考えの中で最も難しい部分ですが、前の3つの質問に対する答えはありませんが、それを開始することは意味がありません。

    簡単なプログラムを作成するときは、次のことを行う必要があります。

    1. 入力を取得します。
    2. 入力データを出力に変換するためのアルゴリズムを実装します。
    3. プログラムの作業結果を出力します(出力データ):表示したり、ネットワーク経由で送信したりします。

    複雑なソフトウェアプロジェクトを扱う場合は、プログラムの要件の詳細な分析(顧客との多くのコミュニケーションが必要になる場合があります)を実行し、設計を実行する必要があります(プログラムがどの部分で構成されるかを決定するために、これらの部分がどのように相互作用するか、プログラムの構造と動作のさまざまな側面を図などの形式で表示します。 ただし、いずれの場合も、入力データと出力データを理解せず、アルゴリズムの本質を一般的に理解せずにプログラミングを開始します。 無意味..。 そして、入力データと出力データを知らなくても、少なくともアルゴリズムの本質について一般的に考えてください。 無理だよ.

    したがって、常に入力と出力を定義することから演習を開始してください。 この問題で何か問題がある場合は、先生に連絡してください。

    トピックに関する文献:

    基本的なアルゴリズムの構築(繰り返し)

    注意! トレーニングのこの段階では、このトピックについての知識がすでにあるはずです。それらがなく、繰り返しの材料が理解できないか不十分である場合、あなたは仕事に対処することはできません! このトピックに関する文献を参照することが急務です。

    したがって、アルゴリズムは、入力データを出力データに変換する一連のアクションです。

    アルゴリズムは、主に3つの方法で記述できます。

    アルゴリズムの個々のステップ(記述方法に関係なく)は、絶対にすべてのプログラミング言語で実装されている3つの標準構造を使用して相互にリンクされています。

      順次実行。 手順は次々に実行されます。

      分岐。 特定の条件の達成に応じて(検討対象の例では、x> y?)、プログラムの1つまたは別のブランチが実行されます。

      サイクル。 プログラムの一連のステップは数回実行されます。 実際、ループは分岐に基づいています(ループを終了するための条件がチェックされます)が、この条件が満たされない場合、制御はループの先頭に移されます(すでに完了したステップに戻ります)。

    問題を考えてみましょう。10未満のすべての偶数を表示します。この問題では、順次ステップに基づくアルゴリズムとループを使用するアルゴリズムを使用できます。 両方のオプションの図を図に示します。

    最初の図はより明確に見えますが、5つの数字ではなく100を表示する必要がある場合、図(およびこのアルゴリズムに対応するプログラム)は20倍に増加し、2番目のアルゴリズムに対応するプログラムではのみ1つの場所が変更されます。10が100に変更されます。そのため、繰り返しアクションはサイクルの形で設計されていますが、多くの場合、省略できます。

    覚えておいてください:アルゴリズムは、3つの名前付き構成のみから構築する必要があります!

    トピックに関する文献:

    1.コンピュータサイエンスの学校の教科書。

    Java構文の基本の基本

    1. Java言語は、大文字と小文字を区別します。つまり、すべての関数とキーワードの名前は、例と参考書に記載されているとおりに正確に記述する必要があります。
    2. Java言語のすべてのコマンド(演算子)は、セミコロンで終了する必要があります。
    3. Javaプログラムは、1つ以上で構成されます クラス..。 絶対に、プログラムの機能部分全体(つまり、プログラムの機能)を次の場所に配置する必要があります メソッド特定のクラス。 (オブジェクト指向プログラミングの概念としてのクラスとメソッドについては、レッスン3で説明します。クラス構文についても説明します。最初の演習では、Eclipseがデフォルトで生成するクラスを使用します。)
    4. クラスはパッケージにグループ化されます。
    5. 少なくとも1つのクラスには、検討した例とまったく同じmain()メソッドが必要です。 (最初は、このメソッドの正しいスペルを理解したり覚えたりする必要はありません。必要なチェックボックスをオンにすると、Eclipseがすべてを生成します。)このメソッドが最初に実行されます。

    最も単純なケースでは、プログラムは1つの(またはまったくない)パッケージ、パッケージ内の1つのクラス、およびクラス内の1つのmain()メソッドで構成できます。 プログラムコマンドは行の間に書き込まれます

    public static void main(String args)(

    メソッド本体の終わりを示す閉じ中括弧)。 最も単純な演習を実行するときは、このアプローチに従う必要があります。

    コメント(1)

    コメントは、プログラマーがコードの理解度を向上させるために使用する説明ラベルです。 プログラムをコンパイルするとき、コメントは無視されるので、コメントに何でも書くことができます。 主なことは、この碑文が解説であり、プログラムコマンドとして解釈されるべきではないことを示すことです。 Javaでは、これは次のいずれかの方法で行われます。

    1. // 2つのスラッシュが挿入されます。 これから、行の終わりまで、好きなように書くことができます-Javaはそれをコメントとして扱います。
    2. コメントの最初に文字/ *が配置され、最後に-* /が配置されます。 この場合、コメントは任意の数の行にまたがることができます。
    3. ハイライト ドキュメントへのコメントマーカー/ **と* /の間に配置されます。 それらの使用については後で説明します。

    リテラル書き込みルール

    リテラルを書くさまざまな形式について

    Javaの整数(整数リテラル)は、通常の方法で10進形式(12345、+ 4、-11)で記述できます。

    さらに、整数は、ゼロ(0777、-056)から始まる8進数形式と、ゼロおよびラテン文字x(0xFFFF、0x14、0xA1BC)から始まる16進数形式で書き込むことができます。

    有効なリテラルは10進表記で記述され、整数部分は小数点から分離されます。

    実数を書くことができます 浮動小数点、例:5.4e19、17E-11、-123e +4。 文字eの前にある数字の部分は仮数と呼ばれ、文字eの後に続く部分は順序と呼ばれます。 表記は次のことを意味します。10を次数の累乗にして、仮数を掛ける必要があります。 0.000000001よりも1e-9を書く方が実際に便利な場合があります。

    単一の文字は、「a」、「D」、「@」などのアポストロフィで記述されます。

    特別なエスケープシーケンスを使用して記述されたいくつかの特別な制御文字があります。 最も一般的なものを表に示します。

    エスケープシーケンスもアポストロフィで囲まれています。

    表の最初の行は、このコードを8進数システムで記述することにより、そのコード(0から255までの10進エンコード)を使用して任意の文字を指定できることを示しています。 たとえば、CP1251エンコーディングの文字「g」はエスケープシーケンス「\ 346」で記述されます。

    必要に応じて、任意の文字のコードを指定できます Unicodeエンコーディング-円記号とラテン文字uの後-4つの16進文字。 たとえば、「\ u0055」は文字Uです。

    文字列は引用符で囲まれています。 開始引用符と終了引用符は同じコード行にある必要があります。

    文字列の場合、連結操作+が定義されています。これにより、複数の文字列を1つにまとめることができます(相互に「帰属」させる)。

    文字列定数が長すぎて、1行で書き込むときにプログラムコードで認識されにくい場合は、文字列連結操作を使用してそれらを連結し、複数行で書き込むことができます。 例えば:

    「これは書き留められた非常に長い文字列定数です」 + 「2行のソース」

    制御文字とコードは、文字列内に次のようにまったく同じ方法で記述されます。 バックスラッシュ(ただし、アポストロフィはありません)。

    ブールリテラルはtrueとfalseです。

    識別子

    良いスタイルのルールについて

    プログラミングするときは、オブジェクトに名前を付けるための識別子を常に考え出す必要があります。

    識別子は、文字、数字、アンダースコア_、ドル記号$で構成できます(後者は推奨されません。Javaは独自のニーズに使用します)。 識別子を数字で始めることはできません。 Javaキーワード(またはリテラル 真/偽ヌル).

    上記のように、 Java言語は、単純な文字と小文字を区別します..。 これは、myAge、myage、およびMyAgeが完全に異なるオブジェクトの名前であることを意味します。 注意:レジスタエラーは非常に一般的なケースです!

    クラス名は大文字で始まります。名前が複数の単語で構成されている場合、各単語は大文字で始まります。 例:MyClass、Book。

    メソッド名と変数名は小文字(小文字)で始まります。 名前に複数の単語が含まれている場合、次の各単語は大文字で始まります。 たとえば、myVar、x、y、newBigCounter。

    定数名は完全に書かれています 大文字; 名前に複数の単語が含まれている場合は、それらの間にアンダースコアが配置されます。 たとえば、PI、COUNT_OF_MONTHS。

    これらのガイドラインを使用することには多くの利点があります。 それらの1つは、標準を使用するときに大文字と小文字を配置する方法を正確に知っているということです Javaライブラリ、その開発者は推奨事項を順守しました。

    データ型

    Javaデータ型について

    int型は、Javaで整数を格納するために最も一般的に使用されます。

    一般に、Java言語には、byte、short、int、longの4つの整数型があります。 それらは、変数に割り当てられるメモリの量が異なり、したがって、この変数に格納できる値の範囲が異なります。 最も一般的に使用されるint型は、メモリ内で4バイトを占有し、-2147483648から2147483647までの数値を格納するのに適しています。バイト型は、メモリの消費が最も少なく、小さい数値(-128から127)での作業に適しています。 短いタイプと長いタイプは、それぞれ2バイトと8バイトです。

    ダブルタイプは実数に適しています。

    実数(実数)(または浮動小数点数)は、floatとdoubleの2つのタイプで表されます。 float型は4バイトのメモリを使用し、非常に大きい数または非常に小さい数を処理する場合、高度な精度を提供しません。 小数部分が必要な場合に使用することをお勧めしますが、高精度は必要ありません(たとえば、メートル単位で距離を測定するが、センチメートルとミリメートルを考慮したり、コペイカ銀貨を考慮してルーブル単位で価格を測定したりする場合)。 より正確な計算が必要な場合は、double型の値で操作することをお勧めします(たとえば、そのような変数は角度の正弦の値を格納できます)。

    5.3、8.0、2e-3などの有効なリテラルは、Javaによってdoubleと見なされます。 プログラムでフロートとして使用する場合は、文字fで終わる必要があります:5.3f、8.0f、2e-3f。

    char型は、単一文字を格納するために使用されます。 Javaはそれを一種の整数型と見なします(各文字は独自のUnicodeコードで指定されるため)。したがって、すべての整数演算はcharに適用されます。

    ブール値(trueまたはfalseのいずれか)はブール型で表されます。

    したがって、Javaは8つの単純な型を定義し、その機能は次のように示されます。 テーブル:

    変数の宣言

    Javaでは(他の多くの言語と同様に)、使用する前に説明する必要があります。 変数を説明することは、変数に名前を付け、その型を定義することです。

    変数を宣言するときは、最初に型が示され(単純な型のいずれか、クラスまたはインターフェースの名前)、次に変数の名前が示されます。 変数が必要な場合 初期化(初期値を割り当てる)、初期値は名前の後に等号で指定されます。 同じタイプのさらにいくつかの変数は、コンマで区切って宣言できます。

    変数宣言の例:

    int x; //整数変数xを宣言しますダブルa、b; // 2つの実変数aとbの宣言 char letter = "Z"; //初期値「Z」で初期化された文字変数文字を宣言しますブールb1 = true、b2、b3 = false; // 3つのブール変数を宣言します。最初の変数はtrueになり、最後の変数はfalseになります

    基本的な言語操作

    変数と参加することができます(そこから、複雑なものを構築することができます)。 Java言語の最も単純な操作について考えてみましょう。

    数学演算

    比較演算の結果はブール値です:trueまたはfalse

    論理演算

    Java操作について

    &&および|| 2番目の値が必ずしも計算されないという点で異なります。 たとえば、&&は最初のオペランドの値を評価し、それがfalseの場合、すぐにfalseを返しますが、|| 最初のオペランドがtrueであることがわかった場合、すぐにtrueを返します。 Javaにも同様の操作があります&と| 、演算を実行する前に、両方のオペランドの値を評価します。

    シフト操作

    (第1オペランドのビット表現を処理します)

    ビット演算

    (オペランドのビット表現を処理します)

    手術?:

    操作?:三元、つまり、3つのオペランドがあります。 最初のオペランドは条件、ブール式です。 2番目と3番目のオペランドは、他のタイプの式です。 この演算は次のように機能します。条件がtrueの場合、結果として2番目のオペランドを返し、falseの場合、3番目のオペランドを返します。

    たとえば、式(5> 3)? 7 + 1:2 * 2の値は8になりますが、式(5 == 3)? 7 + 1:2 * 2-値4。この表記はあまり説明的ではありませんが、プログラマーはコードを短縮するためによく使用します。 したがって、一連のコマンドの代わりに:

    if(x> 0)y = 45 + a * 2; //ステートメントについて以下で説明する場合それ以外の場合、y = 45-b * 3;

    あなたは書ける:

    Y = 45 +((x> 0)?A * 2:-b * 3);

    代入演算子

    変数が記述された後、プログラムでそれを操作できます。 特に、適切なタイプの値を割り当てることができます。 その後、将来、この変数を任意の式で使用すると、この現在の値が自動的に置き換えられます。

    値は、割り当てを使用して変数に関連付けられます。 Javaでは、単純な等号で記述されています。

    変数=式;

    変数は常に代入演算子の左側に指定されます。 右側は、タイプごとに変数と一致する必要があります。 単純な場合もあります(たとえば、数字や記号)。

    X = 7; //変数xには値7が割り当てられます手紙= "Q"; //文字は「Q」に設定されます

    一般に、式は計算できるものです(たとえば、数学演算の結果や何らかのメソッドによって返される結果)。

    A = 7.5 + 2.4; //計算の結果として変数aに9.9が割り当てられます

    リテラルに加えて、他の変数が式に参加できます。 それらの現在の値がそれらの代わりになります。 コマンドの結果として:

    B = a + 1;

    変数bは10.9に設定されます。

    したがって、代入演算子は次のように機能します。 まず、右側の式の値が計算され、その結果が左側で指定された変数に割り当てられます。 次の状況でも可能です。

    X = x + 4;

    このコマンドは、整数変数xの現在の値を4ずつインクリメントします。

    また、次のコマンドは正しく記述されておらず、機能しません。

    5 = x + 7; //左側に変数があるはずです x + 3 = 14; //左側に変数が1つだけあるはずです x = 4.5; //変数xは整数値のみを取ることができます

    Eclipseは、プログラムを実行する前に、コードエディターの余白に警告記号を配置することにより、これらの行にエラーを表示しようとします。 あなたは彼がそれをどのように行うかを見ることができます。

    型キャストについて

    あるタイプの変数に別のタイプの値が割り当てられると、それが使用されます タイプのキャスト(変換)..。 数値型(byte、short、int、long、float、double、char)の場合、変更される変数の型が別の型の値に「対応」できる場合、自動的に発生します。

    たとえば、int型の変数にbyte型の値が割り当てられている場合、byte型からint型への変換が自動的に行われます。 同様に、float型はdouble型などにキャストできます。

    精度の低い型(バイトなど)の変数を精度の高い型(intなど)の値に割り当てようとすると、コンパイラーはエラーメッセージを生成します。

    型キャストには、 キャスト演算子-型変換を実行する式の前に、変換が実行される型とともに括弧が括弧内に配置されます。 高精度の整数型を低精度の整数型にキャストする場合、キャストが実行される型の許容範囲でモジュロ除算を実行できます。また、double式をfloat式にキャストする場合、式の精度は次のようになります。削減されます。

    long j =(long)1.0; //キャスト演算子を使用してlong、j = 1 char ch =(char)1001; //キャスト演算子を使用してchar、ch = "d"バイトb2 =(バイト)(100); // intからbyteへのキャスト演算子を使用します、b2 = 100バイトb3 =(バイト)(100 * 2); //注意! モジュロ除算が発生します、b3 = -56

    型の不一致エラーは、有効なリテラルでよく発生します。 たとえば、割り当てa = 7.5 +2.4を実行することはできません。 変数aがfloat型の場合、リテラル7.5および2.4はdouble型と見なされるためです。 エラーを回避するには、型キャストを使用する必要があります。

    A =(フロート)(7.5 + 2.4);

    または、リテラルもフロートであることを示します。

    A = 7.5f + 2.4f; //これも有効なコマンドです

    ほとんどすべての二項演算には、独自の種類の代入演算子があります。 たとえば、加算+演算の場合、単項代入演算子+ =があります。これは、オペランドの値を指定された量だけインクリメントします。

    X + = 8; // x = x + 8と同じ(xは8ずつ増加します)

    他の操作についても同様です:演算子* =、-=、/ =、%=、&= ^ =など。

    X * = 3; // x = x * 3と同じ(xは3倍に増加) b1 ^ = b2; // b1 = b1 ^ b2と同じ

    演習1

    2つの整数変数を宣言し、それらに任意の値を割り当てます。 それらの合計と積を印刷します。

    促す: Eclipseで作成済みのプロジェクトを貼り付けることで使用できます 必要なコマンド「Hello、world!」という行を出力するコマンドの後。 またはそれの代わりに。

    インクリメントおよびデクリメント演算子

    インクリメント演算子とデクリメント演算子について

    インクリメントおよびデクリメント演算子++および-オペランドの値を1つインクリメントおよびデクリメントします。 x ++コマンドを使用する方がはるかに便利です。 コマンドの代わりにx = x + 1;

    インクリメント演算子とデクリメント演算子も値を返します。 これは、コマンドを実行することが合法であることを意味します

    Y = 7 * x ++;

    その結果、変数xは1増加し、変数yはxの古い値の7倍の値を取ります。 次のコマンドを実行することもできます。

    Y = 7 * ++ x;

    その結果、変数xは1増加し、変数yはxの新しい値の7倍の値を取ります。

    条件付きifステートメント

    最も単純な表記法 条件演算子次のようになります:

    if(条件)コマンド

    括弧で囲まれた条件はブール式です。 trueまたはfalseにすることができます。 条件が真の場合、コマンドが実行されます。それ以外の場合、何も起こりません。 例えば:

    if(x //変数xの値が17未満の場合、xを17に割り当てます

    条件がfalseの場合に他のコマンドを実行する必要がある場合は、ifステートメントの拡張形式を使用します。

    if(条件)command1 else command2

    elseif構文について

    上記の例では、条件が次の場合、変数xを5に割り当てることができます。 xは実行されません(なぜそれが必要なのか、別の質問)。

    if(x else x = 5;

    複数の相互に排他的な条件を使用する必要がある場合、それらは次のように記述できます。

    if(condition1)command1 else if(condition2)command2 else if(condition3)command3 ... else commandN

    演習2

    2つの整数変数を宣言し、それらに任意の値を割り当てます。 ifステートメントを使用して、それらの最大値を見つけて出力します。

    促す:アルゴリズムの基本的な構成を繰り返しながら、最大値を見つけるためのアルゴリズムを検討しました。

    複合コマンド

    中括弧()を使用して、複数のJava言語コマンドを1つの複合コマンドに組み合わせることができます。 たとえば、次のように書くことができます。

    (a = 12;文字= "D";)

    複合コマンドは、通常のコマンドがどこにあっても使用できます。 たとえば、ifステートメントで、条件が満たされたときに複数のアクションを実行する必要がある場合:

    if(x "S";)else(x = 5;)

    カーリーブレース構造は、 コマンドのブロック中括弧は ブロック境界.

    この例で使用されている表記法(ブロックの境界が別々の行に配置され、ブロックの内容がその境界からインデントされて書き込まれている場合)はオプションであることに注意してください。 これは、プログラムを理解しやすくし、Javaプログラムでよく使用される中括弧で混乱しないようにするための単なるスタイルルールです。

    スイッチ選択ステートメントについて

    Switchselectionステートメント

    多くの場合、実行するコマンドの選択は、変数(または式)の値によって異なります。 たとえば、ユーザーは操作記号の入力を求められ、入力された文字によっては、加算、減算などの結果を表示する必要があります。 または、間違った文字が入力された場合は、エラーメッセージが表示されます。 この場合、次の表記のスイッチ選択ステートメントを使用すると便利です。

    switch(式)(ケース値1:コマンドシーケンス1ブレーク、ケース値2:コマンドシーケンス2ブレーク、...デフォルト:デフォルトのコマンドシーケンス)

    Value1、value2など。 定数または定数のみを含む式です。 後の括弧内の式 キーワードスイッチには変数を含めることができます。 この式が評価され、結果がcaseキーワードの後の値の1つと照合されます。 そのような一致が見つかった場合、コロンと最も近いブレークコマンドの間にあるコマンドのシーケンス全体が実行されます。 一致するものが見つからない場合は、defaultキーワードに続くデフォルトのコマンドシーケンスが実行されます。 例えば:

    char oper; //操作記号、ユーザーが選択します ... //この時点でユーザーがサインを選択したと仮定しましょう switch(oper)(case "+":System.out.println(a + b); break; case "-":System.out.println(a --b); break; case "*":System.out。 println(a * b); break;デフォルト:System.out.println( 「無効なトランザクションサイン」); }

    デフォルトのセクションは省略できます。 この場合、一致するものが見つからない場合、コマンドは実行されません。

    whileループステートメント

    whileループの形式は次のとおりです。

    while(条件)コマンド

    括弧で囲まれた条件(ブール式)がtrueの場合、コマンドが実行されます- ループ本体(単純なコマンドまたは中括弧で囲まれた一連のコマンドの場合があります)。その後、プログラムはこのステートメントの実行に戻り、条件がfalseになるまでこれを繰り返します。

    したがって、プログラムが無限ループに入ったりハングしたりしないように、ループ本体は終了オプションを提供する必要があります。つまり、ループ本体のコマンドは、条件に含まれる変数に何らかの影響を与える必要があります。

    たとえば、次のコードスニペットは、2から10までの偶数を出力します。

    int x = 2; while(x<= 10){ System.out.println(x); x += 2; }

    事後条件付きのwhileループについて

    whileループを作成する別の方法があります。

    コマンドを実行するwhile(条件)

    このオプションを使用する場合、コマンドが最初に実行され、次に条件がチェックされます。 どちらのオプションも同じように機能しますが、2番目のケースでは、条件が最初にfalseであっても、ループ本体(コマンド)が少なくとも1回実行されます。

    演習3

    whileループを使用して、1から10までのすべての奇数を出力します。

    促す:偶数を出力するためのアルゴリズムを少し変更します。

    forループ演算子

    forループは通常、コマンド(または一連のコマンド)の実行を何回繰り返す必要があるかが事前にわかっている場合に使用されます。 次の形式になります。

    for(initコマンド;条件;ジャンプコマンド)loop-body

    サイクルの開始前に、初期化コマンドが実行されます。 次に、ジャンプ条件(ブール式)がチェックされます。 この条件が真の場合、ループの本体を構成するコマンド(または中括弧で囲まれたコマンドのブロック)が実行されます。 次に、ジャンプコマンドが実行され、すべてが最初からやり直されます。 ジャンプ命令は通常、条件の真偽に影響を与える変数を変更し、初期化命令はこの変数の説明です。

    通常、forループは次のように使用されます。

    for(int i = 1; i<= 10; i++) тело_цикла;

    この例では、loop_bodyは正確に10回実行されます。 この場合、各反復で、変数i(ループ変数と呼ばれます)が使用可能になり、1から10までの値を順番に実行します。次のプログラムフラグメントは、2から10までの偶数を出力します( whileループの例):

    for(int i = 1; i<= 5; i++) System.out.println(i*2);

    演習4

    forループを使用して、1から10までのすべての奇数を出力します。

    ステートメントを中断して続行する

    ループの本体(forまたはwhile)が複数のコマンドで構成されている場合、次の反復でそれらすべてを実行する必要がない状況が発生する可能性があります。 この場合、breakステートメントとcontinueステートメントが役立ちます。

    breakステートメントは、終了条件が満たされているかどうかに関係なく、現在のループの実行を終了します。

    continueステートメントは、現在のループ反復の実行を終了します。 つまり、この演算子がループの本体で検出された場合、次のコマンドの残りはスキップされ、ループの新しい反復(反復)が開始されます。

    結論

    最初のレッスンの内容は非常に広範ですが、すべての言語の構造は同じであり、習得する必要があるだけなので、少なくとも1つのプログラミング言語にすでに精通している学生にとっては問題はありません。それらを書くためのルール(構文)。 他のプログラミング言語に精通していない場合は、マニュアルと追加タスクの解決策についてより多くの宿題が必要です。 この場合の最良のオプションは、次のレッスンの前に、文献から推奨される章を読むことです。

    追加の文献

    1. Vyazovik N.A. Javaプログラミング。 (第1章-4、7、10)

    2. Khabibullin I.Sh. Javaセルフチュートリアル2。(第1章)

    このチュートリアルでは詳しく説明されていないJavaデータ型とキャストルールに特に注意してください。 プロのプログラマーは、プログラム内で、変数値がその型で許可されている範囲を超える可能性を常に制御する必要があります。 型キャストエラーは、最も一般的で検出が難しいものの1つです。 最初の本の第4章と第7章は、優秀な成績を申請するすべての学生に強くお勧めします。