什么是对象?
1 面向过程编程和面向对象编程
1) 面向过程编程, 实现某个功能时,使用函数之间相互调用完成的。函数之间的关联性很强。
当功能发生改变时,需要重写新编写函数。
2) 面向对象编程,实现某个功能时,把实现的方式拟人化,通过调用各个对象的功能来实现要求。
盖房子:
打地基
砌墙
盖房顶
1 过程
定义方法: 打四方形地基的方法
砌四方形墙的方法
盖四方形的房顶的方法
盖房子的方法(){ //四方法的房子。
打四方形地基的方法
砌四方形墙的方法
盖四方形的房顶的方法
}
2 对象:
打地基的人{
打地基的方法;
}
砌墙的人{
砌墙的方法
}
盖房顶的人{
盖房顶的方法;
}
盖房子(打地基的人,砌墙的人,盖房顶的人){
打地基的人.打地基的方法
砌墙的人.砌墙的方法()
盖房顶的人.盖房顶的方法()
}
2 面向对象编程
核心“对象"
1) 什么 是对象? “万物皆对象"
现实世界里每个实实在在存在的个体==》对象
2) :如何把现实中的对象 ==》抽象==>程序中的对象
对现实的对象==》归类 ==》在程序定义类 ==》 创建程序中的对象
归类:把具有相同特征和相同行为的一组对象归为一类。==》类名
相同特征 (静态属性):属性
相同行为(动态属性): 成员方法
每个对象有自己特有的属性值。 =》属性属于对象所有。
成员方法 : 属于对象所有。
什么是类?
一 类:
具有相同属性和方法的一组对象的统称。抽象的,概念性
类规定了程序中的对象所具有的属性和方法。
二类:
类是自定义的数据类型。 ==》引用数据类型
二者的关系?
二者的关系 :
类:是抽象的。有一组相同属性和方法的对象抽象而得。
对象是具体的。 是类的具体化表现
一 面向对象分析 (OOD)
学生类:
属性:学号,姓名,性别,年龄,联系方法,家庭地址,
方法:学习,自我介绍
仅保留与项目相关的属性和方法
1) 找到类
2) 找到属性
3) 找到方法
二 面向对象设计
类图 ---》 UML(统一建模语言)
三 面向对象编程
定义类的语法:
一 定义类的语法:
访问修饰符 class 类名{
//属性
//方法
}
1 访问修饰符 public (所有包可见), 默认的(仅当前包可用)。
2 类名 , 首字母大写。见名知义。
3 属性: 属于对象所有 ->成员变量
数据类型 属性名;
数据类型 :基本类型,引用类型(类,数组,接口)
属性名: 第一个单词首字母小写,其他单词首字母大写。见名知义
注意:属性有默认值:
基本类型属性值:
byte,short,int ,long :0
float double : 0.0
char : \U0000
boolean : false
引用类型: null
4 方法: 属于对象所有 ==》成员方法
访问修饰符 返回值类型 方法名(参数列表){
方法体;
}
1) 访问修饰符 : public ,默认的, private ,protected
2) 返回值类型 :方法执行结束后,返回的数据类型
无返回:void
3) 方法名 : 第一个单词首字母小写,其他单词首字母大写。见名知义
4) 参数列表 :执行方法时需要的数据。
5) 方法体 :完成此方法的代码。
注意: 在成员方法中,可以访问属性
创建对象及内存分配:
一 创建对象: 实例化对象
类名 对象名 = new 类名();
Student stu = new Student();
注意:对象名又称为引用名,存储是所引用对象的"地址";
二 访问对象的属性 和方法
1 给属性赋值:
对象名.属性名 = 值;
2 取属性的值:
对象名.属性名;
3 访问对象的方法
对象名.方法名(参数);
如何调用对象的属性和方法?
一 步创建对象
类名 对象名 = new 类名();
二步 通过 .访问对象的属性和方法
1 访问属性
对象名.属性名
2 访问方法
对象名.方法名(参数);
NullPointerException:
一 java.lang.NullPointerException
:空引用异常
当引用类型的变量没有引用数据时,而是null
调用对象的属性和成员方法,则引发此异常
成员变量和局部变量的区别:
属性:成员变量 :可以类中所有成员方法中访问
局部变量 :在方法中定义的变量,形参,在条件结构或循环结构中定义的变量 { }
1 默认值, 属性有默认值 ,局部变量没有默认值 ,局部变量在使用前必须赋值
2 作用域不同,属性在类中任何成员方法中使用,局部变量仅可以定义的方法中使用。
3 优先级 ,当方法中有与属性同名的局部变量时,局部变量的优先高于属性。==》就近原则
在方法中区分属性与局部变量,在属性的前面加this.属性名;
构造方法:
1 构造方法的语法:
访问修饰符 构造方法名(参数列表){
方法体;
}
注意事项:
1 构造方法名称必须与类名同名
2 构造方法没有返回值类型。也不能写void.如果写了void则不再是构造方法
2 构造方法的作用
构造对象并初始化属性值
3 何时使用构造方法:
创建对象时使用构造方法,与new关键词一起使用。
4 构造方法的分类:
隐式构造方法:如果类中没有定义任何构造方法,则系统给类提供一个public的无参构造方法;
显示构造方法:在定义类时,编写构造方法;此时系统不再提供构造方法
无参构造方法
有参构造方法
注意: 如果在类中定义构造方法,则系统不再提供无参构造方法;
因此在类中定义有参构造方法时,建议同时定义一个无参构造方法。
方法重载:
一 方法的重载 (overload)
1 在同一个类中
2 方法名相同,但参数不同的方法 == 》 方法重载
3 参数不同(个数,类型不同,顺序不同)
4 与形参的名称无关
5 与返回值类型无关
6 与访问修饰符无关
二 :好处
1 方便调用,增强代码的可读性
2 实现方法调用的多态:
一个方法名,根据参数的不同的执行不同的操作
三 哪些方法可以重载:
1 构造方法
2 成员方法
3 静态方法
this关键词:
1 this是什么?
this是一个引用,存储是当前正在运行的对象的"地址"
this在当前对象内部引用当前对象
每个对象内部都有一个this
2 this可以用在哪些地方? 在类中使用
在类的成员方法中使用
在类的构造方法中使用
3 如何使用this?
1) 在成员方法中使用,可以访问属性和成员方法
this.属性名 :
this.成员方法名(参数);
2) 在构造方法使用,可以访问属性和成员方法,
this.属性名
this.成员方法名()
3)在构造方法中,访问同类其他的构造方法
this(参数); ==》访问同类的其他构造方法 ,此行代码写在构造方法的第一行
this(); -->调用同类中无参的构造方法
好处 : 代码的复用