又到了金三银四招聘季节,今天为大家整理一下java初级面试干货,助大家找到满意的高薪工作。
面向对象与类
java是一门面向对象的语言,什么是面向对象?java中,把一切事物看作是对象(Object),对象是一个具体的东西,它有自己的属性与行为动作。举一个例子,张三是一个具体的对象,他有自己的属性与行为动作,属性包括:姓名、年龄、身高、体重等,动作包括:吃饭、走路、跑步、说话、唱歌等等;李四也是一个具体的对象,他拥有与张三不同的属性,因为每个对象是有差别的,除了张三会的动作外,他还会写作。面向对象编程则是,对这些具体的对象来进行编程,你可以给创建出来的对象赋予一些属性与行为动作,要根据你的业务场景来设计。
什么是类?对象可以有很多个,这些同一类的对象就称作为类(Class),例如张三、李四是具体的对象并且他们是学生身份,那么这一类对象就构成学生类,先有类后有对象,因为要根据类来创建具体的对象。
java三大特征:封装、继承、多态
封装:把对象的属性与方法封装起来,保护对象的安全性。例如:把属性声明为private,那么在new 出对象时,该属性不能被修改,只有声明的get和set方法可以修改,方法亦是如此,这样就可以起到保护对象安全性的作用。
继承:如果有两样同一类事物并且有承上启下的关系,则是属于继承关系。例如:水果和苹果是同一类的东西,然后苹果是水果的一个分类,那么说苹果继承于水果,水果是父类,苹果是子类。子类继承父类,会拥有父类的属性与方法,除此之外,子类还可以拥有更多自己的属性与方法。
多态:继承是多态的基础,有继承关系才存在多态。例如:乐器是一个父类,那么乐器的子类有:钢琴、小提琴、吉他等等,父类乐器有一个共同的方法:play()。钢琴继承的play()方法是发出钢琴声,小提琴继承的play()方法是发出小提琴声,吉他继承的play()方法是发出吉他声,它们都有play()方法,但是方法的实现却是不同,这就叫多态,即同一方法的不同实现。例如(伪代码):
Class Instruments{
play();
}
Class piano extends Instruments{
public play(){
System.out.println("piano play");
}
}
Class guitar extends Instruments{
public play(){
println("guitar play");
}
}
Class test{
public test(Instruments instrument){
instrument.play();
//如果instrument指向piano,则输出piano play
//如果instrument指向guitar,则输出guitar play
}
}
接口和抽象类
实现:抽象类的子类使用 extends 来继承;接口实现用 implements 。
构造函数:抽象类可以有构造函数;接口不能有。
实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
Java8以后,接口也可以有实现的方法,default method。
String、StringBuilder、StringBuffer
String不是java的基本数据类型,它是一个对象并且是final修饰的对象,它的值是不可变的,因为它的值是存储在JVM内存模型中的字符串常量池。但是下面这样的代码也是没问题的,
String s = "123"; //这里s指向字符串常量池中123这个常量
s = "456"; //这里s指向字符串常量池中456这个常量
StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的对象。速度快慢:StringBuilder > StringBuffer > String。
StringBuilder 和 StringBuffer 最大的区别在于 StringBuilder 的方法是线程不安全的,而StringBuffer 则是线程安全的。
java集合类
集合类存放于 Java.util 包中,主要有 3 种:Set、List和 Map。
Collection:集合 List、Set、Queue 的最基本的接口。
Iterator:迭代器,可以通过迭代器遍历集合中的数据。
Map:是映射表的基础接口。
List
ArrayList:长度可变,有序、可重复,查询快、增删慢,因为底层存储用数组,线程不安全。
LinkedList:长度可变,有序、可重复,查询慢、增删快,因为底层存储用双向链表,线程不安全。
Vector:长度可变,有序、可重复,查询快、增删慢,因为底层存储用数组,线程安全但效率低。
Set
HashSet:长度可变,无序、不可重复,查询慢、增删快,因为底层存储用hash表,内部是HashMap。
TreeSet:长度可变,无序、不可重复,底层存储用二叉树,内部是TreeMap的SortedSet。
Map
HashMap:无序、键不可重复,值可重复(覆盖),键值都可以为null,底层存储用hash表,线程不安全。
HashTable:无序、键不可重复,值可重复(覆盖),键值都不可为null,底层存储用hash表,线程安全。
TreeMap:排序、键不可重复,值可重复(覆盖),键值都可以为null,底层存储用二叉树。
最后给大家推荐一本java界的葵花宝典,助大家系统学习,挑战高薪工作!
想学习更多java技术与资讯,请微信搜索公众号:yhjzixun。定时分享更多干货知识与常用开发工具。关注微信公众号发送idea、mysql获取下载链接。