第三章 面向对象
1、面向对象开发、设计、特征
(1)面向对象开发 就是不断的创建对象,使用对象,指挥对象做事情。
(2) 面向对象设计 其实就是在管理和维护对象之间的关系。
(3)面向对象特征
A. 封装(encapsulation)
B.继承(inheritance)
C. 多态(polymorphism)
2、类与对象的关系
(1)类:是一组相关的属性和行为的集合 。
(2)对象:是该类事物的具体体现。
eg: 类 学生
对象 班长就是一个对象
3、类的定义
(1)现实事物:
属性:用来描述事物的信息
行为:用来描述事物能够做什么
(2)类:
成员变量:事物的属性
成员方法:事物行为
(3)定义一个类,其实就是定义这个类中成员变量和成员方法。
eg:我们来完成一个学生类的定义
学生:
属性:姓名,性别,年龄
行为:学习,吃饭,睡觉
类:
成员变量:name,gender,age
成员方法:study(),eat(),sleep()
如何定义一个成员变量?
A.定义的位置:在类中,方法外
B.定义的格式: 数据类型 变量名;
如何定义一个成员方法?
A.定义的位置:在类中
B.定义的格式: 修饰符 返回值类型 方法名(参数列表){
方法体;
}
注意事项:一个java文件中只能有一个类被public修饰 只需要记住被public修饰的类规范是要与java文件名一致。
(4)成员变量与局部变量的区别:
A.在类中定义的位置不同
成员变量:类中,但是在方法外
局部变量:定义在方法内部
B.在内存中的位置也不同
成员变量:在堆内存中
局部变量:在栈内存中
C.初始化值也不同
成员变量:系统会给予默认值
局部变量:没有系统给的默认值,必须在定义的时候赋值,亦或者在方法中使用之前赋值,然后才能使用。
D.生命周期不同
成员变量的生命周期:随着对象的创建而创建,随着对象的消失而消失
局部变量的生命周期:随着方法的调用而创建,随着方法的调用完毕而消失
注意事项:
a.局部变量的名字可以和成员变量的名字一样,在方法中使用的时候,采用就近原则。方法中使用的变量,会现在方法内部查找,如果方法内部没有,去成员变量中查找。
b.方法与方法之间里面的局部变量,不能互相调用。
(5)匿名对象:就是没有名字对象
匿名对象的使用场景:
A.调用方法的时候,仅仅调用一次的时候,可以使用匿名对象。
注意,当调用多次的时候,不适合,每次new的时候都是一个新的匿名对象,会频繁的在堆内存中开辟空间。
当匿名对象使用完毕之后,无法再使用第二次,就变成了一个垃圾(当栈中没有变量引用它的时候,判定是一个垃圾),等待被垃圾回收器回收。
B.当方法的参数类型是一个类的时候,可以使用匿名对象调用方法。
eg:
第三章 面向对象
1、面向对象开发、设计、特征
(1)面向对象开发 就是不断的创建对象,使用对象,指挥对象做事情。
(2) 面向对象设计 其实就是在管理和维护对象之间的关系。
(3)面向对象特征
A. 封装(encapsulation)
B.继承(inheritance)
C. 多态(polymorphism)
2、类与对象的关系
(1)类:是一组相关的属性和行为的集合 。
(2)对象:是该类事物的具体体现。
eg: 类 学生
对象 班长就是一个对象
3、类的定义
(1)现实事物:
属性:用来描述事物的信息
行为:用来描述事物能够做什么
(2)类:
成员变量:事物的属性
成员方法:事物行为
(3)定义一个类,其实就是定义这个类中成员变量和成员方法。
eg:我们来完成一个学生类的定义
学生:
属性:姓名,性别,年龄
行为:学习,吃饭,睡觉
类:
成员变量:name,gender,age
成员方法:study(),eat(),sleep()
如何定义一个成员变量?
A.定义的位置:在类中,方法外
B.定义的格式: 数据类型 变量名;
如何定义一个成员方法?
A.定义的位置:在类中
B.定义的格式: 修饰符 返回值类型 方法名(参数列表){
方法体;
}
注意事项:一个java文件中只能有一个类被public修饰 只需要记住被public修饰的类规范是要与java文件名一致。
(4)成员变量与局部变量的区别:
A.在类中定义的位置不同
成员变量:类中,但是在方法外
局部变量:定义在方法内部
B.在内存中的位置也不同
成员变量:在堆内存中
局部变量:在栈内存中
C.初始化值也不同
成员变量:系统会给予默认值
局部变量:没有系统给的默认值,必须在定义的时候赋值,亦或者在方法中使用之前赋值,然后才能使用。
D.生命周期不同
成员变量的生命周期:随着对象的创建而创建,随着对象的消失而消失
局部变量的生命周期:随着方法的调用而创建,随着方法的调用完毕而消失
注意事项:
a.局部变量的名字可以和成员变量的名字一样,在方法中使用的时候,采用就近原则。方法中使用的变量,会现在方法内部查找,如果方法内部没有,去成员变量中查找。
b.方法与方法之间里面的局部变量,不能互相调用。
(5)匿名对象:就是没有名字对象
匿名对象的使用场景:
A.调用方法的时候,仅仅调用一次的时候,可以使用匿名对象。
注意,当调用多次的时候,不适合,每次new的时候都是一个新的匿名对象,会频繁的在堆内存中开辟空间。
当匿名对象使用完毕之后,无法再使用第二次,就变成了一个垃圾(当栈中没有变量引用它的时候,判定是一个垃圾),等待被垃圾回收器回收。
B.当方法的参数类型是一个类的时候,可以使用匿名对象调用方法。
eg:
class Phone{
public void show(){
System.out.println("手机可以打电话");
}
}
class PhoneDemo{
public void function(Phone p){
p.show();
}
}
public class AnonymousDemo {
public static void main(String[] args) {
//创建一个PhoneDemo对象
PhoneDemo pd = new PhoneDemo();
Phone phone = new Phone();
pd.function(phone);
System.out.println("=============================");
//当new完对象之后直接使用,没有用变量名接收的对象,称之为匿名对象
new PhoneDemo().function(new Phone());
new PhoneDemo().function(new Phone());
}
}
(6)定义标准类
A.获取成员变量值的方法:
a.提供一个公共的方法,打印所有的成员变量值。
b.单个使用公共的获取方法,一个一个获取打印。
原因:单个使用比一起使用的灵活度要高。
B.private : 私有的。
a.它可以修饰成员(成员变量和成员方法)
b.被private修饰的成员只能在本类中访问使用。其他类中使用不了
eg:
成员变量:被private修饰
成员方法:getXxx()和setXxx(),其中setXxx(..)形参的名字与成员变量名字一致,使用this关键字赋值 ,show()
package TheVan373.bigdata.knowledgepoints;
class Phone {
private String brand;
private int price;
private String color;
public void setBrand(String brand) {
this.brand = brand;
}
public String getBrand() {
return brand;
}
public void setPrice(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void show() {
System.out.println(getBrand() + ":" + getPrice() + "(" + getColor() + ")");
}
}
public class PhoneTest {
public static void main(String[] args) {
Phone phone = new Phone();
phone.setBrand("华为P20");
phone.setPrice(4160);
phone.setColor("宝石蓝");
phone.show();
}
}