Q1:java中抽象类和接口的区别?

简单来说:
1.接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
2.另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
3.还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.

复杂的说:
海子

Q2:接口引用可以指向对象么?

可以
List是一个接口,而ListArray是一个类。
ListArray继承并实现了List。
所以List不能被构造,但可以向上面那样为List创建一个引用,而ListArray就可以被构造。

1
2
3
List list; //正确 list=null;
List list=new List(); // 是错误的用法
List list = new ArrayList();

这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。

List a=new ArrayList();
则a拥有List与ArrayList的所有属性和方法,不会减少
如果List与ArrayList中有相同的属性(如int i),有相同的方法(如void f()),
则a.i是调用了List中的i
a.f()是调用了ArrayList中的f();

Q3:Java中子类继承了父类的私有属性及方法吗?

在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。就像有些东西你可能拥有,但是你并不能使用。所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已。

Q4: java语言鲁棒性是什么意思?

鲁棒性越高,说明你的程序越健壮,越稳定,可以承载的压力越大。是程序性能的一种度量标准。
根据对性能的不同定义,可分为稳定鲁棒性和性能鲁棒性。

Q5: 编译和解释的区别?

解释(intepreter)和编译(compile)的区别:

  1. 解释 – 运行时必需用解释器把程序一行一行执行, 运行比较慢, 因为是运行时才把程序解析并执行. 优点是移植性, 不同的机器只要有解释器就可以运行相同的程序.
  2. 编译 – 先把程序转成 CPU 跟操作系统认识的机械码, 执行程序就是直接执行机械码, 所以速度比较快, 但因为是机械码 (加上一些操作系统的 loader 所要的信息), 不同的 CPU 与操作系统并不能运行编译后的程序

java:种是半编译的, 先把程序编译成一种中间码, 再在不同的机器运行解释器解释这种中间码.

Q6:Applet 的安全性

Applet是设计用于从远程站点加载,然后在本地执行,因此, 安全对于Applet是至关重要的问题 。 从 Web 上下载的 java Applet 是在称为沙箱 (sandbox) 的安全 环境中运行的。大多数浏览器上,在沙箱中运行时,Applet : 不能运行任何一个本地可执行程序。 除可以与下载它们的服务器进行通信外,不能与任何主机通信。 不能读写本地计算机的文件系统。 不能查找除版本号等以外的任何关于本地计算机的信息。

Q7:yiedld()和sleep()的区别。

yiedld()这个方法是让当前线程回到可执行状态,以便让具有相同优先级的线程进入执行状态,但不是绝对的。因为虚拟机可能会让该线程重新进入执行状态。
让线程暂时停止可以选择sleep方法。比如Thread.sleep(1000),当前线程睡眠1秒。需要知道的是,1秒后,线程是回到可执行状态,并不是执行状态,什么时候执行那是由虚拟机来决定的。所以sleep(1000)并不是在睡眠1秒后立即执行。

Q8:什么是线程?

线程是程序中的一个执行流,一个执行流是由 CPU 运行程序的代码、操纵程序的数据所形成的,因此,线程被认为是以 CPU 为主体的行为。按照线程的模型,一个具体的线程也是由虚拟的CPU、代码与数据组成,其中代码与数据构成了线程体,线程的行为由它决定。

Q9:进程与线程之间的联系与区别。

进程(process)是指在系统中正在运行的一个应用程序,是系统资源分配的基本单位,在内存中有其完备的数据空间和代码空间,拥有完整的虚拟空间地址。一个进程所拥有的数据和变量只属于它自己。
线程(thread)是进程内相对独立的可执行单元,所以也被称为轻量进程(lightweight processes);是操作系统进行任务调度的基本单元。它与父进程的其它线程共享该进程所拥有的全部代码空间和全局变量,但拥有独立的堆栈(即局部变量对于线程来说是私有的)。
进程和线程都具有就绪、阻塞和运行三种基本状态。
联系
一个进程至少拥有一个线程——主线程,也可以拥有多个线程;一个线程必须有一个父进程。多个进程可以并发执行;一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。
区别
系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销
资源管理:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
通信方式:进程间通信主要包括管道、系统IPC(包括消息队列,信号量,共享存储)、SOCKET,具体说明参考linux进程间通信方式。进程间通信其实是指分属于不同进程的线程之间的通讯,所以进程间的通信方法同样适用于线程间的通信。但对应归于同一进程的不同线程来说,使用全局变量进行通信效率会更高。