JAVA企业面试题精选 Java SE 71-80

3.71.什么是标示接口(Mark Interface),它与接口的区别在什么地方,并简单列举你知道的标示接口

参考答案:

  标示接口:标示接口是没有任何方法和属性的接口.标示接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型.当一个类实现了一个标示接口之后就像是给自己打了个标签.
  区别:标识接口没有任何方法和属性;而接口有方法或属性,或者既有方法又有属性.
  举例:java.io.Serializable,java.rmi.Remote

3.72.请使用Java语言定义一个具备栈功能的类,实现以下接口:

public interface StackInterface{
    void push(Object value);
    Object pop();
    boolean isEmpty();
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
参考答案:
public class Stack implements StackInterface{
    private int capacity = 100;
    private Object[] items;
    private int top = 0;

    //不带参数构造器
    public stack(){
        this(100);
    }

    //带参数构造器,参数为堆栈大小
    public stack(int cap){
        this.capacity = cap;
        items = new Object[cap];
    }

    @Override
    public boolean isEmpty(){
        if*(top == 0){
            return true;
        }
        return false;
    }

    @Override
    public Object pop(){
        Object temp = items[top];
        items[top] = null;
        top--;
        return temp;
    }

    @Override
    public void push(Object value){
        top++;
        items[top] = value;
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

3.73.编写一个程序,用户输入任何一个字符串之后,翻转输出其结构.其运行结果如下所示:

请输入一个字符串:我在学习Java程序设计
您输入了:计设序程avaJ习学在我

   
   
  • 1
  • 2
  • 3
参考答案:
import java.util.Scanner;

public class Q073{

    public static void main(String[] args){
        System.out.println("请输入一句话");
        Scanner in = new Scanner(Sytem.in);
        String input = in.nextLine();
        System.out.println("您输入了:")
        System.out.println(reverseString(input));
    }

    public static reverseString(String str){
        char[] chars = str.toCharArray();
        StringBuilder sb = new StringBuilder();
        for(int i = chars.length - 1; i >= 0; i--){
            sb.append(char[i]);
        }
        return sb.toString();
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3.74.请用面向对象的思想设计一个计算器程序,请写出程序框架(主要使用的类和方法)

参考答案:

Operation类:

public class Operation{
    private double numberA = 0;
    private double numberB = 0;

    public double GetResult(){
        double result = 0;
        return result;
    }

    public double getNumberA(){
        return numberA;
    }

    public void setNumberA(double numberA){
        this.numberA = numberA;
    }

    public double getNumberB(){
        return numberB;
    }

    public void setNumberB(double numberB){
        this.numberB = numberB;
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

OperationAdd类:

public class OperationAdd extends Operation{

    public double GetResult(){
        double result = 0;
        result = getNumberA() + getNumberB();
        return result;
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

OperationDiv类:

public class OperationDiv extends Operation{

    public double GetResult(){
        double result = 0;
        result = getNumberA() / getNumberB();
        return result;
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

OperationMul类:

public class OperationMul extends Operation{

    public double GetResult(){
        double result = 0;
        result = getNumberA() * getNumberB();
        return result;
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

OperationSub类:

public class OperationSub extends Operation{

    public double GetResult(){
        double result = 0;
        result = getNumberA() - getNumberB();
        return result;
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

OperationFactory类:

public class OperationFactory{

    public static Operation createOperate(char operate){
        Operation oper = null;
        switch (operate){
            case '+':
                Oper = new OperationAdd();
                break;
            case '-':
                oper = new OperationSub();
                break;
            case '*':
                oper = new OperationMul();
                break;
            case '/':
                oper = new OperationDiv();
                break;
            default;
                break;
        }
        return oper;
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

Calculator类:

import java.util.Scanner;

public class Calculator{

    public static void main(String[] args){
        Operation oper;
        oper = OperationFactory.createOperate('+');
        System.out.println("请输入_numberA:");
        Scanner s = new Scanner(System.in);
        oper.setNumberA(s.nextDouble());
        System.out.println("请输入_numberB:");
        oper.setNumberB(s.nextDouble());
        double result = oper.GetResult();
        System.out.println("结果是:" + result);
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3.75.写一个函数,2个参数,1个字符串,1个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码:如(“我ABC”,4)应该截为”我AB”,输入(“我ABC 汉DEF”,6)应该输出为”我ABC”而不是”我ABC+汉的半个”.

参考答案:
    public static String subString(String str, int subBytes){
        int bytes = 0;//用来储存字符串的总字节数
        for(int i = 0; i < str.length(); i++){
            if(bytes == subBytes){
                return str.substring(0,i);
            }
            char c = str.charAt(i);
            if(c < 256){
                bytes += 1;//英文字符的字节数看作1
            } else {
                bytes += 2;//中文字符的字节数看作2
                if(bytes - subBytes == 1){
                    return str.substring(0,i);
                }
            }
        }
        return str;
    }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

3.76.日期和时间:

1)如何取得年月日,小时分秒?
2)如何取得从1970年到现在的毫秒数?
3)如何取得某个日期的当月的最后一天?
4)如何格式化日期?
参考答案:

1)创建java.util.Calendar实例(Calendar.getInstance()),调用其get()方法传入不同的参数即可获得参数所对应的值,如:calendar.get(Calendar.YEAR);//获得年
2)以下方法均可获得该毫秒数:

Calender.getInstance().getTimeInMillis();
System.currentTimeMillis();
   
   
  • 1
  • 2

3)取得某个日期的当月的最后一天的示例代码如下:

Calendar time = Calendar.getInstance();
time.getActualMaximum(Calendar.DAY_OF_MONTH));
   
   
  • 1
  • 2

4)利用java.text.DateFormat类中的format()方法可将日期格式化.

3.77.写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数

参考答案:
    public int countWords(String file,String find) throws Exception{
        int count = 0;
        Reader in = new FileReader(file);
        int c;
        while((c = in.read()) != -1){
            while(c == find.charAt(0)){
                for(int i = 1; i < find.length(); i++){
                    c = in.read();
                    if(c != find.charAt(i)){
                        break;
                    }
                    if(i == find.length() - 1){
                        count++;
                    }
                }
            }
        }
        return count;
    }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.78.写一个函数,要求输入一个字符串和一个字符的长度,对该字符串进行分割隔

参考答案:
    public String[] split(String str, int chars){
        int n = (str.length() + chars - 1) / chars;
        String ret[] = new String[n];
        for(int i = 0; i < n; i++){
            if(i < n - 1){
                ret[i] = str.substring(i * chars, (i + 1) * chars);
            } else {
                ret[i] = str.substring(i * chars);
            }
        }
        return ret;
    }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.79.Java类实现序列化的方法.在COLLECTION框架中,实现比较要实现什么样的接口?

参考答案:

  Java类实现序列化的方式为使用序列化的类实现java.io.Serializable接口;
  Collection框架中实现比较要实现Comparable接口或Comparator接口.

3.80.设计4个线程,其中两个线程每次对j增加1,另两个线程对j每次减少1;写出程序

参考答案:
public class TestThread{
    private int j;
    private Object obj = new Object();  

    public TestThread(int j){
        this.j = j;
    }

    class Dec extends Thread{
        public void run(){
            synchronized(obj){
                j--;
            }
        }
    }

    class Inc implements Runnable{
        public void run(){
            synchronized(obj){
                j++;
            }
        }
    }

    public static void main(String[] args){
        new TestThread(0).new Dec().start();
        new TestThread(0).new Dec().start();
        new Thread(new TestThread(0).new Inc()).start();
        new Thread(new TestThread(0).new Inc()).start();
    }
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值