美文网首页
java面试&、&&、内部类以及泛型相关

java面试&、&&、内部类以及泛型相关

作者: pr0metheus | 来源:发表于2018-03-27 15:20 被阅读0次

笔试题目一:请问&与&&的区别?

首先看如下代码:

public class ArithmeticTest {

    public static void main(String[] args) {
        int a = 3;
        int b = 5;
        int c = a & b;
        System.out.println(c);
    }
}

控制台输出1,证明&具有按位与的功能。

看如下代码:

    public static void main(String[] args) {
       int a = 1;
       int b = 2;
       if ((a == 2) & ((b = 3) == 4)) {
           System.out.println("Exception");
       }
       System.out.println(a);
       System.out.println(b);
    }

控制台输出1、3,证明&具有逻辑与的功能并且不短路。

看如下代码:

    public static void main(String[] args) {
       int a = 1;
       int b = 2;
       if ((a == 2) && ((b = 3) == 4)) {
           System.out.println("Exception");
       }
       System.out.println(a);
       System.out.println(b);
    }

控制台输出1、2,证明&&具有逻辑与的功能并且是短路的。

总结:&既具有按位与的功能也具有逻辑与的功能(不短路)而&&只具有短路与的功能

笔试题目二:如下代码能否编译通过?并说明理由。

import java.util.Date;
public class AnonymousTest {
    @SuppressWarnings("deprecation")
    public String get(Date date) {
        return date.toLocaleString();
    }

    public static void main(String[] args) {
        AnonymousTest test = new AnonymousTest();
        String result = test.get(new Date(){});
        System.out.println(result);
    }
}

答案:能编译通过。因为new Date(){}是匿名内部类,可以看作生成了一个对象它是Date类的子类。

关于匿名内部类:该类一定是继承了某个父类或者实现了某个接口

下面代码会输出什么?

package com.test;
import java.util.Date;

public class AnonymousTest {
    @SuppressWarnings("deprecation")
    public String get(Date date) {
        return date.toLocaleString();
    }

    public static void main(String[] args) {
        AnonymousTest test = new AnonymousTest();
        String result = test.get(new Date(){
            @Override
            public String toLocaleString() {
                return "hello world";
            }
        });
        System.out.println(result);
    }
}

答案:输出hello world

笔试题目三:如下代码能否编译通过?并说明相应理由?

import java.util.*;
public class GenericTest {

    public void method(List<Object> list) {

    }

    public void method2() {
        method(new ArrayList<Object>());
        method(new ArrayList<String>());
        method(new LinkedList<Integer>());
    }
}

答案:编译通不过,因为对于泛型而言List<Object>只能接受List接口的实现类并且元素只能是Object类型而不能是Object的子类。虽然String继承了Object但是在泛型里是不成立的。如果new ArrayList<String>()改为new ArrayList<Object>(),new LinkedList<Integer>改为new LinkedList<Object>那么可以编译通过。

笔试题目四:如下代码能否编译通过?并说明相应理由?

import java.util.*;
public class GenericTest {

    public void method(List<? extends Object> list) {

    }

    public void method2() {
        method(new ArrayList<Object>());
        method(new ArrayList<String>());
        method(new LinkedList<Integer>());
    }
}

答案:编译能够通过。List<? extends Object>意思表示能够接受实现List接口的实现类并且元素是继承Object的。

笔试题目五:如果代码能否编译通过?并说明理由?

import java.util.*;
public class GenericTest {

    public void method(List<?> list) {

    }

    public void method2() {
        method(new ArrayList<Object>());
        method(new ArrayList<String>());
        method(new LinkedList<Integer>());
    }
}

答案:编译能够通过。List<?>永远等价于List<? extends Object>通常只写List<?>因为List<? extends Object>太啰嗦了。

知识点罗列

内部类分类:

  • 静态内部类 (static inner class)
    • 不依赖外部类,可以声明静态属性,但不能访问外部类中非静态变量与方法
  • 成员内部类 (member inner class)
    • 依赖外部类,可以访问外部类中所有变量包括私有的、静态的,但不能声明静态变量与方法,静态常量除外
  • 局部内部类 (local inner class)
    • 定义在一个方法或一个作用域里面的类,局部内部类的访问仅限于方法内或作用域内
  • 匿名内部类 (anonymous inner class)
    • 是没有构造器的类,在编译的时候由系统自动起名为outer$1.class

相关文章

  • java面试&、&&、内部类以及泛型相关

    笔试题目一:请问&与&&的区别? 首先看如下代码: 控制台输出1,证明&具有按位与的功能。 看如下代码: 控制台输...

  • 2020Android面试学习

    Java String 有多长? 匿名内部类 泛型 获取泛型 onActivityResult使用很麻烦,为什么不...

  • 详解Java泛型之4——一个例子理解泛型带来的好处

    前面我介绍了关于泛型、通配符以及泛型擦除的相关知识点,大家可以参考以下文章: 详解Java泛型之1——入门泛型必懂...

  • java泛型背后是什么

    这一节主要讲的内容是java中泛型的应用,通过该篇让大家更好地理解泛型,以及面试中经常说的泛型类型擦除是什么概念,...

  • 泛型

    java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一Java泛型深入理解加泛型面试数组的协变性与范型的不可变性

  • Java泛型面试题

    1.Java中的泛型是什么 ? 使用泛型的好处是什么?以及各个版本有何区别? 答:泛型是 Java SE 1.5 ...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • 泛型常见的面试题

    1. Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中...

  • 一文看懂JAVA泛型

    [TOC] Java泛型 “ Java Generics ”是一个技术术语,表示与泛型类型和方法的定义和使用相关的...

  • java基础

    八、泛型 面试题==什么是泛型中的限定通配符和非限定通配符 ?这是另一个非常流行的Java泛型面试题。限定通配符对...

网友评论

      本文标题:java面试&、&&、内部类以及泛型相关

      本文链接:https://www.haomeiwen.com/subject/seldcftx.html