Java面试题大全10道(0-10)

面试题

Java篇

(一)

一、Java基础相关

1. Java有什么特性?面向对象的特征有哪些?Java的重要特征?

抽象、封装、继承、多态为Java面向对象的最重要的四个特征(其它特征还有诸如多线程、API多、安全性高、跨平台等等)
1)抽象:Java是面向对象的解释性编程语言,面向对象讲究的万物皆对象,是将一类对象的共同特征总结出来构造类的过程,包括数据抽象(属性)和行为抽象(方法/函数),而不会关注行为的细节是什么样子。
2)封装:将对象中的数据封闭包装起来,只能通过方法/函数操作数据,使用者只能使用对象的属性和方法/函数,而不知道对象的具体实现。
打个比喻就相当于一台自动贩卖机,这个贩卖机相当于对象,贩卖机中有各种饮料,贩卖机有贩售饮料的方法,你只需要投币,就能拿到等值的饮料,但是你不知道你投币以后你的饮料是怎样从贩卖机中出来的。(说到封装就不得不说Java中的访问限制private、default、protect、public),一个简单常见的例子就是set、get方法访问类中私有属性)。
3)继承:继承性:继承是有联系的类所构成的层次模型。它可以重用类,并且提供了明确表达共性的方式,即原始类的派生类(子类)可以从基类(父类)那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。这样使设计新类的过程大大简化。Object是所有类的超类。
4)多态:多态性:多态是在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为。多态性包括参数多态性和包含多态性。Java编辑器会自动根据所传递的参数进行判断,根据运行时对象的类型不同而执行不同的操作,这样很好地解决了应用程序函数同名问题。多态性丰富了对象的内容,扩大了对象的适应性,改变了对象单一继承的关系。(多态就应该对重载和重写的概念很清楚,重载与重新是实现多态的重要机制)

2. Java是如何实现“一次编译,随处运行的”?Java能跨平台的原因?

Java实现跨平台的原理是通过Java虚拟机来实现的,Java源文件为后缀.java的文件,经过编译器编译为后缀.class文件。这些.class文件可以在JVM(Java虚拟机)中运行,而JVM底层屏蔽了不同操作系统的差异,这样就使得能够“一次编译,随处运行”。

3. public,private,protected修饰符的作用域,以及不写修饰符时的区别?

1)使用public修饰符的变量和方法,在任何一个类中创建对象后都可以访问到,包括当前类、同包的类、子孙类以及外包的类。
2)使用protected修饰符的变量和方法,不可以访问外包类创建的对象。
3)不写修饰符的变量和方法,为默认类,只可以访问同一个包中类创建的对象。
4)使用private修饰符的变量和方法,只能在当前类中使用。
访问修饰符 同一类中 同一包中 子类中 全局
public 可以 可以 可以 可以
protect 可以 可以 可以 不可以
不写默认下 可以 可以 不可以 不可以
private 可以 不可以 不可以 不可以

4. 重载和重写的区别?为什么不能根据返回类型来区分重载?

重载和重写是Java中实现多态的重要机制。重载(Overload):又称静态多态,编译时多态: 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;
重载程序示例如下:

public class Overloading {
    public int test(){
        System.out.println("test1");
        return 1;
    }
	public void test(int a){
    	    System.out.println("test2");
	}
 	//以下两个参数类型顺序不同
	public String test(int a, String s){
    	   System.out.println("test3");
    	   return "returntest3";
	}
	public String test(String s,int a){
    	   System.out.println("test4");
    	   return "returntest4";
	}
	public static void main(String[] args){
    	   Overloading o = new Overloading();
    	   System.out.println(o.test()); o.test(1);
    	   System.out.println(o.test(1,"test3"));
   	   System.out.println(o.test("test4",1));
	}
}

重写(Override): 又称动态多态,运行时多态:发生在两个类中;方法名、参数、返回类型都与父类一致,不可以修改,但是里面的实现可以与被重写方法不同。(可以使用@Overwrite标签校验),重写示例程序如下:

class Animal{
    public void move(){
        System.out.println("动物可以移动");
    }
}
class Dog extends Animal{
    @Override
    public void move(){
        System.out.println("狗可以跑和走");
    }
    public void bark(){
        System.out.println("狗可以吠叫");
    }
}

5. Java中的数据类型有哪些?

Java中的数据类型分为基本数据类型和引用数据类型两大类;
基本数据类型4类(整形、浮点型、布尔型、字符型)8种{byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节)、float(4个字节)、double(8个字节)、boolean(一个字节)};引用数据类型(类、接口、数组、枚举类型);1字节=16位,可推算出表示范围,有符号(即从负数表示到正数,boolean、char类型除外)例如byte可表示范围为:负2的8次方到正2的8次方-1,减去1是因为还有0要表示。boolean 类型只有true或false,char类型是2个字节16位Unicode字符,从0到2的16次方-1;数据类型字节数确定也是保证Java程序的可移植,跨平台的基础。
引用数据类型;类、数组、接口、枚举类型;
整理如下图:
在这里插入图片描述

6. char 型变量中能不能存贮一个中文汉字,为什么?

char类型可以存储一个中文汉字,Java中默认使用的编码是Unicode(也叫万国码,能耐表示英文、中文以及其它国家文件和一些特殊符号等等),Unicode编码是能表示汉字的,一个char类型占2个字节(16比特),放一个中文没问题的。
扩展:使用Unicode意味着字符在JVM内部和外部有不同的表现形式,在JVM内部都是Unicode,当这个字符被从JVM内部转移到外部时(例如存入文件系统中),需要进行编码转换。所以Java中有字节流和字符流,以及在字符流和字节流之间进行转换的转换流,如InputStreamReader和OutputStreamReader,这两个类是字节流和字符流之间的适配器类,承担了编码转换的任务;

7. 定义变量 float f = 5.2;是否有问题?能否通过编译?

有问题,不能通过编译;在Java中没小数点的默认是int,有小数点的默认是double。将double转换为float需要进行强制类型转换,如 float f = (float)5.2;或者float f = 5.2f; 表示这是一个float类型的数据。
扩展:隐式转换,即自动转换,它不要求加以声明,是系统默认的。它是由小至大的转换:
byte——>short——>int——>long——>float——>double
char——>int——>long——>float——>double
显式转换,即强制转换,它是由大至小的转换,它的格式为:
类型 变量=(类型) 变量2;

8. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

Java规范有这样的规则:1.高位转低位需要强制转换 2.低位转高位自动转.在Java中没小数点默认的为int类型,1是int 型,s1是 short型,通过加1运算后s1 自动转为int 型,所以要强制转换,改为 s1 = (short)s1 + 1;
short s1 = 1; s1 += 1;正确
这个不会发生类型的提升,JAVA规范上说 :
e1+=e2 实际上是 e1=(T1)(e1+e2) ,其中T1是e1的数据类型。
s1+=1等效于 s1=(short)(s1+1),所以是正确的。

9. Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行向下取整。(这其实就是简单的数学概念,明白四舍五入就错不了)

10. String是基本的数据类型吗?String能被继承吗?

不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),剩下的都是引用类型(reference type),Java 5以后引入的枚举类型也算是一种比较特殊的引用类型。
扩展:String是java.lang包下的一个final类,由Java默认导入,所以不需要写import导入,类似的还有System,Math类;

如果不正之处,请留言指出。
更多面试题正在不断整理更新中,请扫码关注微信公众号:为码以梦
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵喵@香菜

感谢观众老爷送的一发火箭!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值