目录
两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
java 中的 Math.round(-1.5) 等于多少?
String str="i"与 String str=new String(“i”)一样吗?
-
JDK 和 JRE 有什么区别?
JDK是java development kit,java开发工具包,JDK中包含JRE。
JRE是java runtime environment,java运行时环境。
JDK面向开发人员使用,JRE面向Java程序使用;如果你只需要运行java程序的话,按照JRE就可以了,如果你还要编写java程序,就需要安装JDK了。
-
== 和 equals 的区别是什么?
==判断两个变量或实例内存地址是否相等,equals判断两个变量或实例的值是否相等。
但equals本质是一个方法,最底层是在Object定义的,向Integer、Long这种包装类重写了逻辑,所以会相等;
若没有重写的话,调的是Object的equals。
-
两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不一定,equals是对象的一个方法,如果内部实现不一致是不会相同的。
-
java 中的 Math.round(-1.5) 等于多少?
等于-1,round就是四舍五入,将原值加上0.5后再向下取整就可以了。
-
final 在 java 中有什么作用?
对于class来说,定义成final的class是不能被继承的
对于方法来说,定义成final的方法也是不能被重写的
对于属性来说,定义成final的属性是常量,不能被修改
-
String 属于基础的数据类型吗?
不属于,String是引用类型。
-
java 中操作字符串都有哪些类?它们之间有什么区别?
常用的有String、StringBuffer、StringBuilder
String被final修饰,所有的方法返回new String,即对String修改不会影响到原对象
String可以说是Stringbuffer和StringBuilder的基类,后两者是对String的增强;但StringBuffer对于StringBuilder来说更适用于并发的场景,它在方法上都加了锁来保证线程安全。
-
String str="i"与 String str=new String(“i”)一样吗?
不一样,我们用==比较,得出的结果为false;
首先str = "i"表示将字符串i的内存地址给到str,而new String("i")是将一个对象的内存地址给到str。
-
如何将字符串反转?
通过StringBuilder或StringBuffer的reverse()方法。
-
String 类的常用方法都有那些?
valueOf()
concat()
split()
substring()
equals()
indexOf()
replace()
-
抽象类必须要有抽象方法吗?
不是必须要有抽象方法,抽象类其实和普通的类本质上没有区别,只是可以拥有未实现的抽象方法,来让继承自己的类实现。
它对于普通的类来说不能实例化,即不能构造该类的对象。
-
普通类和抽象类有哪些区别?
类定义上:普通类class className,抽象类abstract class className
方法实现上:普通类的方法都必须要有实现,而抽象类可以只定义不实现
实例化:普通类能够直接实例化,而抽象类不能实例化
方法定义上:普通类可以拥有private方法,而抽象类的抽象方法不能是private,因为抽象方法需要子类实现,若是private的话子类无法实现该方法。
-
抽象类能使用 final 修饰吗?
不能;因为被final修饰的类是不能被继承的,而抽象类中可能包含抽象方法,抽象方法是必须要被重写的,所以不能用final修饰抽象类。
-
接口和抽象类有什么区别?
方法实现:接口只能声明方法,抽象类还可以实现方法。
属性和方法:接口的属性都是public static final的,抽象类可以自己定义;接口的方法都是public abstract的,抽象类也是自己定义的。
承接关系:抽象类是继承,接口是实现
-
java 中 IO 流分为几种?
按照数据的流向分为:input(输入流用于读数据)、output(输出流用于写数据)。
按照流数据的格式分为:字符流、字节流。
常用的有InputStream、OutputStream、Reader、Writer,java中其它各种各样的流均是他们派生出来的。
-
进程和线程的区别
进程:具有一定独立功能的程序,是系统进行资源分配和调度运行的基本单位。
线程:进程的一个实体,是CPU调度的苯单位,也是进程中执行运算的最小单位,即执行处理机调度的基本单位,如果把进程理解为逻辑上操作系统所完成的任务,线程则表示完成该任务的许多可能的子任务之一。
关系:一个进程可有多个线程,至少一个;一个线程只能属于一个进程。同一进程的所有线程共享该进程的所有资源。不同进程的线程间要利用消息通信方式实现同步。
区别:进程有独立的地址空间,而多个线程共享内存;进程具有一个独立功能的程序,线程不能独立运行,必须依存于应用程序中;
-
final,finally,finalize的区别
final:变量、类、方法的修饰符,被final修饰的类不能被继承,变量或方法被final修饰则不能被修改和重写。
finally:异常处理时提供finally块来执行清除操作,不管有没有异常抛出,此处代码都会被执行。如果try语句块中包含return语句,finally语句块是在return之后运行;
finalize:Object类中定义的方法,若子类覆盖了finalize()方法,在在垃圾收集器将对象从内存中清除前,会执行该方法,确定对象是否会被回收。
-
静态内部类
说静态内部类之前,先了解下成员内部类(非静态的内部类)。
成员内部类
成员内部类也是最普通的内部类,它是外围类的一个成员,所以它可以无限制的访问外围类的所有成员属性和方法,尽管是private的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。
在成员内部类中要注意两点:
成员内部类中不能存在任何static的变量和方法;
成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。
静态内部类
静态内部类与非静态内部类之间存在一个最大的区别:非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有。
没有这个引用就意味着:
它的创建是不需要依赖于外围类的。
它不能使用任何外围类的非static成员变量和方法
局部内部类
局部内部类是嵌套在方法和作用于内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。
匿名内部类
1、匿名内部类是没有访问修饰符的。
2、new 匿名内部类,这个类首先是要存在的。
3、当所在方法的形参需要被匿名内部类使用,那么这个形参就必须为final。
4、匿名内部类没有明面上的构造方法,编译器会自动生成一个引用外部类的构造方法。