栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java面试题详细版

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java面试题详细版

一、Java 基础

1解释下什么是面向对象?面向对象和面向过程的区别?

面向对象是以数据为中心,而面向过程以功能为中心

面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些问题一步一步的实现,然后再
使用的时候依次调用就可以了。(简单来说就是每个方法看做一个过程)
列如
放衣服(方法)-人加衣服(方法)-清洗(方法)

面向对象:就是把构成问题的事物分解成各个对象,构建对象的目的不是来完成一个步骤的 ,而
是为了描述某个事物在解决整个问题的步骤中的行为。(简单来说就是执行自己的方法 问题得到解决)
列如
new出二个对象 人和洗衣机

人加入属性跟方法
洗衣机加入属性和方法
执行
人. 放衣服-人.加洗衣粉(方法) - 洗衣机.漂洗(方法)-洗衣机.甩干(方法)

面向对象:基于对象,方法是类
面向过程: 基于算法,方法是 函数/过程
面向对象的三个基本特征是:封装、继承、多态

2. 面向对象的三大特性?分别解释下?

有封装、继承、多态。

封装是指在一个类中,将属性隐藏起来,只给外界提供公共的访问方式,这样隐藏了事务的事现
细节、提高了代码的复用性和安全性;

继承是指发生在两个类之间,一个类继承另一个类是说这个类属于另一个类,具有另一个类的所
有属性和方法,父类的私有的属性子类无法直接使用,子类无法继承父类的构造方法,但可以调
用,同时它还可以有另一个类不具备的方法和属性;

多态是指建立在继承的基础上的,一般是父类指向子类或者接口指向实现类,一个父类对象可以产生多个不同的子类对象,根据这些子类对象的不同可以具备不同的方法,也就是说表现出了不同的形态即多态。
多态中的成员变量访问原则是:编译的时候看父类有没有,运行的时候使用的是父类的成员变量值;
成员方法的访问原则是:编译的时候看父类有没有,运行的 时候看子类使
用子类的方法。

补充

接口和抽象类的区别:
1.接口的方法默认为public abstract ,接口中的变量默认为public static final,在java8之前所有的方法不能有实现
抽象类中可以有非抽象方法
2.一个类可以实现多个接口,但只能继承一个抽象类
3.一个类实现接口,要实现该接口的所有抽象方法。
4.接口不能被实例化,但可以声明,但是必须引用一个实现该接口的对象。
抽象类可以有构造方法,但是不能被直接通过new进行实例化。但可以通过子类继承,实例化子类的时候抽象类也会被实例化。
这其实用到了多态,向上转型。父类引用指向子类对象。
5.从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范

3. JDK、JRE、JVM 三者之间的关系?

Jvm 是 java 虚拟机,是运行所有 java 程序的家乡计算机,是 java 程序的运行环境,我们写的 java
程序都运行在 jvm 上;

Jre 是 java 程序的运行时环境,包含 jvm 和运行时所需要的核心类库;

Jdk 是 java 程序开发工具包,包含 Jre 和一些开发工具,例如 javac.exe 就是 java 的编译器和
javadoc.exe 可以自动生成代码的说明文档;

三者关系就是:jre 包含了运行类库和 jvm,jdk 包含了开发工具和 jre

4. 平台无关性如何实现

Java 源文件首先会被编译成字节码,再由不同平台的 JVM 进行解析,java 语言在不同平台运行时不需要进行重新编译,java 虚拟机在执行字节码的时候,把字节码转化成平台上的机器指令

6. 重载和重写的区别? (Override 和 Overload)*

重载: 发生在同一个类中,方法名必须相同,参数类型不同或个数不同,方法返回值和访问修饰符可以不同,发生在编译时。

public class Father {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Father s = new Father();
        s.sayHello();
        s.sayHello("wintershii");
    }
    public void sayHello() {
        System.out.println("Hello");
    }
    public void sayHello(String name) {
        System.out.println("Hello" + " " + name);
    }
}

重写:发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子类就不能重写该方法。

public class Father {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Son s = new Son();
        s.sayHello();
    }
    public void sayHello() {
        System.out.println("Hello");
    }
}
class Son extends Father{
    @Override
    public void sayHello() {
        // TODO Auto-generated method stub
        System.out.println("hello by ");
    }
}

这里是转载 (https://blog.csdn.net/plazilan/article/details/107960993?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162216341716780274137625%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162216341716780274137625&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-107960993.first_rank_v2_pc_rank_v29&utm_term=%E9%87%8D%E5%86%99%E5%92%8C%E9%87%8D%E8%BD%BD%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187)

*7. Java 中是否可以重写一个 private 或者 static 方法?

private 和 static 都不可以被重写。首先对于被 private 修饰的方法都会被隐式的指定成
final,所以 private 修饰的方法只能在当前类中使用,如果是其他的类继承当前类是不能访问
到 private 修饰的方法的。

抽象类跟接口区别

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/821132.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号