一、 面向对象的概念
Java是一门面向对象的编程语言。
补充:c语言面向过程;c++:半面向对象半面向过程
面向过程编程
开发过程中所有细节都要编写
假设:使用一台电脑敲代码,其中所有零件都需要自己去造。
面向对象编程
假设:使用一台电脑敲代码,找到卖电脑的人,告诉我需要一台电脑,商家就给我一台电脑,可以直接使用。
把大象装进冰箱怎么实现?
什么是类?
类:人以类聚;一类商品
类:类是一组具有相同属性和行为的对象的集合
手机类
什么是对象?
对象:将类实例化的一个具体体现
对象能将属性和行为具体体现出来
手里面拿的/挂在墙上手机袋里面的
什么是属性?
属性:类的一些特点/特征
颜色,品牌,型号,价钱等
什么是行为?
行为:就是方法,对象能做的动作
打游戏,聊天,刷视频等
总结
以上四个关系:
类中有属性和方法
对象由类创建出来,对象内部有它自己具体的属性和方法
对象可以将属性和行为表现出来
二、 面向对象编程
利用上面知识,完成面向对象编程(OOP)
2.1 以手机为例,完成编程
public class Phone {
// 属性:可以理解成变量
// [访问修饰符] 数据类型 变量名;
// 访问修饰符,可写可不写
String brand; // 品牌
double price; // 价钱
String color; // 颜色
int memory; // 内存
/*
* String brand;属性后要不要设置值?
* 不加值String brand;这个手机类新品牌属性固定;
* 意味着后面通过手机创建出的手机对象的品牌睡醒直接就是“华为”
* --------------
* 其实属性设置不设置的,就是一个变量默认值的问题
*/
/*
* 方法(今天往后类中的方法不要加static)
* (自己写练习题时可以加static)
*/
public void call(){
System.out.println("打电话");
}
public void play(){
System.out.println("打游戏");
}
}
2.2 创建对象
public static void main(String[] args) {
// 创建对象的语法
// 类名 对象名 = new 类名();
Phone phone = new Phone();
// 数据类型 变量名 = 值;
// int[] arr = new int[3];
}
2.3 使用对象
使用对象就是创建对象(实例化),使用对象就是内部的属性和方法。
属性是静态的描述,名词
行为是动态的活动,动词
double cPrice = car.price;
String cBrand = car.brand;
String cColor = car.color;
String cNum = car.num;
car.price = 998;
car.brand = "劳斯莱斯";
car.color = "黑色";
car.num = "JX8889";
System.out.println(car.brand+" "+car.color+" "+car.price+" "+car.num);
2.4 使用方法
phone.call();
phone.play();
三、 内存图
以创建对象过程画图
凡是new都会在内存开辟空间,创建对象,会有地址值
在这同时,对象内部的属性和方法会初始化,赋默认值
完成创建对象,将地址值赋值给对象名
后续通过 对象.属性 找到堆中对象的属性给其赋值
后续通过 对象. 方法找到队中对象的方法让其进栈执行
一个对象的内存图
一个类创建多个对象
public class TestCar {
/**
* 一个类可以创建出多个对象
* 每个对象内部都有属于自己的属性和方法,对象之间互不影响
*/
public static void main(String[] args) {
Car car = new Car();
car.brand = "玛莎";
System.out.println(car.brand);
Car car1 = new Car();
car1.brand = "奔驰";
System.out.println(car1.brand);
Car car2 = new Car();
car2.brand = "宝马";
System.out.println(car2.brand);
}
}
多个引用(对象名)指向一个对象
public static void main(String[] args) {
// 对象1
Car car1 = new Car( );
// 对象2
Car car2 = new Car();
car2.num = "豫A66666";
// car2被car1赋值,其实是被背后的地址赋值
// 赋值后,car2和car1执行同一个内存对象
car2 = car1;
car1.num = "豫A88888";
System.out.println(car1 );
System.out.println(car1.num );
System.out.println("--------" );
System.out.println(car2 );
System.out.println(car2.num );
}
单词
面向对象编程:object-oriented programming