`
braveCS
  • 浏览: 72511 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

《斯坦福:编程方法学》笔记

阅读更多
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行代码,解决一个问题,还要有一个容易理解的名称。
     不管是面向对象还是面向过程都会用到逐步求精。


[5)loop and a half
while(true){..... break;.....}


6)Java虚拟机栈:Java方法执行的内存模型,通常所说的栈内存(另一个堆内存)
     ppt演示方法调用画出Java方法执行运行时栈帧结构。每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作数栈、动态链接(指向运行时常量池中该栈帧所属方法的引用,用于支持方法调用过程中的动态链接多态)、方法返回地址(包括正常完成出口和异常完成出口)、附件信息(如调试信息)等信息。 ——来自周志明《深入理解Java虚拟机》片段
    调用函数时,会把当前方法栈帧中的操作数栈中的值传递给调用函数的方法栈帧中的局部变量表,栈中存放的是基本类型数据和对象的引用。
    Java垃圾回收指堆中对象的回收,栈中的数据会在方法结束时弹出。堆中的对象根据一定规则标识为可达或不可达,在垃圾回收器根据垃圾回收算法回收不可达对象。

7)private
①信息隐藏,使用户不用关心类里面的具体结构
②控制访问对象变量,例如:可以返回一个字段的副本防止原版被修改


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种方式: ①静态初始化:初始化时显示指定每个数组元素的初始值,由系统决定数组长度; ②动态初始化:初始化时只指定数组长度,由系统为数组元素分配初始值。

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);
	}	
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics