专栏首页IT技术圈Java开发岗面试题--基础篇(一)

Java开发岗面试题--基础篇(一)

老哥们,本期文章为大家奉上Java开发岗面试题--基础篇(一),希望对正在找工作的你有所帮助。话不多说,干货走起!!

Java是一种什么语言?

Java是一种完全面向对象的编程语言,具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点,它吸收了C++的优点,去掉了C++中多继承、指针等让人难于理解的概念。Java语言采用Unicode编码标准。

JDK、JRE、JVM三者的区别?

JDK(Java Development Kit)是针对Java开发人员的产品,是整个Java的核心,包括了Java运行环境JRE、Java开发工具和Java基础类库。

JRE(Java Runtime Environment)是运行Java程序所必须的环境集合,包含JVM标准实现以及Java核心类库。

JVM(Java Virtual Machine)是Java虚拟机的缩写,是整个Java实现跨平台的最核心的部分,能够运行以Java语言编写的软件程序。

Java1.5之后的三大版本?

Java SE(Java Platform Standard Edition)Java标准版。主要用途:桌面程序、控制台开发等。

Java EE(Java EE,Java 2 Platform Enterprise Edition)Java企业版。主要用途:Web端、服务器开发等。

Java ME(J2ME,Java 2 Platform Micro Edition)Java微型版。主要用途:嵌入式开发、手机、小家电等。

Java跨平台及其原理?

所谓的跨平台就是Java源码经过一次编译以后,可以在不同的操作系统上运行。

原理:经过编译的.class文件运行在Java虚拟机上,并非直接运行在操作系统上,只要安装不同操作系统对应的JVM即可。

Java语言的特点?

  1. 面向对象。Java是面向对象语言,满足面向对象的基本特征(封装、继承、多态)。封装是将属性、方法等放在一个类中,体现了Java语言的安全性。继承是子类继承了父类后便有了父类的特性。多态则是父类的引用指向子类的地址,执行不同的操作,继承和多态体现了Java语言的灵活性,易扩展性。
  2. 跨平台。JVM实现Java语言跨平台。
  3. 支持网络编程。
  4. 支持多线程。
  5. 健壮性。Java语言的强类型机制,异常处理机制,GC垃圾自动收集机制。

什么是字节码,字节码的好处?

字节码:Java经过Javac命令产生的.class文件就是字节码。字节码的好处:

  • 在一定程度上解决了解释性语言效率低下的问题。
  • 不针对特定的机器,保留了解释性语言的可移植性。

Java和C++的区别?

Java和C++都是面向对象语言。因此都有面向对象的基本特性封装、继承、多态。它们的区别如下:

  • Java不提供指针来直接访问内存,程序内存更加安全。
  • Java中是单继承,C++中支持多继承。
  • Java中有内存管理机制,无需程序员手动释放内存。

Java的三大特性?

封装:把方法、变量封装在类中,提高代码的安全性。

继承:Java中为单继承,提高代码的重用性。

多态:多态就是同一个类或者接口,使用不同的实例因而执行不同的操作,提高代码的灵活性。

Java中的基本类型和引用类型及其区别?

  • 8种基本数据类型

_

说明

大小(byte)

取值范围

默认值

byte

字节

1

−2^7~2^7-1

0

short

短整型

2

-2^15~2^15-1

0

int

整型

4

-2^31~2^31-1

0

long

长整型

8

-2^63~2^63-1

0L

float

单精度

4

-3.40E+38 ~ +3.40E+38

0.0f

double

双精度

8

-1.79E+308 ~ +1.79E+308

0.0d

char

字符型

2

0~65535

'u0000'

boolean

布尔型

1

true,false

false

  • 引用数据类型

类,接口类型,数组类型,枚举类型,注解类型等。

  • 基本数据类型与引用数据类型的区别

基本数据类型在被创建时,会在栈上分配空间,直接将之存储在栈中。而引用数据类型在被创建时,首先会在栈上分配空间,将其引用存在栈空间中,然后在堆中开辟内存,值存放在堆内存中,栈中的引用指向堆中的地址。

Java中的数组有没有length()方法?

Java中的数组只有length属性,没有length()方法。

Java中的String有没有length()方法?

Java中的String类型有length()方法,但没有length属性。

JavaScript中如何获取字符串长度?

JavaScript中获取字符串长度用length属性,并非length()方法,这点很容易与Java中字符串的length()方法混淆。

switch(expr),expr支持哪些数据类型?

在Java5以前,expr支持byte,short,int,char四种数据类型,在Java5以后,又多了枚举enum类型,Java7又增加了String类型,到目前并不支持long类型。

int和Integer有什么区别?

int是基本数据类型,默认值是0。

Integer是引用类型,是int的包装类,默认值是null。

怎么理解自动拆箱,自动装箱?

自动拆箱:将包装类(引用类型)型自动转化为对应的基本数据类型。

自动装箱:将基本类型自动转化为对应的引用类型(包装类型)。

计算2^3效率最高的方法是?

计算2^3效率最高的方法是:2<<(3-1)。

在Math.round(temp)中,

参数temp=-11时结果为?

参数temp=11时结果为?

首先来看如下代码和运行结果:

public class Test {

    public static  void main(String []args){
        System.out.println("Math.round(11.51)="+Math.round(11.51));
        System.out.println("Math.round(-11.51)="+Math.round(-11.51)+"\n");

        System.out.println("Math.round(11.5)="+Math.round(11.5));
        System.out.println("Math.round(-11.5)="+Math.round(-11.5)+"\n");

        System.out.println("Math.round(11.49)="+Math.round(11.49));
        System.out.println("Math.round(-11.49)="+Math.round(-11.49)+"\n");

    }
}

运行结果如下如所示:

从运行结果中,我们进行分析总结得出如下结论:

  • 参数的小数部分>0.5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。
  • 参数的小数部分=0.5,正数运算结果为整数部分+1,负数运算结果为整数部分。
  • 参数的小数部分<0.5,运算结果为参数整数部分。

float f=3.4;是否正确?

不正确。3.4是双精度类型,赋值给float需要强制类型转换,float f=(float)3.4,也可以写成 float f=3.4F。

short s1=1; s1=s1+1;有错吗?

short s1=1;s1+=1;有错吗?

short s1=1;s1=s1+1不正确。因为1是int类型,因此s1+1也是int类型,在执行s1=s1+1 时,需要将int类型的s1+1赋值给short类型的s1,大转小可能会有精度损失,无法显示转化。

short s1=1;s1+=1正确。因为s1+=1相当于s1=(short)(s1+1),存在隐含的强制类型转换。

Java中的注释?

定义:注释是用来解释说明程序的文字。分为:

单行注释:// 注释的文字

多行注释:/* 注释的文字 */,注释内容不会出现在Javadoc生成的文档中。

文档注释:/** 注释的文字 */,注释内容写入Javadoc生成的文档。

Java中的访问修饰符?

Java中的访问修饰符有:public,private,protected,以及不写(默认)。

修饰符

当前类

同包

子类

其它包

private

×

×

×

default

×

×

protected

×

public

Java中重写与重载的区别?

重写(Override):至少发生在两个类中,并且类与类具有继承或者实现关系,表示子类中的方法具有与父类方法中完全相同的方法名称,返回值,参数。子类中的方法覆盖父类的方法,体现了多态性。

重载(Overload):发生在同一个类中,多个方法名称相同,参数类型,个数和顺序不同的方法发生重载现象,与返回值无关。

运算符&和&&的区别?

&:无论左边true还是false,右边也会进行判断。

&&:如果左边为false,右边就不会进行判断,因此&&比&效率高。

注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

Java有没有goto?

goto是Java中的保留字,在目前版本的Java中没有使用。

this关键字的用法?

  • 直接引用,this相当于是指向当前对象本身。
  • 形参与成员名字重名,用this来区分:
public Person(String name, int age) {
    this.name = name;
    this.age = age;
}
  • 调用本类的构造函数:
class Person{
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }
    public Person(String name, int age) {
        this(name);
        this.age = age;
    }
}

super关键字的用法?

在子类的成员方法中,访问父类的成员变量。

在子类的成员方法中,访问父类的成员方法。

在子类的构造方法中,访问父类的构造方法。

Java的final关键字?

在Java中,final关键字可以修饰类,变量和方法。被final修饰后有以下特点:

final修饰类:final修饰的类不能被继承。

final修饰变量:final修饰的变量是常量,无法改变。

final修饰方法:final修饰的方法不能被重写。

break,continue,return的区别?

break:跳出当前循环。

continue:结束本次循环,进行下次循环。

return:返回,结束程序。

在Java中,如何跳出多重嵌套循环?

可以在最外面的循环语句前定义一个标号,如下代码:

ok:
for(int i=0;i<10;i++){
     for(int j=0;j<10;j++){
       system.out.println("i="+i+",j="+j);
       if(j==5)break ok;
    }
}

如何理解hashCode与equals?

如果两个对象的equals()方法相等则它们的hashCode返回值一定相同,如果两个对象的hashCode返回值相同,但它们的equals()方法不一定相等。

两个对象的hashCode()返回值相等不能判断这两个对象是相等的,但两个对象的hashcode()返回值不相等则可以判定两个对象一定不相等。

抽象类和接口的区别是什么?

抽象类和接口都不能实例化对象,都可以包含抽象方法,而且抽象方法必须被继承的类全部实现。它们的区别如下:

  • 抽象类和接口都不能直接实例化,如果要实例化,抽象类必须指向实现所有抽象方法的子类对象,接口必须指向实现所有接口方法的类对象。
  • 抽象类要被子类继承,接口要被类实现。
  • 接口只能做方法申明(Java8以前,Java8以后接口中的方法可以有方法体,不过要用default修饰),抽象类中可以做方法申明,也可以做方法实现。
  • 接口里定义的变量只能是公共的静态常量,抽象类中的变量是普通变量。
  • 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类的抽象方法,那么该子类只能是抽象类。同样,一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
  • 抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果。
  • 抽象类里可以没有抽象方法。
  • 如果一个类里有抽象方法,那么这个类只能是抽象类。
  • 抽象方法要被实现,所以不能是静态的,也不能是私有的。
  • 接口可继承接口,并且可以多继承接口,但类只能单根继承。

参数

抽象类

接口

默认的方法实现

可以有默认的方法实现。

接口完全是抽象的。它根本不存在方法的实现(Java8以前,Java8以后接口的方法可以有方法体,不过要用default修饰)。

实现

子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。

子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现。

构造器

抽象类可以有构造器。

接口不能有构造器。

与正常Java类的区别

除了不能实例化抽象类之外,它和普通Java类没有任何区别。

接口是完全不同的类型。

访问修饰符

抽象方法可以有public、protected和default这些修饰符。

接口方法默认修饰符是public。不可以使用其它修饰符。

main方法

抽象方法可以有main方法,并且可以运行它。

接口没有main方法,因此不能运行它。(java8以后接口可以有default和static方法,所以可以运行main方法)。

多继承

抽象方法可以继承一个类和实现多个接口。

接口只可以继承一个或多个其它接口。

添加新方法

如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。

如果你往接口中添加方法,那么你必须改变实现该接口的类。

什么是接口?

接口是一种规范,Java中的接口:interface。

静态变量与非静态变量的区别?

_

静态变量

非静态变量

调用方式

静态变量通过 “ 类名.变量名 ” 调用

非静态变量通过实例化对象名调用

共享方式

静态变量是全局变量,被类的所有实例化对象共享

非静态变量是局部变量,不共享

相互访问方式

静态变量无法访问非静态变量

非静态变量可以访问静态变量

值传递和引用传递的区别是什么?

值传递:在方法的调用过程中,实参把它的实际值传递给形参,此传递过程就是将实参的值复制一份传递到函数中。

引用传递:引用传递弥补了值传递的不足,如果传递的数据量很大,直接复过去的话,会占用大量的内存空间,而引用传递就是将对象的地址值传递过去,函数接收的是原始值的首地址值。在方法的执行过程中,形参和实参的内容相同,指向同一块内存地址,也就是说操作的其实都是源数据,所以方法的执行将会影响到实际对象。

什么是反射?

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。

Java中获得反射的三种方式?

  • 通过new对象实现反射机制(对象.getClass())
  • 通过路径实现反射机制(Class.forName("包名+类名"))
  • 通过类名实现反射机制(类名.Class)
class Student {
    private int id;
    String name;
    protected boolean sex ;
    pub1ic f1oat score;
}

pub1ic class Get {
    //获取反射机制三种方式
    public static void main(String[] args) throws ClassNotFoundException {
        //方式一(通过建立对象)
        Student stu = new StudentO ;
        Class classobj1 = stu. getClassO;
        System. out. print1n(classobj1. getNameO);
        //方式二(所在通过路径-相对路径)
        Class classobj2 = Class . forName ("fanshe.Student") ;
        System. out. println(classobj2. getName0) ;
        //方式三(通过类名)
        Class classobj3 = Student.class;
        System. out. println(classobj3. getName0) ;
    }
}

String类中常用的方法?

方法

说明

split()

把字符串分割成字符串数组

indexOf()

从指定字符提取索引位置

append()

追加字符或字符串

trim()

去掉字符串两端的空格

replace()

替换

hashCode()

返回字符串的哈希值

subString()

截取字符串

equals()

比较字符串是否相等

length()

获取字符串长度

concat()

将指定字符串连接到此字符串的结尾

String中的==和equals的区别?

"=="比较的是两个字符串的内存地址。"equals"比较的是两个字符串的实际值。

Java中的String,StringBuilder,

StringBuffer三者的区别?

String: 字符串常量,底层用final关键字修饰,底层实际在维护 char 类型的字符数组,当每次对String进行改变时,都需要生成一个新的String对象,然后将指针指向一个新的对象。

//底层用 final 关键字修饰,底层实际在维护 char 类型的字符数组
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
}

StringBuilder:字符串变量,非线程安全,用于单线程操作。

StringBuffer:字符串变量,线程安全,用于多线程操作。

Java中final、finally和finalize的区别?

final: 修饰符,Java中的关键字。可用于修饰类,变量,方法,有最终的意思。

修饰的对象

说明

final修饰类

表明该类不能被其他类所继承,但要注意:final类中所有的成员方法都会隐式的定义为final方法。

final修饰变量

final成员变量表示常量,只能被赋值一次,赋值后其值不再改变。

final修饰方法

final 修饰的方法不能被重写。

finally:finally是在异常里经常用到的,就是try和cach里的代码执行完以后,必须要执行的方法,我们经常在finally里写一些关闭资源的方法,比如说关闭数据库连接,或者关闭IO流。

finalize:finalize是方法名,Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。

try{}里有一个return语句,

紧跟在这个try后的finally{}里的

code会不会被执行?

什么时候被执行?

会执行,在return前执行。详情请看下面代码和运行结果。

public class Test {
    public static  void main(String []args){
        System.out.println("main方法:"+test(1));

    }
    public static int test(int temp){
        int te=0;
        try{
            te=temp;
            System.out.println("try:"+te);
            return te;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            te=temp+te;
            System.out.println("finally:"+te);
        }
        return 0;
    }
}

Java里可不可以有多继承?

Java中不允许多继承,比如类A不能同时继承类B和类C,若要有此类需求,考虑用接口。

本文分享自微信公众号 - C you again(C_y_again),作者:C you again

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入浅出理解动态规划(二) | 最优子结构

    我们在《深入浅出理解动态规划(一) | 交叠子问题》中讨论过,使用动态规划能解决的问题具有下面两个主要的性质:

    C you again
  • 面试官:你精通多少种语言的Hello World?

    计算机编程语言能够实现人与机器之间的交流和沟通,而计算机编程语言主要包括汇编语言、机器语言以及高级语言,具体内容如下:

    C you again
  • 计算机网络中这些高频考题,你还在死记硬背吗?(二)

    在上期的《计算机网络中这些高频考题,你还在死记硬背吗?(一)》一文中,重点向大家介绍了IP地址及其分类,子网掩码的概念,网络号、主机号、网络地址、直接广播地址等...

    C you again
  • Java面试基本问题

    强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码

    Java架构师必看
  • Java 面试知识点解析(一)——基础知识篇

    我没有三颗心脏
  • java 成神之路

    java404
  • Java 面试知识点解析(一)——基础知识篇

    在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Jav...

    我没有三颗心脏
  • 学点Java里的编程思想(r12笔记第65天)

    按照自己之前的计划,我觉得得看看关于开发的东西了,因为我对于并发,锁的认知总是有一个局限性,自己也在地铁上做了些功课。有了这个想法,再有拿起书的勇气,那就...

    jeanron100
  • Java面试题库及答案解析

    1、面向对象编程(OOP)有哪些优点? 代码开发模块化,更易维护和修改。 代码复用。 增强代码的可靠性和灵活性。 增加代码的可理解性。 2、面向对象编程有哪些特...

    nnngu
  • 为了BAT,你必须了解的java修仙之路

    classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw)

    乔戈里

扫码关注云+社区

领取腾讯云代金券