1 面向对象编程思想
1.1 概念
- Java语言是一种面向对象的程序设计语言。
- 面向对象思想是一种程序设计思想,是在计算机程序设计过程中,参照现实中的事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。
- 对象是指将客观世界中具体存在的事物,每种事物都具备自己的属性和行为。
1.2 面向过程与面向对象
1.2.1 面向过程编程
完成一个功能时,功能的每一个步骤,都需要我们进行参与,每一个细节都需要了解清楚,才能完成。强调的是过程。
1.2.2 面向对象编程
强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。在代码书写时更注重代码的扩展性与可重用性。
1.2.3 实例
//把大象装进冰箱
//面向过程
//1、把冰箱门打开
System.out.println("把冰箱门打开");
//2、把大象装进去
System.out.println("把大象装进去");
//3、把冰箱门关上
System.out.println("把冰箱门关上");
//面向对象
//1、创建对应处理对象
IceBox box=new IceBox();
//2、调用对象对应方法完成功能
box.opean();
box.save("大象");
box.close();
1.3 面向对象的优点
- 更符合我们的思想
- 将复杂的事情简单化
- 将我们从执行者变成了指挥者
1.4 面向对象的三大特征
- 封装
- 继承
- 多态
2 类与对象
2.1 什么是类
2.1.1 概念
类是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
- 属性:就是该事物的状态信息。
- 行为:就是该事物能够做什么。
2.1.2 类的好处
Java面向对象编程,但是不是所有的对象都提供,有时需要我们自己进行对象的定义,但是对象太过指定,太多我们无法将全部对象书写,并且在使用时我们也不会使用全部对象,我们使用类进行代表这些对象。
2.2 什么是对象
对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。
2.3 类与对象的关系
- ①类是对一类事物的描述,是抽象的
- ②对象是一类事物的实例,是具体的
- ③类是对象的模板,对象是类的实体
3 类的定义与对象的使用
3.1 类的定义
3.1.1 类的组成
类的组成是由属性和行为两部分组成
- 属性: 在类中通过成员变量来体现(类中方法外的变量)
- 行为: 在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
3.1.2 类的定义格式
//类名:ClassName 符合标识符命名规范 要求首字母大写
//类体:{}中代码 类的具体内容
//类由类名和类体组成,类体包括成员变量(属性)和成员方法(行为)
public class ClassName {
//成员变量
//成员方法
}
3.1.3 类的书写
类的书写通常只的是对类体的书写
//定义学生类(案例)
//类体
//属性=>变量 也叫成员(实例)变量
//语法:修饰符 数据类型 属性名[=值]
//[]中的内容可以省略
public String name;//姓名
public int age;//年龄
public int studyId;//学号
public String sex;//性别
//行为=>方法 也叫成员(实例)方法
//语法:修饰符 返回值类型 方法名 (参数列表){方法体}
public void sutdy(){
System.out.println("上课");
}
public void sleep(){
System.out.println("睡觉");
}
public void say(){
System.out.println("我叫"+name+",今年"+age+"岁");
}
3.2 对象的使用
3.2.1 创建对象的格式
- 创建对象
类名 对象名 = new 类名();
3.2.2 访问类中的成员
//类中包括成员变量和成员方法
public class ClassName {
//成员变量
//成员方法
}
//属性赋值
对象名.成员变量 = 属性值;
//获取成员变量属性
对象名.成员变量;
//获取成员方法
对象名.成员方法(参数);
3.2.3 代码演示(案例)
public class Test01_Student {
public static void main(String[] args) {
//创建对象格式:类名 对象名 = new 类名();
Student s = new Student();
System.out.println("s:"+s); //
//直接输出成员变量值
System.out.println("姓名:"+s.name); //null
System.out.println("年龄:"+s.age); //0
System.out.println("‐‐‐‐‐‐‐‐‐‐");
//给成员变量赋值
s.name = "赵丽颖";
s.age = 18;
//再次输出成员变量的值
System.out.println("姓名:"+s.name); //赵丽颖
System.out.println("年龄:"+s.age); //18
System.out.println("‐‐‐‐‐‐‐‐‐‐");
//调用成员方法
s.study(); // "好好学习,天天向上"
s.eat(); // "学习饿了要吃饭"
}
}
3.3 成员变量的默认值
如果在声明属性时没有赋值,在创建时会使用对应属性的默认值进行赋值。
3.4 类与对象的练习(案例)
- 定义手机类
public class Phone {
// 成员变量
String brand; //品牌
int price; //价格
String color; //颜色
// 成员方法
//打电话
public void call(String name) {
System.out.println("给"+name+"打电话"); }
//发短信
public void sendMessage() {
System.out.println("群发短信");
}
}
- 测试类
public class Test02Phone {
public static void main(String[] args) {
//创建对象
Phone p = new Phone();
//输出成员变量值
System.out.println("品牌:"+p.brand);//null
System.out.println("价格:"+p.price);//0
System.out.println("颜色:"+p.color);//null
System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");
//给成员变量赋值
p.brand = "锤子";
p.price = 2999;
p.color = "棕色";
//再次输出成员变量值
System.out.println("品牌:"+p.brand);//锤子
System.out.println("价格:"+p.price);//2999
System.out.println("颜色:"+p.color); //棕色
System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");
//调用成员方法
p.call("紫霞");
p.sendMessage();
}
}
4 对象内存图
4.1 一个对象的内存图
多了一个方法区,用于存储class文件的。
4.2 两个对象的内存图
多个对象用的都是同一个方法区的内容,方法区中的class只有唯一的一份,同名的类。
4.3 多个对象指向相同内存图
一个对象的改变会影响另外一个对象的改变。
4.4 成员变量和局部变量的区别
在类中的位置不同
- 成员变量:类中,方法外
- 局部变量:方法中或者方法声明上(形式参数)
作用范围不一样
- 成员变量:类中
- 局部变量:方法中
初始化值的不同
- 成员变量:有默认值
- 局部变量:没有默认值。必须先定义,赋值,最后使用
在内存中的位置不同
- 成员变量:堆内存
- 局部变量:栈内存
生命周期不同- 成员变量:随着对象的创建而存在,随着对象的消失而消失
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
每日一点点进步
不进则退