常见面试题

1.JDK、JRE、JVM 的区别:

 1)JDK:java 开发工具包,是 java 的核心,包括:JRE+编译、运行等命令工

 2)JRE:java 运行环境,是运行 java 程序所必须的环境的集合,包

括:JVM+java 系统类库

 3)JVM:java 虚拟机,是 java 实现跨平台的最核心部分,能够运行 java 语

言所开发的程序

2.java 的 8 种基本数据类型是什么?(简述 java 的 8 种基本数据类型)

 答:8 种基本数据类型包括:byte,short,int,long,float,double,boolean,char

 1)byte:字节型,用于存储整数的,占用 1 个字节,范围-128 到 127

 2)short:短整型,用于存储整数的,占用 2 个字节,范围-32768 到 32767

 3)int:最常用的整型,用于存储整数的,占用 4 个字节,范围-2^31 到

2^31-1

 4)long:长整型,用于存储较大的整数,占用 8 个字节,范围-2^63 到

2^63-1

 5)float:单精度浮点数,用于存储小数的,占用 4 个字节,不能表示精

确的值

 6)double:双精度浮点数,最常用的存储小数的类型,占用 8 个字节,

不能表示精确的值

 7)boolean:布尔型,存储 true 或 false,占用 1 个字节

 8)char:字符型,采用 Unicode 字符编码格式,存储单个字符,占用 2 个

字节

3.switch 可以作用于哪些数据类型上?

 答:byte,short,int,char,String,枚举,其余类型都不允许

4.重写与重载的区别:

 1)重写:发生在父子类中,方法名相同,参数列表相同

 ----用于在子类中修改父类中的方法

 2)重载:发生在同一类中,方法名相同,参数列表不同

 ----方法名相同的完全不同的方法

5.实例变量与静态变量的区别:

 ----实例变量和静态变量都属于成员变量

 1)实例变量:是属于对象的,在创建对象时存储在内存堆中,创建多少个

对象,则实例变量

 就会在内存堆中存在多少份,需要通过引用变量来访问

 2)静态变量:是属于类的,在类被加载时存储在内存方法区中,无论创建

多少个对象,静态

 变量在内存中都只有一份,常常通过类名来访问

6.java是值传递还是引用传递?

  答:java中无论是基本类型还是引用类型,都是值传递:

     1)对于基本类型而言,传递的是具体的值的副本

     2)对于引用类型而言,传递的是具体的地址值的副本

     网站上说java有引用传递的说法都是错误的!!!

7.String s = new String("hello");

问: 如上语句创建了几个对象?

答: 2个

第一个:字面量"hello"

---java会创建一个String对象表示字面量"hello",并将其存入常量池中

第二个:new String()

---new String()时会再创建一个字符串对象,并引用hello字符串的内容

8.==和equals()的区别:

  1)==可以作用于基本类型,也可以作用于引用类型:

    1.1)若为基本类型,是在比较值是否相等

    1.2)若为引用类型,是在比较地址值是否相等

  2)equals()只能作用于引用类型:

    2.1)Object类中的equals()默认比较的是还是==(即地址),但是没有参考意义,

        所以常常需要重写equals()来比较对象的属性值是否相同。

        注意: String类重写了equals()来比较字符串内容是否相同

9.String、StringBuilder、StringBuffer的区别:

  1)String:由final修饰,所以不能被继承。

           底层封装的是final的字符数组,所以为不变对象

           每次修改String引用变量,都是在创建新的对象

           适合查看,但是不适合频率修改

  2)StringBuilder:底层封装的是字符数组,所做操作就是在该数组之上进行,修改效率高

                  非线程安全的,并发处理的,性能稍快---一般都是用StringBuilder

  3)StringBuffer:底层封装的是字符数组,所做操作就是在该数组之上进行,修改效率高

                 线程安全的,同步处理的,性能稍慢------应用率不高

10.String常用的方法有哪些?

   1)length():获取字符串的长度(字符个数)

   2)trim():去掉两边的空白字符

   3)toUpperCase()/toLowerCase():将英文部分转换为大写字母/小写字母

   4)startsWith()/endsWith():判断是否是以???开头/结尾的

   5)charAt():根据下标找字符

   6)indexOf():查找字符串所对应的下标

   7)substring():截取字符串

   8)静态方法valueOf():将其它类型的数据转换为字符串

   9)matches():验证匹配的(正则表达式)

   10)replaceAll():替换(正则表达式)

   11)split():拆分(正则表达式)

11.抽象类和接口的区别:

   1)抽象类:

     1.1)由abstract修饰

     1.2)可以包含变量、常量、构造方法、普通方法、静态方法、抽象方法

     1.3)派生类通过extends来继承

     1.4)只能继承一个(体现单一继承)

     1.5)抽象类中的成员是任何访问权限都可以(默认为默认权限(同包中的))

   2)接口:

     2.1)由interface定义

     2.2)只能包含常量和抽象方法

     2.3)实现类通过implements来实现

     2.4)可以实现多个(体现多实现)

     2.5)接口中的成员的访问权限只能是public(默认为public权限)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值