1.java都有那些数据类型
基本数据:byte、short、int、long、char、float、double、boolean
引用数据:类、接口、数组
2.java语言的几大特性
封装:将对象的属性和行为结合为一个独立的整体,别人可以使用我提供的功能,但不知道我是怎么实现的,提高安全性
继承:子类继承父类的数据属性和行为,并且自己可以拓展出新的功能,提供代码复用性
多态:同一个行为的不同表现形式,同一个接口,使用的实例不同,执行不同的操作
存在条件:继承,重写,父类引用指向子类对象
方法重载:编译时的多态性,方法重写:运行时的多态性
实现多态:
1.方法重写,子类重写父类已有的或抽象的方法
2.对象造型,用父类引用子类对象,调用同样的方法就会根据子类对象不同而表现出不同的行为。
3.java的权限修饰符
四种:public,protected,default,private
加在哪些地方:类,方法,成员变量
特点:
public:公共的,任意位置都能访问
protected:当前类、同一个包下、子类都能访问,其他包不能访问
default:当前类,同一个包下可访问,其他包和子类不能访问
private:私有的,只能在当前类访问
4.什么是重写和重载
重写:发生在父子类中,方法名,参数列表必须相同
重载:发生在同一类中,方法名必须相同,参数类型不同,个数不同,顺序不同,返回值和修饰符可以不同
5.final关键字能加在哪些地方
属性:属性不可变
方法:方法不可变
类:不可以被继承
数据:一个数据只能进行一次赋值操作,不能修改
6.static关键字能加在哪些地方,分别代表什么
成员变量:变成静态变量,该类的所有实例都将共享此变量
方法:静态方法,类加载后,可直接调用,不用实例化
代码块:类加载是会执行代码块
7.接口中可以有哪些成员,接口和抽象类有什么区别
接口:
接口类中,成员变量必须是常量,也就是final修饰的
接口中的默认方法都是public abstract 抽象的
抽象类:
和普通类一样,多了个抽象方法
区别:
1.接口中不可以定义构造器;抽象类可以
2.接口中方法全部是抽象方法;抽象类可以有抽象方法和具体方法
3.接口中的成员都是public的;抽象类任意一种都可以
4.接口中的成员变量被final修饰,都是常量;抽象类可以定义成员变量
5.接口中不能有静态方法;抽象类可以有
6.一个类可以实现多个接口;一个类只能继承一个抽象类
8.java中的异常体系是什么?运行时异常和编译异常有什么区别
异常体系:
throwable类是所有异常和错误的父类
两个直接子类分别是error和exception,表示错误和异常
异常类exception又分为运行时异常和编译时异常
错误:运行中程序出现了无法处理的错误
运行时异常和编译时异常的区别:
异常:程序本身可以捕获处理的异常
运行时异常:属于不可查异常,在程序处理中可以选择处理也可以不处理
编译时异常:编译时必须处理,不然编译不通过,可以捕获可以抛出
常见的运行时异常有:NUllPointerException(空指针异常)、ClassNotFoundException(类 不存在)、ArrayIndexOutOfBoundsException(数组下标越界)、NoSuchMethodError(方 法不存在)、IndexOutOfBoundsException(索引越界异常)、NumberFormatException(数据转换异常)、SQLException(sql语句执行异常)、ClassCastException(类转换异常)
9.==和equals的区别
==:
是运算符,比较基本类型,比较值是否相等;比较引用类型,比较对象的地址值
equals:
是方法,用来比较两个对象的内容是否相等;不能用于基本数据类型的变量,如果没有重写该方法,比较的变量指向对象的地址值
10.&与&&、|与||的区别
&:左右两边都为true,表达式的值才是true
&&:如果左边为false,右边会直接短路,不会进行运算,整个表达式就是false
|:左右两边只要一个为true,整个都为true
||:如果左边的为true,右边直接短路,不会进行运算,整个表达式就是true
11.string本身可以改变吗
不可以
字符串内部其实就是一个使用final关键字定义的char[]数组,数组长度一旦声明不可改变
字符串一旦声明则不可改变,变的只是引用变量所指向的对象
12,stringbuffer和stringbuild区别
stringbuffer是线程安全的,适用于多线程在字符缓冲区进行大量操作
stringbuild是线程不安全,效率更高,单线程
13.valueof和toString的区别
toString()返回的是字符串,而valueof()返回的是原始值,没有原始值返回对象本身
toString:值为空,会抛出空指针异常
valueof:会对转换对象进行非空判断,null则返回null,不抛出异常
14.使用+号拼接效率高吗
不高
大量字符用+号进行拼接,每次拼接都会创建一个Stringbuilder对象,时间空间开销太大
可以使用stringbuilder中的append方法代替,append方法其实是创建了一个新的数组,将添加字符串给复制到新的数组中
15.创建一个类的实例有哪些方法
1.new关键字。工厂模式是对这种方式的包装
2.类实现克隆接口,克隆实例
3.用类的加载器,newinsatnce
4.sun.misc.unsafe类,allocateInsatance
5.实现序列化接口的类,通过io流反序列化读取一个类,获得实例