JAVA知识点-基础篇-基本功

本文解析了面向对象编程的基础概念,如抽象、封装、继承和多态,以及final、finally和finalize在Java中的区别。重点讲解了final修饰类、方法和变量的作用,finally作为异常统一出口,以及finalize在垃圾回收中的角色和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本功

1.面向对象的特征

面向对象四大特征:抽象、封装、继承、多态。

1.1 抽象

定义:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象,抽象只关注对象的属性和行为,并不关注这些行为具体的细节是干何事的。

抽象的过程:

(1) 研究事物的静态特征(属性)

(2) 研究事物的动态特性(行为)

(3) 形成结果(CLASS)

(4) 类和对象互相转变

eg:以学生为准:

学生有姓名,有年龄,有身份证号,这些都是静态特征,即属性
学生会吃饭,会睡觉,会学习,这些都是动态特征,即行为。

2.封装

定义:封装就是将一些可隐藏的东西都进行隐藏,通过自定义接口的方式进行访问。

2.1 提供构造方法

有个构造方法,才可通过new的方式去构建对象。

空参构造函数是默认存在,方法名称和类名称一样,不可具有返回结果。

当手动创建有参构造函数时,默认的构造函数就不存在了。

2.2 静态块

其初始化工作,在执行new之前。

2.3 控制访问权限

修饰符同一类同一包子类全局
private×××
default××
protected×
public

3.继承

关键词:extends

目的:对父类的方法进行复用

继承是从已有的类得到继承信息创建新类的过程。

继承子类中无需再重复定义属性和行为,直接继承父类,便有了父类的属性和行为。

访问修饰符可觉得是否可继承父类的属性和行为。

4.多态

多态(Polymorphism):是指具有表现多种形态的能力特征.更专业的说法是:同一个实现接口,使用不同的实例而执行不同的操作.

多态的三个条件:

(1)继承的存在(继承事多态的基础,没有继承就没有多态)

(2)子类重写父类的方法(多态下调用子类从写的方法)

(3)父类引用变量指向子类对象(子类到父类的类型转换)

多态是指允许相同或不同子类类型的对象对同一消息做出不同响应。

4.1重载:同一个动作作用在一个对象上拥有不同的解释 overload

重载又称静态多态,编译时多态

4.2重写:同一个动作作用在不同对象拥有不同的解释 override

从写又称动态多态,运行事多态

二、final、finally、finalize的区别

1.final

final可以用来修饰类、方法和变量(成员变量和局部变量)。

1.1修饰类

当final修饰类时,表名该类不可被其他类所继承,当我们需要一个类不被其他类继承时,此时可以用final来修饰。(final类中所有的成员方法都会隐式的定义为final方法)

1.2修饰方法

使用final修饰方法主要的原因:

(1).把方法锁住,已防止继承对其修改。

(2).效率,在早期的java版本中,会将final方法转为内嵌使用。

注意:若父类中的final方法访问权限为private,将导致子类中不能直接继承该方法。因此,此时可以在子类中定义相同方法名的函数,此时不会与重写的final的矛盾,而是在子类中重新的定了了新方法。

1.3修饰变量

final成员变量表示为常量,只能被赋值一次,赋值后其值不再改变。

当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在 后便不能发送变化;如果final修饰的是一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向对象的内容可以发送变化的。

final修饰一个成员变量(属性),必须要显示初始化。

在java中,String被设计成final类,那为什么平时使用时,String的值可以被改变呢?

  字符串常量池是java堆内存中一个特殊的存储区域,当我们建立一个String对象时,假设常量池不存在该字符串,则创建一个,若存在则直接引用已经存在的字符串。当我们对String对象值改变的时候,例如 String a="A"; a="B" 。a是String对象的一个引用(我们这里所说的String对象其实是指字符串常量),当a=“B”执行时,并不是原本String对象("A")发生改变,而是创建一个新的对象("B"),令a引用它。

2.finally 异常的统一出口

2.1不管try块是否异常,也不管哪个catch执行,finally块都会执行

2.2 try块必须和catch块或和finally同在,不可单独存在,二者必须出现一个。

2.3不要在finally中使用return或throw语句,否则将会导致try、catch的return或throw失效。

3.finalize

finalize是java提供的垃圾回收释放内存使用的。

3.1 对象可以不被垃圾回收:java的垃圾回收遵循一个特点,就是能不回收就不回收。只要程序没有达到即将用完的地步,对象占用的对象就不会被释放。如果程序自动结束,而且垃圾回收器没有释放申请的内存会随着程序的正常退出,申请的内存会自动交还给操作系统。

3.2 垃圾回收只回收内存,而且只能回收内存中由java创建对象方式(堆)创建所占用的那一部分对象,无法回收其他资源,比如文件操作的句柄,数据库的连接等等。

3.3 调用垃圾啊回收器(GC)不一定保证垃圾回收器的运行。

3.4尽量避免使用finalize():

        (1)finalize()不一定被调用,因为java的垃圾回收器的特性就决定了它不一定被调用。

(2)就算finalize()函数被调用,它被调用的时间充满了不确定性,因为程序中其他程序的优先级远远高于finalize()函数的线程优先级。也许等到finalize()被调用,数据库的连接池或者文件句柄早就耗尽了。

(3)如果一种未被捕获的异常在使用finalize()方法时被抛出,这个异常不会被捕获,finalize方法的终结过程也会终止,造成对象处于破坏的状态。被破坏的对象又很可能导致部分资源无法被回收,造成浪费。

(4)finalize()和垃圾啊回收器本身就要耗费资源,也许会导致程序暂时停止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值