grade / class.
命令系統や職責などの関係から人間を等級付けし、差別する事。
誰が誰に対して何の目的で命令して良いのかという「職権」を定めるために用いられる。
人間がある階級に属する時、その階級に対して求められる責任を果たす能力があるものと期待される。
一般に階級が高いほど重大な責任能力を要求されるため、階級が高いほど労働報酬も高額になる。
実際に仕事を行う上での命令系統については、混乱を避けるために別途の規範が定められる。
例えば、階級が高いからといって陸軍の将校が海軍の部隊に命令を下すことは越権行為であり、罰せられる。
しかし、想定外の状況や、単に規範が忘れ去られた場合には最も高い階級の者が仮に指揮権を得る。
というのが原則だが、実態として、不当に濫用されない職権はない。
階級差による意思疎通の阻害、心理的摩擦や「不当な差別」はどのような社会でも広汎に見られる。
軍隊は極めて厳密な階級組織であり、階級制度なくしては成立しない。
各国はそれぞれの事情と伝統から独特の階級制度を定めているが、国際的には以下のような分類が為されている。
ここではアメリカ軍・NATO加盟各国共通の階級コード・大日本帝国陸海軍及び自衛隊における階級のおおむねの対比を示す。
| 階級呼称 | アメリカ軍 | NATO階級コード | 大日本帝国軍 | 陸上自衛隊 | 海上自衛隊 | 航空自衛隊 | |
| 士官 | 元帥 | OF-10 | 元帥大将 | (該当なし) | |||
| 将官 | 大将 | OF-9 | 大将 | 陸将(甲) | 海将(甲) | 空将(甲) | |
| 中将 | OF-8 | 中将 | 陸将(乙) | 海将(乙) | 空将(乙) | ||
| 少将 | OF-7 | 少将 | 陸将補 | 海将補 | 空将補 | ||
| 准将 | OF-6 | (該当なし) | 一等陸佐 | 一等海佐 | 一等空佐 | ||
| 佐官 | 大佐 | OF-5 | 大佐 | ||||
| 中佐 | OF-4 | 中佐 | 二等陸佐 | 二等海佐 | 二等空佐 | ||
| 少佐 | OF-3 | 少佐 | 三等陸佐 | 三等海佐 | 三等空佐 | ||
| 尉官 | 大尉 | OF-2 | 大尉 | 一等陸尉 | 一等海尉 | 一等空尉 | |
| 中尉 | OF-1 | 中尉 | 二等陸尉 | 二等海尉 | 二等空尉 | ||
| 少尉 | 少尉 | 三等陸尉 | 三等海尉 | 三等空尉 | |||
| 准士官 | 5等准尉 | WO-5 | (該当なし) | ||||
| 4等准尉 | WO-4 | ||||||
| 3等准尉 | WO-3 | ||||||
| 2等准尉 | WO-2 | ||||||
| 1等准尉 | WO-1 | ||||||
| 下士官 | 最先任上級曹長 | OR-9 | 准尉/兵曹長 | 准陸尉 | 准海尉 | 准空尉 | |
| 部隊等最先任上級曹長 | |||||||
| 上級曹長 | |||||||
| 一等曹長 | OR-8 | (該当なし) | 陸曹長 | 海曹長 | 空曹長 | ||
| 曹長 | |||||||
| 一等軍曹 | OR-7 | 曹長/上等兵曹 | 一等陸曹 | 一等海曹 | 一等空曹 | ||
| 二等軍曹 | OR-6 | 軍曹/一等兵曹 | 二等陸曹 | 二等海曹 | 二等空曹 | ||
| 三等軍曹 | OR-5 | 伍長/二等兵曹 | 三等陸曹 | 三等海曹 | 三等空曹 | ||
| 伍長 | OR-4 | 兵長/水兵長 | 陸士長 | 海士長 | 空士長 | ||
| 特技兵 | |||||||
| 兵卒 | 上等兵 | OR-3 | 上等兵/上等水兵 | 一等陸士 | 一等海士 | 一等空士 | |
| 一等兵 | OR-2 | 一等兵/一等水兵 | 二等陸士 | 二等海士 | 二等空士 | ||
| 二等兵 | OR-1 | 二等兵/二等水兵 | (該当なし) | ||||
学級 1は生徒 2の集団で、同じ教室 4で同じ教師 3のもとに集まり、通常は同時に指導を受ける。教育の程度が同じレベルの生徒の集団をアメリカ合衆国では同じ学年 5、イギリスでは同じ学級 5という。学生 6という語は一般に高等教育を受けているものを指すが、中等教育レベルでは“生徒”ともいう。
(Class から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/08/31 09:58 UTC 版)
| 拡張子 | .class |
|---|---|
| MIMEタイプ | application/java-vm、application/x-httpd-java |
| 開発者 | サン・マイクロシステムズ |
| 種別 | バイトコード |
Javaクラスファイルは、Java仮想マシン (JVM) 上で実行可能なJavaバイトコードを含む( .class拡張子付きの)ファイルである。Javaクラスファイルは、Javaクラスを含むJava言語ソースファイル( .javaファイル)からJavaコンパイラによって作成される。ソースファイルに2つ以上のクラスがある場合、各クラスは分割されたクラスファイルとしてコンパイルされる。
JVMは多くのプラットフォームで利用可能であり、あるプラットフォームでコンパイルされたクラスファイルは他のプラットフォームのJVMでも実行できる。これによりJavaはクロスプラットフォームである。
2006年現在[update]、クラスファイルフォーマットの変更はJava Specification Request (JSR) 202の元で検討されている。[1]
Javaクラスファイル構造には10個の基本的な項目がある:
クラスファイルは次の(十六進法の)4バイトのヘッダで識別される : CA FE BA BE(以下のテーブル内の最初の4つ)。このマジックナンバーの歴史についてジェームズ・ゴスリンが説明している。[2]
「私たちはSt Michael's Alleyと呼ばれる場所でよく昼食を取っていた。地元の言い伝えによると、深く暗黒の過去に、有名になる前のグレイトフル・デッドがそこでよく演奏していたという。そこは明確にグレイトフル・デッドにまつわる場所でとてもファンキーな場所だった。ジェリーが死んだ時、人々は少し仏教風な廟を建てることさえした。そこへ行っていた頃、私たちはその場所をCafe Deadと呼んだ。いつしか、それが十六進数であったことに気付いた。私はいくつかのファイルフォーマットを再度繕っていて、マジックナンバーが2つ必要になった。一つは永続的なオブジェクトファイルのため、もう一つはクラスのため。私はオブジェクトファイルフォーマット用にCAFEDEADを使用し、"CAFE" の後にふさわしい4文字の十六進の言葉をgrepして、BABEがヒットしたのでそれを使うことに決めた。その時は、それが歴史の片隅以外の場所に行くような、非常に重要で運命付けられているもののようには見えなかった。そうして、CAFEBABEはクラスファイルフォーマットとなり、CAFEDEADは永続的オブジェクトフォーマットとなった。しかし永続的オブジェクト機能は無くなってしまったため(結局はRMIに置き換えられた)、CAFEDEADも共に無くなった。」
クラスファイルは可変長の項目を含み、組み込まれたファイルのオフセット(またはポインタ)すら含まないため、通常は最初のバイトから最後まで順番に解析される。最も低レベルな点から、ファイルフォーマットはいくつかの基本的なデータ型の点から記述される:
これらの基礎的な型の一部は、前後関係に依存することで次に(文字列や浮動小数点数といった)上位レベルの値として再解釈される。 ワードが一直線に並ぶことは強制されないので、パディングバイトは常に利用されない。 クラスファイルの全てのレイアウトは以下のテーブル内のように見られる。
| バイトオフセット | サイズ | 型あるいは値 | 記述 |
|---|---|---|---|
| 0 | 4バイト | u1 = 0xCA 十六進 |
クラスファイルフォーマットに適合するファイルを識別するために使用されるマジックナンバー (CAFEBABE) |
| 1 | u1 = 0xFE 十六進 |
||
| 2 | u1 = 0xBA 十六進 |
||
| 3 | u1 = 0xBE 十六進 |
||
| 4 | 2バイト | u2 | 使用されるクラスファイルフォーマットのマイナーバージョン数 |
| 5 | |||
| 6 | 2バイト | u2 | 使用されるクラスファイルフォーマットのメジャーバージョン数。 JDK 1.1 = 45(0x2D 十六進)、 JDK 1.2 = 46(0x2E 十六進)、 JDK 1.3 = 47(0x2F 十六進)、 JDK 1.4 = 48(0x30 十六進)、 J2SE 5.0 = 49(0x31 十六進)、 JavaSE 6.0 = 50(0x32 十六進)、 JavaSE 7 = 51(0x33 十六進)、以降メジャーバージョン毎に1ずつ加算。 初期バージョン数の詳細についてはThe JavaTM Virtual Machine Specification 2nd editionの脚注を参照すること。 |
| 7 | |||
| 8 | 2バイト | u2 | 定数プールカウント、以下の定数プールテーブル内のエントリ数。このカウントは少なくとも1つは実在のエントリ数よりも大きい。以下の議論を参照すること。 |
| 9 | |||
| 10 | cpsize(変数) | テーブル | 定数プールテーブル、リテラル数、文字列、そしてクラスやメソッドへの参照といった項目を含む、可変長の定数プールエントリ。合計エントリ(定数テーブルカウント - 1)数を含む、1から始まり索引付けされる(脚注を参照すること)。 |
| ... | |||
| ... | |||
| ... | |||
| 10+cpsize | 2バイト | u2 | ビットマスクによるアクセスフラグ |
| 11+cpsize | |||
| 12+cpsize | 2バイト | u2 | 「クラス」型エントリの定数プールへのインデックスである、thisクラスを識別する |
| 13+cpsize | |||
| 14+cpsize | 2バイト | u2 | 「クラス」型エントリの定数プールへのインデックスである、スーパークラスを識別する |
| 15+cpsize | |||
| 16+cpsize | 2バイト | u2 | インタフェースカウント、以下のインタフェーステーブル内のエントリの数 |
| 17+cpsize | |||
| 18+cpsize | isize(変数) | テーブル | インタフェーステーブル、可変長インタフェースの配列 |
| ... | |||
| ... | |||
| ... | |||
| 18+cpsize+isize | 2バイト | u2 | 変数カウント、以下のフィールド内のエントリの数 |
| 19+cpsize+isize | |||
| 20+cpsize+isize | fsize(変数) | テーブル | フィールドテーブル、フィールドの可変長配列 |
| ... | |||
| ... | |||
| ... | |||
| 20+cpsize+isize+fsize | 2バイト | u2 | メソッドカウント、以下のメソッドテーブル内のエントリ数 |
| 21+cpsize+isize+fsize | |||
| 22+cpsize+isize+fsize | msize(変数) | テーブル | メソッドテーブル、メソッドの可変長配列 |
| ... | |||
| ... | |||
| ... | |||
| 22+cpsize+isize+fsize+msize | 2バイト | u2 | 属性カウント、以下の属性テーブル内のエントリ数 |
| 23+cpsize+isize+fsize+msize | |||
| 24+cpsize+isize+fsize+msize | asize(変数) | テーブル | 属性テーブル、属性の可変長配列 |
| ... | |||
| ... | |||
| ... |
Cは複雑な、構造体内の可変長配列をサポートしていないため、以下のコードはコンパイル不可能で、デモンストレーションとしてのみ役立つ。
struct Class_File_Format {
u4 magic_number;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count - 1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
定数プールは、大部分のリテラル定数値がストアされる場所である。ここには全ての種類の数、文字列、識別子名、クラスおよびメソッドへの参照、そしてタイプデスクリプタといった値が含まれる。定数テーブル内の明確な定数への全てのインデックスや参照は、インデックスがテーブル内の最初の定数を1に指し示す(インデックス値0は不正)、16ビット(u2型)数で与えられる。
ファイルフォーマット開発中の歴史的な選択のため、定数テーブル内の定数の数は、テーブルの先にある定数テーブルカウントと実際には同じではない。最初に、テーブルは(0ではなく)1で始まるようインデックス付けされ、そのためにカウントは実際には最大インデックスとして解釈されるべきである。加えて、定数の2つの型(longおよびdouble)は連続したスロットを取る。しかし二つ目のそのスロットは決して直接使用されない幻のインデックスである。
定数テーブル内の各項目(定数)の型は、最初のバイトであるタグで識別される。このタグに続く数とこれらの解釈は、それ以降タグの値に左右される。正当な定数型とそのタグは以下の通りである:
| タグバイト | 追加のバイト | 定数の解説 |
|---|---|---|
| 1 | 2+xバイト (変数) |
UTF-8 (Unicode) 文字列 : 直接続くエンコードされた文字列内の数を示す、16ビット数の接頭辞が付くキャラクタ文字列。エンコーディングは実際にはUTF-8ではなく、Unicode標準のエンコーディング形式のわずかな修正を含むことに注意すること。 |
| 3 | 4バイト | Integer : ビッグエンディアンフォーマットによる符号付き32ビット2の補数 |
| 4 | 4バイト | Float : 32ビット単精度IEEE 754浮動小数点数 |
| 5 | 8バイト | Long : ビッグエンディアンフォーマットによる符号付き64ビット2の補数(定数テーブルの2つのスロットを占める) |
| 6 | 8バイト | Double : 64ビット倍精度IEEE 754浮動小数点数(定数テーブルの2つのスロットを占める) |
| 7 | 2バイト | クラス参照 : (内部フォーマットによる)完全修飾型クラス名を含むUTF-8文字列による定数テーブル内のインデックス(ビッグエンディアン) |
| 8 | 2バイト | 文字列参照 : UTF-8による定数プール内のインデックス(ビッグエンディアン) |
| 9 | 4バイト | フィールド参照 : 定数プール内にある2つのインデックス、最初はクラス参照で次は名前および型の記述(ビッグエンディアン) |
| 10 | 4バイト | メソッド参照 : 定数プール内にある2つのインデックス、最初はクラス参照で次は名前および型の記述(ビッグエンディアン) |
| 11 | 4バイト | インタフェース参照 : 定数プール内にある2つのインデックス、最初はクラス参照で次は名前および型の記述(ビッグエンディアン) |
| 12 | 4バイト | 名前および型の記述 : UTF-8による定数プール内のインデックス、最初は名前(識別子)を表し次は特別にエンコードされた型 |
整数定数型はintegerとlongの2つしかない。boolean、byte、そしてshortといった上位レベル言語で見られる他の定数型は、integer定数として表されなければならない。
完全修飾されたJavaのクラス名は、「java.lang.Object」のように慣例的にドットで区分けされる。しかしながら低レベルなクラス参照定数内においては、内部形式は「java/lang/Object」のように、代わりにスラッシュを使用する。
Unicode文字列は、「UTF-8文字列」とあだ名されているにも係らず、実際にはUnicode標準に従ってエンコードされておらずそれと似たような形式である。それら2つには違いがある(完全な議論についてはUTF-8を参照すること)。最初に、コードポイントU+0000は、標準的な1バイト00にエンコードする代わりに、2バイトのシーケンスC0 80としてエンコードされる。 2つ目の違いは、(U+10000および上記としてBasic Multilingual Planeの外側にある)補足する文字が、UTF-8を用いて直接エンコードするのではなくUTF-16に似たサロゲートペア構造を用いてエンコードすることである。この場合、2つのサロゲートの各々がUTF-8において分割してエンコードされる。例えばU+1D11Eは、4バイトのUTF-8エンコーディングF0 9D 84 9Eではなく、6バイトのシーケンスED A0 B4 ED B4 9Eとしてエンコードされる。
(Class から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/10/10 09:36 UTC 版)
クラス
クラス(英語: class)は、等級、階級、科目、分類などを表す一般名詞。階級も参照。
固有名詞の分類