面向对象的概念
面向过程:面向的是完成这件事的过程,强调的是完成这件事的动作;
把大象塞进冰箱里:
1、打开冰箱;
2、把大象塞进去;
3、关闭冰箱门。如果我们用面向过程的思想来解决这件事儿,当执行这件事的人不同的时候,我们需要为每个不同的人量身定做解决事情的方法。
面向对象:找个对象帮你做事儿?
面向对象的好处是可以写出比较通用的代码。- 面向过程与面向对象的区别
来自知乎:https://www.zhihu.com/question/28790424/answer/42102986
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题的事物分解成多个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。
以五子棋为例,面向过程的设计思路就是首先分析问题的步骤:
1、开始游戏;
2、黑子先走;
3、绘制画面;
4、判断输赢;
5、轮到白子;
6、绘制画面;
7、判断输赢;
8、返回步骤2,9;
9、输出最后结果。
把上面每个步骤写成一个函数,问题就解决了。
而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为:
1、黑白双方,这两方的行为是一模一样的
2、棋盘系统,负责绘制画面;
3、规则系统,负责判定诸如犯规、输赢等;
第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
- 静态与非静态的区别
1、在非静态类中,既可以有实例成员,也可以有静态成员
2、在调用实例成员的时候,需要使用对象名.实例成员
在调用静态成员的时候,需要使用类名.静态成员名
总结:静态成员必须使用类名去调用,而实例成员使用对象名调用。
静态成员只能访问静态成员,不允许访问实例成员。
实例函数中,既可以使用静态成员,也可以使用实例成员。
使用:
1) 如果想要类当做一个“工具类”去使用,这个时候可以考虑将类写成静态类。//避免创建对象。
2) 静态类在整个项目中资源共享。//
- 堆
- 栈
静态存储区
释放资源。GC Garbage Collection 垃圾回收器。
选中属性,Ctrl+R,E可以自动生成属性的代码。构造函数
作用:帮助我们初始化对象
是一个特殊的方法:
1)构造函数没有返回值,连void也不能写,而且必须是public访问修饰符
2)构造函数的名称必须与类名一样
3)在创建对象的时候调用这个方法
new 关键字:
1)在内存中开辟了一块空间
2)在开辟的空间中创建对象
3)调用构造函数
构造函数可以重载this关键字
1)代表当前类的对象
2)在类当中显式的调用本类的构造函数//重载构造函数时,避免冗余代码
//构造函数,字段,属性,方法
public Student(string name,int age,char gender,int chinese,int math,int english)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
this.Chinese = chinese;
this.Math = math;
this.English = english;
}
public Student(string name,int chinese,int math,int english):this(name,0,'c',chinese,math,english)
{
}
- 析构函数
~Student():~加类名
当程序结束的时候,析构函数才执行,帮助我们释放资源。
与GC的区别是析构函数释放资源的速度比较快。