170道Java工程师面试题-1-10解答

170道Java工程师面试题-解答1-10

1、面向对象的特征有哪些

  • 继承

    • 保留父类的属性,开创新的东西。子类继承父类所有的属性和方法,并能添加自己的属性和方法。继承分为实现继承(extends)和接口继承(implements)
  • 封装

    • 将客观事物封装成抽象的类,将自身的属性及方法提供给可信的类或对象调用,对不可信的隐藏。类就是封装数据和操作这些代码的逻辑实体,在一个类中,部分属性和方法是私有的(private),或公有的(public)或包访问权限(protect)或default(默认),通过上面的修饰符来控制访问权限,实现封装
  • 多态

    • 多态可以使我们以相同的方式处理不同类型的对象。我们可以使用一段代码处理不同类型的对象,只要他们继承/实现了相同的类型。这样,我们没有必要为每一种类型的对象撰写相同的逻辑,极大的提高了代码的重用

    此图片来源网络
    2、访问修饰符public,private,protected,以及不写(默认)时的区别
    在这里插入图片描述
    3、String 是最基本的数据类型吗?

    • 不是
    • 基本数据类型包括,byte,short,int,long,float,double,char,boolean
    • java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了 提高效率节省空间,我们应该用StringBuffer类(线程安全适合多线程),或 StringBuilder(线程不安全适合单线程)
  • 4、float f=3.4;是否正确?

    • 不正确
      float f=3.4f;
      java 编译时整型默认是int,带小数点的默认是double. double转float会失去精度,所以错误
  • 5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

    • 第一题:short s1 = 1; s1 = s1 + 1;
      错! s1 + 1,s1是short类型,1是int型,s1会自动转换为int型的1,与1相加后,得 到int型的2,要向左侧的short类型的s1看齐,即需要通过强制类型转换。正确写法:s1 = (short) (s1 + 1);

    • 第二题:short s1 = 1; s1 += 1;

      正确! 执行s1+=1;其实执行的是s1 = (short) (s1 + 1); 其中会有一个强制转换的过程。

  • 6、Java有没有goto?


    • goto是Java中的保留字,在目前版本的Java中没有使用
  • 7、int和Integer有什么区别?

    • int是java基本数据类型,Integer 是int的包装类,new Integer 可得到int类型的对象
    • int i=100;Integer j=new Integer(100); 相等,比较前会将Integer 拆包,实际比较的是常量
    • Integer i=new Integer(100);Integer j=new Integer(100); 不相等。两个不同的对象
    • Integer i = new Integer(100);Integer j = 100;不相等。因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同
    • Integer i = 100;Integer j = 100; 相等
    • Integer i = 128;Integer j = 128;不相等
    • 对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间
    • java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100)。而java API中对Integer类型的valueOf的定义如下,对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了
  • 8、&和&&的区别?

    • & 无论真否,均会执行后面的语句
    • &&有短路功能
  • 9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

    • 栈(stack) 每个线程包含一个栈区,栈中只包含基础数据类型的对象和自定义对象的引用(不是对象)。每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。栈分为三个部分,基本类型变量区,执行上下文,操作指令区(存放操作指令)
    • 堆(heap)存放的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令),jvm只有一个堆区,所有线程共享。
    • 静态区(static area) 静态区又叫方法区,跟堆一样,被所有线程共享,方法区包含所有的class和static变量。
  • 10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

    • Math.round(11.5) =12;Math.round(-11.5)=10;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值