Learn && Live
虚度年华浮萍于世,勤学善思至死不渝
前言
Hey,欢迎阅读Connor学Java系列,这个系列记录了我的Java基础知识学习、复盘过程,欢迎各位大佬阅读斧正!原创不易,转载请注明出处:http://t.csdn.cn/OEmmz,话不多说我们马上开始!
1.浅克隆和深克隆的区别?
(1)浅克隆:拷贝对象和原对象的引用指向同一对象。浅克隆只是复制了引用地址,指向的是同一个内存地址,所以修改其中一个的值,另一个值也会随之变化
(2)深克隆:拷贝对象和原对象的引用指向不同对象。深克隆将对象及值整个复制过来,生成一个完全一样的新对象,此时修改其中一个的值,另一个值不会变化
2.什么是序列化?
序列化是一个用于将对象状态转换为字节流的过程,用于解决对象流进行读写操作时所引发的问题。可以将其保存到磁盘文件中或通过网络发送到其他程序。从字节流创建对象的相反的过程称为反序列化。
创建的字节流是与平台无关的,在一个平台上序列化的对象可以在不同的平台上反序列化
3.什么情况下需要序列化?
(1)将内存中的对象状态保存到一个文件中或数据库中
(2)使用套接字在网络上传送对象
(3)通过RMI(远程方法调用)传输对象
4.介绍一下内部类?
内部类可分为成员内部类和局部内部类
(1)成员内部类,顾名思义,即可以看作是外部类的成员,也拥有类本身的性质。
作为一个类,可以:①使用final、abstract修饰;②拥有自己的属性、构造器、方法。
作为一个成员:①可以用static、权限修饰符修饰;②可以调用外部类的属性方法:外部类.this.XXX
(2)局部内部类,定义在方法内、代码块内、构造器内的内部类
①可用于一个返回特有类型的方法中,可用匿名实现类的匿名对象代替
②在局部内部类中调用方法内的局部变量,这个局部变量需要final修饰(JDK7必须显式定义,JDK8后可省略,默认final)例如,在Android监听器内引用局部变量。这里的原因很简单,内部类作为一种特殊的类,在编译时会单独生成一个自己的.class文件,此时想要调用外部类.class文件中一个局部变量,显然无法直接调用,因此声明为final,可以在编译时拷贝一份到内部类的.class文件中,自然也无法修改这个局部变量的值
5.介绍一下Java中的代码块?
代码块分为静态代码块和非静态代码块,可用于初始化类、对象
静态代码块
(1)随着类的加载而执行,仅执行一次
(2)可用于初始化类的信息
(3)可定义多个,按声明顺序执行
(4)只能调用静态属性、方法
非静态代码块
(1)随对象的创建而执行,创建一个执行一次
(2)可用于初始化对象的属性
(3)可定义多个,按声明顺序执行
(4)所有属性、方法均可调用
属性赋值顺序
(1)默认初始化
(2)静态代码块(仅一次)
(3)显式初始化 / 非静态代码块(按声明顺序)
(4)构造器
(5)对象调用
举个栗子