Java从入门到精通 第七章 类和对象
类和对象
类和对象作为java语言的基础,在日常开发中用到的就是类和对象.类作为对象的载体,承载着对象中的成员变量及成员方法. 同时类作为抽象事物的描述,包含着描述事物的属性和行为信息. (之前一直对成员变量及成员方法 类变量及方法的概念容易搞混 ,后面知道 成员变量及方法属于对象,而类变量及方法 属于类 ,使用static修饰.而局部变量 是只在某个函数中声明的变量,该变量的生命周期随着方法的开始而开始,方法的结束而结束. 同时对于GC回收机制有所了解,针对的是使用new创建的对象.具体会在下面讲到. )
- 面向对象开发的概念
以前开发使用的是结构化语言,随着软件的规模越来越大,结构化语言弊端越来越大。所以出现了面向对象开发思想。这种思想是指将多有要解决的问题 以对象的方式处理,对象中包含了该对象包含的属性及行为。说白了 面向对象设计的本质就是对现实世界的建模操作。比方造一辆车 以前的思想是 先造车头,后造车身,最后组装。类似流程化的设计思想。而现在是面向对象的思想,一辆车 拥有车头 发动机 车身 轮胎等属相,包含 前进 倒退等动作行为。 只需各部分拼接 组装即可。类似各模块早好,最后 拼接即可等思想。 - 类和对象的概念
类指的是对象的载体,封装属性和行为.是对抽象事物的一种描述
对象指的具体事物的描述。是类抽象出来的一个实例.
- 面向对象设计的特点:
-
封装
封装是面向对象的核心思想,指的是将对象的属性和行为封装起来。其载体就是类。类中封装了属性和行为。对外界面来讲 可以隐藏一些细节。外界可以访问这些公开的,当然类也可以使用修饰词private将 属性和行为 隐藏起来. -
继承
如果 每个类需要的属性和行为重复,那么重复封装就先得很麻烦。所以出现了,继承这一特性。子类可以继承父类的成员变量和方法,而构造方法可以通过super.()调用,但是不继承。 -
多态
多态又是自继承之后的一个特点,如果将某个类抽象画为一个实例。那么可以用父类类型 实例化为子类对象实例。 这种由子类对象实例 向上造型为父类类型的。称为向上造型。 由子类类型实例化为 父类类型实例的。称为向下造型。需要强制转换。一般来讲应用到多态的主要是在 成员变量方法中是父类类型Object,而实际传入的是String等其他类型。这里用到的就是多态向上造型的特性。另外父类一般用到的是接口.(多态中向下造型有个instanceof方法用于检测是否是该类的对象实例不是返回false) -
抽象类和接口的区别
1.抽象类使用abstract 接口使用interface
2.抽象类由子类继承 接口由子类实现
3.抽象类中存在抽象方法 和成员方法 接口只包含抽象方法
4.抽象类包含 成员变量和常量 接口中只包含常量
5.抽象类包含抽象方法和成员方法 成员变量和常量 接口只包含抽象变量和常量
6.抽象类和接口 都是抽象 接口的抽象级别更高
7.抽象类时抽象类别 接口是抽象功能
8.抽象类是重构 (重构的某些功能) 接口是设计(设计了某些功能) -
成员变量和方法
成员变量及方法 说白了就是对象中使用的方法。由类声明 在类实例化为对象的时候通过 引用变量 调用出来。 同时类中锁声明的属性和行为 就是这里说到的成员变量和成员方法. -
修饰符
成员变量及方法 可以使用修饰符修饰,这样就可以封中说的属性和行为 对外部隐藏或者可见的控制。如private 修饰的成员变量或方法 只能在本类中使用(当然一般来讲不大会出现),这样继承该类的子类 中对于成员变量和方法 就无法访问到. 默认修饰符 对于本类及同包类可以直接使用该类的变量及方法。 protected 则是 对于本类 同包类 子类都可以使用当前类中的变量及方法。public则是在所有的地方都可以使用.按照访问权限自小而大排序private<默认修饰符<protected<public. -
局部变量
局部变量指的是在某个方法中声明的变量(重点考察的该变量的声明周期:该变量在方法调用的时候开始,结束调用的时候结束) -
this关键字
this关键字在 类中创建set get bean类对象的时候经常用到的.this表示 当前调用对象实例,可以直接通过this.xxx()调用 当前对象的成员变量及方法.
类及对象中的变量及方法
- 构造方法
类中存在 构造方法,指的是方法名与类名相同 没有返回值(与没有void区分开).类实例化为对象的时候 就是用的默认无参构造方法 创建的对象。 一般来讲创建一个类 在没有声明无参构造方法的时候 ,编译器也就是eclipse会默认帮我们创建一个不带参数的构造方法(所以不使用编译器如eclipse写类 实例化的时候就有可能出问题). 如果声明了构造方法 就一定要正确,否则编译器会报错的.如果在类中声明的构造方法都不是无参构造方法 ,编译器也不会帮着创建无参构造方法的,当该类实例化的对象的时候 就会报错。
- 静态变量 常量和方法
静态变量 常量和方法 属于类,使用static修饰符修饰, 常量和变量的区别在于是否使用final修饰, final修饰的变量必须初始化. final修饰的方法不能被重写.final修饰的类不能被继承。final修饰的变量不可以被修改。同时像我们常用的main方法就是静态方法 属于类.不会被加载到对象堆内存去.
静态变量和静态方法的意义在于共享公用变量及方法.类似于单例模式.
对象的创建使用
- 对象的创建使用 使用或有参构造方法 实例化对象. 对象存储在堆中,而引用类型存储在 栈中,所以讲创建一个对象实际上 使用类型在栈中创建一个引用 类型来指向实例化在堆中的对象.
- 访问对象的属性和行为:通过引用类型来指向 存储在堆中对象的成员变量及成员方法即可.当然也可以通过引用类型来直接调用静态变量,但是这样容易搞混 静态成员变量和非静态成员变量的概念,所以不推荐使用.
- 对象的比较,在没有重写对象的equals方法之前,对象的比较是比较引用类型指向堆内存中存放对象的地址的。
- 对象的销毁:GC垃圾回收机制是为了解决那些为null或者超过生命周期对象占用内存的销毁问题。垃圾回收机制 针对的只是那些使用new创建的对象,而类似通过spring容器 对象管理的不属于gc的管理范畴.如果不是通过new创建的对象 可以通过finalize()方法来垃圾回收。垃圾回收会首先调用该方法(需要注意的是垃圾回收并不一定发生,如果jvm虚拟机内存超出的话,则内存无法回收).
尽管存在垃圾回收机制及finalize()方法对象销毁方法.但是这些并不是实时的无法控制的,所以出现了System.gc()方法可以强制立马回收该对象所占用的堆内存空间(强制+立马)
总结:本章主要介绍了什么是面向对象设计,面向对象设计有哪些特点。 什么是类,什么是对象。类和对象存在哪些方法 变量 等.对象及方法中的方法和变量 如何使用。方法中的局部变量使用。GC垃圾回收的指的哪些对象,不是立马发生的,可能不能回收。如果不是由new创建的对象可以通过哪个方法回收。如果需要手动回收可以执行System.gc()方法。(可以试一下finalize方法怎么用的)
补充一点:final修饰的成员变量在声明时可以初始化,也可以不必初始化,在局部方法中声明的局部变量使用final而常量数据在声明的时候必须初始化。