欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java考题知识点

程序员文章站 2022-04-10 15:41:23
1.java的基本编程单元是类,基本存储单元是变量; 2.对于.java文件而言,一个文件中可以有多个类,但是只能有一个class和.java的文件一致。同时一旦这个.java文件中存在外部的public类,那么这么外部的public类的类名必须和.java的文件名一致。但是考虑到内部类,一个.ja ......

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个比特位。