java基础知识1

时间:2020-12-01 20:02:54

1 抽象类和接口的区别

1.1 概念:

        抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。
        人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.


1.2 区别:

        1抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

        2 一个类只能继承一个抽象类,但可以实现多个接口。

        3接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。

        4类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。

        5抽象类可以在不提供接口方法实现的情况下实现接口。

        6Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。

        7Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。

2 创建线程有几种不同的方式?

         •继承Thread类

         •实现Runnable接口

         •应用程序可以使用Executor框架来创建线程池

         实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。

3 HashMap

         HashMap直接继承AbstractMap,基于哈希表的Map接口实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap。HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储的位置。

4 安全线程

        Java中经常碰到的安全的线程有以下几种:
Vector        statck        hashtable        enumeration        StringBuffer        Properties
除此之外所遇到的线程均可以认为是不安全的。

5 构造方法

        1 构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;
         重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。

         2 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;

         3 子类通过super关键字调用父类的一个构造方法;

         4 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法

        5 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public、private、protected修饰;

         6 构造方法不是类的成员方法;

        7 构造方法不能被继承。

6 访问说明符

修饰词         同一个类        同一个包        子类                所有类

public          允许访问        允许访问        允许访问         允许访问

protected     允许访问        允许访问        允许访问

default         允许访问        允许访问

private          允许访问

权限大小:public>default>protected>private