Java常见面试题(Java基础篇)

一、请解释Java平台及其组成部分(JVM、JRE、JDK)的区别

        Java平台主要包括JVM(Java虚拟机)、JRE(Java运行环境)和JDK(Java开发工具包)。JVM是运行Java字节码的虚拟机,JRE包含JVM及运行Java程序所需的核心类库,而JDK则包含JRE以及编译器、调试器和其他工具。

二、Java中什么是对象,如何创建对象

        在Java中,对象是类的实例,通过new关键字创建,例如:Car car = new Car();

三、请简述Java中的封装、继承和多态概念,并举例说明

封装是Java中面向对象的三大特性之一,它主要指的是将对象的属性和行为(方法)结合在一起,并尽可能地隐藏对象内部的细节。在Java中,通过访问修饰符(private、protected、public等)来控制类中的成员变量和成员方法的访问权限,同时提供公共的getter和setter方法来获取或修改私有变量,从而实现对数据的保护,防止外部随意修改。

举例:

public class Student {
    private String name; // 私有化姓名属性
    private int age;

    // 提供公共的getter和setter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

继承是Java面向对象的另一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,这样可以减少代码重复,提高代码复用性。子类还可以根据需要扩展或覆盖父类的方法。

举例:

public class Animal { // 父类
    public void eat() {
        System.out.println("动物会吃东西");
    }
}
public class Dog extends Animal { // 子类继承Animal
    @Override
    public void eat() {
        System.out.println("狗喜欢吃骨头"); // 覆盖父类eat方法
    }
    
    public void bark() {
        System.out.println("狗会叫");
    }
}

多态: 多态是指同一个接口,使用不同的实例而表现出不同的行为。在Java中,多态主要是依靠继承以及接口实现来体现。编译时类型与运行时类型不一致,就可以体现出多态。多态可以减少程序中的if-else条件判断,使得程序更加灵活且易于扩展。

public class Test {
    public static void main(String[] args) {
        Animal a1 = new Dog(); // 多态,父类引用指向子类对象
        a1.eat(); // 输出"狗喜欢吃骨头"
        
        Animal a2 = new Cat();
        a2.eat(); // 输出"猫喜欢吃鱼"
    }
}

interface Animal {
    void eat();
}

class Dog implements Animal {
    public void eat() {
        System.out.println("狗喜欢吃骨头");
    }
}

class Cat implements Animal {
    public void eat() {
        System.out.println("猫喜欢吃鱼");
    }
}

四、Java中的四种访问权限修饰符是什么,各有什么区别

        public:公开的。使用public修饰的类、属性或方法对所有类都是可见的,无论它们是否在同一包中。任何类都可以直接访问public修饰的成员。

        protected:受保护的。protected修饰的类成员对同一包中的其他类和所有子类都是可见的,但对不同包中的非子类不可见。这意味着子类可以访问父类中被protected修饰的属性和方法。

        (默认)无修饰符(package-private):没有明确指定任何访问修饰符时,属性或方法只对同一包内的其他类可见。如果在不同的包中,则无法访问这些成员。

        private:私有的。private修饰的类成员只能在该类内部访问,对同一包或其他包中的任何类都不可见。

五、ArrayList和LinkedList有何不同?在什么场景下更适合使用LinkedList

        ArrayList基于动态数组实现,查询速度快,增删慢;LinkedList基于双向链表实现,增删快,查询慢。在频繁进行插入和删除操作且对元素顺序不敏感的情况下,更适合使用LinkedList

六、请解释HashMap的工作原理,包括它的内部结构以及扩容机制。

        HashMap基于哈希表实现,内部使用数组+链表/红黑树存储数据,通过key的hashCode计算其在数组中的位置,当哈希冲突时,采用链表或红黑树解决。扩容机制是在负载因子超过阈值时,会自动扩大为原来的2倍大小,并重新散列所有元素

七、反射是什么?

        通过反射机制,代码能够在运行时动态地获取类、接口、字段、方法等程序元素的信息,并且可以创建对象实例、调用方法、修改字段值等,这些操作通常在编译时是未知或者未确定的。

八、请描述Java内存区域划分(堆、栈、方法区等),并简述各自作用。

        堆存放对象实例,栈存放基本类型变量和对象引用,方法区存放类信息、常量、静态变量等,程序计数器记录当前线程执行的字节码地址,本地方法栈为JNI方法服务。

九、•Java的垃圾回收机制是怎样的?你知道哪些常见的垃圾收集器?

        Java的垃圾回收机制主要是自动回收不再使用的对象所占用的内存空间,避免内存泄露。常见的垃圾收集器有Serial、ParNew、Parallel Scavenge(年轻代)、CMS、G1、ZGC和Shenandoah等。

十、如何避免Java中的内存泄漏问题?

        及时关闭流、数据库连接等资源;弱引用、软引用合理使用;尽量减少全局变量和大对象的使用,防止长生命周期对象持有短生命周期对象引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值