Java基本知识点学习(一)
1. 面向对象
基本概念
面向过程:其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
面向对象思想:面向对象是基于面向过程的编程思想。就是不断的创建对象,使用对象,指挥对象
面向过程的特点:强调的是过程,所有事情都需要自己完成
==面向对象的特点 ==:是一种更符合我们思想习惯的思想(懒人思想,我把事情自己不做,交给别人去做)
可以将复杂的事情简单化(对使用者来说简单了,对象里面还是很复杂的)将我们从执行者变成了指挥者角色发生了转换
我们如何描述现实世界事物
属性 ——>就是该事物的描述信息(事物身上的名词)
行为 ——>就是该事物能够做什么(事物身上的动词)
Java中最基本的单位是类,
- 成员变量 ——》就是事物的属性
- 成员方法——》 就是事物的行为
类和对象的概念
类:是一组相关的属性和行为的集合(我们班所有的同学都具备相同的属性和行为,比如:姓名,年龄,学习,这样就把所有的学生成为学生类)
+++++++++++++++++++++++++++++++++++++++++++++++
对象:是该类事物的具体体现(说某个同学时,他都具备自己特有的属性和行为)
我们如何创建对象呢?
-
格式:类名 对象名 = new 类名();
- 对象如何访问成员呢?
-
成员变量:对象名.变量名
-
成员方法:对象名.方法名(..)
OOP:面向对象编程。
OOA面向对象分析
OOD:面向设计
匿名对象:
即没有名字的对象,简化书写用的。 基本使用: 当方法只调用一次的时候可以使用匿名对象
可以当作参数进行传递,但是无法在传参之前做其他的事情
2.封装
A:封装概述
是面向对象三大特征之一
B:封装原则:
将不需要对外提供的内容都隐藏起来。 把属性隐藏,提供公共方法对其访问。
C:好处:
通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性
什么是构方法?
构造方法:给对象的数据进行初始化
如果你不提供构造方法,系统会给出默认无参构造方法
如果你提供了构造方法,系统将不再提供
构造方法也是可以重载的,重载条件和普通方法相同
3.继承
继承:将多个类中共同的成员变量和成员方法,抽取到另外一个类中(父类),在让多个类去继承这个父类,我们的多个类就可以获取到父类中的成员了。
Java语言只支持单一继承,只能继承一个父类,支持多层继承
关键字:extends
继承中构造方法的执行顺序
在子父类中,创建子类对象,调用子类的构造方法, 在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造,
则默认调用父类无参构造
为什么要调用父类构造?
因为需要给父类的成员变量初始化 肯定会先把父类的构造执行完毕,在去执行子类构造中的其他代码
子类可以继承父类的构造方法吗?不可以的,
子类只能调用父类的构造方法
继承的优缺点
优点: 提高代码的复用性,可维护性
缺点 : 增强了耦合性
开放的原则:低耦合,高内聚
耦合:是类与类之间的关系 内聚:独立完成功能
3.多态
对象的多种形态就是多态。
格式
多态的定义格式:就是父类的引用变量指向子类对象
父类类型
变量名 = new 子类类型();
多态的前提:
- 子父类的继承关系
- 方法的重写
- 父类引用指向子类对象
多态成员的特点
简单记:
- 成员变量 编译时看的是左边,运行时看的左边
- 成员方法 编译时看的是左边,运行时看右边
- 静态方法
编译时看的是左边,运行时看的也是左边
多态中向上转型与向下转型
多态的弊端 :
不能直接使用子类的特有功能
向上转型:自动类型提升
向下转型:强制类型转换
------------------------------------------------------------------------
多态的转型分为向上转型与向下转型两种:
A:向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。
- 使用格式:
父类类型 变量名 = new 子类类型();
如:Person p = new Student();
B:向下转型
一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。如果是直接创建父类对象,是无法向下转型的- 使用格式: 子类类型 变量名 = (子类类型) 父类类型的变量; 如:Student stu = (Student) p;
多态的优缺点
优点:可以提高可维护性(多态前提所保证的),提高代码的可扩展性 缺点:无法直接访问子类特有的成员
4.静态static
静态的特点
被static修饰的成员变量属于类,被所有的对象所共享,不属于这个类的某个对象。
访问静态成员的格式: 类名.静态成员变量名
类名.静态成员方法名(参数)
静态的加载优先于对象,随着类的加载而加载
静态的注意事项
A:静态成员只能直接访问静态成员
B:非静态成员既可以访问非静态成员也可以访问静态成员
A:静态优点:
对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份
可以直接被类名调用,不用在堆内存创建对象
静态成员可以通过类名直接访问,相对创建对象访问成员方便
B:静态弊端:
访问出现局限性。(静态虽好,但只能访问静态)
5.代码块
分类:
1.局部代码块
位置:在方法内部
作用:是用来限制变量的声明周期
2.构造代码块
位置:和构造方法是同级别的,在类中.
作用:提取共有的数据, 可以对成员变量进行初始化.每次创建对象都会执行,并且在构造方法执行之前执行
3.静态代码块
位置:和构造方法是同级别的,在类中方法外. 是被static修饰的.
作用:随着类的加载而加载,只加载一次,加载类时需要做的一些初始化,比如加载驱动(主要作用就是用来加载驱动的)
4.同步代码块(被synchronized修饰的代码块 )
代码块的执行顺序(不包括同步代码块)
先执行 --> 静态代码块
再次执行 --> 构造代码块
再次执行 --> 构造方法
划分就是为了更好的确定和细致化功能,以方便使用
局部代码块:
以”{}”划定的代码区域,此时只需要关注作用域的不同即可 方法和类都是以代码块的方式划定边界的
构造代码块
优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作 每创建一个对象均会执行一次构造代码块。
静态代码块
它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。 该类不管创建多少对象,静态代码块只执行一次。
可用于给静态变量赋值,用来给类进行初始化。
6.final
final:关键字(修饰符).
可以修饰类:类不能被继承 可以修饰方法:方法不能被重写 可以修饰变量:变量是常量,只能被赋值一次,是字面值常量,在常量池
可以修饰引用数据类型,引用数据类型不能改变的是地址值,值可以通过get/set方法改变
final,finally,finalizes
final,finally:是关键字
finally:作用:是用来释放资源
finalizes():是一个方法,当垃圾回收的时候,会调用该方法.