JAVA面向对象之封装(变量、对象、函数、类)

  1. 面向对象与面向过程
  • 对于面向对象的思想: 强调的是对象也就是我们所说的实体,代表着指挥者,代表语言有C++、C#、Java
  • 对于面向过程的思想:强调的是过程也就是动作行为,代表着执行者,代表语言有C语言
  • 宏观上来看对于一门面向对象的语言里不能纯面向对象,必须要有执行者参与;而对于一门语言可以纯面向过程。
  • 那么到底什么是面向对象呢?
    面试官为了公司的发展和业务的需求,需要招聘一批具有专业素养的人来面试,面试官是对象,调用面试这个方法;
  • 那到底什么是面向过程呢?
    面试官进行简历筛选,打电话或者e-maile通知我来这里,对我提出问题等等一系列行为叫做面向过程。
  1. 类的定义
  • 类是事物描述的集合,定义类就是定义类中的成员。类是对象的模板,定义对象的属性,并提供用于已创建对象的构造方法以及操作对象的普通方法。
  • 类也是一种数据类型。可以用它声明对象引用变量。对象引用变量似乎存放了一个对象,但事实上只是对象的引用,他们的区别可以忽略。
  1. 对象的定义
    对象就是该类事物的实例,由类所产生出来的。
  2. 类与对象的关系
    类就好比一个模具,而对象就是模具加工出来的各种形状的玩意。
    类也可以想象为一个图纸,而对象就是图纸建造出来的房子。
  3. 类的代码定义
    一个类中主要是描述相同属性和行为的
  • 对于属性,可用变量表示,类中的变量为成员变量
  • 对于行为,可用函数表示,类中的一般函数我们叫做成员函数。
  1. 成员变量
    定义在一个类中,每个对象都有一个该属性,其值可以不同,都属于特有属性。
  2. 成员函数
    在类中的成员函数,该类所创建出的对象都可调用。
  3. 如何创建对象
    首先在堆内存中开辟空间(开辟大小由JAVA内存自己决定)同时划分地址,在这个空间里成员变量默认初始化,成员变量显示初始化,然后栈中的函数中有一个对象变量名,我们将堆内存的地址给过去就好了。
  4. 成员变量与局部变量
  • 存储位置:成员变量存在于堆内存所属的对象中;局部变量存在于栈内存所属的函数中。
  • 生命周期:成员变量随着对象的创建而存在,随着对象的消亡而结束;局部变量随着函数的进栈而存在,随着函数的弹栈而消失
  • 初始化:成员变量有默认初始化,局部变量只能在初始化后被调用。
  • 全局变量:该类中成员变量全局访问;局部变量只能在代码块访问
  1. private关键字
    私有,是一个权限修饰符,用于修饰成员,私有内容只有在本类有效。对于一些数据我们具有隐私并且不想直接被访问或修改,那么我们就可以在成员变量前加private
  • 那么我们外界如何访问和修改private的成员变量呢?
    那就只能采取间接的方式,在eclipse中使用快捷键shift+alt+s选择setter和getter方法。
    对于需要修改设置该变量可以使用void setxxx(){this.xxx=xxx}
    对于需要访问该变量可以使用String getxx(){return xxx}
    最后呢,我们只需要对象.方法名()
  1. 构造函数
  • 什么是构造函数?
    可以为对象初始化,并且构建创造对象时的函数
  • 构造函数的特点
    1. 构造函数名与类名相同
    2. 构造函数没有返回值类型,没有返回值
    3. 构造函数没有void
    4. 构造函数有return
  • 无参构造函数
    一个类中没有构造函数,那么就会默认有一个无参构造函数,当然我们也可以创建一个无参构造函数,去给创建好的对象初始化。
  • 有参构造函数
    当一个类中如果有有参构造函数的话,那么默认的无参构造函数就会失效,我们创建的有参构造函数,目的就是为了在对象创建的时候给他传数据初始化。
  • 什么时候定义构造函数
    在描述事物时,该事物已存在就具备的一些内容,这些内容都定义在函数中。
  1. 构造函数与一般函数的区别

    1. 构造函数:对象创建时就会调用与之对应的构造函数,对对象进行时初始化;一般函数:对象创建后需要函数功能时才调用。
    2. 构造函数:只有在对象创建时被调用一次;一般函数:对象创建后可以调用多次。
  2. this关键字

  • 当局部变量和成员变量同名用this区分;
  • this用于构造函数中时:调用其他构造函数,只能在构造函数第一行,并且时单方向调用,不可循环调用
  • 一般函数不可调用构造函数
  • 哪个对象调用了this所在函数,this就代表哪个对象
  • 一个类中的成员必须用对象调用
  1. static关键字
  • static的定义
    可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main()。因为在程序开始执行时必须调用main() ,所以它被声明为static。
  • static的特点
    1. static是一个修饰符,用于修饰成员。
    2. static修饰的成员被所有对象共享
    3. static优先于对象存在
    4. static修饰成员可以通过类名来调用
    5. static中的数据是共享数据,而对象存储的数据是特有数据
    6. 在没有创建对象的情况下来进行调用(方法/变量)。
  • 可不可以都定义成static
    不可以,都定义成static那么所有数据都成共享的,就没有对象的意义了,每个对象都一样没有自己的特有属性那么就不叫对象了。
  • static函数
     static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。
  1. 静态成员与实例成员的区别
  • 生命周期
    实例变量随着对象的创建而存在,随着对象的回收而释放
    静态变量随着类的加载而存在,随着类的消失而消失
  • 调用方式
    成员变量只被对象调用
    静态变量可以被类和对象调用
  • 别名
    成员变量也称实例变量
    静态变量也称类变量
  • 数据存储位置
    成员变量数据存放在堆内存中的对象中,是对象的特有属性
    实例变量存储在静态区共享数据区。
  1. 代码块
  • 静态代码块
  • 构造代码块
  • 局部代码块
  1. 对象的创建流程
    javac 编译源代码 生成,class文件 java 将.class文件加载进JVM中的方法区(静态,非静态) JVM中从静态区读取主函数 创建一个对象 在堆内存中开辟空间 划分地址 默认初始化 显示初始化 构造函数进栈 针对性初始化 构造函数弹栈 将对象地址传给栈内存中函数区域中的变量。

练习题

猜你喜欢

转载自blog.csdn.net/qq_43157982/article/details/85038280