1、Java基础
1.1Java的优点和特点
1、Java是一门纯粹的面向对象的编程语言,吸收了c++语言中的各种优点且去处理c++中难以理解的多继承指针等概念。
2、Java做到了平台的独立性,可以做到“一次编译,到处运行”。
3、它提供了许多内置的类库,简化了开发人员的工作,缩短了项目开发的时间。
4、最重要的是java提供了垃圾回收器,将开发人员从内存的管理中解脱出来了。
5、它拥有良好的安全性和健壮性,提供了防止恶意代码攻击的安全机制。
6、还可以提供对Web应用技术的开发。
Java为什么可以跨平台?
在运行程序之前,Java源码也就是.java文件需要通过编译器,将源代码编译成字节码文件(.class文件),但是字节码不能直接运行,必须通过JVM将字节码翻译成特定平台的机器码运行程序。跨平台的是java程序,不是JVM,所以需要在不同的平台下安装不同版本的JVM。
1.2 Java 基本数据类型和引用类型
Java的数据类型分为基本数据类型和引用数据类型两大类,基本数据类型又分为八大类,八大类又可以分为四个小类,分别是
其中int是整数类型常用的类型,double是浮点数常用的类型,除了布尔类型之外的其他七种类型可以看作数字类型,他们相互之间可以进行相互的转换。引用类型包括数组、类、接口类型,还有一个特殊的null类型,引用数据类型就是对一个对象的引用,对象包括实例和对象两种。
1.3 抽象类和接口的区别
抽象类
在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:
a、抽象类不能被实例化只能被继承;
b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;
c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;
d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;
e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。
接口:
Java中接口使用interface关键字修饰,特点为:
a、接口可以包含变量、方法;变量被隐士指定为public static final,方法被隐士指定为public abstract(JDK1.8之前);
b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;
c、一个类可以实现多个接口;
d、JDK1.8中对接口增加了新的特性:(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;(2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。
相同点
(1)都不能被实例化 (2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。
不同点
(1)接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。
(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。
(3)接口强调特定功能的实现,而抽象类强调所属关系。
(4)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。
接口和抽象类都是用来定义对象的公共行为的,但二者有以下 7 点不同:
定义的关键字不同。
子类继承或实现关键字不同。
类型扩展不同:抽象类是单继承,而接口是多继承。
方法访问控制符:抽象类无限制,只是抽象类中的抽象方法不能被 private 修饰;而接口有限制,接口默认的是 public 控制符。
属性方法控制符:抽象类无限制,而接口有限制,接口默认的是 public 控制符。
方法实现不同:抽象类中的普通方法必须有实现,抽象方法必须没有实现;而接口中普通方法不能有实现,但在 JDK 8 中的 static 和 defualt 方法必须有实现。
静态代码块的使用不同:抽象类可以有静态代码块,而接口不能有。
1.4 Java的序列化和反序列化
Java的序列化是指将Java对象转换为字节序列的过程;
Java的反序列化就是将字节序列恢复为Java对象的过程;
对象序列化的两种用途:
将对象的字节序列永久的保存在硬盘上,通常存放在一个文件中。
在网络上传对象的字节序列