[Java常考面试题-牛客网] 第1-10题

转载请注明出处


第1题:什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

Java虚拟机JVM(java virtual machine)是一个运行字节码的程序。Java写的代码保存为后缀为.java的文件,它会被特定的程序(javac.exe)编译,编译之后称为字节码文件(bytecode,后缀为.class),字节码在CPU上不能直接运行,需要另一个程序读取并运行,这个程序就是JVM。


同一个.java源程序 生成的字节码文件(.class)都是一样的。而对于同一条指令,不同机器上面的机器码是不一样的。比如,读命令在A机器上是001,而B机器上面是010。JVM做的事情就是把字节码文件翻译成当前机器能够正确执行的机器码。

不同机器用它所兼容的JVM,所以实现了所谓的“与平台无关”。


第2题:JDK和JRE的区别是什么?

JRE(Java Runtime Environment):Java运行环境。只包含了Java虚拟机、Java核心类库 和 支持文件。


JDK(Java Development Kit):Java开发工具包 是 完整的Java软件开发包,包含了JRE,编译器(javac.exe) 和 其他的工具(比如:JavaDoc, Java调试器)。


第3题:”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

static表示静态的意思。它可以修饰一个成员变量或者成员方法,这样的话,该变量或方法可以在没有类的实例变量之下通过“类名.变量名”或者“类名.方法名”进行访问。

static方法不能被覆盖。static方法是编译时静态绑定的,而方法覆盖是运行时动态绑定的。

private方法也不能被覆盖。private描述的方法只能在当前类中使用。


第4题:是否可以在static环境中访问非static变量?

否。因为static环境比非static变量更早初始化,所以static环境开始使用的时候,非static变量还没被创建出来,所以不能访问,编译器会报错。


第5题:Java支持的数据类型有哪些?什么是自动拆装箱?

Java支持2种数据类型:

1. 基本数据类型(8种)。byte, short, int, long, float, double, boolean, char

2. 引用类型。             Byte,Short,Integer,Long,Float,Double,Boolean,Character

引用类型是 保存的对象的地址,然后通过地址找到堆中的对象。String等也是引用类型。


自动拆装箱:在特定情况下,例如给某个方法传递参数时,基本数据 和 引用类型能够相互转换(如int-->Integer)

例如:

Integer value = 10;//java5之后可以这样自动装箱。把10这个int类型的值复制为引用类型的Integer对象。

//相当于java5之前的 Integer value = new Integer(10);


int i = value;//这样就是自动拆箱。


第6题:Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?

覆盖是 子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。(加上@override可以让编译器验证当前方法是否也存在于父类中,写错方法名,编译器就会报错)

重载是在同一个类里面的方法,这些方法的名字相同,但参数不同,返回类型可以相同也可以不同。每个重载的方法都要有一个独一无二的参数类型列表(根据参数列表来区分的)。


第7题Java中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?

构造方法:用于新对象创建时构造这个对象的方法(方法名和类名相同)。如果程序员没有提供这个类的构造方法,Java编译器会给这个类创建一个默认的构造方法。

构造方法重载:当前重载的方法是构造方法(也就是和类名相同的方法,不同的构造方法通过参数列表来区分)。

复制构造方法:用一个已经实例化的对象来初始化(new)一个对象。(Java不像C++那样提供默认的复制构造方法)


例如,

public class Time{

    private int hour;

    private int minute;

    private int second;

    public Time(){ //构造方法

    }

    public Time(int h, int m, int s){//构造方法重载

        this.hour = h;

        this.minute = m;

        this.second = s;

    }

    public Time(Time t){ //复制构造方法

        this.hour = t.hour;

        this.minute = t.m;

        this.second = t.s;

    }

}


第8题:Java支持多继承吗?

Java不支持多继承,只有单继承。但可以通过实现多个接口来拓展相应的功能。


第9题:接口和抽象类的区别是什么?

接口

抽象类

隐含的方法都是抽象的

可以同时包含抽象方法和非抽象方法

类可以实现多个接口

类只能继承一个抽象类

声明的变量默认是final的

可以包含final的变量

成员函数默认是public的

成员函数可以是private, protected, 或者public

类可以不实现抽象类和接口声明的所有方法,但类必须得声明成是抽象的。

接口和抽象类都不能被实例化。


第10题:什么是值传递和引用传递?

值传递是对基本型变量而言的。传递的是变量的副本,改变副本不会改变原变量的值。

引用传递是对 对象型变量而言的。传递的是对象的地址的副本,改变这个副本(地址)的对应的对象(就是原来的对象) 会改变原来对象 的值。

关于java一切都是值传递的理解:引用传递 传递 的值是对象的地址的值 的 副本


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值