『Javaプログラミング思想』第4版読書ノート第2章
4800 ワード
前に書く
Javaの开発に従事してもうすぐ3年になって、SEプログラムからEEプログラムまで书いて、Javaの言语に対する理解はきっと3年前と异なっています.理解が深まるにつれて、Javaに対する畏敬も高まってきた.だから忙しくて暇を盗んで《Javaプログラミング思想》のこの本を復習したいと思って、その年に入門する時拝読して、いくつかのものに対して半分理解して、いくつかしばらく使えない内容をスキップして、この本の温故をひっくり返してそして新しいことを知っています.
ここで読書の過程で私が覚えている価値のあるものと自分の思考をメモして、後でめくるのに便利で、皆さんと検討するのに便利です.
2.1
著者は注記の中で、「私が読んだ本は、『Javaがサポートするアドレス別伝達は完全に間違っている』と述べています.Javaオブジェクト識別子は実際にはオブジェクトの参照であるためです」と述べ、何事も値別に伝達されていると続けています.
この言葉は少し拗ねていて、翻訳の問題だと推測します.Javaは引用の値を伝えています.すなわち、伝達時にオブジェクトの参照をコピーしたのか、オブジェクトがそのオブジェクトなのか、多くはなく、その参照を指す参照が1つ増えただけです.私はこの観点に賛成だ.
2.2
このセクションでは、前のセクションと2つの初期化文字列の形式を示します. String s = "asdf"; String s = new String("asdf");
両者の比較はJava定数プールを連想させます.最初の参照はJava定数プールにある文字列定数を指します.2番目の参照は文字列オブジェクトを指します.だから==で両者を比較するとfalseになります.
対応:
s 0==s 1の結果はtrue,s 1==s 2の結果はtrueである.3つの参照は、定数プール内の同じ文字列定数を指すためです.そして
s 0==s 1の結果はfalse,s 1==s 2の結果はfalse,s 0==s 2の結果はfalseであった.s 1およびs 2は、期間決定を再コンパイルできないため、個別の文字列オブジェクトである.
このセクションでは、Javaの基本タイプと参照がJavaのスタックに格納されているという記述をまとめます.
同時にJavaのオブジェクトはJavaスタックメモリにあります.
基本タイプに関するまとめ:の基本タイプのサイズはosやハードウェアに関係なく固定されています. すべてのタイプには記号があり、Javaには記号のない基本タイプは存在しません. charは2バイトを占めています(以前は忘れていました). booleanタイプは特殊で、著者らは、ストレージスペースのサイズが明確に指定されていないと述べた.「JVM仮想マシン仕様」という本では、バイトコードではbooleanタイプのサポートが限られており、このタイプはなく、バイトコードでintに変換され、oracleの仮想マシンではboolean配列をbyte配列に変換することができます.ここで質問があります.反コンパイル時にbooleanタイプをどのように確定しますか?検討を待つ.
Javaでは、BigIntegerとBigDecimalの2つの高精度計算クラスが用意されています.任意の精度の整数の定点数をそれぞれサポートします.ここでBigDecimalは定点数ですが、定点数と浮動点数の違いについては:
定点数小数点は実数の真ん中にある位置に固定されています.
浮動小数点数は科学カウント法で実数を表現し,末数,基数,指数および正負号からなる.Javaプラットフォーム上の浮動小数点数タイプfloatとdoubleは、IEEE 754規格で定義された単精度32ビット浮動小数点数と二重精度64ビット浮動小数点数のフォーマットを採用している.1番目のドメインが1ビットを占めるのはシンボルドメインで、0は整数、1は負の数を表す.2番目のドメインは指数ドメインで,単精度は8ビット,二重精度は11ビットであった.指数は正数と負数の両方を表すため、符号なし表現に偏差を加え、単精度127、二精度1023とし、単精度を例にとると、8ビットは0から255の間の数を表すことができ、偏差127を減算して指数を得る範囲は-127~128である.3番目のドメインは末尾数ドメインで,単精度23ビット,二精度52ビットである.IEEE規格では端数小数点左側が1(バイナリであるため)でなければならないので端数を保存する場合はこの1を省略する.基数は保存しないでください.2ですから.
BigDecimalの実装:BigDecimal 任意の精度による整数非スケール値 32ビットの整数スケール (scale)組成.ゼロまたは正の場合、スケールは小数点以下の桁数です.負数の場合、その数の非スケール値に10の負のscale乗を乗算します.
ここでなぜBigDecimalが定点数なのかは分からない.
配列オブジェクトを作成すると、要素が参照の場合nullに設定され、ベースタイプの場合は0に自動的に初期化されます.
2.3
c++に大きな役割ドメインの変数が隠されているメソッドでは、Javaではこのようなメソッドは許可されていません.
2.4
クラスのメンバーが基本データ型である場合、Javaは初期化されていなくてもデフォルト値を付与します.多くの場合、データ型は0、booleanはfalse、charは'<00'です.
本の中の表の中で'<00'の括弧でnullと表記して、プログラムの中で実はそれは1つのスペースです;
注意デフォルトの初期化は、メソッド内のローカル変数ではなく、クラスの変数にのみ適用されます.メソッドで基本タイプを定義して初期化せずにコンパイラを直接使用すると、エラーが発生します.
2.5
文字列の各文字のサイズは2バイトで、Unicode文字セットのサポートを提供します.
2.7
System.getProperties().list()
すべての環境変数属性を取得し、PrintStreamまたはPrintWriterのオブジェクトに出力します.
2.8
IBMのjikesコンパイラもよく使われるjavacコンパイラです
2.8.2小節の第1段の話は少し違和感があって、自分の話でまとめます:javadoc注釈の中に2種類の内容があります:第一に、HTMLの中の内容を直接埋め込みます;第2に、ドキュメントラベル、ドキュメントラベルは@文字で始まり、ドキュメントラベルが1行を独占している場合は@行で始まる必要があります(コメントを表す*ではありません)、1行を独占していない場合は、ドキュメントラベルをカッコで囲む必要があります(@を含む).
JAvadocはpublic何protectedメンバーのみにドキュメントコメントを行い、privateとデフォルトアクセスのメンバーのコメントは無視されます.javadocを使用するときに-privateパラメータを追加してprivateメンバーのコメントも含めることができます.
Javadocコメントでは、生成されたHTMLフォーマットを制御するためにHTMLラベルを使用できますが、javadoc自身が挿入したタイトルと競合するため、や
などのタイトルラベルは使用しないでください.
本に紹介されているドキュメントのラベル:
(1)@seeは他のクラスのドキュメントを参照し、フォーマット:
@see classname
@see fully-qualified-classname
@see fully-qualified-classname#method-name
ドキュメントを生成するときにハイパーリンクのあるSee Alsoエントリが追加されますが、javadocはハイパーリンクが有効かどうかをチェックしません.
(2){@link package.class#member label}
このラベルは@seeと似ていて、行内でのみ使用され、See Alsoではなくlabelをハイパーリンクのテキストとして使用されます.
(3){@docRoot}
ドキュメント・ルート・ディレクトリへの相対パスを生成し、ドキュメント・ツリー・ページのハイパーリンクの表示に使用します.
(4){@inheritDoc}
現在のクラスの直接ベースクラスから、関連ドキュメントを現在のドキュメントコメントに継承します.
(5)@version version-information
version-informationは、バージョンの説明に含まれる重要な情報です.javadocコマンドで-versionパラメータが使用されている場合は、生成されたHTMLドキュメントから特にバージョン情報が抽出されます.
(6)@author author-information
作成者情報が含まれています.javadocには-authorパラメータもあります.複数のラベルを使用してすべての作成者をリストできますが、連続的に配置する必要があります.すべての作成者情報は同じ段落にマージされます.
(7)@since
プログラムコードの最初に使用されたバージョンを指定します.
(8)@param parameter-name description
パラメータの説明
(9)@return
戻り値の説明
(10)@throws
この方法は異常の説明を投げ出す
(11)@deprecated
いくつかの古いプロパティが改善された新しいプロパティに取って代わられたことを示し、ユーザーはこれらの古いプロパティを使用しないことをお勧めします.
/Outputタグの話はよくわかりませんが、前に述べた作者が自分で実現したdocletsと関係があるはずです.筒は説明してもらえますか?ありがとうございます.
Javaの开発に従事してもうすぐ3年になって、SEプログラムからEEプログラムまで书いて、Javaの言语に対する理解はきっと3年前と异なっています.理解が深まるにつれて、Javaに対する畏敬も高まってきた.だから忙しくて暇を盗んで《Javaプログラミング思想》のこの本を復習したいと思って、その年に入門する時拝読して、いくつかのものに対して半分理解して、いくつかしばらく使えない内容をスキップして、この本の温故をひっくり返してそして新しいことを知っています.
ここで読書の過程で私が覚えている価値のあるものと自分の思考をメモして、後でめくるのに便利で、皆さんと検討するのに便利です.
2.1
著者は注記の中で、「私が読んだ本は、『Javaがサポートするアドレス別伝達は完全に間違っている』と述べています.Javaオブジェクト識別子は実際にはオブジェクトの参照であるためです」と述べ、何事も値別に伝達されていると続けています.
この言葉は少し拗ねていて、翻訳の問題だと推測します.Javaは引用の値を伝えています.すなわち、伝達時にオブジェクトの参照をコピーしたのか、オブジェクトがそのオブジェクトなのか、多くはなく、その参照を指す参照が1つ増えただけです.私はこの観点に賛成だ.
2.2
このセクションでは、前のセクションと2つの初期化文字列の形式を示します.
両者の比較はJava定数プールを連想させます.最初の参照はJava定数プールにある文字列定数を指します.2番目の参照は文字列オブジェクトを指します.だから==で両者を比較するとfalseになります.
対応:
String s0 = "asdf";
String s1 = "asdf";
String s2 = "as" + "df";
s 0==s 1の結果はtrue,s 1==s 2の結果はtrueである.3つの参照は、定数プール内の同じ文字列定数を指すためです.そして
String s0 = "asdf";
String s1 = new String("asdf");
String s2 = "as" + new String("df");
s 0==s 1の結果はfalse,s 1==s 2の結果はfalse,s 0==s 2の結果はfalseであった.s 1およびs 2は、期間決定を再コンパイルできないため、個別の文字列オブジェクトである.
このセクションでは、Javaの基本タイプと参照がJavaのスタックに格納されているという記述をまとめます.
同時にJavaのオブジェクトはJavaスタックメモリにあります.
基本タイプに関するまとめ:
Javaでは、BigIntegerとBigDecimalの2つの高精度計算クラスが用意されています.任意の精度の整数の定点数をそれぞれサポートします.ここでBigDecimalは定点数ですが、定点数と浮動点数の違いについては:
定点数小数点は実数の真ん中にある位置に固定されています.
浮動小数点数は科学カウント法で実数を表現し,末数,基数,指数および正負号からなる.Javaプラットフォーム上の浮動小数点数タイプfloatとdoubleは、IEEE 754規格で定義された単精度32ビット浮動小数点数と二重精度64ビット浮動小数点数のフォーマットを採用している.1番目のドメインが1ビットを占めるのはシンボルドメインで、0は整数、1は負の数を表す.2番目のドメインは指数ドメインで,単精度は8ビット,二重精度は11ビットであった.指数は正数と負数の両方を表すため、符号なし表現に偏差を加え、単精度127、二精度1023とし、単精度を例にとると、8ビットは0から255の間の数を表すことができ、偏差127を減算して指数を得る範囲は-127~128である.3番目のドメインは末尾数ドメインで,単精度23ビット,二精度52ビットである.IEEE規格では端数小数点左側が1(バイナリであるため)でなければならないので端数を保存する場合はこの1を省略する.基数は保存しないでください.2ですから.
BigDecimalの実装:BigDecimal 任意の精度による整数非スケール値 32ビットの整数スケール (scale)組成.ゼロまたは正の場合、スケールは小数点以下の桁数です.負数の場合、その数の非スケール値に10の負のscale乗を乗算します.
ここでなぜBigDecimalが定点数なのかは分からない.
配列オブジェクトを作成すると、要素が参照の場合nullに設定され、ベースタイプの場合は0に自動的に初期化されます.
2.3
c++に大きな役割ドメインの変数が隠されているメソッドでは、Javaではこのようなメソッドは許可されていません.
2.4
クラスのメンバーが基本データ型である場合、Javaは初期化されていなくてもデフォルト値を付与します.多くの場合、データ型は0、booleanはfalse、charは'<00'です.
本の中の表の中で'<00'の括弧でnullと表記して、プログラムの中で実はそれは1つのスペースです;
注意デフォルトの初期化は、メソッド内のローカル変数ではなく、クラスの変数にのみ適用されます.メソッドで基本タイプを定義して初期化せずにコンパイラを直接使用すると、エラーが発生します.
2.5
文字列の各文字のサイズは2バイトで、Unicode文字セットのサポートを提供します.
2.7
System.getProperties().list()
すべての環境変数属性を取得し、PrintStreamまたはPrintWriterのオブジェクトに出力します.
2.8
IBMのjikesコンパイラもよく使われるjavacコンパイラです
2.8.2小節の第1段の話は少し違和感があって、自分の話でまとめます:javadoc注釈の中に2種類の内容があります:第一に、HTMLの中の内容を直接埋め込みます;第2に、ドキュメントラベル、ドキュメントラベルは@文字で始まり、ドキュメントラベルが1行を独占している場合は@行で始まる必要があります(コメントを表す*ではありません)、1行を独占していない場合は、ドキュメントラベルをカッコで囲む必要があります(@を含む).
JAvadocはpublic何protectedメンバーのみにドキュメントコメントを行い、privateとデフォルトアクセスのメンバーのコメントは無視されます.javadocを使用するときに-privateパラメータを追加してprivateメンバーのコメントも含めることができます.
Javadocコメントでは、生成されたHTMLフォーマットを制御するためにHTMLラベルを使用できますが、javadoc自身が挿入したタイトルと競合するため、
などのタイトルラベルは使用しないでください.
本に紹介されているドキュメントのラベル:
(1)@seeは他のクラスのドキュメントを参照し、フォーマット:
@see classname
@see fully-qualified-classname
@see fully-qualified-classname#method-name
ドキュメントを生成するときにハイパーリンクのあるSee Alsoエントリが追加されますが、javadocはハイパーリンクが有効かどうかをチェックしません.
(2){@link package.class#member label}
このラベルは@seeと似ていて、行内でのみ使用され、See Alsoではなくlabelをハイパーリンクのテキストとして使用されます.
(3){@docRoot}
ドキュメント・ルート・ディレクトリへの相対パスを生成し、ドキュメント・ツリー・ページのハイパーリンクの表示に使用します.
(4){@inheritDoc}
現在のクラスの直接ベースクラスから、関連ドキュメントを現在のドキュメントコメントに継承します.
(5)@version version-information
version-informationは、バージョンの説明に含まれる重要な情報です.javadocコマンドで-versionパラメータが使用されている場合は、生成されたHTMLドキュメントから特にバージョン情報が抽出されます.
(6)@author author-information
作成者情報が含まれています.javadocには-authorパラメータもあります.複数のラベルを使用してすべての作成者をリストできますが、連続的に配置する必要があります.すべての作成者情報は同じ段落にマージされます.
(7)@since
プログラムコードの最初に使用されたバージョンを指定します.
(8)@param parameter-name description
パラメータの説明
(9)@return
戻り値の説明
(10)@throws
この方法は異常の説明を投げ出す
(11)@deprecated
いくつかの古いプロパティが改善された新しいプロパティに取って代わられたことを示し、ユーザーはこれらの古いプロパティを使用しないことをお勧めします.
/Outputタグの話はよくわかりませんが、前に述べた作者が自分で実現したdocletsと関係があるはずです.筒は説明してもらえますか?ありがとうございます.