• 【JavaEE重点知识归纳】第7节:类和对象


    目录

    一:了解面向对象

    1.什么是面向对象

    2.面向对象和面向过程区分

    二:类定义和使用

    1.什么是类

    2.练习:定义一个学生类

    三:类的实例化

    1.什么是实例化

    2.类和对象的说明

    四:认识this

    1.为什么要有this引用

    2.什么是this引用

    3.this引用的特性

    五:对象的构造及初始化

    1.如何初始化对象

    2.构造方法

    3.默认初始化 

    4.就地初始化

    六:static成员

    1.static修饰成员变量

    2.static修饰成员方法

    七:代码块

    1.概念及分类

    2.普通代码块

    3.构造代码块(实例代码块)

    4.静态代码块


    一:了解面向对象

    1.什么是面向对象

            Java是一门纯面向对象的语言(Object  Oriented  Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题一种思想,主要依靠对象之间的交互完成一件事情。

    2.面向对象和面向过程区分

    把大象装进冰箱的例子:

    面向对象:大象(走进)、冰箱(打开,关闭)

    面向过程:一打开冰箱、二把大象装进冰箱、三关闭冰箱

    二:类定义和使用

    1.什么是类

    (1)类是用来对一个实体(对象)来进行描述,描述该对象具有哪些属性,有哪些功能

    (2)定义格式:

    class 类名{

            //成员变量(属性)

            //成员方法(功能)

    }

    class为定义类的关键字    成员属性定义在类里面,方法外面(注意区别与局部变量的不同)

    2.练习:定义一个学生类
    1. public class Student {
    2. //成员变量
    3. String name;
    4. int age;
    5. char sex;
    6. String grade;
    7. //成员方法
    8. public void study(){
    9. System.out.println("学习");
    10. }
    11. public void eat(){
    12. System.out.println("吃饭");
    13. }
    14. public void run(){
    15. System.out.println("跑步");
    16. }
    17. }

    三:类的实例化

    1.什么是实例化

    (1)定义了一个类,相当于在计算机中定义了一个新的类型(用户自定义类型)

    (2)用类类型创建对象的过程,称为类的实例化。在Java中用new关键字实例化一个对象

    Student stu=new Student();//stu就是一个引用,指向了Student对象,通过引用来访问对象的属性或者方法

    2.类和对象的说明

    (1)类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员

    (2)类是一个自定义的类型,可以用来定义变量

    (3)一个类可以实例化多个对象,每new一个对象出来,就会开辟一块内存,占用实际的物理空间

    (4)类就像菜谱一样,类实例化对象就像按照菜谱炒菜一样

    四:认识this

    1.为什么要有this引用

    当形参名和成员变量名形同的时候,分不清到底谁给谁赋值,this就很好的解决这个问题

    2.什么是this引用

    (1)this引用指向当前对象,在成员方法中所有成员变量的操作,都是通过该引用去访问

    (2)需要注意的是,this引用的是调用成员方法的对象,只能应用于类的成员方法中

    3.this引用的特性

    (1)this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型

    (2)在成员方法中,this只能引用当前对象,不能再引用其他对象

    五:对象的构造及初始化

    1.如何初始化对象

    (1)我们知道局部变量必须要初始化才能使用,但是为什么成员变量(属性)声明之后之后没有初始化依然可以使用,这就是不同点,这就引出了构造方法的概念

    (2)在讲构造方法之前,先了解成员变量没有被初始化的值。基本数据类型默认是0,引用类型默认是null

    2.构造方法

    (1)什么是构造方法:构造方法也称构造器,是一个特殊的成员方法(注意:构造方法是成员方法)。名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期中只调用一次。

    (2)注意:构造方法的作用就是对对象中的成员进行初始化,不负责给对象开辟空间

    (3)当一个类中没有任何一个构造方法的时候,Java会自动提供一个不带参数的构造方法;但是当一个类中由一个构造方法时,Java不会自动提供构造方法了,不带参数的构造方法也不会提供了,如由需要,在写带参数的构造方法时,最好多写一个无参的构造方法。

    (4)特性:

            1)名字必须与类名相同

            2)没有返回值类型,设置为void也不行

            3)构造方法之间,是可以构成方法的重载(是不是又忘记重载啥意思了:满足以下条件就是重载【一是方法名相同,二是参数列表不同(包括个数、类型……),三是返回值不做要求】)

    3.默认初始化 

    (1)回答上述问题:为什么局部变量在使用时必须初始化,而成员变量可以不用呢?因为对象那个空间被申请好之后,对象中包含的成员就是已经设置好初始值的了。

    (2)完成一个对象的构造,分两步:

            1)分配内存

            2)调用合适的构造方法

    (3)实现一个new语句,JVM就需要做很多步骤:

            1)检测对象对应的类是否被加载,没有被加载就需要加载

            2)为对象分配内存

            3)处理并发问题(多个线程同时申请对象,JVM要保证给对象分配的空间不冲突)

            4)初始化分配空间

            5)设置对象头信息

            6)调用构造方法,给对象中各个成员赋值

    4.就地初始化

    在声明成员变量的时候就赋初始值

    六:static成员

    1.static修饰成员变量

    (1)定义:static修饰的成员变量,称为静态成员变量,也称类变量

    (2)特性:

            1)不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中

            2)既可以通过对象访问,也可以通过类名访问,但一般是使用类名访问

            3)类变量存储在方法区

            4)生命周期与类同存同毁

    (3)小结:
            1)普通成员变量:属于对象,放堆上,访问方式:对象的引用.xxx

            2)静态成员变量:不属于对象,放方法区,访问方式:类名.xxx

    2.static修饰成员方法

    (1)定义:static修饰的成员方法,称为静态成员方法,也称类方法

    (2)特性:

            1)不属于某个具体的对象,是类方法

            2)既可以通过对象访问,也可以通过类名访问,但一般是使用类名访问

            3)·不能在静态方法中直接访问任何非静态成员变量

            4)·静态方法中不能直接访问任何非静态方法,因为非静态方法有this参数,在静态方法中无法传递this引用

    七:代码块

    1.概念及分类

    使用{}定义的一段代码称为代码块。有以下四种类型:

            1)普通代码块

            2)构造块

            3)静态块

            4)同步代码块(目前不做过多讨论)

    2.普通代码块

            定义在方法中的代码块。直接使用{}

    3.构造代码块(实例代码块)

    (1)定义在类中的代码块,一般用于初始化实例成员变量。

    (2)举例:

    4.静态代码块

    (1)使用static定义的代码块为静态代码块,一般用于初始化静态成员变量

    (2)举例:

    (3)注意:

            1)静态代码块只会执行一次,不管会生成多少个对象

            2)静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的

            3)若一个类中包含多个 静态代码块,在编译时,编译器会按定义先后依次执行

            4)构造代码块只有在创建对象的时候才会执行

  • 相关阅读:
    Linux高并发连接数解决
    【MATLAB教程案例14】基于ACO蚁群优化算法的函数极值计算matlab仿真及其他应用
    人工智能-第三阶段-k近邻算法1-算法理论、kd树、鸢尾花数据
    【车间调度】基于改进鲸鱼算法解决柔性车间调度多目标问题附matlab代码
    soc需要映射外网吗?
    LeetCode 278. 第一个错误的版本
    公共事业管理概论复习题及答案
    JDK8内存溢出注意事项
    通识篇:原型设计的认知,设计及最佳实践
    【实现100个unity特效之12】Unity中的冲击波 ——如何使用ShaderGraph制作一个冲击波着色器
  • 原文地址:https://blog.csdn.net/m0_74164458/article/details/133625000