JAVA常见面试题及解答

Foxpro中有关变量说法不正确的是( )。

A、变量是内存中的一个存储单元的位置,其中的内容可以变化

B、所属程序停止运行时,局部变量将被释放

C、局部变量可在所有过程和函数中使用

D、私有变量当定义此变量的过程结束时,该变量被相应释放

E、当变量和字段同名时,字段有优先被访问权


参考答案:C


类变量必须带有的修饰符是

A.static

B.final

C.public

D.Volatile


正确答案:D


若要把变量声名为多个线程共用的变量,应使用如下( )修饰符。

A.protected

B.prorate

C.transient

D.Volatile


正确答案:D


若要把变量声名为暂时性变量,应使用如下哪种修饰符?

A.protected

B.provate

C.transient

D.volatile


正确答案:C


若要把变量声名为多个线程共用的变量,应使用如下哪种修饰符?

A.protected

B.provate

C.transient

D.volatile


正确答案:D


JAVAJAVA 常见面试题及解答(精华)常见面试题及解答(精华)1)transient 和和 volatile 是是 java 关键字吗?(瞬联)关键字吗?(瞬联)如果用如果用 transient 声明一个实例变量,当对象存储时,它的值不需要维持。声明一个实例变量,当对象存储时,它的值不需要维持。 例如:class T transient int a; /不需要维持int b; /需要维持 这里,如果 T 类的一个对象写入一个持久的存储区域,a 的内容不被保存, 但 b 的将被保存。volatile 修饰符告诉编译器被修饰符告诉编译器被 volatile 修饰的变量可以被程序的其他部分改修饰的变量可以被程序的其他部分改 变。变。在多线程程序中,有时两个或更多的线程共享一个相同的实例变量。考虑 效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在 不同的时候更新,如当进入 synchronized 方法时。用 strictfp 修饰类或方法,可 以确保浮点运算(以及所有切断)正如早期的 Java 版本那样准确。切断只影响 某些操作的指数。当一个类被 strictfp 修饰,所有的方法自动被 strictfp 修饰。strictfp 的意思是 FP-strict,也就是说精确浮点的意思。在 Java 虚拟机进行 浮点运算时,如果没有指定 strictfp 关键字时,Java 的编译器以及运行环境在对 浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于 得到的结果往往无法令你满意。而一旦使用了 strictfp 来声明一个类、接口或者 方法时,那么所声明的范围内 Java 的编译器以及运行环境会完全依照浮点规范 IEEE-754 来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同 的硬件平台所执行的结果不一致的话,那就请用关键字 strictfp。你可以将一个类、接口以及方法声明为 strictfp,但是不允许对接口中的方 法以及构造函数声明 strictfp 关键字,例如下面的代码:strictfp interface A public strictfp class FpDemo1 strictfp void f() 2. 错误的使用方法interface A strictfp void f(); public class FpDemo2 strictfp FpDemo2() 一旦使用了关键字 strictfp 来声明某个类、接口或者方法时,那么在这个关 键字所声明的范围内所有浮点运算都是精确的,符合 IEEE-754 规范的。例如一个类被声明为 strictfp,那么该类中所有的方法都是 strictfp 的。2)抽象类和接口有什么区别?(瞬联)抽象类和接口有什么区别?(瞬联)1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用 一次继承关系。但是,一个类却可以实现多个 interface。2.在 abstract class 中可以有自己的数据成员,也可以有非 abstarct 的成员 方法,而在 interface 中,只能够有静态的不能被修改的数据成员(也就是必须 是 static final 的,不过在 interface 中一般不定义数据成员),所有的成员方法 都是 abstract 的。3.abstract class 和 interface 所反映出的设计理念不同。其实 abstract class 表示的是“is-a“关系,interface 表示的是“like-a“关系。4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象 方法。接口中则不能有实现方法。5.接口中定义的变量默认是 public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以 重新赋值。7.接口中的方法默认都是 public,abstract 类型的。3)能说一下)能说一下 java 的反射的反射(reflection)机制吗?(瞬联)机制吗?(瞬联)开放性和原因连接(causally-connected)是反射系统的两大基本要素4)在)在 java 中怎样实现多线程?(瞬联)中怎样实现多线程?(瞬联)extends Threadimplement Runnable方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个例子:public class MyThread extends Threadint count= 1, number;public MyThread(int num)number = num;System.out.println(“创建线程 “ + number);public void run() while(true) System.out.println(“线程 “ + number + “:计数 “ + count);if(+count= 6) return;public static void main(String args)for(int i = 0;i 5; i+) new MyThread(i+1).start();这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果我们的类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread 类,这时如果我们又不想建立一个新的类,应该怎么办呢?我们不妨来探索一种新的方法:我们不创建 Thread 类的子类,而是直接使用它,那么我们只能将我们的方法作为参数传递给 Thread 类的实例,有点类似回调函数。但是 Java 没有指针,我们只能传递一个包含这个方法的类的实例。那么如何限制这个类必须包含这一方法呢?当然是使用接口!(虽然抽象类也可满足,但是需要继承,而我们之所以要采用这种新方法,不就是为了避免继承带来的限制吗?)Java 提供了接口 java.lang.Runnable 来支持这种方法。方法二:实现 Runnable 接口Runnable 接口只有一个方法 run(),我们声明自己的类实现 Runnable 接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例,这一点通过 Thread 类的构造函数 public Thread(Runnable target);来实现。下面是一个例子:public class MyThread implements Runnableint count= 1, number;public MyThread(int num)number = num;System.out.println(“创建线程 “ + number);public void run()while(true)System.out.println(“线程 “ + number + “:计数 “ + count);if(+count= 6) return;public static void main(String args)for(int i = 0; i 5;i+) new Thread(new MyThread(i+1).start();严格地说,创建 Thread 子类的实例也是可行的,但是必须注意的是,该子类必须没有覆盖 Thread 类的run 方法,否则该线程执行的将是子类的 run 方法,而不是我们用以实现 Runnable 接口的类的 run 方法,对此大家不妨试验一下。使用 Runnable 接口来实现多线程使得我们能够在一个类中包容所有的代码,有利于封装,它的缺点在于,我们只能使用一套代码,若想创建多个线程并使各个线程执行不同的代码,则仍必须额外创建类,如果这样的话,在大多数情况下也许还不如直接用多个类分别继承 Thread 来得紧凑。综上所述,两种方法各有千秋,大家可以灵活运用。下面让我们一起来研究一下多线程使用中的一些问题。三、线程的四种状态三、线程的四种状态1. 新状态:线程已被创建但尚未执行(start() 尚未被调用)。2. 可执行状态:线程可以执行,虽然不一定正在执行。CPU 时间随时可能被分配给该线程,从而使得它执行。3. 死亡状态:正常情况下 run() 返回使得线程死亡。调用 stop()或 destroy() 亦有同样效果,但是不被推荐,前者会产生异常,后者是强制终止,不会释放锁。4. 阻塞状态:线程不会被分配 CPU 时间,无法执行。四、线程的优先级四、线程的优先级线程的优先级代表该线程的重要程度,当有多个线程同时处于可执行状态并等待获得 CPU 时间时,线程调度系统根据各个线程的优先级来决定给谁分配 CPU 时间,优先级高的线程有更大的机会获得 CPU 时间,优先级低的线程也不是没有机会,只是机会要小一些罢了。你可以调用 Thread 类的方法 getPriority() 和 setPriority()来存取线程的优先级,线程的优先级界于1(MIN_PRIORITY)和 10(MAX_PRIORITY)之间,缺省是 5(NORM_PRIORITY)。5)你用过哪种设计模式?(瞬联,)你用过哪种设计模式?(瞬联,IBM,aspenTech)设计:design模式:pattern框架:framework创建模式,结构模式和行为模式GoF 设计模式A.创建模式创建模式设计模式之 Factory(工厂模式)使用工厂模式就象使用 new 一样频繁.2002/10/9 更新设计模式之 Prototype(原型模式)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。设计模式之 Builder汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder 模式就是将这两种情况分开进行。设计模式之 Singleton(单态模式)保证一个类只有一个实例,并提供一个访问它的全局访问点 2002/10/9 更新B.结构模式结构模式设计模式之 Facade可扩展的使用 JDBC 针对不同的数据库编程,Facade 提供了一种灵活的实现.设计模式之 Proxy以 Jive 为例,剖析代理模式在用户级别授权机制上的应用设计模式之 Adapter使用类再生的两个方式:组合(new)和继承(extends),这个已经在“thinking in java“中提到过.设计模式之 Composite就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于和单位做买卖。文章中还对 Jive 再进行了剖析。设计模式之 DecoratorDecorator 是个油漆工,给你的东东的外表刷上美丽的颜色.设计模式之 Bridge将“牛郎织女“分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合)设计模式之 Flyweight提供 Java 运行性能,降低小而大量重复的类的开销.C.行为模式行为模式设计模式之 Template实际上向你介绍了为什么要使用 Java 抽象类,该模式原理简单,使用很普遍.设计模式之 Memento很简单一个模式,就是在内存中保留原来数据的拷贝.设计模式之 Observer介绍如何使用 Java API 提供的现成 Observer设计模式之 Chain of Responsibility各司其职的类串成一串,好象击鼓传花,当然如果自己能完成,就不要推委给下一个.设计模式之 Comman

以下关于变量的说法错误的是( )。

A.变量名必须是一个有效的标识符

B.变量在定义时可以没有初始值

C.变量一旦被定义,在程序中的任何位置都可以被访问

D.在程序中,可以将一个byte类型的值赋给一个int型类型的变量,不需要特殊声明


参考答案:C


下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问? ( )

A.private

B.无修饰符

C.public

D.protected


正确答案:B


下列( )修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问。

A.private

B.无修饰符

C.public

D.protected


正确答案:B


关于常成员函数,下列说法中错误的是

A.常成员函数无法更新对象的数据成员,但可以访问其他类的公用数据成员或全局变量

B.常成员函数无法更新对象的数据成员,但是可以更新该对象的常数据成员

C.常成员函数既可以被常对象调用,也可以被一般对象调用

D.常成员函数不仅要在声明中用到const修饰符,在定义时也必须使用const修饰符


正确答案:B
解析:本题考察const修饰符的使用规则,只要考生理解了const表示“常”的意思就容易举一反三。根据被修饰内容的不同,const在修饰数据成员,成员函数和对象时,具有特定的含义。很明显,常数据成员是不能被修改的,这一点在选项B中被破坏,因此可以确定本题答案为B,如果考生对其他选项难于区分,同样可以得到正确答案。


关于对象串行化,下列叙述正确的是______。

A.被储存和还原的对象如果引用了其他对象,这些对象不须同时存储和还原

B.串行化只能保存对象的非静态成员变量

C.串行化只能保存成员方法和静态的成员变量

D.串行化保存变量的任何修饰符


正确答案:B
解析:对象通过写出描述自己状态的数值来记录自己的过程称为对象的串行化。在被存储和还原的对象引用到其他的对象时,这些对象必须也能被同时存储和还原,以保证对象之间的关系。即如果变量是另一个对象的引用,则引用的对象也要串行化,所以选项A错误。串行化只能保存对象的非静态成员变量,不能保存成员方法和静态的成员变量,而且串行化只保存非静态成员变量的值,不保存变量的任何修饰符,所以选项C和D错误。此外,对于 transient类型的变量,串行化也不保存对应的值。

更多 “JAVA常见面试题及解答” 相关考题
考题 下面()修饰符可以使一个类中的成员变量能被不同包中的外部类调用。A、public;B、protected;C、private;D、没有修饰符。正确答案:A

考题 Class1类的属性被private修饰符修饰为私有变量,所以方法不能访问它. 。()此题为判断题(对,错)。答案:错

考题 单选题Objective-C语言中类的实例变量如果只可以被本类和其子类访问,需要下列哪个修饰符()A @publicB @privateC @protectedD @friendly正确答案:B解析:暂无解析

考题 填空题()变量在内存中只有一个拷贝,被该类的所有对象共享;每当创建一个实例,就会为()变量分配一次内存,()变量可以在内存中有多个拷贝,互不影响。正确答案:类,实例,实例解析:暂无解析

考题 单选题Foxpro中有关变量说法不正确的是()。A 变量是内存中的一个存储单元的位置,其中的内容可以变化B 所属程序停止运行时,局部变量将被释放C 局部变量可在所有过程和函数中使用D 私有变量当定义此变量的过程结束时,该变量被相应释放E 当变量和字段同名时,字段有优先被访问权正确答案:C解析:公共变量可在所有过程和函数中使用。

考题 单选题下面关于final说法错误的是()A final修饰的类不可以继承其他类B 内部类在访问局部变量的时候,局部变量需要使用final修饰C 被final修饰的引用类型变量内部的内容是可以发生变化的//地址值不能发生变化D final修饰的变量称为常量,这些变量只能赋值一次。正确答案:A解析:暂无解析

考题 ()变量在内存中只有一个拷贝,被该类的所有对象共享;每当创建一个实例,就会为()变量分配一次内存,()变量可以在内存中有多个拷贝,互不影响。正确答案:类;实例;实例

考题 填空题被static关键字修饰的成员变量被称为(),它可以被该类所有的实例对象共享正确答案:静态变量解析:暂无解析

考题 下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问()。A、privateB、无修饰符C、publicD、protected正确答案:B

考题 下面有关java threadlocal说法正确的有()。A、ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递B、线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收C、在Thread类中有一个Map,用于存储每一个线程的变量的副本D、对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式正确答案:A,B,C,D