1.面向对象的编程思想
这种思想的产生来源于对比:
1.原来我们写程序或者写程序题,对我们初学者来说都是自上而下 逐步求精 ,先将整个程序的流程顺下来,然后把细节想好进行填充就可以 完成程序了 这种编程思想是一种面向过程的编程思想 仅适用于代码量小 项目工程较小时 使用
2.代码本身就是解决现实的问题,立足于对象去出发考虑更加容易解决现实问题 当我们开发大型的项目时 不太容易一下把整个流程和细节理清 这时候我们用面向对象的思想来进行开发 凡是借助对象来完成 十分方便
2.面向对象的特点:
将人类解决问题的方法应用到编程领域中 一切来源于生活的问题
对象:一切客观存在的事物,万物皆对象
3.对象:
1.概念:
一切客观存在的事物都是对象 万物皆对象
一个对象的构成:
①:特征(属性)对象长什么样 有什么
②:行为(功能、方法)对象能干什么
2.对象与对象之间常见的关系
汽车 | 车 | 继承 | is a | |
汽车 | 发动机 | 关联 | has a | 1V1 |
汽车 | 司机 | 依赖 | use a | 1V1 |
枪 | 子弹 | 聚合 | has a | 1V多 |
客观世界是由N个对象来组成的,对象的属性也是对象
3.类
(1)概念
① 类是对象的模板,用来描述对象的属性 方法
②类是从多个相同类型的对象抽取的共性特征
(2)组成
①属性
成员变量,声明的位置在类的内部 方法的外边
//属性的位置
class Students{
String name;//学生的姓名属性
int grade;//学生的成绩属性
//以上是属性的声明
//声明:1.在study()方法的外部 2.在students类的内部
public void study(){}
}
②方法
//对象的方法语法:
//权限修饰符 返回值类型 方法名(参数表){执行体}
public static void study(){
System.out.println("我是学生正在学习");
}
4.成员变量和局部变量的区别(重点)
成员变量 | 局部变量 | |
定义位置 | 类以内 方法以外 | 方法内 |
存储位置 | 存储在堆中 | 存储在栈中 |
作用范围 | 本类中都起作用 | 从定义开始到代码块结束 |
命名冲突 | 可与局部变量重名 局部变量优先 |
重合的作用范围中不允许重名 |
默认值 | 有默认值(与数组一样) | 必须手动赋值 |
5.使用对象
定义:对象也叫做类的实例,每个实例都拥有独立的属性
1.创建对象
//创建对象
//语法如下:
//new 类名();
//创建students类的对象 首先要写一个Students类 这样才能创建这个类的对象
new Students();
//一般创建对象:
Students s01=new Students();
2.访问对象的属性和方法
//访问对象的属性和方法
//访问对象的属性
//语法: 引用名.属性名
//例如:
Students s01=new Students();
s01.name;
//为属性赋值:
s01.name="二胖";//name一般为String类型
//访问对象的方法
//语法: 引用名.方法名()
//例如:
s01.study();
6.方法的重载
作用:
在一个类中可以定义多个重名的方法 屏蔽使用时的差异 更加方便
语法要求:
方法名相同 参数个数、类型、排序不同 返回值类型、修饰符无要求
调用时编译器会根据不同的实参 调用不同的方法(编译时多态)
注:其中存在一个编译器未找到参数类型时一个类型向上就近提升的原则
但是不允许出现引用不明确
//类的重载
//1.在一个类内
//2.重名 参数表相同
//3.返回值修饰符不影响
class Person{
public void eat(String name){
System.out,println(name+"在吃");
}
//重载eat()方法
public int eat(String name){
System.out.println(name+"是猪");
return 0;
}
//重载eat()方法
public String eat(String name){
System.out.println(name+"吃完睡了");
return name;
}
}
7.构造方法(构造器)创建对象时使用
(1)概念:
构造方法是一种特殊的方法 创建对象时自动调用
(2)作用:
通常在创建对象时为属性赋值,完成属性的初始化工作。(有参构造)
(3)特点:
①构造方法与类名一致
②没有返回值类型
③创建对象时 自动调用 不可手动调用
(4)注意:
①:如果没有手动定义构造方法 编译器会默认提供无参的构造方法
②:如果手动添加构造方法 默认的无参构造方法将不再提供
③:构造方法支持重载 满足重载的语法要求
属性赋值的顺序:
默认值-->初始值-->构造方法赋值-->手动赋值
8.创建对象的过程
(1)分配内存空间,给属性赋予默认值;
(2)初始化属性 为属性赋初值(调用初始化代码块)
(3)调用构造方法 可以再次为属性赋值
注意:初始化代码块:初始化属性时执行
9.数据的传递规则
(1)基本数据类型传值,两者之间 一方更改 不影响另一方
(2)引用数据类型(数组、对象)传地址 两者之间任何一方改变就会影响另一方
10.this关键字
this表示当前对象的引用
当前对象是指调用本类某个方法时的对象
this.可以访问当前对象的属性方法
this():应用在构造方法中可以调用其他构造方法
构造方法具有重用性
注意:this()只能出现在构造方法的第一行。
class Students{
String name;
int age;
//无参的构造方法
public Studenst(){}
//有参的构造方法
public Students(String name){
this.name=name;
}
}