目录
1.面向过程与面向对象对比
(1)面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用时依次调用。
(2)面向对象:把问题根据一定的规则划分为多个独立对象,然后由多个对象相互配合来实现问题的求解。当应用模块功能发生变动时,只需修改个别对象,使代码更容易维护;并且每个对象之间联系性较小,相对独立,可以充分实现代码复用。java面向对象的三大特性:封装、继承、多态。
可以把面向过程理解为小农经济,所有生活用品基本都要亲力亲为;而面向对象中,只需要找到做这件事的人,然后让他做完并提交给你,而不需要你来了解其制作过程。
2.类与对象
java语言作为一门面向对象的语言,引入了类和对象的概念,类是创建对象的模板(模具、图纸),它包含被创建对象的状态描述和方法的定义。对象的创建需要通过类的实例化来完成(类的实体)。对象的属性通过变量来刻画,对象的行为通过方法来刻画。
(1)定义类
/**
* 一个学生类(所有学生的模板)
* 属性:学号、姓名、年龄、成绩
* 行为:吃饭、学习、睡觉、考试
*/
public class Student {
int stuNo;//学号
String stuName;//姓名
int stuAge;//年龄
int stuGrade;//成绩
//吃饭
public void eat(){
System.out.println(stuName + "正在吃饭。。。。");
}
//学习
public void study(){
System.out.println(stuName + "正在学习。。。。");
}
//睡觉
public void sleep(){
System.out.println(stuName + "正在睡觉。。。。");
}
//考试
public void exam(){
System.out.println(stuName + "正在考试。。。。");
}
//学生汇报自己的信息
public void information(){
System.out.println("我是" + stuName);
System.out.println("我的学号:" + stuNo);
System.out.println("我的年龄:" + stuAge);
System.out.println("我的成绩:" + stuGrade);
}
}
(2)实例化对象
public class CreatStudents {
public static void main(String[] args){
//根据模板实例化一个学生student1
Student student1 = new Student();
//给学生添加属性
student1.stuNo = 1;//学号
student1.stuName = "张三";//姓名
student1.stuAge = 20;//年龄
student1.stuGrade = 89;//成绩
//张三开始行动
//张三报告自己的信息
student1.information();
//张三吃饭
student1.eat();
System.out.println("------分割线------");
//再创建一个李四
Student student2 = new Student();
student2.stuNo = 2;//学号
student2.stuName = "李四";//姓名
student2.stuAge = 18;//年龄
student2.stuGrade = 100;//成绩
//李四报告自己的信息
student2.information();
//李四学习
student2.study();
}
}
执行结果:
我是张三
我的学号:1
我的年龄:20
我的成绩:89
张三正在吃饭。。。。
------分割线------
我是李四
我的学号:2
我的年龄:18
我的成绩:100
李四正在学习。。。。
(3)类与对象在内存中的示意图
①主方法进栈。
②在堆中创建new Student()空间,把空间基址给栈中的student1。
③从方法取调入对象属性到开辟的空间,并赋给默认值,并把对象方法的地址保存在空间中。
④根据student1的地址找到堆中属性地址并修改值。
⑤information()入栈,并根据堆内地址找到在方法区的地址,调用函数,函数运行结束后出栈。
⑥主方法出栈。
3.成员变量与局部变量
(1)成员变量:写在类中的变量,有默认值,作用域为整个类。
(2)局部变量:写在方法中的变量,无默认值,作用域仅在方法内,方法运行时创建,结束时消失。