1、面向过程和面向对象
可以理解为程序设计的一种风格或思想
面向过程的程序设计语言(POP):它的关注焦点是过程,是以函数为基本结构进行代码组织,在解决问题时,是以一种执行者的思维,分析实现所需步骤,并一步步实现
代表语言:C语言
相对于面向对象语言的不足:扩展能力差、后期维护难度较大
面向对象的程序设计语言(OOP):它的关注焦点是类,参照现实中事物,将事物的属性特征、行为特征抽象出来,用类来表示
典型语言:C++、Java,python等
代码结构是以类为组织单位,每种事物都有自己的属性和功能
是一种设计者思维,适合解决复杂问题。代码扩展性强、可维护性高
面向过程比较适合简单的按照一步一步的步骤来实现的问题
面向对象适合解决复杂的问题,先从宏观上来分析问题,设计一类问题的解决方法,并将其封装起来,等用到这一类时,就可以直接找一类,但在程序落地的时候,依旧需要用面向过程的思想来实现具体方法,二者相辅相成
2、类和对象
这两个概念是面向对象的核心概念
【类】:具有相同特征事物的抽象描述(定义),也可以理解为概念、模板
【对象】:【万事万物皆为对象】实际存在的该类事物的每个个体,是具体的,因而也称为实例
人类——>一类群体,抽象概念
张三——>一个具体的人,即对象
类的结构{
• 变量:事物属性的描述(名词)
• 方法:事物的行为(可以做的事情 动词)
• 构造方法:初始化对象
• 块:一段没有名称的代码块
• 内部类: 即在类体中声明的
}
类的创建:(1)抽象化的过程,即发现类,在该过程中,需要我们根据这一类事物的特征,抽象出它们的特征,归纳为一个类;
访问修饰符有两种:public,无(默认)
修饰符:final,abstract
关键字class用来定义一个类
//类名的创建规范:首字母需大写,类名需见名知义,并且在多单词时,每个单词首字母大写 public class 修饰类 Car(类名){ }
(2)定义类中的成员变量(发现类的共有属性)
成员变量:成员变量是定义在类中,方法体之外的变量。它可以使用任何一种数据类型,作用范围为整个类体。
注:在定义成员变量时,如果未对其进行初始化,那么系统会默认对其进行初始化。
成员变量可以被类中方法、构造方法和特定类的语句块访问。
public class Car{ //成员变量定义 String name; //名称 String color; // 颜色 float price;//价格 } /* 在方法中定义的变量为局部变量,注意,局部变量不会自动初始化 方法的参数也是局部变量 */
(3)定义类中的成员方法(发现类的共有方法)
public class Car{ //成员方法定义 public void start(){ //汽车启动 System.out.println("汽车启动"); [return 返回值;] } public void stop(){ //汽车停止 System.out.println("汽车停止"); [return 返回值;] } }
创建并使用对象
public class TestCar { public static void main(String[] args) { /* Car car = new Car(); new Car(); new关键字用来创建对象,以Car类为模板,块独立的空在内存中开辟一间,用来存储对象信息 Car()构造方法,每个类中默认都有一个,方法名字与类名相同的 Car(类型) car(变量名) 声明一个Car类型的变量 = 把右边的对象地址赋给左边的变量,用变量在后面的程序中表示内存中的对象 */ Car car = new Car(); car.name = "宝马"; car.color="黑色"; car.price= 500000; car.run(120); car.stop(); Car bccar = new Car(); bccar.name = "奔驰"; bccar.color = "红色"; bccar.price = 400000; bccar.run(100); bccar.stop(); /* 使用对象名.属性或对象名.方法的方式访问对象成员 类中的成员变量和成员方法都必须通过创建出来的对象调用 */ } }
构造方法
定义:构造方法名字与类名相同, 且没有返回值,且不需要使用void修饰
特点:类中没有定义时,会默认有一个无参的构造方法,在无参构造方法中为成员变量赋初始值. 我们还可以定义有参的构造方法,通过有参的构造方法为成员变量进行初始化赋值 一旦类中定义了有参的构造方法,那么默认的无参构造方法便会失效
作用:用来为新创建的对象中的成员变量进行初始化
Car bmcar = new Car(); bmcar.name = "宝马"; bmcar.color = "黑色"; bmcar.price = 300000; Car bccar = new Car("奔驰","红色",400000); Car dzcar = new Car("大众","白色",500000); Car adcar = new Car("奥迪",500000,"白色"); System.out.println(bccar.name+":"+bccar.price+":"+bccar.color); System.out.println(dzcar.name+":"+dzcar.price+":"+dzcar.color);
方法重载 定义:在一个类中,有多个方法名相同,但参数个数不同的方法,称为方法重载 区分:通过参数的个数,类型,顺序来进行区分名称相同的多个方法 意义:做同一件事,但是可以传入不同的参数 注意:方法的重载与方法的返回值没有任何关系
/*参数不同具体有三: • 数量不同 • 类型不同 • 顺序不同 */ public Car(){ System.out.println("无参构造方法"); name=null; color=null; price=0; } public Car(String n,String c,int p){ System.out.println("有3个参数的构造方法1"); name=n; color=c; price=p; } public Car(String n,int p,String c){ System.out.println("有3个参数的构造方法2"); name=n; color=c; price=p; } public void run(){ System.out.println(name+"汽车以"+60+"速度行驶"); } public void run(int speed){ System.out.println(name+"汽车以"+speed+"速度行驶"); }