● 面向过程和面向对象的设计思想
面向过程是一种语言设计思想 代表语言:C
解决问题的思路就是一步一步的实现:
- 例:把大象装进冰箱
1.函数1();开冰箱门
2.函数2();装大象
3.函数3();关冰箱门
现在多数编程语言,都引入了面向对象
java,c++,c#,python······
这么多的编程语言,都引入了面向对象这一思想,肯定是有优点的。
面向对象是另一种语言设计思想
object oriented programming 缩写OOP面向对象的编程语言
面向对象是以分类的思想来解决问题:
先分类:
创建一个冰箱类:
定义冰箱相关的一系列功能
名字;
制冷;
开门;
关门;
创建一个大象类:
同样定义大象的一系列功能
···
···
以后只要用到与冰箱相关的操作,直接找冰箱这个类即可
不止于解决一个问题,而是一类问题;
面向对象,类设计时,有继承语法,例,大象类扩展,创建一个动物类,动物类与大象类具有共同的功能,定义在动物类中,大象类继承动物类即可,扩展性,灵活性更高;
面向对象是宏观的设计把控,在具体到如何实现某个细节时,仍然采用面向过程的思维方式。
● java类
类是一个模板,描述一类事物的属性和行为的集合(对某一类事物进行抽象的定义),表示一个客观世界某类群体的一些基本特征抽象.例:
通过观察,发现有四个轮子,会跑--->概念 汽车类
先在这个类中定义一些功能,最终成为一个模板。
类的结构:
成员变量:事物属性的描述;
方法:事物的行为;(可以做的事情)
构造方法:初始化对象;
内部类:即在类体中声明的类.
代码块:一段没有名称的代码块
创建类
● Java类的定义
public [其他修饰符 final abstract] class(修饰这个类) Car(类名){
//直接在类{}中定义的内容,称为类的成员
String name;// 成员变量,类的属性 名词
String color;
int price;
//汽车类共有的特征
// 成员方法,类的行为(做什么) 动词
public void run(){
System.out.println("怎么怎么");
}
······
}
第一步:发现类
第二步:发现类的共有属性(成员变量)
第三步:发现类的方法
分析问题时,是宏观的.
具体写代码,具体到语法.
类只是对同一类事物进行的定义,是抽象的概念,不能直接使用
成员变量是定义在类中,方法体之外的变量。
成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。
在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
成员变量在创建对象的时候会从类中复制一份到对象中。
成员变量可以被类中方法、构造方法和特定类的语句块访问。
成员变量的作用范围为整个类体。
● java对象
什么是对象
对象:对象是类的一个实例,是以类为模板在内存中创建的"实际存在"的"实例"
比如说:类可以看做汽车图纸,对象就是实际存在的一个汽车,有类中定义的功能,可以直接被使用.
"万事万物结尾对象"
● 对象的创建和使用
//以Car类为模板,在内存中创建出一个具体存在的对象
//new(关键字) 类的构造方法(名字与类名相同)
Car bm 声明了一个Car类型的变量
= 表示 把内存中实际存在的对象与声明的变量关联起来(对这个变量操作就相当于对这个对象进行操作)
Car bm = new Car();//在内存中开辟一块空间,存储对象
将右边创建的对象地址赋给左边的bm变量
bm.name =" 宝马";
······
bm.run();
······
用同样的方法再次创建变量bc
······
在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
成员变量在创建对象的时候会从类中'复制'一份到对象中。(由抽象到具体)
两个变量互相独立,互不影响;
同一类的每个对象有不同的成员变量存储空间。
同一类的每个对象共享该类的方法。
类是同一类事物的抽象.
对象是类的实例.
● 构造方法
变量分类
按照位置变量分为:
成员变量:
定义在类中,方法体之外;
可以使用Java中任何一种数据类型(基本类型和引用类型);定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认值对其初始化;
创建对象时会从类中复制一份到对象中;
可以被方法、构造方法以及特定的语句块访问;
作用范围为整个类;
局部变量:
在方法(成员方法)、构造方法或者语句块中定义的变量;
同样可以使用Java中任何一种数据类型;
使用前必须进行初始化;
声明和初始化都在方法、代码块中;
生命周期:什么时候生(方法被调用),什么时候销毁(方法结束后);
方法的形参,也属于局部变量;
类中定义的方法:
成员方法:定义在类中
public static() 通过类名调用
非静态 通过对象调用
public 修饰符 返回值类型、void 方法名(参数类型 参数名){
方法体语句;
return 返回值;
}
构造方法:
是什么:用来初始化对象的方法
构造方法名字与类名相同,且没有返回值,不需要void修饰;
如果用void修饰就变为一个普通的成员方法了
类中默认有一个无参的构造方法,在默认的无参构造方法中为成员变量初始化赋默认值.
一个类中可以定义多个构造方法(可以同名,参数不同),但是只要在一个Java类中定义了一个构造方法后,默认的无参构造方法即失效.
类中出现了多个名称相同的方法这一特征,称为方法重载
作用是什么:在构造方法中为创建的对象初始化赋值
● 方法的重载
是什么:方法的重载是指同一个类中具有相同的名字,但参数不同的多个方法
类中出现多个名称相同的方法这一特征 ,称为方法重载.
调用方法时如何区分这些名称相同的方法?
可以通过参数的个数,类型,顺序来区分调用的是哪种方法
调用时,会根据不同的参数选择表选择对应的方法
方法重载跟方法的返回值类型没有任何关系
一个类中可以定义多个构造方法(可以同名,参数不同),但是只要在一个Java类中定义了一个构造方法后,默认的无参构造方法即失效.如果仍要调用默认的无参构造方法,就必须将无参构造方法定义出来.