面向过程与面向对象的设计思想
面向过程
procedure oriented programming 缩写POP,分析问题所需步骤,然后把步骤一步一步实现,面向过程适合处理一些简单的事情,直接关注流程,简单有效。
举一个例子,就像小明要开车,他需要做那些步骤呢,他需要打开车门,坐进去,启动车辆,踩油门,这样小明才能把车开走,对于面向过程的语言来说,它就是要把小明开车这样的每一个步骤都分析好了,再进行编码实现。
面向对象
object oriented programming 缩写OOP,宏观上的,整体上的一种设计思想,以分类的方式进行思考和解决问题,面向对象的思维方式适合处理复杂的问题,符合人类的认知习惯。他是对整体的一个问题进行分类,然后,根据不同的类深入细节的去处理。
还是举一个例子,依旧是小明开车的问题,对于这个问题,要是以面向对象的思想进行解决,我们会对其进行分类(定义类),把整个过程的所有参与的部分(对象)拉出来,像人,车门,启动装置等等,这些都是我们所说的对象,然后我们再给这些部分(对象或者类)安排(定义)动作,像人我们安排他会有的动作像走、拉、扭、踩等等,车门会有的动作像开、关等等,启动装置的动作像开、关等等…当我们把所有的部分都规定好了之后,我们可以把我们需要每个部分的动作拿出来放在一起组成一个完整的小明开门的动作(调用方法),同样,我们如果需要小明做其他动作,我们依旧可以把小明拿出来进行安排,避免我们重复进行无意义的操作。
注意:我们必须明白,面向对象无法取代面向过程,他们是相辅相成,各有千秋的,面向对象关注于从宏观上把握事物之间的关系,但在具体实现某个细节的时候,我们还是需要去一步一步分析步骤,采用面向过程的思维方式。面向对象离开面向过程就像浮萍无果,明月无根。
Java类
类是同一类事物的属性和行为的描述
类里面定义事物特征 == 汽车设计图纸 == .java文件
对象是具体存在 == 具体的某一个人,某一辆车(实际存在的)在内存中存储
类的结构
成员变量:对象属性的描述;
方法:对象的行为(可以做的事情);
构造方法:用于创建对象;
内部类:在类体中声明的类;
块:代码块.
先学习基本的属性和方法:
成员变量:对某种事物特征的描述(这个类有什么);
方法:对某种事物行为的规定(这个类能干什么).
Java类的定义
第一步:发现类
类的声明格式:
[访问权限修饰符][修饰符] class Name {.......}
访问权限修饰符 public/default
修饰符 final/abstract
关键字 class 用来定义一个类
类名的命名规范:首字母大写,见名知意.....
第二步:发现类的共有属性(成员变量)
类的属性 类的成员 变量 被类包含
类的声明格式:
[访问权限修饰符][修饰符] 数据类型 变量名 [=值];
成员变量的定义方法:名词归纳法
public class Car{
//成员变量定义
String name;//名称
String color;//颜色
float price;//价格
}
第三步:发现类的方法
类的行为 类的成员 方法 被类包含
方法声明格式:
[访问权限修饰符][修饰符]/void start(){......}
方法声明格式为:
[访问权限修饰符][修饰符]/void 方法名(){
System.out.println("汽车启动");
[return 返回值;]
}
代码示例
/*第一步:发现类
* 类的声明格式:
* [访问权限修饰符 public/default] [修饰符 final/abstract] class 类名{ }*/
public class Teacher { //ClassDemo描述一个老师类
/*发现类的共有属性
* 类的属性 类的成员 变量 被类包含
* [访问权限修饰符] [修饰符] 数据类型 变量名[=值]*/
String name;
String clothing;
double height;
double weight;
int age;
String sex;
/*发现类的方法
* 类的行为 类的成员 方法 被类包含
* 声明 格式 [访问权限修饰符] [修饰符]/void start(){ }*/
public void learn(){
System.out.println("开始上课");
}
public void getName(){
int i = 5;
System.out.println(name+"教"+i+"节计算机课");
}
public int gatAge(){
return age;
}
}
Java对象
对象是类的一个实例,是以类为模板在内存中创建的实实在在存在的实例.
类的创建和使用
使用new关键字创建对象.
new关键字+默认构造方法; 在内存空间中创建一个对象,实际存在的实例化的对象
Car baoma = new Car();
上面的Car类就是baoma的类型
使用对象(引用).成员变量来引用对象的成员变量 baoma.color
使用对象(引用).方法来调用对象的方法 baoma.方法名()
同一类的每个对象有不同的成员变量存储空间
同一类的每个对象共享该类的方法
类和对象
总结:类是一类事务的抽象概念,是一个模型;对象是由这个模型所创的一个个的具体存在的,是实实在在的实例,所以创建对象的过程也叫做实例化对象.
变量分类
成员变量
定义在类中,方法体之外;
数据类型是基本数据类型/引用数据类型;
成员变量一般不赋值,java会给其赋默认值( 引用类型[null] float[0.0] int[0] );
没有static,在创建对象时会从类中复制一份到对象;
作用域为整个类,在类中方法、构造方法、特定的语句块访问。
局部变量
定义在方法、构造方法、语句块中;
数据类型是基本数据类型/引用数据类型;
使用前必须初始化赋值;
变量声明和初始化都在方法中,方法结束后,变量自动销毁;
形参也是局部变量,调用时初始化赋值。
类变量
类变量也叫静态变量,在类中声明,方法体之外,必须声明为static类型。
方法分类
一个类可以包含以下方法:
成员方法
成员方法是定义在类中,创建对象时创建。
修饰符 返回值类型 方法名(参数列表){
方法体语句;
[return 返回值;]
}
构造方法
创建对象的方法。
方法名与类名相同,没有返回值,不需要void修饰;
一个类中可以拥有多个构造方法(方法重载);
如果类中没有显示的声明构造方法,类中会默认有一个无参构造方法;
一旦类中定义了有参的构造方法,那么无参的构造方法就会被覆盖,建以直接写出来。
类方法
类方法(静态方法)也声明在类中,但必须声明为static类型。
方法重载
指一个类中可以定义有相同的名字,但参数不同的多个方法,调用时,会根据不同参数选择对应方法。
同一个类中;
方法名相同;
参数不同(可有三个方面的不同):数量不同、类型不同、顺序不同。
注意:方法重载与方法的返回值类型和权限修饰符都无关。
代码示例
类
//构造方法
public class People {
/*全局变量*/
String name;
String diqu;
/*构造方法*/
public People(){
System.out.println("hello world");
}
public People(String name1,String diqu1){
name = name1;
diqu = diqu1;
System.out.println(name1+"在"+diqu1);
}
/*成员方法*/
public void study(){
System.out.println(name+"在"+diqu);
}
/* 方法的重载*/
public People(String name1,String diqu1,int age){
name = name1;
diqu = diqu1;
System.out.println(name1+"在"+diqu1+age+"岁");
}
public People(String name,int age){
System.out.println(name+age+"岁");
}
public People(float a){
System.out.println("构造方法");
}
public People(int b){
System.out.println("构造方法2");
}
}
方法
public static void main(String[] args){
// peo.age=20;
// peo.name="jim'";
// peo.fuse="black";
// peo.diqu="非洲";
People peo =new People("jim","非洲");
// System.out.println(peo);
peo.study();
new People("jim","亚洲",18);
new People(1.0F);
new People(19);
}