> 文章列表 > java面试准备1

java面试准备1

java面试准备1

JVM、JRE和JDK的关系

JVM:Java Virtual Machine是java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此java可以实现跨平台使用。
JRE:Java Runtion Envirement包括Java虚拟机和Java程序所需要的核心类库等。
JDK:Java Development Kit是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。

强类型语言和弱类型语言

强类型语言:一旦某个变量被定义类型,如果不经过强制转换,则它永远是该类型,强类型包括Java、.net、Python、C++等。
弱类型语言:该变量可以根据环境变化自动进行转换。包括vb、PHP、javascript等。

最有效的方法计算2乘以8

2 << 3(左移三位相当于乘以2的3次方,右移三位相当于除以2的三次方)

Math.round()

四舍五入的原理是在参数上加0.5然后进行下取整。

final有什么用

用于修饰类、属性和方法;
被final修饰的类不可以被继承
被final修饰的方法不可以被重写
被final修饰的变量不可以被改变,被final修饰的不可变的是变量的引用,而不是引用指向的内容。

在java中,如何跳出当前的多重嵌套循环

可以在外面的循环语句之前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环。

多态性

定义:父类或者接口定义的引用变量可以指向子类或子类或具体实现类的实例对象,提高了对象的课拓展性。
在Java中有两种形态可以实现多态:继承(多个子类对同一方法进行重写)和接口(实现接口并且覆盖接口中同一方法)

方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(overide)实现的是运行时的多态性(也称为后绑定)。

float f = 3.4是否正确

不正确,3.4是双精度数(java默认不带F的都为双精度数),将双精度值赋值给浮点型(float)属于下转型,会造成精度确实,因此㤇强制类型转换float f = (float)3.4,或者写成float f = 3.4F;

short s1 = 1;s1 = s1 + 1;有错吗?short s1 = 1;s1 += 1;有错吗

对于short s1 = 1; s1=s1+1;由于1是整型,因此s1+1运算结果也是int型,需要强制类型转换才能赋值给short型。而short s1 = 1; s1 +=1可以正确编译,因为s1 +=1相当于s1 =(short(s1+1));其中有隐含的强制类型转换。

在java中定义一个不做事且没有参数的构造方法的作用

Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类找那中没有参数的构造方法。因此,如果父类中定义了有参数的构造方法,而在子类中又没有用super()来调用该方法,则编译时将发生错误,因为java程序在父类中找不到没有参数的构造方法可以供执行,解决方法是在父类中加上一个不做事且没有参数的构造方法。

在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?

帮助子类做初始化工作。

静态变量与实例变量的区别

静态变量:静态变量由于不属于任何实例对象,属于类,所以在内存之中只有一份,在类的加载过程中,JVM只会为静态变量分配一次内存空间。
实例变量:每次创建对象,都会为每个对象分配成员变量内存空间,实例变量时属于实例对象的,在内存中,创建几次对象,就会有几份成员变量。

==和equals的区别是什么

==:它的作用是判断两个对象的地址是不相等的。即,判断两个对象是不是同一个对象。(基本数据类型==比较的值,引用数据类型比较的内存地址)
equals:它的作用也是判断两个对象是否相等。但它一般有两种使用情况:情况1:类没有覆盖equals()方法。则此时通过equals()比较该类的两个对象时,等价于==。
情况2:类覆盖了equals()方法。一般,我们都覆盖equals()方法类判断连个对象的内容是否相等。

hashCode()介绍

hashCode()的作用是获取哈希码,也被称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode()定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode()函数。
散列表存储的是键值对(key-value),它的特点是:能够通过键快速地检索出对应的值。这其中就用到了散列码。

为什么要有HashCode

当你把对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也将与其他加入的对象的hashcode值做比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同的hashcode值的对象,这时会调用equals()方法来检查hashcode相等的对象是否真的相同,如果两者相同,HashSet就不会让其操作成功。如果不同,则会重新散列到其他位置。