面向对象的介绍和内存

学习面向对象内容的三条主线

Java 类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类
面向对象的特征:封装、继承、多态、(抽象)
其他关键字的使用:this、super、package、import、static、final、interface、
abstract 等

1. 面向对象编程概述(了解)

在学习面向对象之前,我们可以先了解一下面向过程。
面向过程是一种编程思想,它强调的是过程,意思是我们做任何事,都需要亲力亲为。
面向对象也是一种编程思想,相对于面向过程,我们的身份可以由原来问题的执行者变为指挥者,进而把生活中很多复杂的问题变得简单化。

面向过程强调的是过程,比如,把大象装冰箱,一共分3步:
第1步:打开冰箱门
第2步:把大象放进去
第3步:关上冰箱门

而面向对象强调的是结果,比如:
谁负责把大象装进去?
有没有发现,如果是面向对象的话,干这件事的主体并不是你自己,你变成了一个指挥者?

再比如,衣服脏了,我们可以让女盆友帮忙洗,不需要关注中间过程是怎么洗的,就可以拿到干净的衣服,当然,这首先需要有一个对象(加油哦)~

还有,当我们想吃一道菜,其实并不需考虑这道菜是怎么做的,怎么送达的,只需点菜即可.传菜和做菜都有具体的对象来完成具体的功能.我们不需要关注实现的过程,只需要关注结果就好。

面向对象的介绍和内存_第1张图片

这就是我们所说的面向对象的编程思想(OOP,Object Oriented Programming)

2 面向对象的三大特征

封装: 把相关的数据封装成一个“类”组件
继承: 是子类自动共享父类属性和方法,这是类之间的一种关系
多态: 增强软件的灵活性和重用性

Java语言最基本单位就是类,相当于类型。
类是一类事物抽取共同属性与功能形成的。
可以理解为模板或者设计图纸。

面向对象的介绍和内存_第2张图片

3.2 对象

每个对象具有三个特点:对象的属性,对象的功能和对象的标识。

对象的属性用来描述对象的基本特征。
对象的功能用来描述对象的可以完成的操作。
对象的标识是指每个对象在内存中都有一个唯一的地址值用于与其他对象进行区分,类似于我们的身份证号。

3.3 类和对象的关系

我们先创建类,再通过类创建出对象
我们可以通过一个类创建出多个对象
类是抽象的,对象是具体的

类的属性

变量:1,按照数据类型来分基本数据类型,引用数据类型
2,按照变量在类中声明的位置不同:成员变量(属性)、局部属性(方法内,构造器内,代码块内等)就比如人按照性别来分,以及按照年龄来分

面向对象的介绍和内存_第3张图片

局部变量和成员变量的异同

相同点:
变量的格式相同:变量类型 变量名= 变量值;
变量都有有效的作用域:作用域都是离该属性最近的大括号,出了作用域就失效了
变量先初始化,在使用
无论局部变量还是成员变量都有默认值

3、生命周期 (1)实例变量:和对象的生命周期一样,随着对象的创建而存
在,随着对象消亡而消亡, 而且每一个对象的实例变量是独立的。
(2)局部变量:和方法调用的生命周期一样,每一次方法被调用而在存在,随
着方法执行的结束而消亡, 而且每一次方法调用都是独立。

类的方法使用

方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过 程。
将功能封装为方法的目的是,可以实现代码重用,减少冗余,简化代码
Java 里的方法不能独立存在,所有的方法必须定义在里。

. Math.random()的 random()方法
– Math.sqrt(x)的 sqrt(x)方法
– System.out.println(x)的 println(x)方法
– new Scanner(System.in).nextInt()的 nextInt()方法
– Arrays 类中的 binarySearch()方法、sort()方法、equals()方法

面向对象的介绍和内存_第4张图片

1、声明方法的语法格式
[修饰符] 返回值类型 方法名([形参列表])[throws 异常列表]{
方法体的功能代码
}

返回值类型:
表示方法运行的结果的数据类型,方法执行后将结果返回到调用者。
– 无返回值,则声明:void
– 有返回值,则声明出返回值类型(可以是任意类型)。与方法体中“return
返回值”搭配使用

关于方法体中 return 语句的说明:
return 语句的作用是结束方法的执行,并将方法的结果返回去
如果返回值类型不是 void,方法体中必须保证一定有 return 返回值; 语句,并且要求该返
回值结果的类型与声明的返回值类型一致或兼容。
如果返回值类型为 void 时,方法体中可以没有 return 语句,如果要用 return 语句提前结
束方法的执行,那么 return 后面不能跟返回值,直接写 return ; 就可以。
return 语句后面就不能再写其他代码了,否则会报错:Unreachable code

3.4 练习:类的创建使用

手机的属性:颜色,尺寸,品牌,价格
手机的功能功能:打电话,发短信,听音乐

package cn.tedu.oop;
/**本类用作面向对象入门案例
 * 设计手机这一类事物:
 * 分析属性:品牌 价格 尺寸 颜色
 * 分析功能:打电话 发短信 看直播*/
/**在一个java文件中可以写多个class,但是,被public修饰的class只能有一个
 * 而且要求这个公共类的名字必须与文件的名字保持一致*/
public class TestCreateClass {
    public static void main(String[] args) {
        //help-findAction 或者 Alt+7
        //4.创建手机类的对象p1
        Phone p1 = new Phone();
        //5.通过手机类对象调用手机类的功能
        p1.call();
        p1.message();
        p1.video();
        //6.通过手机类对象打印查看属性值
        System.out.println(p1.color);//null
        System.out.println(p1.price);//0.0
        System.out.println(p1.size);//0.0
        System.out.println(p1.brand);//null
    }
}

//1.通过class关键字创建手机类--用来描述手机这一类事物--属性+功能
class Phone{
    //2.定义手机类的属性--用成员变量来描述--位置:类里方法外
    String brand;//品牌
    double price;//价格
    double size;//尺寸
    String color;//颜色
    //3.定义手机类的功能--用方法来描述--格式:修饰符 返回值类型 方法名(参数列表){方法体}
    public void call(){
        System.out.println("正在打电话~");
    }
    public void message(){
        System.out.println("正在发短信!");
    }
    public void video(){
        System.out.println("正在看直播~");
    }
}

3.5 对象在内存中的存储
Java把内存分成5大区域,我们重点关注栈和堆。

一般来讲局部变量存在栈中,方法执行完毕内存就被释放
对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
每个堆内存的元素都有地址值
对象中的属性都是成员变量,是有默认值的
TIPS: 栈与队列指的是一种数据的结构。
栈:先进后出(FILO – First In Last Out)
队列:先进先出(FIFO – First In First Out)

面向对象的介绍和内存_第5张图片
面向对象的介绍和内存_第6张图片

对象的创建过程分析:

Phone p = new Phone(); 这句代码,再内存中会发生什么呢?
1.在栈内存中开辟一块空间,存放引用类型Phone类型的变量p
2.在堆内存中开辟一块空间,存放Phone类型的对象
3.要给这个对象进行初始化,比如:String brand = null;
4.当对象准备好以后,会生成一个唯一的地址值,然后将此地址值交给引用类型的变量p来保存
5.如果以后想要操作此对象的各种资源,可以通过p变量保存的地址值找到该对象,比如:p.call(); p.price = 66.6;

面向对象的介绍和内存_第7张图片
3.6 练习2:创建多个对象

package cn.tedu.oop;
/**本类用作面向对象入门案例
 * 设计手机这一类事物:
 * 分析属性:品牌 价格 尺寸 颜色
 * 分析功能:打电话 发短信 看直播*/
/**在一个java文件中可以写多个class`,但是,被public修饰的class只能有一个
 * 而且要求这个公共类的名字必须与文件的名字保持一致*/
public class TestCreateClass {
    public static void main(String[] args) {
        //help-findAction 或者 Alt+7
        //4.创建手机类的对象p1
        Phone p1 = new Phone();
        //5.通过手机类对象调用手机类的功能
        p1.call();
        p1.message();
        p1.video();
        //6.通过手机类对象打印查看属性值
        System.out.println(p1.color);//null
        System.out.println(p1.price);//0.0
        System.out.println(p1.size);//0.0
        System.out.println(p1.brand);//null

        //7.创建手机类的第2个对象p2
        Phone p2 = new Phone();
        //8.通过p2对象,调用Phone类的3个方法
        p2.call();
        p2.message();
        p2.video();
        //9.给p2对象的4个属性赋值
        p2.brand = "HUAWEI";
        p2.color = "中国红";
        p2.price = 6666.66;
        p2.size = 5.6;
        //10.打印查看p2对象的4个属性值
        System.out.println(p2.brand);
        System.out.println(p2.price);
        System.out.println(p2.color);
        System.out.println(p2.size);

        //11.查看两个对象的地址值
        System.out.println(p1);//cn.tedu.oop.Phone@1b6d3586
		System.out.println(p2);//cn.tedu.oop.Phone@4554617c
    }
}

//1.通过class关键字创建手机类--用来描述手机这一类事物--属性+功能
class Phone{
    //2.定义手机类的属性--用成员变量来描述--位置:类里方法外
    String brand;//品牌
    double price;//价格
    double size;//尺寸
    String color;//颜色
    //3.定义手机类的功能--用方法来描述--格式:修饰符 返回值类型 方法名(参数列表){方法体}
    public void call(){
        System.out.println("正在打电话~");
    }
    public void message(){
        System.out.println("正在发短信!");
    }
    public void video(){
        System.out.println("正在看直播~");
    }
}

面向对象的介绍和内存_第8张图片
jian

你可能感兴趣的:(cy,java,jvm,开发语言)