java中级面试题及答案(Java面试题及答案)
JAVA面试题目
一、抽象策略角色:
public interface SuperCash {
public double acceptCash();
二、具体策略角色:
a..策略角色1(普通时间)
public class NormalCash implements SuperCash{
@Override
public double acceptCash() {
return 0.2;
b.策略角色2(5-8点)
public class MorningCash implements SuperCash{
@Override
public double acceptCash() {
return 0.4;
c.策略角色3(7-9点)
public class ForenoonCash implements SuperCash{
@Override
public double acceptCash() {
return 0.3;
三、环境角色
public class CashContext {
SuperCash superCash = null;
public CashContext(int time) {
if(time>=5&&time<=8){
superCash = new MorningCash();//策略2
}else if(time>=7&&time<=9){
superCash = new ForenoonCash();//策略3
}else{
superCash = new NormalCash ();//策略1
public double getResult() {
return this.superCash.acceptCash();
CashContext context = new CashContext(8);
System.out.println(“(策略模式)the result:”+context.getResult());
输出:0.3
import java.util.Scanner;
* 用JAVA编写,移动公司对每天打电话时间段收费不同,
* 假设5-8点每分钟4角,7-9点每分钟3角,其他时间2角,
* 输入打电话的时间段,判断收取费用,一定要用到策略模式。
public interface Strategy {
public double discout();
class DisStrategy1 implements Strategy{
@Override
public double discout() {
double price;
price=0.04;
return price;
class DisStrategy2 implements Strategy{
@Override
public double discout() {
double price;
price=0.03;
return price;
class DisStrategy3 implements Strategy{
@Override
public double discout() {
double price;
price=0.02;
return price;
//策略场景
class StrategyContext{
private Strategy strategy=null;
public Strategy getStrategy() {
return strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
public double disGetPrice()
return strategy.discout();
class Text{
public static void main(String[] args)
Scanner in=new Scanner(System.in);
Strategy strategy=null;
StrategyContext strategyContext=new StrategyContext();
System.out.println(“请输入你打电话的时间段:”);
try {
int time=in.nextInt();
switch (time) {
case 5:
case 8:
strategy=new DisStrategy1();
break;
case 7:
case 9:
strategy=new DisStrategy2();
break;
case 1:
case 2:
case 3:
case 4:
case 6:
case 10:
case 11:
case 12:
strategy=new DisStrategy3();
break;
default:
break;
strategyContext.setStrategy(strategy);
System.out.println(“你此时每分钟是”+strategyContext.getStrategy()+”多钱”);
} catch (Exception e) {
e.printStackTrace();
import java.util.Scanner;
* 用JAVA编写,移动公司对每天打电话时间段收费不同,
* 假设5-8点每分钟4角,7-9点每分钟3角,其他时间2角,
* 输入打电话的时间段,判断收取费用,一定要用到策略模式。
public interface Strategy {
public double discout();
class DisStrategy1 implements Strategy{
@Override
public double discout() {
double price;
price=0.04;
return price;
class DisStrategy2 implements Strategy{
@Override
public double discout() {
double price;
price=0.03;
return price;
class DisStrategy3 implements Strategy{
@Override
public double discout() {
double price;
price=0.02;
return price;
//策略场景
class StrategyContext{
private Strategy strategy=null;
public Strategy getStrategy() {
return strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
public double disGetPrice()
return strategy.discout();
class Text{
public static void main(String[] args)
Scanner in=new Scanner(System.in);
Strategy strategy=null;
StrategyContext strategyContext=new StrategyContext();
System.out.println(“请输入你打电话的时间段:”);
try {
int time=in.nextInt();
switch (time) {
case 5:
case 8:
strategy=new DisStrategy1();
break;
case 7:
case 9:
strategy=new DisStrategy2();
break;
case 1:
case 2:
case 3:
case 4:
case 6:
case 10:
case 11:
case 12:
strategy=new DisStrategy3();
break;
default:
break;
strategyContext.setStrategy(strategy);
System.out.println(“你此时每分钟是”+strategyContext.getStrategy()+”多钱”);
} catch (Exception e) {
e.printStackTrace();
public class my {
public my() {
// TODO Auto-generated constructor stub
* @param args
* @throws IOException
public static void main(String[] args){
// TODO Auto-generated method stub
float price;
int time;
time=4;
if(5<=time&&time<=8){
price=4;
else if(7<=time&&time<=9){
price=3;
else{
price=2;
System.out.println(“Time : “+time+” price : “+price);
可以用 if 判断 也可以用 switch。。。楼上的同志都说得蛮清楚了。。如果不懂再问我。。希望采纳!谢谢
java工程师面试问题及答案评分
1,abstract的method是否可同时是static,是否可同时是native,是否可同时是s
ynchronized?
都不能
2,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继
承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实
体类,但前提是实体类必须有明确的构造函数。
3,启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态
,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法
可以产生必须退出的标志来停止一个线程。
4,构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Ove
rloading。
5,是否可以继承String类?
String类是final类故不可以继承。
6,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此
对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
7,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不
会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
8,编程题: 用最有效率的方法算出2乘以8等於几?
有C背景的程序员特别喜欢问这种问题。
2 << 3
9,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话
对不对?
不对,有相同的hash code。
10,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并
可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传
递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中
改变,但对象的引用是永远不会改变的。
还没有评论,来说两句吧...