1,JDK,JRE,JVM有什么区别?
JDK:Java Development Kit 是java的开发工具包,封装了基本的常用类,提供了Java的开发环境和运行环境
JRE:Java Runtime Environment 是java的运行环境,运行java程序所需,包含Java虚拟机及一些基础类库
JVM :Java Virtual Machine 是java的虚拟机,提供执行字节码文件的能力
2,Java的基本数据类型有哪些?
boolean、char、short、int、long、float、double、byte八种基本数据类型
String不是基本数据类型,String底层是char数据,本身是一个类,是引用类型
==和equals的区别
==:比较值
比较基本的数据类型,比较的是数值
比较引用类型:比较引用指向的值(地址)
equals:默认比较地址
因为这个方法的最初定义在Object上,默认的实现就是比较地址
String内部是重写过equals方法的所以比较字符串时是比较值是否相同
自定义的类,如果需要比较的是内容,那么就要学String,重写equals方法
4,final的作用
final可以修饰类,属性,方法,变量
修饰类时 代表此类无法继承
修饰属性、变量时 代表值无法更改,即为常量
修饰方法时 代表该方法无法重写
注意:
修饰的是基本数据类型,这个值本身不能修改
修饰的是引用类型,引用的指向不能修改
5,String s = "java"与String s = new String(“java”)
String s = “java”;
String s = new String(“java”);
这两者的内存分配方式是不一样的。
第一种方式,JVM会将其分配到常量池,
而第二种方式是分配到堆内存,
而且创建了两个String对象,一个在常量池中,一个在堆中。
String,StringBuffer,StringBuilder区别
String 跟其他两个类的区别是
String是final类型,每次声明的都是不可变的对象,
所以每次操作都会产生新的String对象,然后将指针指向新的String对象。
StringBuffer,StringBuilder都是在原有对象上进行操作
所以,如果需要经常改变字符串内容,则建议采用这两者。
StringBuffer vs StringBuilder
前者是线程安全的,后者是线程不安全的。
线程不安全性能更高,所以在开发中,优先采用StringBuilder.
StringBuilder > StringBuffer > String
接口和抽象类的区别
接口中只含有抽象方法
JDK1.8之前:
语法:
抽象类:方法可以有抽象的,也可以有非抽象, 有构造器接口:方法都是抽象,属性都是常量,默认有public static final修饰
设计:
抽象类:同一类事物的抽取,比如针对Dao层操作的封装,如,BaseDao,BaseServiceImpl
接口:通常更像是一种标准的制定,定制系统之间对接的标准
JDK1.8之后:
接口里面可以有实现的方法,注意要在方法的声明上加上default或者static
最后区分几个概念:
多继承,多重继承,多实现
多重继承:A->B->C(爷孙三代的关系)多实现:Person implements IRunable,IEatable(符合多项国际化标准)多继承:接口可以多继承,类只支持单继承