Java基础题(一)

167 阅读4分钟

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)主要实现重用代码