面向对象(Object Oriented Programming)

一、什么是类

      1. 创建一个新类型Student,新类型我们称为 Student类

      2. 根据新类型申请一个空间,这个空间可以完整存储一个同学的信息,我们称为一个 Student对象

      3. 通过一个引用型变量记录这个空间的起始地址

      4. 通过地址找到对应的空间

1、类的定义

      类就是类型,是数据类型的复合类型,是一个同时带有特征和行为的数据类型,是创建对象的模板。类 是Java语言的最基本单位

类修饰符 class 类名 {

      //类体

}

1. 类修饰符:

     访问控制符:public或者不写(包访问权限)

     其他修饰符:abstract、final

2、 类名:合法的标识符,首字母大写

3. 类体:

      成员变量,如:int score;

      静态成员变量,如:static int num;

      普通方法:void printSelf(){ }

      静态方法:static void printNum(){ }

      构造方法:public Student(){}

      初始化块:{}

      静态初始化方法:static{}

      内部类

注意:

     1.一个Java文件中可以写多个类,但是编译后还是会生成多个.class文件

     2.一个Java文件中最多只能有一个被public修饰的类,这个类的类名必须和Java源文件名保持 一致

     3.一个Java文件中如果只有一个类,并且这个类不用public修饰的话,类名和文件名可以不一 样,但习惯上,我们都会写上public

示例:

class Student {

       String name;

        int score;

     public String toString() {

              return "name=" + name + ";score=" + score;

     }

}

4.成员变量的定义

      成员变量:作为类的 成员 存在的变量,也被称为属性。分为静态(static)成员变量和非静态成员变量, 在静态方法中只能访问静态成员变量,在非静态方法中可以访问非静态成员变量和静态成员变量

    成员变量修饰符:

          访问控制符:public、protected、包(默认)、private

          其他修饰符:static、final

       final:如果成员变量的修饰符中有final,表示该成员变量只可以被赋值一次,可以在变量声明处 或者构造函数中初始化。

成员变量与局部变量的区别:

     1. 定义的位置不同

            成员变量:定义于类中,作用于整个类

            局部变量:定义于方法或者语句块中,作用于该方法或者该语句。

     2.内存中出现的时间和位置不同

            成员变量:当对象被创建时,出现在堆内存当中。

            局部变量:所属的区间被运算时,出现在栈内存当中。

    3.生命周期不同

           成员变量:随着对象的出现而出现,随着对象的消失而消失。

           局部变量:随着所属区间运算结束,它就被释放。

    4. 初始化值不同

           成员变量:成员变量因为在堆内存当中,所以他有默认的初始值

           局部变量:没有默认的初始值

   5. 成员变量和局部变量名字相同,局部变量优先级高。就近原则。

         成员变量与静态成员变量的区别:

              1. 内存中出现的时间和位置不同

                        成员变量:当对象被创建时,出现在堆内存当中。

                        静态成员变量:类被加载时静态变量出现在方法区。

             2.生命周期不同

                        成员变量:随着对象的出现而出现,随着对象的消失而消失。

                        静态成员变量:类信息被回收时,静态成员变量消失。

5.类中方法的定义

         方法必须作为类的成员出现。分为静态方法和非静态方法,在静态方法中只能调用静态方法,在非静 态方法中可以调用非静态方法和静态方法

     1.静态能访问静态的,不能直接访问非静态的,如果要访问,必须要创建对象

     2.非静态的能直接访问非静态的和静态的。

     3. 如果要访问另外一个类中的静态成员变量和静态方法: 类名.静态成员变量 类名.静态方法名

示例:

二、对象的创建以及内存分析

     类是对象的抽象(模板),对象是类的具体体现(实例)

    1、对象的创建

         对象的创建过程也被称为对象的实例化过程。

         new Student();

   2、类引用型变量

         通过一个变量记录对象的地址,从而多次使用这个对象。

         类名 变量名; //声明

         类名 变量名 = new 类名(); //声明、初始化

    注意:引用型变量作为方法参数和返回值,规则同数组作为方法参数和返回值

3、JVM内存布局

        程序运行时,JVM会按区域来使用内存,主要的内存空间:

        1. 栈空间:在运行过程中,每当调用进入一个 Java 方法,Java 虚拟机会在 Java 方法栈中生成一个栈 帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且 Java 虚拟机 不要求栈帧在内存空间里连续分布。当退出当前执行的方法时,不管是正常返回还是异常返回, Java 虚拟机均会弹出当前栈帧,并将之舍弃。栈空间时线程私有的。

         2. 堆空间 Java堆在虚拟机启动的时候建立,它是JVM管理的最主要也是最大的内存工作区域。几乎所有的 Java对象实例都存放在Java堆中。GC主要关注的就是这块空间的回收。

        3. 方法区 用于存储已被虚拟机加载的类信息、即时编译的代码等数据

4、JVM内存分配

     1. 执行解析1

            第一次使用到类时,会将类的信息加载到方法区

            Student s1;在栈空间中创建一个引用型变量,可以存储指向对象的引用

             new Student();在堆空间分配一个空间,其中成员变量的值为默认值

2. 执行解析2

       通过s1找到堆空间的name空间,然后赋值

       通过s2找到堆空间的name空间,然后赋值

  3. 执行解析3

        类中如果有static修饰的成员变量,则创建的对象不包括该成员变量,静态成员变量属于类, 只有一份

    注意:字符串常量池、静态成员变量、符号引用在JDK1.7以后已经移动到了堆中。途中为了 便于理解。

s1.num、s2.num使用的都是类中的同一个num,该num位于方法区

     4. 执行解析4

              对象数组,其实是一个引用数组

      5.执行解析5

            对象数组的元素可以指向对应的对象

     6.执行解析6

            多个引用型变量可以指向一个对象。当不需要某个对象时可以将所有执行该对象的引用型变 量赋值为null。当一个对象没有引用型变量指向的时候,GC会在适当的时候回收这个对象。

总结:

1.静态成员变量的使用 静态成员变量和方法都隶属于类,可以通过引用型变量访问,但是最好使用 类名.属性 的语 法来使用。

2.静态方法的使用

3.只要类被加载到方法区,静态方法就可以被调用( 类名.方法名() ),但是在静态方法中不能直接 使用非静态的东西。

三、构造方法的定义

构造方法也叫构造器,是指当实例化一个对象(创建一个对象)的时候,由JVM自动调用的方法。主要 完成对象的初始化。

1. 构造方法没有返回值类型,构造方法是在实例化对象的过程中自动调用的。

2. 如果不写构造方法,系统会默认为我们提供一个无参的构造方法,如果添加了任意一个构造 方法,系统不再提供默认的构造方法。

1、构造方法的调用

自动调用无参的构造方法

示例

Student student1= new Student();

2、构造方法与普通方法的区别

1、构造方法是在创建对象的过程中自动调用的,普通方法只能手动进行调用

2、 构造方法没有返回值类型,普通方法的返回值类型要么是确定的类型,要么为void

3、系统会默认为我们提供一个无参的构造方法,普通方法只能手动添加

4、构造方法的方法名称必须和对应的类名保持一致

5、构造方法在创建对象的过程中就会执行,而且每个对象只执行一次,对于普通方法而言,只 有在需要使用的时候才被执行,并且一个对象可以调用多次

3、构造方法重载

构造方法可以没有参数,无参的构造方法称为默认构造方法。构造方法也可以有参数,如果一个类总有 多个构造方法,则构造方法形成了重载。

示例:

4、匿名代码块

 

      成员变量可以在声明的位置或者构造方法中初始化,静态成员变量也可以在声明的位置初始化,但是 如果初始化逻辑比较复杂,则可以通过静态初始化块实现。

局部代码块:声明在方法中的代码块,执行时机与声明位置相关, 提前释放变量。(了解)

动态代码块:又称构造代码块或实例代码块,声明在类体中的代码块,创建对象时自动执行一 次,每创建一个对象就执行一次动态代码块。初始化工作。(了解)

静态代码块:使用static关键字修饰的动态代码块,在类加载时自动执行,并只执行一次。(记 住)

示例:

 

四、面向对象

1、什么是面向对象

面向对象是指一种程序设计的方式。通过面向对象的方式,将现实世界的事物抽象成对象,现实世界 中的关系抽象成类、继承,更利于用人理解的方式对复杂系统进行分析、设计与编程

面向对象优势:

1.模块化:可以独立于其他对象的源代码编写和维护对象的源代码。一旦创建,对象就可以轻 松地在系统内部传递。

2.信息隐藏:通过仅与对象的方法交互,其内部实现的细节仍然隐藏。

3.代码重用:如果对象已存在,则可以在程序中使用该对象。这允许专家实现/测试/调试复杂 的,特定于任务的对象,然后您可以信任这些对象在您自己的代码中运行。

4.可插拔性和调试简便性:如果某个特定对象有问题,只需将其从应用程序中删除,然后插入 另一个对象作为替代对象。这类似于解决现实世界中的机械问题。如果螺栓断裂,则更换 它,而不是整个机器。

2、什么是面向过程

“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。面向过程求解问题的基本策略是 从功能的角度审视问题域。它将应用程序看成实现某些特定任务的功能模块,其中子过程是实现某项具 体操作的底层功能模块。在每个功能模块中,用数据结构描述待处理数据的组织形式,用算法描述具体 的操作过程。

3、面向对象与面向过程思想的比较

1. 面向过程(c)

就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依 次调用就可以了。

2、面向对象(c++,java)

是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事 物在整个解决问题的步骤中的行为。

注意:

面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可 以说面向过程是一种基础的方法。它考虑的是实际地实现。一般的面向过程是从上往下步步求 精,所以面向过程最重要的是模块化的思想方法。当程序规模不是很大时,面向过程的方法还会 体现出一定优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。面对日趋复 杂的应用系统,这种开发思路在就有很大局限性了。对比面向过程,面向对象的方法主要是把事 物给对象化,对象包括属性与行为。程序由各种独立而又互相调用的对象的构成。

4、this关键字

this:表示当前对象的引用。主要用于区分重名的变量(参数和成员变量)和方法(父子类),以及在构造 方法中调用其它构造方法

注意:this调用构造方法只能是构造方法的第一条语句,this调用在同一个构造方法中只能出现一 次

示例

1、根据要求描述对象

      写出厨房里面至少三个类,并创建对象运行。

      写出教室里至少三个类,并创建对象运行。

      写出动物园里至少三个动物类,并创建对象运行。

2、利用面向对象的思想描述下面的场景

     小美在朝阳公园溜旺财【注:旺财是狗】

     小明穿着白色的特步运动鞋在奥林匹克公园跑步

     赵老师在讲台上讲课,小刚认真的听课做笔记

     张阿姨和李阿姨在物美超市买红富士。

五、关键知识点默写

1、类就是类型,是数据类型的复合类型,是一个同时带有特征和行为的数据类型,是创建对象的模板

2、类的定义:

类就是类型,是数据类型的复合类型,是一个同时带有特征和行为的数据类型,是创建对象的模板。类 是Java语言的最基本单位

类修饰符 class 类名 {

//类体

}

3、对象的创建

new 构造方法([参数列表]);

4、引用型变量,通过一个变量记录对象的地址,从而多次使用这个对象。

类名 变量名; //声明

类名 变量名 = new 类名(); //声明、初始化

5、JVM的基本内存布局及分配过程

栈: 方法运行过程中的局部变量

堆:对象

方法区:类信息

6、this关键字 :表示当前对象的引用

this.属性

this.方法

this();//调用其他的构造方法

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值