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);
}
}
分享到:
相关推荐
这些笔记不仅介绍了每种方法的原理,还强调了如何在实际问题中应用这些方法。 "6篇数学基础复习"由TA撰写,旨在帮助学生巩固和理解机器学习所需的数学基础知识。这部分内容可能涉及线性代数、概率论、统计推断、...
在这个笔记中,我们将深入探讨监督学习、无监督学习和强化学习等主要的机器学习方法。监督学习是利用已知的输入-输出对训练模型,如线性回归和逻辑回归;无监督学习则是在没有标签的数据上寻找结构,如聚类和降维;...
机器学习是计算机科学领域的一个分支,它试图让机器拥有学习能力,以便计算机能够通过数据学习,执行特定任务而无需进行明确编程。机器学习是人工智能的核心,应用广泛,包括自动驾驶、语音识别、搜索引擎优化、医疗...
### 斯坦福大学机器学习笔记(中文版)——核心知识点概述 #### 一、机器学习简介 **1.1 什么是机器学习?** 机器学习是计算机科学的一个分支,它研究如何让计算机从数据中自动“学习”并改进其性能。这种学习过程不...
这份压缩包文件“斯坦福大学机器学习课程个人笔记完整版 (1).zip”包含了学习斯坦福大学机器学习课程的一份详尽的个人笔记。这份笔记是作者在深入研究该课程后整理而成,旨在帮助读者全面理解和掌握机器学习的核心...
【斯坦福大学机器学习课程笔记】是一份由jerrylead编写的详尽学习资料,主要涵盖的内容基于世界顶级学府斯坦福大学的机器学习课程。这份笔记以其深入浅出的解释和清晰的结构,获得了“个人感觉总结的非常好”的高度...
《斯坦福机器学习讲义理解笔记以及李飞飞CVppt课件》的压缩包内容涵盖了机器学习的基础理论、重要概念和李飞飞教授的计算机视觉(CV)课程资料,是学习机器学习和计算机视觉领域不可多得的学习资源。以下是根据这些...
CNN作为计算机视觉的核心,其原理、结构和训练方法在笔记中有详尽的阐述,包括卷积层、池化层、全连接层以及激活函数的作用。此外,笔记还会讨论如何通过正则化、数据增强等手段来防止过拟合,提高模型的泛化能力。 ...
在Octave教程中,学习了使用Octave编程语言进行数据处理、计算、绘图以及编程练习的方法。Octave是一种常用于科学计算和数值分析的编程语言,对于机器学习算法的实现和数据的分析处理非常有用。 课程除了理论知识的...
从提供的文件内容中可以看出,这是关于斯坦福大学2014年开设的机器学习课程的个人笔记。该课程由吴恩达教授主讲,并由黄海广整理并分享。该笔记详细记录了机器学习的基础理论、方法、算法以及一些实践案例。以下是从...
《斯坦福大学机器学习CS229笔记》是吴恩达教授在斯坦福大学开设的一门深入探讨机器学习的课程,旨在为学生提供全面而深入的机器学习理论和实践知识。这门课程不仅覆盖了他在Coursera上的《机器学习》课程的基础内容...
【CS106B:斯坦福C++编程延续】是一门深入学习C++编程的课程,旨在为已经具备基础编程知识的学生提供进一步提升的机会。这门课程覆盖了C++语言的核心概念、高级特性以及实际应用,帮助学生掌握C++的强大功能和高效...
尝试用所学的知识解决一些实际问题,例如,利用监督学习方法预测房价,或者使用无监督学习进行图像聚类。通过这种方式,你可以将理论知识转化为实际技能。 机器学习的旅程并不简单,但有了这些资源,你将能够逐步...
【机器学习】是计算机科学的一个分支,它涉及让计算机通过经验改进其性能,而无需显式编程。在这些学习笔记中,我们很可能会探讨到监督学习、无监督学习、半监督学习以及强化学习等基本概念。 【监督学习】是机器...
在编程世界中,编程范式是指解决计算问题的不同方法或策略,它们定义了程序设计的基本结构和控制流程。 编程范式的概念是理解计算机科学基础的重要组成部分,它涵盖了函数式编程、面向对象编程、过程化编程、逻辑...
在本篇笔记中,我们将深入探讨斯坦福大学机器学习课程中的关键概念,这些内容源于Andrew Ng教授的讲义和教学视频。机器学习是一门多领域交叉的学科,它旨在让计算机通过经验学习,而无需显式编程。在这个部分,我们...