OOP
OOP(Object Oriented Programming) 面向对象程序设计(核心:设计)
面向对象思想阶段:
第一阶段:面向对象基本思想(JavaSE)
第二阶段:面向接口编程思想(jdbc,web,框架)
第三阶段:面向切面编程思想(Spring框架)
面向过程和面向对象
面向过程:代表是C语言,强调的是过程,偏重事情"怎么做",将自己比喻成"执行者",基本单位:函数
面向对象:代表是Java语言,强调的是对象,偏重事情"找谁做",将字节比喻成"指挥者",基本单位:类
面向过程往往解决的是一些较小的问题
面向对象往往解决的是一些较大的问题
两种思想没有好坏之分,都是人们在生活中解决问题的手段而已
面向对象三大特征:
封装,继承,多态
类与对象的关系:
类:一类事物的统称
举例:人类,猫类,......
对象:一类事物的具体体现:
举例:那个长得像"周冬雨"的小姐姐,那个叫Tom的猫
关系:
类是抽象的,类是对象的抽象或模版
对象是具体的,对象是类的实例或实体
结论:
需要在以前代码(测试类)的基础上,完成对象所对应模版类的设计
学习面向对象的小技巧
1.找有没有合适帮助我们做事情对应的类
如果有,直接第2步;
如果没有,自己设计类
2.通过类创建对象
3.通过对象调用方法完成实际需求
类(class)
含义:
Java语言的基本单位
分类:
1.Java系统中提供的类(Java API中提供的类)
例如:String
2.程序员设计的类
包含:
类的成员
成员量
成员方法
成员内部类
类的内容
构造器
代码块
成员量
含义:
声明在类中方法外的变量或常量
分类:
成员变量:声明在类中方法外的变量
实例变量(对象变量):
声明在类中方法外,且没有static关键字修饰的变量,变量归属于对象
静态变量(类变量):暂不涉及
声明在类中方法外,且含有static关键字修饰的变量,变量归属于类
成员常量:声明在类中方法外的常量(暂不涉及)
实例常量(对象常量):
声明在类中方法外,且没有static关键字修饰的常量,常量归属于对象
静态常量(类常量):暂不涉及
声明在类中方法外,且含有static关键字修饰的常量,常量归属于类
成员方法
含义:
声名在类中的方法
分类:
实例方法(对象方法)
声明在类中且没有static关键字修饰的方法
静态方法(类方法)
声明在类中且含有static关键字修饰的方法
类的设计步骤
1.根据实际需求,在类中加入实例变量和实例方法完成基础模版类的设计
2.根据实际需求,在类中加入封装思想,提高模版类的数据的安全性
3.根据实际需求,在类中加入this关键字第一种用法,便于达到优化的效果
4.根据实际需求,在类中加入合适的构造器,便于对象创建的多元性
5.根据实际需求,在类中加入构造器代码块,便于达到优化的效果
6.根据实际需求,在类中加入this关键字第二种用法,便于达到优化的效果
7.根据实际需求,在类中加入静态概念
8.根据实际需求,在类中加入继承思想,便于提高代码的复用性
9.根据实际需求,在类中加入抽象概念,便于解决继承思想中的安全隐患
10.根据实际需求,在类中加入final关键字
11.根据实际需求,在类中加入接口概念
12.根据实际需求,在类中加入内部类概念
13.根据实际需求,在类中加入枚举类概念
类的格式:
位置:
现阶段在和含有main()的类同包下创建另外一个类
格式:
public class 类名 {
实例变量
实例方法
}
对象的创建
位置:
在测试类中(含有main()的类中)
格式:
类名 对象名 = new 类名(实参);
对象的访问
获取格式:
对象名.实例变量名;
对象名.实例方法名(实参);
赋值格式:
对象名.实例变量名 = 初始化值;
//完成学生对象的创建
Student s1 = new Student();
System.out.println(s1);
//获取学生的姓名和年龄
System.out.println(s1.name);
System.out.println(s1.age);
//给学生对象进行赋值操作
s1.name = "卢小琪";
s1.age = 18;
//获取学生的姓名和年龄
System.out.println(s1.name);
System.out.println(s1.age);
//调用学生对象的方法
s1.study();
System.out.println("===================================");
//创建学生对象
Student s2 = new Student();
//获取学生的姓名和年龄
System.out.println(s2.name);
System.out.println(s2.age);
Student类
//实例变量
String name;
int age;
//实例方法
public void study () {
System.out.println(age + "岁的" + name + "正在学习HelloWorld!!!");
}
实例变量和局部变量区别
实例变量:声明在类中方法外,且没有static关键字修饰的变量
局部变量:声明方法内部或者方法声明上的变量
实例变量和局部变量的区别:
代码中声明位置不同:
实例变量:类中方法外
局部变量:方法内部或者方法声明上
内存中位置不同:
实例变量:堆内存
局部变量:栈内存
变量的默认值不同:
实例变量:含有默认值
局部变量:没有默认值
代码中的作用域不同:
实例变量:类中(静态成员除外)
局部变量:方法中
内存中的生命周期不同:
实例变量:随着对象的创建而加载,随着对象的回收而消失
局部变量:随着方法的调用而加载,随着方法的出栈而消失
加载方式不同:
实例变量:随着对象的创建而加载,每创建一次对象就会加载一次
局部变量:随着方法的调用而加载,每调用一次方法就会加载一次
this 关键字
变量的特点之一:
在同一作用域内不可以创建同名的变量
考虑到实例变量和局部变量不在同一作用域内,在同一个类中可以创建同名的实例变量和局部变量
this关键字的第一种用法:
应用场景:
(子)类中的实例方法
(子)类中的构造器
语法格式:
this.实例变量名;
this.实例方法名(实参);
语法作用:
用来区分同一个类中出现同名的实例变量和局部变量
语法含义:
哪个对象调用了this关键字所在的实例方法或构造器,this关键字就代表哪个对象
//创建Var对象
Var var = new Var();
var.method();
System.out.println("========================");
//创建Var对象
Var var1 = new Var();
System.out.println("var1 = " + var1);
var1.show();
System.out.println("=============");
//创建Var对象
Var var2 = new Var();
System.out.println("var2 = " + var2);
var2.show();
Var 类
//实例变量
int num = 10;
public void method () {
//局部变量
int num = 20;
System.out.println("num = " + num);//20 就近原则
System.out.println("this.num = " + this.num);
}
public void show () {
System.out.println