Java考题知识点

1.java的基本编程单元是类,基本存储单元是变量;

2.对于.java文件而言,一个文件中可以有多个类,但是只能有一个class和.java的文件一致。同时一旦这个.java文件中存在外部的public类,那么这么外部的public类的类名必须和.java的文件名一致。但是考虑到内部类,一个.java文件中可以有多个内部public类,这些的名字也都和.java的名字一样。

3.AOP  和  OOP的区别: 

(1). 面向方面编程  AOP  偏重业务处理过程的某个步骤或阶段,强调降低模块之间的耦合度,使代码拥有更好的移植性。

(2). 面向对象编程  (oop)  则是对业务分析中抽取的实体进行方法和属性的封装。也可以说  AOP  是面向业务中的动词领域,  OOP  面向名词领域。 AOP 的一个很重要的特点是源代码无关性,也就是说如果我们的系统中引用了 AOP 组件,即使我们把该组件去掉,系统代码也应该能够编译通过。要实现这一点,可以使用动态 proxy 模式。

4.java 语言使用的字符码集是 Unicode。

 Unicode(统一码 、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。

Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制 编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。UTF-8 、UTF-16 、UTF-32 都是将数字转换到程序数据的编码方案。

5.(1)HashMap和Hashtable两个类都实现了Map接口,二者保存K-V对(key-value对)

(2):HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。

(3):Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

(4):由所有HashMap类的“collection 视图方法”所返回的迭代器都是快速失败的:在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器本身的 remove 方法,其他任何时间任何方式的修改,迭代器都抛出ConcurrentModificationException。Hashtable和HashMap的区别主要是前者是同步的,后者是快速失败机制保证 .

6.(1).子父类存在同名成员时,子类中默认访问子类的成员,可通过super指定访问父类的成员,格式:

super.xx  (注:xx是成员名);

(2).创建子类对象时,默认会调用父类的无参构造方法,可通过super指定调用父类其他构造方法,格式:

s uper(yy) (注:yy是父类构造方法需要传递的参数)

7. Java中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行。

 wait()和sleep()

共同点 : (1). 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。

(2). wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException。 如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() {} 中直接return即可安全地结束线程。 需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线

程调用 interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到 wait()/sleep()/join()后,就会立刻抛出InterruptedException 。

不同点 :  (1).每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同步。 sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。        (2).wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用

(3).sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

  (4).sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

(5).wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

8.管道实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。它类似于通信中半双工信道的进程通信机制,一个管道可以实现双向 的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。管道的容 量大小通常为内存上的一页,它的大小并不是受磁盘容量大小的限制。当管道满时,进程在 写管道会被阻塞,而当管道空时,进程读管道会被阻塞。

9.方法的重写(override)两同两小一大原则:

  方法名相同,参数类型相同

   子类返回类型小于等于父类方法返回类型,

  子类抛出异常小于等于父类方法抛出异常,

  子类访问权限大于等于父类方法访问权限。

10. 类的加载是由类加载器完成的,类加载器包括:根加载器( BootStrap )、扩展加载器( Extension)、系统加载器( System )和用户自定义类加载器( java.lang.ClassLoader 的子类)。从 Java 2 (

JDK 1.2 )开始,类加载过程采取了父亲委托机制( PDM )。 PDM 更好的保证了 Java 平台的安全性,在该机制中, JVM 自带的 Bootstrap 是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。 JVM 不会向 Java 程序提供对Bootstrap 的引用。下面是关于几个类加载器的说明: • Bootstrap :一般用本地代码实现,负责加载 JVM 基础核心类库( rt.jar ); • Extension :从 java.ext.dirs 系统属性所指定的目录中加载类库,它的父加载器是 Bootstrap ; • system class loader :又叫应用类加载器,其父类是 Extension 。它是应用最广泛的类加载器。它从环境变量 classpath 或者系统属性 java.class.path 所指定的目录中记载类,是用户自定义加载器的默认父加载器。 • 用户自定义类加载器: java.lang.ClassLoader 的子类 父类委托机制是可以修改的,有些服务器就是自定义类加载器优先的。

11.大小规则,从小到大

byte short  int  long   float  double  char

引用类型转换:  向上转型:  向下转型:

12.(1)、一个子类只能继承一个抽象类(虚类),但能实现多个接口;

   (2)、一个抽象类可以有构造方法,接口没有构造方法;

   (3)、一个抽象类中的方法不一定是抽象方法,即其中的方法可以有实现(有方法体),接口中的方法都是抽象方法,不能有方法体,只有声明;

   (4)、一个抽象类可以是public、private、protected、default,    接口只有public;

   (5)、一个抽象类中的方法可以是public、private、protected、default,    接口中的方法只能是public和default

13.类的加载顺序。

 (1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)

 (2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )

 (3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )

 (4) 父类构造函数

(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )

 (6) 子类构造函数

14.抽象类

特点:

(1).抽象类中可以构造方法

(2).抽象类中可以存在普通属性,方法,静态属性和方法。

(3).抽象类中可以存在抽象方法。

(4).如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。

(5).抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。

接口

(1).在接口中只有方法的声明,没有方法体。

(2).在接口中只有常量,因为定义的变量,在编译的时候都会默认加上 public static final

  (3).在接口中的方法,永远都被public来修饰。

(4).接口中没有构造方法,也不能实例化接口的对象。

(5).接口可以实现多继承

(6).接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法

(7).则实现类定义为抽象类。

15.在java中一个unicode占2个字节(byte)。 一个字节等于8比特位(bit)。 所以每个Unicode码占用16个比特位。

点赞