1.JDK 和 JRE 有什么区别?
JDK(Java Development Kit) 是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API)。
JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。
总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
2.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,hashcode就是对象在hash表中对应的位置。而hashcode的值范围比较大,不同的hashcode也会可能在同一个位置,而equals比较的是比较对象的大小。
3.final 在 java 中有什么作用?
final可以用来修饰类,方法,变量
final修饰类,该类不可以被继承
final修饰方法,方法不能被重写
final修饰变量,此时变量变为一个常量
4.java 中的 Math.round(-1.5) 等于多少?
round 表示"四舍五入",算法为Math.floor(x+0.5) ,即将原来的数字加上 0.5 后再向下取整,所以 Math.round(-1.5) 的结果为-1
5.String 属于基础的数据类型吗?
不是,String是一个引用数据类型,String是一个类
6.java 中操作字符串都有哪些类?它们之间有什么区别?
这三个类都是以char[]的形式保存的字符串,但是String类型的字符串是不可变的,对String类型的字符床做修改操作都是相当于重新创建对象.而对StringBuffer和StringBuilder进行增删操作都是对同一个对象做操作.StringBuffer中的方法大部分都使用synchronized关键字修饰,所以StringBuffer是线程安全的,StringBuilder中的方法则没有,线程不安全,但是StringBuilder因为没有使用使用synchronized关键字修饰,所以性能更高
7.String str="i"与 String str=new String("i")一样吗?
不一样,因为内存分配的方式不一样。
String str="i"方式,java虚拟机会将其分配到常量池中;
String str=new String(“i”)方式,则会被分到堆内存中。
8.抽象类必须要有抽象方法吗?
不是,抽象类可以有抽象方法,有抽象方法的类一定是抽想类
9.普通类和抽象类,接口有哪些区别?
普通类可以被实例化,抽象类和接口都不能被实例化,接口没有构造方法。
要使用抽象类需要子类继承抽象类,让子类对象实例化
使用接口需要普通类实现接口中的所有方法,抽象类可以不实现所有接口的方法,由它的子类实现
接口可以继承接口,并可多继承接口,但类只能单继承
10.java 中 IO 流分为几种?
(1)按流向分类:
输入流
输出流
(2)按处理数据不同分类:
字节流
字符流
(3)按功能不同分类:
节点流
处理流
11.final,finalize()和finally{}的不同之处
final是一个修饰符,用于修饰变量,方法和类.如果 final 修饰变量,意味着该变量的值在初始化后不能被改变.finalize()方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会.但是该方法由Finalizer线程调用,但调用时机无法保证.finally是一个关键字,与 try和catch一起用于异常的处理,finally{}一定会被执行
12.static都有哪些用法?
static可以修饰方法和属性,都属于类的静态资源,类实例所共享.内存中只有一个static实例对象
静态方法中只能调用静态的方法和属性,可以通过类.属性来调用
静态方法不能被重写
静态代码块随着类的加载而加载,在类加载一开始就会执行
13.abstract修饰方法
不能修饰私有方法,静态方法,final方法
14.自动装箱与拆箱
装箱:将基本类型用它们对应的引用类型包装起来
拆箱:将包装类型转换为基本数据类型
15.封装,继承
封装的意义:
(1)封装的意义在于保护或者防止代码被我们无意中破坏
(2)保护成员属性,不让类以外的程序直接访问和修改
(3)隐藏方法细节
继承的意义:
(1)主要实现重用代码