美文网首页
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面试&、&&、内部类以及泛型相关

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