Javaは忘れやすく、知識点ノートを混同しやすい


1.Javaの合法的な識別子規則は、一般的に、識別子はアルファベット、数字、下線""、ドル記号"$"からなり、頭文字は数字ではなく、システム保持字ではありません.
ただしJavaはUnicodeを使用しているため、米ドル記号だけでなく¥や£なども可能であり、中国語や日本語など他の言語も識別子に登場する.次のようになります.
String £="123"; float浮動小数点数=4.76 f;int α=110;
2.複数行コメント/**/の間に表示されるコメントの開始記号、例えば//、/*、/*など、コンパイラは自動的に普通の文字と見なします.すなわち、複数行コメントの中の単行コメントは役に立たず、処理しません.
したがって/* // */このアノテーションは、単行アノテーションによって複数行のアノテーションの閉じた部分が削除されることなく有効です.ただし、複数行のコメントはネストできません.以下はエラーです.
/*
*/*  複数行コメント内部にネストされた複数行コメント*/
*/
3.2つの整数を除算し、除数が0の場合はエラーが表示されます.java.lang.ArithmeticException:/by zero
しかし、いずれかが浮動小数点数、例えば1.0/0または1/0.0であれば、エラーは報告されず、その結果はInfinityであり、0.0/0の結果はNaNである.
すなわち,浮動小数点数の世界では0誤りを投げ出すことなく,正無限大あるいは負無限大あるいはNaNに戻る.  その原因は,浮動小数点数演算において,真の意味での0は存在せず,無限に0に近い浮動小数点数であるからである可能性がある.
4.Java中%は整数だけでなく浮動小数点数も型取りできる.5.2%1.2のようですが、結果は必ずしも正確ではありません.結果は0.40000000036で、浮動小数点数の性質にも関係しているはずです.
5.逆演算子「~」を取り、演算に関与する数の各バイナリビットをビット毎に逆にする.コンピュータの数は符号化形式で格納されるので、まず符号化形式で表され、その後、各ビットに対して逆を取り、その後、符号化から変換される.
~2=-3:2の補符号は0000 0000 0000 0000 0000 0000 0000 0010
 だからビットによって逆を取ると1111になります 1111 1111 1111 1111 1111 1111 1101
最上位符号ビットが1であるため負数となり、負数の符号変換ルール「各位取反に1を加算」により、000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
~(-2)=1:-2の補符号は1111 1111 1111 1111 1111 1111 1111 1110
 従って、ビット別逆引きは0000 0000 0000 0000 0000 0000 0000
最上位シンボルビットは0であるため正数、すなわち1であるため、最終結果は1である.
~0=-1:0の補符号は0000 0000 0000 0000 0000 0000
 だからビットによって逆を取ると1111になります 1111 1111 1111 1111 1111 1111 1111
最上位符号ビットが1であるため負数となり、負数の符号変換ルール「各位取反に1を加える」により、000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
6.論理演算子&&、|、ビット演算子&、|はいずれも論理演算に用いることができ、前者は「短絡演算」機能を有し、すなわち&&、|の前の部分が式全体の値を出すことができれば、後の演算を継続しない.
例えば、次のプログラムの出力結果はa:0 b:1
int a=0,b=0;
if(true || b<a++)
	System.out.println("a:"+a);
		
if(true | a<b++)
	System.out.println("b:"+b);

実はEclipseは自動的に第1のifの中で|後はdead codeで、つまりこの部分のコードを実行することは不可能で、第2のifの中でヒントがありません.
7.Javaではlong型が64ビット、floatが32ビットを占めていますが、longは自動的にfloat型に変換できます.long型をfloat、double型に変換すると精度が損なわれる可能性があります.
floatの正確な桁数は7桁(整数桁の数字個数+小数位の数字個数=7)、doubleの正確な桁数は16桁(整数桁の数字個数+小数位の数字個数=16)である.
8.クラス変数(すなわちstatic修飾)は自動的に初期化され、メソッドのローカル変数はできませんが、基本タイプの配列要素も自動的に初期化されます.
public class Dog
{
	private static int i;
    public int j=1;
    public int a;
    public static void main(String[] args)
	{
          System.out.println(i);//  ,  0 
          //System.out.println(j);//  !              j 
          //public static int j=10; //  !public static             
          //int k;
          //System.out.println(k);//  !  k      
          Dog d=new Dog();
          System.out.println(d.a);//  ,  0
          
          int b[]=new int[3];
          System.out.println(b[2]);//  ,  0
	}
}

9.現在(JDK 1.7)switchで使用できるタイプはchar、short、int、enum、Stringです.そのうち上位3つは最初から可能で、enumはJDK 1.5が加入しており、StringはJDK 1.6が加入しているようです.longを使用しようとすると、Cannot switch on a value of type long.Only convertible int values,strings or enum constants are permittedというメッセージが表示されます.
10.try、catch、finallyは単独では使用できません.tryが必要です.文法的にはcatchがなくてもfinallyがなくてもいいです.