第一组
1,Java有哪些基本数据类型,对应的包装类型有哪些, 为什么需要包装类?
byte | Byte |
---|---|
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
基本数据类型不具备方法去使用,如果想通过基本数据类型来转换,不太方便,所以引出了包装类
2,Java的访问修饰符及特点
private:私有的,同一个类中可以被调用,不能用来修饰类
default:默认的,类的同一个包下都可以调用,可以修饰类,变量,方法
protected:受保护的,类的同一个包下面都可以调用,可以修饰类,变量,方法
public:公共的,所有位置都可以被调用
3,final关键字的用法
final表示最终的,可以用来修饰类,变量,方法
final修饰类,不能被继承
final修饰变量,变量不能被重新赋值,final修饰的是常量,一般final修饰的变量都需要指定初始值
final修饰方法,方法不能被重写
4,static关键字的用法
static是静态的意思,用来修饰类的变量和方法
被static修饰的变量叫类变量,被static修饰的方法叫类方法,static也可以修饰代码块
static修饰变量
(1)static修饰的属性是可以共享的
(2)如果所有对象有一个共同属性值的变量,可将其定义为静态的,用来节约空间
static修饰方法
(1)随着类的加载而加载
(2)只有静态成员变量和静态方法
static修饰的代码块叫静态代码块
(1)在类加载时自动执行
(2)只执行一次
(3)可用于异常处理
5,什么是里氏代换原则
所有引用父类的地方对于子类来说都是透明的,子类都可以访问父类所有位置,并且如果替换成子类也不会出现异常或者错误
但是反过来就不行,子类到达的地方,父类不一定能达到。
第二组
1, == 和 equals()方法的区别
==可以用来比较基本类型和引用类型
用来比较基本类型的时候比较的是值
用来比较引用类型的时候比较的是对象的地址值
.equals()是Object中的方法,一般用来比较对象是否相同,想实现效果必须进行重写
2,什么是封装以及封装的好处
封装:是对象的一种隐藏技术,目的是将对象的属性和方法组织起来同时隐藏,不想把属性和方法的实现细节暴露出来,用户和其他对象看不到,也不能对其进行修改,将来只有通过指定的接口去调用对象的方法,才能达到通信的目的。通过private
封装的好处: 将设计者和使用者分开,不会暴露属性及实现的方法,用户不需要知道实现的细节,只需要设计者提供方法来访问对象就行了
3,什么是继承以及继承的好处
继承: 多个类中,相同成员提取出来,定义到一个独立的类中,让当前类和独立类产生关系,使当前类具有独立类的内容
写法是:class 子类 extends 父类{}
继承的好处:提高代码的复用率,提高代码的维护性
让类与类之间产生关系,是学习多态的前提
4,什么是多态,多态的特点,多态的转型
多态:一个对象,在不同时刻体现出来的不同状态。
写法是:父类 对象名 = new 子类();
多态的特点:有继承或者实现关系,有方法的重写,有父类或者父接口的引用指向子类对象
多态的转型:向上转型,把子类对象看成是父类对象
写法:Fu f = new Zi();它一定是安全的
向下转型,把父类对象还原成子类对象,完成子类特有方法的调用
写法:Zi zi = (Zi)f;它不一定安全,转换的前提是父类对象必须指向子类对象
5,方法重载和重写的区别
重载是同一个类中,根据参数的类型,个数和顺序,定义多个同名但是签名不同的方法,他的方法可以有不同的返回值类型,重载经常提供相似但功能不同的操作
重写是在继承关系中,子类重新定义父类已有的方法,要求方法名,参数列表,返回类型完全相同,通过重写,子类可以改变父类方法的实现,从而实现自身特有的行为
重载是同一个类中根据参数的不同定义多个同名的方法,用于提供相似但功能不同的操作
重写是子类重新定义父类方法,用来改变自身的实现方法
第三组
1,成员变量和局部变量的区别
声明位置不同:
成员变量:类中,方法外
局部变量:类中,方法内
初始值不同:
成员变量:可以不同赋值,系统默认给初始值
局部变量:使用前必须赋值
内存位置不同:
成员变量:堆
局部变量:栈
生命周期不同:
成员变量:随着对象的创建而存在,对象的消失而消失
局部变量:随着方法的调用而存在,方法调用结束而消失
2,this关键字的用法
this.属性名:调用当前对象的属性
this.方法名:调用当前对象的方法
this():调用当前类的无参构造
this(参数):调用当前类的有参构造
3,super关键字的用法
super.父类属性名:调用父类的属性
super.父类方法名:调用父类的方法
super():调用父类的无参构造函数
super(参数):调用父类的有参构造函数
4,什么是构造函数?构造函数的特点
构造函数:在使用new关键词,创建类的对象时,调用的这个方法
构造函数特点:没有返回值,
名称必须与类名相同,
参数可以是0,1,或多个,
需要搭配new一起使用
创建类后,系统默认一个无参构造
5,抽象类 和 接口的区别
接口:总纲,起主导地位
抽象类:模板式设计,不起主导地位
第四组
1,什么是自动装箱和自动拆箱
自动装箱:将基本类型的值,直接赋值给对应的包装类对象。
自动拆箱:将包装类型的对象,直接赋值给对应基本类型变量
2,常见的5个运行时异常
NullPointerException(空指针异常)
ArrayIndexOutOfBoundsException(数组越界异常)
ClassCastException(类转换异常)
IllegalArgumentException(非法参数异常)
ArithmeticException(算术异常)
3,throw和throws区别
throw声明在方法内
throws声明在方法体中
throw抛出一个具体的异常类型
throws声明一个方法可能抛出的所有异常信息,表示将来异常的一种可能性,但并不一定发生异常
throw需要用户自己捕获相关异常,然后再对其处理,最后将异常信息抛出
throws通常不需要显式的捕获异常,由系统自动将异常抛给上级方法
4,final、finally、finalize 三个的区别
final 是一个修饰符,用于修饰类、方法和变量,分别表示不可继承、不可重写和不可修改。
finally 是一个关键字,用于定义在异常处理中一定会被执行的代码块。
finalize 是 Object 类的一个方法,用于对象的垃圾回收前的清理操作,
5,String和StringBuffer、StringBuilder的区别
String声明的字符不可变,可以看做是字符串常量,String的内容一旦改变,引用就改变了,可以看成是一个新的引用,所以,String类型做字符串拼接,比较耗时
StringBuffer称为字符串缓冲区,提供了一些方法,可以改变该缓冲区中的数据,但是对应的引用没有改变,相对来说StringBuffer效率更快
StringBuffer和StringBuilder ,他们都是字符串缓冲区,只不过StringBuffer的方法多了一个 synchronized关键字,它是线程安全的。多线程情况下,用StringBuffer,单线程就用StringBuilder
第五组
1,常见的数据结构及特点
栈: 先进后出
队列:先进先出
数组:查询速度快,增删速度慢
链表:查询速度慢,增删速度快
树: 每个节点都有0个或多个子节点
没有父节点的节点叫做根节点
每一个非父节点,有且仅有一个父节点
除了根节点,每个子节点都可以分为多个不相交的子树
查询和增删都很快
2,Collection的体系结构
3,List集合的特点,Map的特点
List接口是Collection接口的子接口,表示有序的序列,可以通过索引访问到List中的元素
List中可以存放 重复的元素 ,并且可以存放null,存放多个null
List接口中提供了 ListIterator,除了实现Iterator接口中的往后遍历的方法,还写了往前遍历的方法
Map一次存储两个元素,一个是key(键),一个是value(值)
Map中的key(键)是唯一的,
Map中的value(值)是可以重复的,可以有null值
4,ArrayList的特点
ArrayList 底层是一个数组,具有数组的优点:查询更新速度快,增加删除慢
可以存放null,多个null
ArrayList 默认的初一个object空数组,初始值是10,随着元素的不断添加,该数组会扩充为原来数组长度的1.5倍
适合频繁进行查询时使用
数组长度不可变但是集合长度可变
线程是不安全的
5,HashMap的特点
键值对存储
快速查询
无序存储
不允许键重复
允许存放空键和空值
非线程安全
容量可调
迭代顺序不确定