一、面向对象与面向过程
面向过程:分析问题所需要的步骤,将实现的程序步骤化,使用的时候依次调用,看中的是中间的过程,每一个步骤都需要自己去完成(手洗衣服)
优点:性能比面向对象高,因为面向对象调用时需要进行实例化,开销比较大。 Eg:Linux操作系统、嵌入式开发、单片机
缺点:没有面向对象容易维护、易复用、易拓展
面向对象:将构成问题的事物分解成各个对象,将实现的程序模块化,不看中中间的过程和步骤,看中的是谁能帮我完成这件事情,找人帮我去做(机洗衣服)
优点:易维护、易复用、易扩展(OOP特征:封装、继承、多态),可以设计出低耦合的系统
缺点:开销比较大,性能比面向过程低
二、类与对象
类和对象是面向对象方法的核心概念。
类是对一类事物的描述,是抽象的、概念上的定义,不能直接使用,类不占空间
对象是实际存在的该类事物的每个个体,是类的实例,是真正存在的,对象占空间
三、类的定义
1.语法格式
<修饰符> class <类名>{
[<属性>]
[<构造函数>]
[<方法>]
}
/**
* 汽车图纸包含两部分
* 属性:颜色 价格 品牌 长度 宽度
* 行为:行驶 停止。。。
*
* 映射到类里面也是有两部分构成
* 成员变量(属性):直接定义在类里面方法之外的变量
* 成员方法(行为):就是把static去掉
*/
// 汽车图纸类 抽象的,不能直接使用
public class Car {
// 成员变量(属性)
String color;// 颜色
int price;// 价格
String brand;// 品牌
double width;// 宽度
double length;// 长度
// 成员方法(行为)
/**
* 定义方法的语法格式
* <修饰符> <返回类型> <方法名>([参数列表]){
* [<语句>]
* }
* 修饰符:public private protected等
* 返回类型:return语句传递返回值,没有返回值:void
*/
public void run(){
System.out.println("一辆汽车颜色是:"+color+",价格是:"+price+",品牌是:"+brand);
}
// 停止方法
public void stop(){
System.out.println("汽车停止行驶了");
}
}
2.创建对象
/**
* 开始造车
* 一个类在正常情况下是不能直接使用的,类似于汽车图纸是不能直接行驶的
* 如果想使用这个类必须根据这个类去创建这个类的对象,就相当于根据汽车图纸去造车
*
* 怎么去创建一个对象呢
* 类名 对象名 = new 类名();
*
* 怎么操作属性
* 对象名.属性名
* 对象名.方法名
*/
public class TestCar {
public static void main(String[] args) {
// 创建一辆小汽车
Car car1 = new Car();
car1.brand = "五菱宏光";
car1.color = "白色";
car1.price = 1000;
car1.length = 8;
car1.width = 2;
System.out.println(car1.brand);
// 操作方法
car1.run();
car1.stop();
}
}
3.成员变量和局部变量的区别
①.定义的位置不同
成员变量定义在类的内部,方法的外部
局部变量定义在方法的内部
②.作用域不同
成员变量作用在类的内部
局部变量作用在方法的内部
③.默认值不同
成员变量有默认值
局部变量没有默认值
④.内存中的位置不同
成员变量保存在堆里面
局部变量保存在栈里面
⑤.访问修饰符不同
成员变量的访问修饰符有四个
局部变量没有访问修饰符修饰,默认跟方法的类型一样
4.形参和实参
形参:在方法定义的时候实际定义的参数,写在方法小括号里面的参数
实参:在调用方法的时候,实际传入到方法里面的数据
参数传递的过程中,有两项规则:
1.对于基本数据类型来说,形参的操作不会影响实参
2.对于引用数据类型来说,形参的操作会影响实参,因为传入的是堆里面的地址值,形参和实参指向的是同一块地址值
5.构造方法
在Java中有时候会使用一个特殊的方法叫构造方法,也叫构造器,构造方法最大的作用就是创建对象,new的时候就是调用了构造方法
格式
public 构造方法名(形参){
语句
}
构造方法的作用:
1.无参构造方法就是创建对象
2.有参构造方法就是在创建对象的同时给属性赋值
注意:
1.构造方法不能有返回值
2.构造方法名必须和类的名字一致,大小写也得一致
3.构造方法也是一个方法,可以进行方法重载
4.如果在定义一个类的时候,没有去定义构造方法,系统默认会提供一个无参的构造方法
5.如果定义了构造方法,系统不会再提供无参构造方法
6.如果定义了有参构造方法,一定要加上无参构造方法
7.一个类可以创建多个重载的构造方法
6.四种访问权限修饰符
java权限修饰符public、protected、private置于类的成员定义之前,用来限定对象对该类成员的访问权限,访问修饰符可以修饰类、方法、接口、属性…
- private:私有的,只能在当前类的内部去访问
- default(缺省):在同一个包下可以访问,缺省就是什么访问修饰符都不加
- protected:受保护的,在同一个包中或者在其他子类中可以访问
- public:公共的,在当前项目下的任何包中都可以访问