『スタンフォード:プログラミング方法学』ノート


1)対象思想への導入このコースでは,Javaで作成された小さなプログラムの実行操作について最初に説明する.karelロボットというプログラムで、ユーザーが使用できる方法をいくつか提供しています.授業でkarelを言語と言います.コマンドはkarelクラスが提供するいくつかの共通の方法です.karelが提供していないアクションコマンドを使用する必要がある場合は、自分で新しいコマンドを作成できます.このように最初からプログラミングをオブジェクトの相互操作と理解し,後向きのオブジェクト思想に備える.以前、C言語を勉強していたときは、対象ではなくプロセスに向いていました.後にプロセス向けの思想が根強くなり,結果としてオブジェクト向け言語で書かれたプロセス向けのプログラムになった.現在の最新の体験は,オブジェクト向けに解結合した後のプロセス向けである.2)ロジックエラーOBOB:off by one bug差一エラーinfinite loop:無限ループデバッグ:単純化、条理化、仮定、厳格、冷静.bad value|faulty logic|unwantted assumption. 3)注釈:注釈コードは何をしたのか、前置条件pre-conditionと後置条件post-condtionを含めて、プログラムの実行状態を説明したほうがいい.コードが多くても少なくても、注釈はコードを具体化し、明確化する4)分解:段階的に精進する:上から下へ問題を考えるのは一般的に抽象的なレベルから始まり、全体の後の細部を考えている.大きなステップを一歩一歩小さなステップに分解して、原語の階層(コンピュータで理解できる)まで.原語の一般的な標準:1-15行のコードで、1つの問題を解決し、また1つの理解しやすい名前が必要である.オブジェクト向けでもプロセス向けでも徐々に精進する.[5)loop and a half while(true){.....break;..}6)Java仮想マシンスタック:Javaメソッドが実行するメモリモデル、通常、スタックメモリ(別のスタックメモリ)pptプレゼンテーションメソッドは、Javaメソッドを描画して実行するスタックフレーム構造を呼び出します.各メソッドが実行されると、ローカル変数テーブル、オペランドスタック、ダイナミックリンクを格納するスタックフレームが同時に作成されます.(実行時定数プール内のスタックフレームが属するメソッドへの参照.メソッド呼び出し中のダイナミックリンクマルチステートをサポートするために使用される)、メソッド戻りアドレス(正常完了出口と異常完了出口を含む)、デバッグ情報などの添付ファイル情報.-周志明の「Java仮想マシンの理解」からクリップが関数を呼び出すと、現在のメソッドスタックフレームのオペランドスタックの値が呼び出し関数のメソッドスタックフレームのローカル変数テーブルに渡され、スタックには基本タイプのデータとオブジェクトの参照が格納されます.Javaごみ回収とは、スタック内のオブジェクトの回収を指し、スタック内のデータはメソッドの終了時にポップアップされます.スタック内のオブジェクトは、一定の規則に従って到達可能または到達不可能と識別され、ゴミ回収器ではゴミ回収アルゴリズムに基づいて到達不可能なオブジェクトを回収する.7)private①情報を非表示にして、ユーザーがクラス内の具体的な構造に関心を持たないようにする②アクセス対象変数を制御し、例えば、1つのフィールドのコピーを返して原版が修正されないようにする8)判断を減らしてデフォルト値を使う
private int factorial(int n)
{
     int result=1;
     for(int i=1;i<=n;i++)
        result*=i;
     return result;     
}

9)クラスをパッケージし、Stringオブジェクトの不変性Stringクラスの操作によって、元のオブジェクトの代わりに新しいオブジェクトが再作成されます.基本タイプのパッケージクラスにも不変性があり、その基本タイプは変更されず、新しいオブジェクトを再生成して変更後の値を格納するしかありません.包装類に付属する定数プールを除く.変更された基本タイプが定数プールで見つけられる場合は、新しいオブジェクトを再作成するのではなく、定数プール内のオブジェクトを返します.10)配列初期化Java静的言語-->Java配列も静的である:配列が初期化されると、その配列の長さは可変ではない.Java配列を初期化する2つの方法:1静的初期化:初期化時に各配列要素を指定する初期値を表示し、システムによって配列長を決定する;②動的初期化:初期化時は配列長のみを指定し、システムにより配列要素に初期値を割り当てます.

public class Cs 
{		
	public static void main(String[] args)
	{
		int[] m=new int[3];	
		System.out.println(m[1]);			//0	
		System.out.println(m);    			//[I@c3c749
		System.out.println(int[].class);	//class [I           
		System.out.println(int.class);		//int
		//length        ,  java     arraylength              
		int n=m.length;			 
	}	
}
public class Cs 
{		
	public static void main(String[] args)
	{
		Hah a=new Hah();
		Hah b=new Hah();
		b.haha="ddddd";
		Hah[] m=new Hah[]{a,b,null,null};
		Hah[] m1={a,b};
		Hah[] m2=new Hah[3];
		Hah[] m3=new Hah[3]{a,b,null}; //error
		System.out.println(m[1].haha);
	}	
}