static与final区别,为什么Java类实现Serializable接口,Java序列化定义作用,怎么实现序列化,内部类定义作用,Excption与Error包结构

文章讨论了Java编程中的关键概念,包括static和final关键字的区别,实现Serializable接口的目的是为了网络传输和持久化,Java序列化是将对象状态转换为字节流的过程,常用于存储或网络传输。内部类分为成员、局部、匿名和静态类型,各有不同的应用场景。异常处理方面,文章区分了运行时异常、被检查异常和错误,解释了它们在Java程序中的角色和处理方式。

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

1.static和final的区别?

image-20230220181144811

2.为什么有些java类要实现Serializable接口?

为了网络进行传输或者持久化

什么是序列化

将对象的状态信息转换为可以存储或传输的形式的过程

除了实现Serializable接口还有什么序列化方式

  • Json序列化

  • FastJson序列化

  • ProtoBuff序列化

3.什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。

我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,

要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java

对象变成某个格式的字节流再传输。

但是,jre本身就提供了这种支持,我们可以调用 OutputStream 的 writeObject 方法来做,如果要让

java帮我们做,要被传输的对象必须实现 serializable 接口,这样,javac编译时就会进行特殊处理,

编译的类才可以被 writeObject 方法操作,这就是所谓的序列化。需要被序列化的类必须实现

Serializable 接口,该接口是一个mini接口,其中没有需要实现方法,implements Serializable只是

为了标注该对象是可被序列化的。

例如,在web开发中,如果对象被保存在了Session中,tomcat在重启时要把Session对象序列化到硬

盘,这个对象就必须实现Serializable接口。如果对象要经过分布式系统进行网络传输,被传输的对象就

必须实现Serializable接口。

4.什么是内部类?内部类的作用

内部类的定义

将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。

内部类的作用:

1、成员内部类 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态

成员)。 当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问

的是成员内部类的成员。

2、局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局

部内部类的访问仅限于方法内或者该作用域内。

3、匿名内部类 匿名内部类就是没有名字的内部类

4、静态内部类 指被声明为static的内部类,他可以不依赖内部类而实例,而通常的内部类需要实例化外

部类,从而实例化。静态内部类不可以有与外部类有相同的类名。不能访问外部类的普通成员变量,但

是可以访问静态成员变量和静态方法(包括私有类型) 一个 静态内部类去掉static 就是成员内部类,他

可以自由的引用外部类的属性和方法,无论是静态还是非静态。但是不可以有静态属性和方法

5.Excption与Error包结构

Java可抛出(Throwable)的结构分为三种类型:被检查的异常(CheckedException)**,**运行时异常

(RuntimeException)错误(Error)

1、运行时异常

**定义:**RuntimeException及其子类都被称为运行时异常。

**特点:**Java编译器不会检查它。也就是说,当程序中可能出现这类异常时,倘若既"没有通过throws声明抛出它",也"没有用try-catch语句捕获它",还是会编译通过。例如,除数为零时产生的ArithmeticException异常,数组越界时产生的IndexOutOfBoundsException异常,fail-fast机制产生的ConcurrentModificationException异常(java.util包下面的所有的集合类都是快速失败的,“快速失败”也就是fail-fast,它是Java集合的一种错误检测机制。当多个线程对集合进行结构上的改变的操作时,有可能会产生fail-fast机制。记住是有可能,而不是一定。例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出 ConcurrentModificationException 异常,从而产生fail-fast机制,这个错叫并发修改异常。Fail-safe,java.util.concurrent包下面的所有的类都是安全失败的,在遍历过程中,如果已经遍历的数组上的内容变化了,迭代器不会抛出ConcurrentModificationException异常。如果未遍历的数组上的内容发生了变化,则有可能反映到迭代过程中。这就是ConcurrentHashMap迭代器弱一致的表现。ConcurrentHashMap的弱一致性主要是为了提升效率,是一致性与效率之间的一种权衡。要成为强一致性,就得到处使用锁,甚至是全局锁,这就与Hashtable和同步的HashMap一样了。)等,都属于运行时异常。

常见的五种运行时异常:

  • ClassCastException (类转换异常)

  • IndexOutOfBoundsException (数组越界)

  • NullPointerException (空指针异常)

  • ArrayStoreException (数据存储异常,操作数组是类型不一致)

  • BufferOverflowException 参考这位博主的博客

2、被检查异常

**定义:**Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于被检查异

常。

特点 : Java编译器会检查它。 此类异常,要么通过throws进行声明抛出,要么通过try-catch进行捕获处理,否则不能通过编译。例如,CloneNotSupportedException就属于被检查异常。

当通过clone()接口去克隆一个对象,而该对象对应的类没有实现Cloneable接口,就会抛出CloneNotSupportedException异常。被检查异常通常都是可以恢复的。 如:

  • IOException

  • FileNotFoundException

  • SQLException

被检查的异常适用于那些不是因程序引起的错误情况,比如:读取文件时文件不存在引发的

FileNotFoundException 。然而,不被检查的异常通常都是由于糟糕的编程引起的,比如:在对象引

用时没有确保对象非空而引起的 NullPointerException 。

3、错误

定义 : Error类及其子类。

特点 : 和运行时异常一样,编译器也不会对错误进行检查。

当资源不足、约束失败、或是其它程序无法继续运行的条件发生时,就产生错误。程序本身无法修复这些错误的。例如,VirtualMachineError就属于错误。出现这种错误会导致程序终止运行。OutOfMemoryError、ThreadDeath。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小熊佩萁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值