常见Java基础面试题目分享一

简介: Java是面向对象的,与C++相比去除了指针的概念,而且是单继承。Java拥有平台独立性,可以做到一次编译到处运行,因为通过编译器将.java文件编译成class文件Java具有垃圾回收机制、异常检测机制、数组越界检查等。数组越界检查可以避免访问到其它位置数据

Java的特点与优点


Java是面向对象的,与C++相比去除了指针的概念,而且是单继承

Java拥有平台独立性,可以做到一次编译到处运行,因为通过编译器将.java文件编译成class文件

Java具有垃圾回收机制异常检测机制数组越界检查等。数组越界检查可以避免访问到其它位置数据


Java的基本数据类型与引用数据类型


8 种基本数据类型

整数型 : byte(1个字节 - 2^7 ~ 2^7-1)、short(2个字节 - 2^15 ~ 2 ^15-1)、int(4个字节 -2^31 ~2^31-1)、long(8个字节 -2^63 ~ 2^63 -1)

浮点型:float(4个字节)、double(8个字节)

字符型: char(2个字节)

boolean

引用数据类型

数组、String、类


抽象类与接口的区别


共同点

不能被实例化,都可以有抽象方法,继承或实现抽象类与接口的子类都要对抽象方法进行实现

不同点

抽象类中有构造方法,而接口中没有构造方法

抽象类中可以定义成员变量而接口中只有静态常量

抽象类中可以包含普通方法,而接口中只有抽象方法

抽象类被使用时只能单继承,而接口可以多实现

抽象类中的方法范围可以是private、public等而接口中只有public

使用场景

接口是对动作的抽象,抽象类是对根源的抽象

抽象类表示的是这个对象是什么,而接口表示的是这个对象能做什么


final关键字


final关键字可以修饰类、方法、变量

final修饰时,该类不能被继承

final修饰方法时,该方法不能被修改

final修饰基本数据类型时,一旦被赋值就不能被修改

final修饰类变量时,类的地址不能变但是类中的数据可以修改


static关键字


static可以修饰成员变量、方法、初始化块、内部类。static修饰的成员被称为类成员,类成员无法访问实例成员,因为类成员属于类,类成员的范围比实例成员的作用域更大,很容易出现类成员初始化完成时但实例成员还没有被初始化,这时如果类成员访问实例成员就会引起错误。static修饰的成员会优先于对象存在,静态方法中没有this因为静态方法是和类同时被加载,而this是随着对象的创建而存在的


String s1 = “abc” 与 new String(“abc”)的区别


String s1 = "abc"是直接在字符串常量池中创建,而使用new String(“abc”)则会现在常量池中创建一个,然后new 一个新的String对象放到中,所以使用new则会创建两个对象,占用更多的内存


== 与 equals()区别


== 如果基本数据类型比较那么就是比较的他们的值相等,如果是引用数据类型那么比较的就是地址是否相等

equals是用来比较引用数据类型的,如果没有重写equals方法,默认比较使用的是 ==


String、StringBuffer、StringBuilder的区别


String是不可变字符串,StringBuffer与StringBuilder是可变字符串

String是使用final修饰的char数组,而后两个没有被final修饰

StringBuffer与StringBuilder相比,StringBuffer更加安全因为加了synchronized锁

性能上StringBuilder快于StringBuffer,安全上低于StringBuffer

建议

操作少量数据的时候使用String

操作数据较多但是是单线程使用StringBuilder

操作数据较多但是是多线程就使用StringBuffer


hashCode()与equals()


hashCode()与equals()中有个约束,如果两个对象相等那么hashCode就要相等,如果hashCode相等,两个对象不一定相等


Java8新特性


函数式接口

一个接口里面只有一个方法

消费型接口 – void accept(T t)

供给型接口 – T get()

函数型接口 – R apply(T t)

断言型接口 – boolean test(T t)

Lambda表达式

Lambda是一个匿名函数,我们可以把Lambda表达式理解为一段可以传递的代码,使用它可以写出更简洁、更灵活的代码,Lambda表达式的类型依赖上下文环境,是由编译器推断出来的

Stream流

Stream是用来操作数据源(集合、数组)的

Stream流自己不会存储元素,不会改变源对象它会产生一个新的集合或值、strean是惰性求值的(在中间处理过程中,只对操作进行记录,并不会立即执行,只有等到执行终止操作的时候才会进行实际的计算)

相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
98 2
|
1天前
|
监控 Dubbo Java
Java Dubbo 面试题
Java Dubbo相关基础面试题
|
1天前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题
|
1天前
|
存储 监控 算法
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题
|
1天前
|
安全 架构师 Java
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
16 4
|
1天前
|
SQL 监控 druid
Java Druid 面试题
Java Druid 连接池相关基础面试题
|
1天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题
|
22天前
|
Java
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
今日分享的主题是如何区分&和&&的区别,提高自身面试的能力。主要分为以下四部分。 1、自我面试经历 2、&amp和&amp&amp的不同之处 3、&对&&的不同用回答逻辑解释 4、彩蛋
|
2月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
89 14
|
2月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!