JAVA基础每日一练2022-10-02

发布于:2022-12-02 ⋅ 阅读:(976) ⋅ 点赞:(0)
清醒时做事,迷茫时读书,独处时思考,烦躁时运动,得意时淡然,失意时坦然,忙碌时专注,闲暇时蓄力。

题目:

① 关键字( )表明一个对象或变量的引用在初始化后不能被修改。

​ A、private

​ B、final

​ C、static

​ D、没有这种关键字

② 关于抽象类叙述正确的是? ( )

​ A、抽象类不能实现接口

​ B、抽象类必须有“abstract class”修饰

​ C、抽象类必须包含抽象方法

​ D、抽象类也有类的特性,可以被实例化

③ 执行完以下代码 int [ ] x = new int[10] ;后,以下哪项说明是正确的( )

​ A、x[9]为0

​ B、x[9]未定义

​ C、x[10]为0

​ D、x[0]为空

④ 如果一个接口Cow有个public方法drink(),有个类Calf实现接口Cow,则在类Calf中正确的是? ( )

​ A、void drink() { …}

​ B、protected void drink() { …}

​ C、public void drink() { …}

​ D、以上语句都可以用在类Calf中

⑤ 有一个源代码,只包含import java.util.* ; 这一个import语句,下面叙述正确的是? ( )

​ A、只能写在源代码的第一句

​ B、可以访问java/util目录下及其子目录下的所有类

​ C、能访问java/util目录下的所有类,不能访问java/util子目录下的所有类

​ D、编译错误

⑥ 当我们需要所有线程都执行到某一处,才进行后面的的代码执行我们可以使用?

​ A、CountDownLatch

​ B、CyclicBarrier

​ C、Semaphore

​ D、Future

⑦ 关于java编译和运行命令叙述不正确的是? ( )

​ A、运行“java Scut.class”

​ B、运行“java Scut”

​ C、编译 Scut.java文件,使用“javac Scut.java”命令的输出文件是Scut.class

​ D、java这个命令的运行对象是Scut.class

⑧ String s = new String(“xyz”);创建了几个StringObject?

​ A、两个或一个都有可能

​ B、两个

​ C、一个

​ D、三个

⑨ 在Java中,关于HashMap类的描述,以下正确的是 ()

​ A、HashMap使用键/值得形式保存数据

​ B、HashMap 能够保证其中元素的顺序

​ C、HashMap允许将null用作键

​ D、HashMap允许将null用作值

⑩ Java 7 特性中,abstract class和interface有什么区别。

​ A、抽象类可以有构造方法,接口中不能有构造方法

​ B、抽象类中可以有普通成员变量,接口中没有普通成员变量

​ C、抽象类中不可以包含静态方法,接口中可以包含静态方法

​ D、一个类可以实现多个接口,但只能继承一个抽象类。

解析:

① B

使用final修饰的变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改。如果是引用类型的变量,则在对其初始化之后不能指向一个另一个对象。即 引用变量不可变,引用变量指向的对象的内容可变。

② B

*jdk1.8之前*

*接口*

1.多实现

2.变量类型默认且只能为 public static final

3.函数(方法) 类型默认且只能为public,只能有public类型的静态成员函数

4.非静态成员函数没有方法体,静态成员函数有方法体

5.子类必须实现所有接口函数

6.可以有main方法;可以new一个接口,需要在方法体中实现所有接口函数

7.没有构造器

*抽象类*

1.单继承

2.变量类型不限(静态变量+非静态变量)

3.函数类型不限(静态函数+非静态函数)

4.非静态函数包含没有方法体的抽象函数. 有方法体的普通函数

5.子类可以不覆写父类的抽象方法,但子类也要申明为抽象类;子类可以选择覆写父类的非抽象方法

6.可以有main方法;不可以new一个抽象类

7.可以有构造器

*Jdk1.8*

*接口中可以有default类型的方法,实现类可以选择实现该方法*

****意义:****默认方法的主要优势是提供一种拓展接口的方法,而不破坏现有代码。另一个优势为该方法是可选的,子类可以根据不同的需求Override或默认实现。

③ A

基本类型数组:

​ byte[]、short[]、int[]、long[] 默认值为0;

​ char[] 默认值为 \u0000;

​ boolean[]默认值为 false;

​ float[] 、double[] 默认值为 0.0;

对象类型数组:

​ 默认值为 null

④ C

子类重写父类方法时,子类方法的访问权限不能小于父类方法的访问权限。在接口中,方法的默认权限就是 public,所以子类重写后只能是 public

⑤ C

导入java.util.*不能读取其子目录的类,因为如果java.util里面有个a类,java.util.regex里面也有个a类,我们若是要调用a类的方法或属性时,应该使用哪个a类呢。

⑥ B

链接:https://www.nowcoder.com/questionTerminal/c39e3eb52191404789349ec5b21476cf
来源:牛客网

在csdn看到的countDownLatch和cyclicBarrier的形象比喻,就是在百米赛跑的比赛中若使用 countDownLatch的话冲过终点线一个人就给评委发送一个人的成绩,10个人比赛发送10次,如果用CyclicBarrier,则只在最后一个人冲过终点线的时候发送所有人的数据,仅仅发送一次,这就是区别。

⑦ A

Java程序运行机制步骤
首先利用IDE集成开发工具编写Java源代码,源文件的后缀为.java;
再利用编译器(javac命令)将源代码编译成字节码文件,字节码文件的后缀名 为.class;

运行字节码的工作是由解释器(java命令)来完成的。

javac xx.java 编译

java xx 运行

⑧ A

用new关键字创建字符串对象时,JVM会先检查字符串常量池中时候有存在的对应字符串,如果已经存在,则不会在字符串常量池中创建,如果没有存在,那么就会在字符串常量池中创建一个字符串对象,然后还会去堆内存中创建一份字符串对象,把常量池中的对象内容拷贝到内存中的字符串对象,然后返回堆内存中的字符串对象内存地址。综上所述,选项A正确。

⑨ ACD
Map集合类 key value
HashMap 允许为null 允许为null
TreeMap 不允许为null 允许为null
ConcurrentMap 不允许为null 不允许为null
HashTable 不允许为null 不允许为null
⑩ ABD

含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
\4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
\5. 抽象类中可以包含静态方法,接口中不能包含静态方法
\6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
\7. 一个类可以实现多个接口,但只能继承一个抽象类。
下面接着再说说两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,

例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码,伪代码如下:

package com.lei;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public abstract class BaseServlet extends HttpServlet {

 /**
 * serialVersionUID属性概述
 * 
 */
 private static final long serialVersionUID = 1L;

 public final void service(HttpServletRequest request,
 HttpServletResponse response) throws IOException, ServletException {
 // 记录访问日志
 // 进行权限判断
 if (true)// if条件里写的是“具有权限”
 {
 try {
 doService(request, response);
 } catch (IOException e) {
 // 记录异常信息
 }
 }

 }

 protected abstract void doService(HttpServletRequest request,
 HttpServletResponse response) throws IOException, ServletException;
}

实现类如下:

package com.lei;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends BaseServlet{

 /**
 * serialVersionUID属性概述
 * 
 */
 private static final long serialVersionUID = 1L;

 @Override
 protected void doService(HttpServletRequest request,
 HttpServletResponse response) throws IOException, ServletException {
 // TODO Auto-generated method stub
 
 }

}

父类方法中间的某段代码不确定,留给子类干,就用模板方法设计模式。
备注:这道题的思路是先从总体解释抽象类和接口的基本概念,然后再比较两者的语法细节,最后再说两者的应用区别。
比较两者语法细节区别的条理是:先从一个类中的构造方法、普通成员变量和方法(包括抽象方法),静态变量和方法,继承性等6个方面逐一去比较回答,接着从第三者继承的角度的回答,特别是最后用了一个典型的例子来展现自己深厚的技术功底。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到