面向对象概念
面向对象
编程思想
概念:建立解决问题的思路,即编程思想
常见的编程思想
-
面向过程: 自顶向下,逐步求精,注重解决问题的过程,将解决问题分为一个一个的步骤,只要按照步骤执行就一定能解决问题
-
面向对象: 分析解决问题需要的哪些功能,而哪些对象具有这种功能;注重对象之间的配合调用
问题: 回家
面向过程: 拿着地图,分析回家需要经过哪些路口,每条路上走多远,遇到路口往哪儿拐,一步一步就走到家了
面向对象:只需要调用出租车(对象)的载客功能,由出租车送我们回家
注意:面向对象与面向过程并不是完全对立!面向对象是在面向过程的基础上实现的
面向对象
认识对象
什么是对象?
Java眼中的对象: 一切客观存在的事物都是对象!世界就是由对象组成的!—万物皆对象
例如:水杯、桌子、电脑、空气、错误等等都是对象
程序中的对象: 内存中的一块存储空间,用来存储对现实对象的关注的部分,从而代表现实中的对象
-
对象的组成:
-
特征(属性): 有什么
-
行为(方法): 干什么
注意:有时候,一个对象的属性可能也是一个对象;对象的调用者可能也是一个对象
例如:硬盘是电脑的属性,硬盘本身也是对象;程序员使用电脑开发,程序员也是对象 -
-
对象间的关系
-
一个对象继承了另一个对象 is a 例如:狗是一个动物
-
小对象组成大对象 has a 例如:电脑由硬盘、cpu组成
-
一个对象使用另一个对象 use a 例如:程序员使用电脑
-
认识类
类与对象的关系
-
类是对象的模板,对象是类的实例
-
类是人们对一系列相同相似事物(现实中的对象)的认识,抽取出共性定义在类中
-
对象就是根据类创建出来的实例,类似于根据模板生产物品
-
类由属性与方法组成
例如: Computer类 ------》电脑对象
类的组成
-
属性: 有什么 成员变量\实例变量
位置: 类的内部,方法的外部
语法:
- 声明属性: 数据类型 属性名; 例如:String name;
- 声明并初始化: 数据类型 属性名 = 值; 例如: int age = 18;
错误语法: 先声明,再赋值
例如: double score;
score = 100;//错误语法!!
class Student{
String name;
int age = 18;
double score;
//score = 100;错误
}
属性具有默认值:即属性的数据类型的默认值!
属性的作用范围:至少为整个类的内部
注意:当属性与局部变量命名冲突,局部变量优先!
补充:局部变量与属性的区别
局部变量 属性 位置 定义在函数(方法)内部 类的内部,方法的外部 默认值 没有默认值 具有默认值 作用范围 从定义的那一行开始,到定义所在代码块的结束 至少整个类的内部 命名冲突 作用范围重合内,不允许命名重复 当属性与局部变量命名冲突,局部变量优先 -
方法: 干什么 成员方法 对象的具体的行为:吃喝拉撒睡、工作、学习、玩耍、等等
位置: 类的内部,其他方法的外部
语法:
修饰符 返回值类型 方法名(形参列表){
//方法实现
}
注意:函数是特殊的方法!函数声明中需要写上static修饰符;而方法一般不写static
class Student{
String name = “小郭”;
int age = 18;
double score;
//score = 100;错误public void study(){
//局部变量优先!
//String name = “小红”;
System.out.println(name+“沉迷学习无法自拔”);
}
public void eat(){
System.out.println(“吃饭饭”);
}
public void sleep(){
System.out.println(“睡觉觉”);
}
} -
构造方法: Java规定的具有特殊功能的方法
作用: 可以用来配合new关键字创建对象,并且可以在创建对象的过程中选择是否为对象属性赋值!
分类:
-
无参构造方法 没有形参列表,在创建对象时无法为对象属性赋值;可以在对象创建成功后,通过其他方式赋值
语法: public 类名(){}
-
有参构造方法 具有形参列表,在创建对象时可以将形参的值赋值给属性
语法: public 类名(形参列表){ //赋值语句 }
注意:
-
-
构造方法的方法名必须和类名相同!
-
构造方法没有返回值类型,注意连void都没有
-
构造方法无法手动调用,只有在创建对象时被调用一次
-
若代码中没有定义任何构造方法,默认提供一个公开无参构造方法
经验:
-
一般的,若类中具有属性,需要提供有参、无参构造方法
-
可以定义多个形参个数不同的有参构造方法
//学生类
class Student{
//属性
String name = “小红”;
int age = 18;
double score;
//score = 100;错误
//普通的行为方法
public void study(){
//局部变量优先!
//String name = “小郭”;
System.out.println(name+“沉迷学习无法自拔”);
}
public void eat(){
System.out.println(“吃饭饭”);
}
public void sleep(){
System.out.println(“睡觉觉”);
}//无参构造方法
public Student(){}
//具有两个参数的有参构造方法
public Student(String n,double s){
name = n;
score = s;
}
//具有三个参数的有参构造方法
public Student(String n,int a,double s){
name = n;
age = a;
score = s;
}
}
思考:普通方法与构造方法的区别?
答: 普通方法是人为定义的一些具体功能、行为方法,例如吃喝拉撒睡、工作学习等等
而构造方法它的作用是Java实先规定好的,是用来创建对象的;它们的关系就好像主函数与普通函数的关系
java中常见类的使用
-
Math 常见数学函数
-
Arrays 操作数组的工具类,toString,sort方法
-
Random 随机数,种子的概念
-
String,Integer 查看内部状态,与相应的方法
-
ArrayList 可以代替数组
创建对象
创建对象的方式:
创建对象的过程称为实例化,对象的属性和方法称为实例(instance)成员
-
通过无参构造方法创建对象
语法: 类名 引用 = new 类名(); 例如:Student s1 = new Student();
-
通过有参构造方法创建对象
语法: 类名 引用 = new 类名(实参列表); 例如:Student s2 = new Student(“小郭”,20,80);
使用对象:
-
使用对象的属性:
-
通过 引用.属性名; 获取该对象的该属性
-
通过 引用.属性名 = 值; 完成对该对象的该属性的再次赋值
-
-
使用对象的方法:
- 通过 引用.方法名(实参列表) 调用该对象的该方法
class TestObject{
public static void main(String[] args){
//通过无参构造方法创建对象
Student s1 = new Student();
System.out.println(s1.name+" “+s1.age+” “+s1.score);
s1.study();
s1.score =