Java11.26笔试题

单选题

1.Java程序的执行过程中用到一套JDK工具,其中java.exe是指 ( B )

A. 文档生成器 B. 解释器 C. 编译器 D. 分解器
解析:javac是编译器,把java代码编译成字节码。java是解释器,解释执行字节。

2.下列语句那一句是正确的( B )

A.java程序经过编译后产生machine code

B.Java程序编译后产生byte code

C.Java程序编译后产生DLL

D.以上都不正确

解析:Java程序编译后产生.class文件也就是上面说的byte code文件。machine code 机器码就是计算机可以直接执行,并且执行速度最快的代码,是基于"O"和"I"字符的流。 DLL(Dynamic Link Library)文件即库文件,是动态链接库文件,又称“应用程序拓展”,是软件文件类型。

3.下列说法正确的有 ( C )

A.class中的constructor不可省略

B.constructor必须与class同名,但方法不能与class同名

C.constructor在对象被new时执行

D.一个class只能定义一个constructor

解析:class中的constructor可以省略,这时类在加载的过程中会自动生成一个无参的constructor,当自己手动添加constructor,类不再自动生成constructor。

constructor必须与class同名,方法能与class同名。例如我创建了一个Person类,类中可以有一个 public int Person(){} 方法,该方法不是构造方法。

使用new关键字实例化对象的时候被实例化的类会调用构造方法来初始化类。

一个类中可以有0或0个以上构造方法

4.提供Java存取数据库能力的包是(A)

A.java.sql    B.java.awt    C.java.lang    D.java.swing

解析:java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。

java.awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类。

java.lang包是java语言的核心,它提供了java中的基础类。包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等最基本的类。

Java Swing是Java Foundation Classes(JFC)的一部分。在Swing中,Sun开发了一个经过仔细设计的、灵活而强大的 GUI 工具包。Swing是在AWT组件基础上构建的。它所提供的功能要比AWT提供的更为广泛。它也是Java技术的一种标准配置

5.下列运算符合法的是(D)

A.&&    B.<>   C.if    D. :=

解析:&& 短路与,Java逻辑运算符,同真则真;<> sql中常用的不等于,Java中不等于用 !=表示;if是一个判定语句,不属于运算符;在go语言中:= 是声明并赋值,并且系统自动推断类型,不需要var关键字 例如:d := 100

6.下列哪一种叙述是正确的(D)

A.abstract修饰符可修饰字段、方法和类;

B.抽象方法的body部分必须用一对大括号{}包住

C.声明抽象方法,大括号可有可无

D.抽象方法不可写出大括号

解析:抽象方法是一种特殊的方法,只有声明,没有函数体。抽象类不能用final来修饰 抽象方法也不能被final修饰因为被final修饰后,抽象类和抽象方法将无法使用即抽象类无法继承,抽象方法无法重写

7.下列语句正确的是(A)

A.形式参数可被视为local variable

B.形式参数可被字段修饰符修饰

C.形式参数为方法被调用时,真正被传递的参数

D.形式参数不可以是对象

解析:local variable 是一个局部变量,形参和局部变量一样都不能离开方法,都只能在方法内才会发生作用;

对于形式参数只能被final修饰,其它任何修饰符都会引起编译器错误。但是用这个修饰符也有一定的限制,就是在方法中不能对参数做任何修改。 不过一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类。  一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。

真正被传递是实际参数,形参可以理解成一个装载实际参数的容器

所有的参数传递都是通过对象传递的,实际上传递的是该参数的引用

8.下列哪种说法是正确的(D)

A.实例方法可直接调用超类的实例方法

B.实例方法可以直接调用超类的类方法

C.实例方法可直接调用其他类的实例方法

D.实例方法可直接调用本类的类方法

解析:实例方法和类方法的定义与实例变量与类变量的相同,都是通过有无static关键字来进行区分,方法类型前有static的为类方法,反之则为实例方法。简而言之带static的就是“类”的不带static就是“实例”

实例方法可以调用超类的非private方法,并且如果实例方法与超类的实例方法同名的时候必须使用super调用超类的实例方法。【这题感觉题目出得挺有问题的】

9.jsp指令中isELIgnored="boolean"的意思是(C)

A.决定是否实现Servlet的单线程模式

B.决定该页面是否是一个错误处理页面

C.决定是否支持EL表达式

D.没有具体含义

解析:isELIgnored="boolean" 可以控制一组JSP是否使用EL,在每个JSP中也可以指定是否该JSP使用EL。在page directive中的isELIgnored属性用来指定是否忽略。

10.下面哪个不是表单标记(D)

A.INPUT     B.RADIO     C.CHECKBOX     D.TR

解析:tr是一种HTML语言标签

多选题

1、下列说法错误的有:(A C D)

A.在类方法中可用this来调用本类的类方法

B.在类方法中调用本类的类方法式可直接调用

C.在类方法中只能调用本类的类方法

D.在类方法中绝对不能调用实例方法

解析:静态方法中不能使用this关键字

2、下列说法正确的有(BCD)

A.环境变量可在编译source code时指定

B.在编译程序时,所能执行的环境变量不包括class path

C.javac一次可同时编译数个Java源文件

D.javac.exe能指定编译结果要置于哪个目录下(directoy)

解析:环境变量是指Java JDK的位置,我们在CMD下运行Java程序前,必须先启动这些工具,所有需要在编译source code前指定环境变量。

3、下列正确的有(ACD)

A.call by value不会改变实际参数的数值 

B.call by reference能改变实际参数的参考地址 [引用指向的地址]

C.call by reference不能改变实际参数的参考地址

D.call by reference 能改变实际参数的内容 [最直观的就是对数组进行操作了]

解析:关于JAVA中参数传递问题有两种,一种是按值传递call by value(如果是基本类型),另一种是按引用传递call by reference(如果是對象).。实际上JAVA中的参数传递全是以值传递的:是基本类型,就拷贝一个基本类型传进方法;是引用,就拷贝一个引用变量传进去方法

具体可以看一下这篇博客,这里就不再累叙

4、下列说法错误的有(ABC)

A.Java面向对象语言容许单独的过程与函数存在

B.Java面向对象语言容许单独的方法存在

C.Java语言中的方法属于类中的成员(member)

D.Java语言中的方法必定隶属于某一类(对象),调用方法与存储过程或函数相同

解析:带static的才是类的成员包括:类的成员方法,类的成员属性

编程题

1、实现一个方法,给定一个输入字符串,能够删除所有连续同样字母(大小写不敏感)。例如,输入为ABBCCCCCBBAB,输出就是 ABCBAB;又如,输入为 aAC,输出则是 aC

public static String delete_All_Consecutive_Identical_Letters(String string){
        StringBuilder sb = new StringBuilder();
        char[] chars = string.toCharArray();
        for (int i = 0;i < chars.length; i++) {
            if(i==0){
                sb.append(chars[0]);
            } else if (!String.valueOf(chars[i]).equalsIgnoreCase(String.valueOf(chars[i-1]))){
                sb.append(chars[i]);
            }
        }
        return sb.toString();
    }

2、实现一个方法,能够生成一个随机字符串数组。这些字符串必须是不一样的,每个字符串由字母和数字组成。方法输入参数有两个:- Count:字符串数目,- Str_length: 字符串长

因为感觉这道题目有点歧义,所以写了两个不同的版本
版本一:字符串数组中每个元素都是不一样的

//初始化源
    public static void charAll(ArrayList a){
        for (char i = 'a';i <= 'z';i++) {
            a.add(i);
        }
        for(char i ='A';i<='Z';i++) {
            a.add(i);
        }

    }

    /**
     * 实现一个方法,能够生成一个随机字符串数组。
     * 这些字符串必须是不一样的,每个字符串由字母和数字组成。【注意是字母+数字】
     * 方法输入参数有两个:- Count:字符串数目,- Str_length: 字符串长 【第一个参数用来控制数组元素个数,第二个参数用来确定元素的长度】
     * @param count
     * @param str_length
     * @return
     */
    public static List<String> rd(int count, int str_length){
        List<String> list=new ArrayList<String>();
        //字母和数字组成
        ArrayList a = new ArrayList();
        charAll(a);
        //使用set去重功能,保证数据的唯一性
        HashSet set = new HashSet();
        //这里不能用for,否则无法保证数组内各个元素之间是否没有重复的元素
        while (set.size() != count){
            StringBuilder stringBuilder = new StringBuilder();
            //为了保证每个字符串中都能带数字,这里只生成一个比要求生成长度的少一位的字符串
            for (int j = 0; j < str_length-1; j++){
                //生成随机字符串
                int random = (int)(Math.random()* a.size());
                stringBuilder.append(a.get(random));
            }
            //保证每个字符串都带有数字
            stringBuilder.append((int)(Math.random()*10));
            set.add(stringBuilder);
        }
        for (Iterator it = set.iterator();it.hasNext();) {
            list.add(it.next().toString());
        }
        return list;
    }

版本二:字符串数组中每个元素都不一样的同时,字符串中不出现相同的字符

 /**
     * 实现一个方法,能够生成一个随机字符串数组。
     * 这些字符串必须是不一样的,每个字符串由字母和数字组成。【注意是字母+数字】
     * 方法输入参数有两个:- Count:字符串数目,- Str_length: 字符串长 【第一个参数用来控制数组元素个数,第二个参数用来确定元素的长度】
     * @param count
     * @param str_length
     * @return
     */
    public static List<String> rd(int count, int str_length){
        List<String> list=new ArrayList<String>();
        //字母和数字组成
        ArrayList a = new ArrayList();
        charAll(a);
        //使用set去重功能,保证数据的唯一性
        HashSet set = new HashSet();
        //这里不能用for,否则无法保证数组内各个元素之间是否没有重复的元素
        while (set.size() != count){
            HashSet set1 = new HashSet();
            //为了保证每个字符串中都能带数字,这里只生成一个比要求生成长度的少一位的字符串,保证每个字母都不一样,忽略大小写
            while (set1.size() < str_length-1){
                //生成随机字符串
                int random = (int)(Math.random()* a.size());
                set1.add(a.get(random));
            }
            //保证每个字符串都带有数字
            set1.add((int)(Math.random()*10));
            StringBuilder stringBuilder = new StringBuilder();
            for (Iterator it = set1.iterator();it.hasNext();) {
                stringBuilder.append(it.next().toString());
            }
            set.add(stringBuilder);
        }
        for (Iterator it = set.iterator();it.hasNext();) {
            list.add(it.next().toString());
        }
        return list;
    }

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值