2019-09-05

1. Java编译后产生的是()

​ A. machine code

​ B. byte code

​ C. DLL

​ D. 以上都不正确

​ 答案: B.

​ C/C++语言编译动态链接库的文件为.DLL

2. 抽象类和接口的区别

参数抽象类接口
方法可以有普通的方法,也可以有抽象方法(没有方法实体)接口完全是抽象的。它根本不存在方法的实现
实现子类使用 extends 关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。子类使用关键字 implements 来实现接口。它需要提供接口中所有声明的方法的实现
构造器抽象类可以有构造器接口不能有构造器
与正常 Java 类的区别除了你不能实例化抽象类之外,它和普通Java类没有任何区别接口是完全不同的类型
访问修饰符抽象方法可以有 public、protected 和 default 这些修饰符接口方法默认修饰符是 public。接口中所有的方法默认都是abstract的,所以接口可以使用abstract修饰,但通常abstract可以省略不写
main 方法抽象方法可以有 main 方法并且我们可以运行它接口没有 main 方法,因此我们不能运行它。
多继承抽象方法可以继承一个类和实现多个接口接口只可以继承一个或多个其它接口
速度它比接口速度要快接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
添加新方法如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。如果你往接口中添加方法,那么你必须改变实现该接口的类。

代码示例:

// 定义接口
public interface InpOne {
    public void sayOne();
    public abstract void sayTwo();	// public和abstract是默认修饰符,可以直接不写
}

// 定义抽象类
public abstract class AbsOne {
    public void sayOne(){
        System.out.println("abstract one");
    }

    public abstract void sayTwo();
}

// 接口的实现类
public class InterfaceImp implements InpOne{

    public void sayOne() {
        System.out.println("interface one");
    }

    public void sayTwo() {
        System.out.println("interface two");
    }
}

// 抽象类的实现类
public class AbsOneImp extends AbsOne {
    // 必须实现抽象类中的抽象方法
    public void sayTwo() {
        System.out.println("abstract two");
    }
}

// 抽象类和接口的共同使用, 必须先extends 然后再implements
public class InterfaceAndAbstract extends AbsOne implements InpOne {
    // 由于先使用了extends,所以改类会继承抽象类中的方法,然后再引用接口的时候,接口中的sayOne方法在继承的抽象类中有实现方式。所以不必再重写。而sayTwo没有实现实体。所以需要重写
    public void sayTwo() {
        System.out.println("InterfaceAndAbstract two");
    }
}

// 测试
		InterfaceImp interfaceImp = new InterfaceImp();
        interfaceImp.sayOne();  // interface one
        interfaceImp.sayTwo();  // interface two

        AbsOneImp absOneImp = new AbsOneImp();
        absOneImp.sayOne();  // abstract one
        absOneImp.sayTwo();  // abstract two

        AbsOne absOne = new AbsOne() {
            @Override
            public void sayTwo() {
                System.out.println("abstract two --- 直接调用抽象类时,要定义其中的abstract方法实体");
            }
        };
        absOne.sayOne();  //  abstract one
        absOne.sayTwo();  // abstract two --- 直接调用抽象类时,要定义其中的abstract方法实体

        InterfaceAndAbstract interfaceAndAbstract = new InterfaceAndAbstract();
        interfaceAndAbstract.sayOne(); // abstract one
        interfaceAndAbstract.sayTwo(); // InterfaceAndAbstract two


3. A 继承 B类,父类B的构造函方法会被执行吗? -----(继承,构造函数)

在继承关系下,创建子类对象,先执行父类的构造方法,再执行子类的构造方法

4. 下列关于关键字的使用说法错误的是()(选择一项)----(static)

A.abstract不能与final并列修饰同一个类

B.abstract类中可以有private的成员

C.abstract方法必须在abstract类中

D.static方法能处理非static的属性

答案:D

分析:因为static得方法在装载class得时候首先完成,比 构造方法早,此时非static得属性和方法还没有完成初始化所以不能调用。

5. 下列哪些语句关于内存回收的说法是正确的()(选择一项)—(GC)

A.程序员必须创建一个线程来释放内存

B.内存回收程序负责释放无用内存

C.内存回收程序允许程序员直接释放内存

D.内存回收程序可以在指定的时间释放内存对象

答案:B

分析: A. 程序员不需要创建线程来释放内存.

C. 也不允许程序员直接释放内存.

D. 不一定在什么时刻执行垃圾回收.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值