Java基础面试题—语法篇一

1.Java中的重载与重写有什么区别

方法重载:在一个类中有多个同名方法,但是参数个数或者类型不相同,调用时通过传递给他们不同的参数个数和类型来决定使用哪个方法,重载的时候方法名要一样,参数个数和类型不一样,返回值类型可以一样也可以不一样,不能以返回值类型作为重载函数的区分标准

重载是为了让类以统一的方式处理不同类型数据的一种手段,是一个类中多态性的一种表现

重写:父类与子类间的多态性,是对父类函数的重新定义,如果子类中某方法与父类有相同的的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类,如果需要调用父类中的原方法,则可以使用super关键字

重载与重写是Java多态性的不同表现,重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性),而重载是一个类中的多态性的表现,在编译时起作用(静态多态性)

2.Java中final、finally、finalize的区别

 final是一个修饰符,如果一个类被声明为final,则该类不能再派生出新的子类,所以一个类不能同时被声明为abstract和final,因为被abstract声明该类就是抽象类,抽象类中的抽象方法必须在子类中实现,但是被final声明就不能派生子类;将变量或方法声明为final,可以使它们在使用中不会被改变,但是对于对象变量来说是使其引用不可改变,即不能指向其他的对象,但是对象的值可以改变,被声明为final的变量必须在声明时设置初始值,在后面的引用中只能读取不能修改,被声明为final的方法也同样只能使用不能重载或重写

使用final关键字,如果编译器在编译阶段就能确定某变量的值则编译器就会把该变量作为编译期常量来使用,如果需要在运行时才能确定(比如方法调用),则编译器不会优化相关代码;将变量,方法,类修饰为final可以提高性能,这样JVM有机会就行估计并优化;接口中的变量都是public static final的

finally用来在异常处理时提供块来执行任何清楚操作,如果抛出一个异常,相匹配的catch子句就会执行,然后控制就会进入finally块

在Java中当要把除了内存之外的资源恢复到它们的初始状态时,就要用到finally子句

finalize是一个方法名,Java中允许 使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作,这个方法是在垃圾收集器在确定对象没有被引用时对这个对象调用的,它是在Object类中定义的,因此所有的类都继承了它,子类覆盖finalize()方法以整理系统资源或者执行其他清理工作,finalize()方法在垃圾收集器删除对象之前对这个对象调用的

3.Java中hashCode()的作用

4.抽象类(abstract class)和接口(interface)有什么区别

抽象类:含有abstract修饰符的类为抽象类,抽象类不能创建实例对象,含有抽象方法的类必须用abstract修饰,但是抽象类中的方法不必一定是抽象方法,抽象类中的抽象方法必须在子类中实现,所以不能有抽象构造方法和抽象静态方法,如果子类没有实现抽象父类中所有的抽象方法,则该子类也必须定义为abstract类

接口可以说是抽象类的一种特殊实现,接口中的所有方法都必须是抽象的,接口中的所有方法定义都默认为public abstract,接口中的成员变量类型默认是public static final

区别:

抽象类中可以有构造方法,接口中不能有

抽象类中有普通成员变量或者常量或者静态变量,接口中只能有常量,默认修饰符是public static final

抽象类中可以有非抽象的方法和抽象的方法以及静态方法,接口中只能有抽象方法

抽象类中的抽象方法访问类型可以是public、private、protected的,接口中只能是public的

一个子类可以实现多个接口,但是只能继承一个抽象类

5.static关键字是什么意思?Java中是否可以覆盖一个private或者static修饰的方法?

static关键字表明一个成员变量或者方法可以在没有所属类的实例变量的情况下被访问,通俗讲就是可以不创建对象直接使用类名就可以访问

Java中static修饰的方法不能被覆盖,方法覆盖即方法重写是基于运行时动态绑定的,而static是编译时静态绑定的,

注意:静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的静态方法和静态变量都可以通过对象访问(只要访问权限足够)

6.是否可以在static环境中访问非static变量

不可以

因为static是属于类的,在类加载的时候就会被初始化,而这时候非static变量还没有加载,所以不能访问

7.Java支持的数据类型有哪些?什么是自动拆装箱

8中基本数据类型:

byte

short

int

long

float

double

boolean

char

自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间的一种转换;比如int转为Integer,double转为double;反之就是自动拆箱

8.Java支持多继承吗?

不支持,Java中每个类只能继承一个类,但是可以实现多个接口

9.在Java中,什么是构造函数,构造函数重载,复制构造函数

每一个类都有自己的构造函数,当新对象被创建的时候,构造函数就会被调用,如果没有提供构造函数,Java编译器会给这个类创建一个默认的构造函数

构造函数重载和方法重载很相似,可以为每一个类创建多个构造函数,每一个构造函数都有它自己的参数列表

Java中没有复制构造函数,Java不会创建默认的复制构造函数

10.什么是值传递和引用传递

值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。 一般认为,java内的传递都是值传递, java中实例对象的传递是引用传递 

11.JDK和JRE的区别是什么?

Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE、编译器和其他工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序  

12.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"?

Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件

Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个成为可能,因为它知道底层硬件平台的指令长度和其他特性

猜你喜欢

转载自blog.csdn.net/ys_230014/article/details/87876989