Java专项练习一(选择题)

每天的学习记录,加油!

1、在程序代码中写的注释太多,会使编译后的程序尺寸变大。==错

解析:(注释是给人看的,只是为了方便程序员阅读理解代码,编译器不会读注释,只会读代码程序)

2、StringBuffer类对象创建之后可以再修改和变动。

解析:(1.String对象不可变、StringBuffer对象可变的含义: 举个例子:String str = “aa”; str = “aa”+“bb”; 此时str的值为"aabb",但是"aabb"不是在开始的字符串"aa"后面直接连接的"bb",而是又新生成了字符串"aabb",字符串"aa"一旦被初始化,那么它的值不可能再改变了。 StringBuffer strb = StringBuffer(“aa”); strb.append(“bb”); 此时的strb的值也为"aabb",但是"aabb"是直接在开始的字符串"aa"后面连接的“bb”,并没有生成新的字符串。)

3、假定AB为一个类,则执行 “AB ab = new AB(a,5);”语句时将自动调用该类的。

A带参构造函数== B无参构造函数 C拷贝构造函数 D重载赋值运算

解析:(类的实例化,创建一个类AB的对象ab,并使用new运算符给类AB中的构造函数中的参数初始化。)

4、假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?

public class A
{
public int i;
static String s;
void method1(){}
static void method2(){}
}
A.System.out.println(a.i); B.a.method1();
C.A.method1(); D.A.method2();

解析:( 静态成员和静态方法,可以直接通过类名进行调用,D对,C错;
其他的成员和方法则需要进行实例化成对象之后,通过对象来调用,A,B对)

5、下面的代码运行的结果是:(B

class B extends Object
{
   
   
    static
    {
   
   
        System.out.println("Load B");
    }
    public B()
    {
   
   
        System.out.println("Create B");
    }
}
class A extends B
{
   
   
    static
    {
   
   
        System.out.println("Load A");
    }
    public A()
    {
   
   
        System.out.println("Create A");
    }
} 
public class Testclass
{
   
   
    public static void main(String[] args)
    {
   
   
        new A();
    }
}

A.Load B ->Create B->Load A -> Create A
B.Load B -> Load A ->Create B ->Create A
C.Load B -> Create B-> Create A -> Load A
D.Create B ->Create A ->Load B ->Load A

解析:(执行顺序:“静态初始化块 ”先于 “非静态初始化” 先于 “构造函数执行”
父类静态代码块-》子类静态代码块-》父类构造代码块-》父类构造函数-》子类构造代码块-》子类构造函数)

6、关于抽象类和接口叙述正确的是?

A.抽象类和接口都能实例化的 B.抽象类不能实现接口
C.抽象类方法的访问权限默认都是public
D.接口方法的访问权限默认都是public

解析:(抽象类和接口的特点)

7、对于application,主线程main()方法执行的线索,对于applet,主线程是浏览器加载并执行java小程序。

8、 在java的一个异常处理中,可以包含多个的语句块是 。

A.try B.finally C.throws D.catch
解析:考点:异常处理
捕获异常:
try{
//代码块
}catch(异常类型,例如:Exception e){
//需要抛出的异常,例如:e.printStackTrace();
}catch(异常类型){
//需要抛出的异常
}finally{
//必定执行的代码块
}
在一个异常处理中catch语句块是可以多个的,也就是可以抛出多个异常。

9、在Java中,HashMap中是用哪些方法来解决哈希冲突的?

A.开放地址法 B.二次哈希法 C.链地址法 D.建立一个公共溢出区

10、下面有关java的一些细节问题,描述错误的是?()

A.构造方法不需要同步化
B.一个子类不可以覆盖掉父类的同步方法
C.定义在接口中的方法默认是public的
D.容器保存的是对象的引用

11、以下多线程对int型变量x的操作,哪个不需要进行同步()

A.++x B.x=y C.x++ D.x=1

**12、

public class Test
{
   
   
    public int x;
    public static void main(String []args)
    {
   
   
        System. out. println("Value is" + x);
    }
}

对于上面这段代码,以下说法正确的是:
A.程序会打出 “Value is 0”
B.程序会抛出 NullPointerException
C.非静态变量不能够被静态方法引用
D.编译器会抛出 "possible reference before assignment"的错误**
解析:(当类加载时,static静态方法随着类加载而初始化,此时实例对象还未被创建,但是非静态成员变量需要等到实例对象创建才会被初始化,故无法被引用。 )

13、下列哪项不属于jdk1.6垃圾收集器?
A.Serial收集器
B.parNew收集器
C.CMS收集器
D.G1收集器

14、Integer i = 42;
Long l = 42l;
Double d = 42.0;
下面为true的是
A.(i == l)
B.(i == d)
C.(l == d)
D.i.equals(d)
E.d.equals(l)
F.i.equals(l)
G.l.equals(42L)

解析( 包装类的“==”运算在不遇到算术运算的情况下不会自动拆箱
包装类的equals()方法不处理数据转型 )

15、以下对继承的描述错误的是()
A.Java中的继承允许一个子类继承多个父类
B.父类更具有通用性,子类更具体
C.Java中的继承存在着传递性
D.当实例化子类时会调用父类中的构造方法

解析:(java不能执行多继承)

16、java用()机制实现了进程之间的同步执行
A.监视器
B.虚拟机
C.多个CPU
D.异步调用

17、下列哪一项的实现不可以添加为 TextField 对象的监听器()
A.MouseMotionListener
B.FocusListener
C.WindowsListener
D.ActionListener

18、 DBMS 中实现事务持久性的子系统是()
A.安全性管理子系统
B.完整性管理子系统
C.并发控制子系统
D.恢复管理子系统

19、下列选项中属于面向对象程序设计语言特征的是()
A.继承性
B.多态性
C.相似性
D.封装性

20、int,String,*point,union哪些不是 Java 的数据类型?C D
A.int
B.String
C.*point
D.union
引用数据类型,String为字符串类,属于引用数据类型

21、对Collection和Collections描述正确的是
A.Collection是java.util下的类,它包含有各种有关集合操作的静态方法
B.Collection是java.util下的接口,它是各种集合结构的父接口
C.Collections是java.util下的接口,它是各种集合结构的父接口
D.Collections是java.util下的类,它包含有各种有关集合操作的静态方法

解析:( java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。)

22、 下面哪几个函数 public void example(){…} 的重载函数?()
A.public void example(int m){…}
B.public int example(){…}
C.public void example2(){…}
D.public int example(int m,float f){…}

解析:java重载的时候以参数个数和类型作为区分,方法名相同,返回类型可以相同也可以不同,但不以返回类型作为区分,所以b也是错的,因为b的参数列表和原来的一样。

23、下面说法正确的是?()
A.调用Thread的sleep()方法会释放锁,调用wait()方法不释放锁
B.一个线程调用yield方法,可以使具有相同优先级线程获得处理器
C.在Java中,高优先级的可运行的线程会抢占低优先级线程的资源

D.java中,线程可以调用yield方法使比自己低优先级的线程运行

24、下面哪些Java中的流对象是字节流?
A.FileInputStream
B.BufferedInputStream
C.PushbackInputStream
D.ByteArrayInputStream

解析:stream结尾都是字节流,reader和writer结尾都是字符流 两者的区别就是读写的时候一个是按字节读写,一个是按字符。 实际使用通常差不多。 在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。 只是读写文件,和文件内容无关的,一般选择字节流。

25、Gadget has-a Sprocket and Gadget has-a Spring and Gadget is-a Widget and Widget has-a
Sprocket 以下哪两段代码可以表示这个关系? (选择两项) ( )
A.class Widget { Sprocket s; }
class Gadget extends Widget { Spring s; }

B.class Widget { }
class Gadget extends Widget { Spring s1; Sprocket s2; }
C.class Widget { Sprocket s1; Spring s2; }
class Gadget extends Widget { }

D.class Gadget { Spring s; }
class Widget extends Gadget{ Sprocket s; }

解析:
is-a 表示继承:Gadget is-a Widget就表示Gadget 继承 Widget;
has-a表示从属:Gadget has-a Sprocket就表示Gadget中有Sprocket的引用,Sprocket是Gadget的组成部分;
like-a表示组合:如果A like-a B,那么B就是A的接口

26、JAVA反射机制主要提供了以下哪些功能?
A.在运行时判断一个对象所属的类
B.在运行时构造一个类的对象
C.在运行时判断一个类所具有的成员变量和方法
D.在运行时调用一个对象的方法

27、有关静态初始化块说法正确的是?
A.无法直接调用静态初始化块
B.在创建第一个实例前或引用任何静态成员之前,将自动调用静态初始化块来初始化
C.静态初始化块既没有访问修饰符,也没有参数

D.在程序中,用户可以控制合适执行静态初始化块

解析: java对象初始化顺序
父类静态代码块,父类静态成员变量(同级,按代码顺序执行)
子类静态代码块,子类静态成员变量(同级,按代码顺序执行)
父类普通代码块,父类普通成员变量(同级,按代码顺序执行)
父类构造方法
子类普通代码块,子类普通成员变量(同级,按代码顺序执行)
子类构造方法
注意点:
静态内容只在类加载时执行一次,之后不再执行。
默认调用父类的无参构造方法,可以在子类构造方法中利用super指定调用父类的哪个构造方法。

28、判断一块内存空间是否符合垃圾收集器收集的标准有哪些?
A.给对象赋予了空值null,以下再没有调用过
B.对象重新分配了内存空间

C.给对象赋予了空值null
D.给对象赋予了新值

29、有关会话跟踪技术描述正确的是
A.Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端
B.关闭浏览器意味着临时会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期
C.在禁用Cookie时可以使用URL重写技术跟踪会话

D.隐藏表单域将字段添加到HTML表单并在客户端浏览器中显示

30、character流和byte流的区别不包括
A.每次读入的字节数不同
B.前者带有缓冲,后者没有。

C.前者是字符读入,后者是字节读入。
D.二者没有区别,可以互换。

31 、在使用 interface 声明一个外部接口时,只可以使用( )修饰符修饰该接口。
A.private
B.protected
C.private protected
D.public

解析:接口的方法都是 public abstract 变量都是public static final的

32、 下面所示的java代码,运行时,会产生()类型的异常
int Arry_a[] = new int[10];
System.out.println(Arry_a[10]);
A.ArithmeticException
B.NullPointException
C.IOException
D.ArrayIndexOutOfBoundsException

解析: 定义的数组长度为10,角标即为0-9
访问数组角标10会出现数组角标越界异常

33、javac的作用是( )。
A.将源程序编译成字节码
B.将字节码编译成源程序
C.解释执行Java字节码
D.调试Java代码

解析:javac将源程序编译成.class文件,字节码;java将字节码转为机器码,.exe程序

34、 执行完以下代码 int [ ] x = new int[10] ;后,以下哪项说明是正确的( )
A.x[9]为0
B.x[9]未定义
C.x[10]为0
D.x[0]为空

解析:数组引用类型的变量的默认值为 null。当数组变量的实例后,如果没有没有显示的为每个元素赋值,Java 就会把该数组的所有元素初始化为其相应类型的默认值。
byte[],short[],int[] ,默认值为0,
boolean[]默认值为false
float[],double[],默认值为0.0
对象类型数组:
默认值为null

35、在Java中,HashMap中是用哪些方法来解决哈希冲突的?
A.开放地址法
B.二次哈希法
C.链地址法
D.建立一个公共溢出区

36、String str =
“”;
System.out.print(str.split(",").length);
A.0
B.1
C.出现异常

解析:String split 这个方法默认返回一个数组, 如果没有找到分隔符,会把整个字符串当成一个长度为1的字符串数组返回到结果, 所以此处结果就是1 。

37、URL u =new URL(“http://www.123.com”);。如果www.123.com不存在,则返回______。
A.http://www.123.com
B.””
C.null
D.抛出异常

解析:我们在执行URL u =new URL(“http://www.123.com”);这句话的时候确实要抛出异常,但是这个异常属于IOException,不管网址是否存在,最后都会返回该网址的一个连接,打印出来就是该网址。

38、Java创建对象的说法正确的有()
A.用new语句创建对象,是最常见的创建对象的方法。
B.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
C.调用对象的clone()方法。
D.运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

解析: Java有5种方式来创建对象:

使用 new 关键字(最常用): ObjectName obj = new ObjectName();
使用反射的Class类的newInstance()方法: ObjectName obj = ObjectName.class.newInstance(); 
使用反射的Constructor类的newInstance()方法: ObjectName obj = ObjectName.class.getConstructor.newInstance();
使用对象克隆clone()方法: ObjectName obj = obj.clone(); 
使用反序列化(ObjectInputStream)的readObject()方法: try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) { ObjectName obj = ois.readObject(); }

39、以下哪些jvm的垃圾回收方式采用的是复制算法回收
A.新生代串行收集器
B.老年代串行收集器
C.并行收集器
D.新生代并行回收收集器
E.老年代并行回收收集器
F.cms收集器

40、Java类Demo中存在方法func0、func1、func2、func3和func4,请问该方法中,哪些是不合法的定义?( )

public class Demo{
   
   
  float func0()
  {
   
   
    byte i=1;
    return i;
  }
  float func1()
  {
   
   
    int i=1;
    return;
  }
  float func2()
  {
   
   
    short i=2;
    return i;
  }
  float func3()
  {
   
   
    long i=3;
    return i;
  }
  float func4()
  {
   
   
    double i=4;
    return i;
  }
}

A.func1
B.func2
C.func3
D.func4

解析:
这道题考的是数据类型转换问题。由大到小需要强制转换,由小到大不需要。
A:return; 没有返回值,错误
B:short → float 无须强制转换,正确
C:long → float 无须强制转换(这个最选项容易出错),正确。
float占4个字节为什么比long占8个字节大呢,因为底层的实现方式不同。
浮点数的32位并不是简单直接表示大小,而是按照一定标准分配的。
第1位,符号位,即S
接下来8位,指数域,即E。
剩下23位,小数域,即M,取值范围为[1 ,2 ) 或[0 , 1)
然后按照公式: V=(-1)^s * M * 2^E
也就是说浮点数在内存中的32位不是简单地转换为十进制,而是通过公式来计算而来,通过这个公式虽然,只有4个字节,但浮点数最大值要比长整型的范围要大。
D:double → float 没有强制转换,错误。

41、在基本JAVA类型中,如果不明确指定,整数型的默认是什么类型?带小数的默认是什么类型?
A.int float
B.int double
C.long float
D.long double

解析:在常量中,整型常量默认int类型,小数常量默认是double类型。
布尔类型,如果是单一变量的话,在JVM中true被认为是1 false被认为是0 所以是4字节存。如果是布尔类型数组的话,在JVM中true和false被认为是byte类型 1字节。

42、ArrayList和LinkList的描述,下面说法错误的是?
A.LinkedeList和ArrayList都实现了List接口
B.ArrayList是可改变大小的数组,而LinkedList是双向链接串列
C.LinkedList不支持高效的随机元素访问
D.在LinkedList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在ArrayList的中间插入或删除一个元素的开销是固定的

解析: LinkedList是基于双链表的,增加是在尾部增加,增加和删除都只需要修改指针,不需要移动元素。
ArrayList插入或删除一个元素的开销不是固定的。在插入时,如果索引正确,容量够,则直接插入,插入位置之后的都需要移动,如果容易不够,还得扩充容量,开销当然不一样。删除操作同理。
所以,D错误,相当于说反了。

43、 有时为了避免某些未识别的异常抛给更高的上层应用,在某些接口实现中我们通常需要捕获编译运行期所有的异常, catch 下述哪个类的实例才能达到目的:()
A.Error
B.Exception
C.RuntimeException
D.Throwable

解析:error是系统出错
catch是无法处理的,难以修复的
RuntimeException不需要程序员进行捕获处理
error和exception都是throwable的子类,我们只需要对exception的实例进行捕获即可

44、下面属于java合法变量定义的是?
A.final
B.1var1
C._var2
D.var3&

解析:变量命名规则:1、变量名首字母必须为字母(a-z A-Z),下划线或者美元符号开始。
2、变量名只能是字母(a-z A-Z),数字(0-9),下划线(_)的组合,并且之间不能包含空格,数字不能放在变量名首位。
3、变量名不能使用编程语言的保留字。

45、下列选项中符合Java命名规则的标识符是()
A.2japro
B.&Class
C.const
D._123

解析:同44

46、在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()
A.this.A(x)
B.this(x)
C.super(x)
D.A(x)

解析:this的作用其中一个就是在一个构造方法中调用另一个构造方法,格式为this(参数);

47、下列有关Servlet的生命周期,说法不正确的是?
A.在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
B.在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
C.在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源
D.destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法

解析:
Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
(5)卸载:调用destroy方法让servlet自己释放其占用的资源

48、 关于匿名内部类叙述正确的是? ( )
A.匿名内部类可以继承一个基类,不可以实现一个接口
B.匿名内部类不可以定义构造器
C.匿名内部类不能用于形参
D.以上说法都不正确

解析:由于构造器的名字必须与类名相同,而匿名类没有类名,所以匿名类不能有构造器。

49、下列说法错误的有( )
A.Java面向对象语言容许单独的过程与函数存在
B.Java面向对象语言容许单独的方法存在
C.Java语言中的非静态方法属于类中的成员(member)
D.Java语言中的方法必定隶属于某一类(对象),调用方法与C语言的过程或C++语言的函数相同

解析:做这题其实要区分:C的过程,C++的函数,Java的方法。

50、关于Java中的ClassLoader下面的哪些描述是错误的:( )
A.默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System
B.一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的
C.类装载器需要保证类装载过程的线程安全
D.ClassLoader的loadClass在装载一个类时,如果该类不存在它将返回null
E.ClassLoader的父子结构中,默认装载采用了父优先
F.所有ClassLoader装载的类都来自CLASSPATH环境指定的路径

解析:
A、java中类的加载有5个过程,加载、验证、准备、解析、初始化;这便是类加载的5个过程,而类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例,在虚拟机提供了3种类加载器,引导(Bootstrap)类加载器、扩展(Extension)类加载器、系统(System)类加载器(也称应用类加载器)。A正确
B、一个类,由不同的类加载器实例加载的话,会在方法区产生两个不同的类,彼此不可见,并且在堆中生成不同Class实例。所以B前面部分是正确的,后面接口的部分真的没有尝试过,等一个大佬的讲解吧;
C、类加载器是肯定要保证线程安全的;C正确
D、装载一个不存在的类的时候,因为采用的双亲加载模式,所以强制加载会直接报错,D错误
java.lang.SecurityException: Prohibited package name: java.lang
E、双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式,即每个儿子都很懒,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己想办法去完成,所以默认是父装载,E正确
F、自定义类加载器实现 继承ClassLoader后重写了findClass方法加载指定路径上的class,F错误

51、 main 方法是 Java Application 程序执行的入口点,以下描述哪项是合法的()。
A.public static void main( )
B.public static void main( String args[] )
C.public static int main(String [] arg )
D.public void main(String arg[] )

解析:
java中的main方法,必须满足以下要求:
方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数string[] args 和string args[]相同。

52、以下定义一维数组的语句中,正确的是:()
A.int a [10]
B.int a []=new [10]
C.int a[]
int a []=new int [10]
D.int a []={1,2,3,4,5}

解析:
Java一维数组有两种初始化方法
1、静态初始化
int array[] = new int[]{1,2,3,4,5}
或者
int array[] = {1,2,3,4,5}
需要注意的是,写成如下形式也是错误的
int array[] = new int[5]{1,2,3,4,5}
2、动态初始化
int array[] = new int[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
静态与动态初始化的区别就在于,前者是声明的时候就初始化,后者是先声明,再动态初始化。

53、下列关于计算机系统和Java编程语言的说法,正确的是()
A.计算机是由硬件、操作系统和软件组成,操作系统是缺一不可的组成部分。
B.Java语言编写的程序源代码可以不需要编译直接在硬件上运行。
C.在程序中书写注释不会影响程序的执行,可以在必要的地方多写一些注释。
D.Java的集成开发环境(IDE),如Eclipse,是开发Java语言必需的软件工具。

解析:
A计算机是由硬件和软件组成,操作系统是软件部分。

54、面代码的运行结果是()
public static void main(String[] args){
String s;
System.out.println(“s=”+s);
}
A.代码编程成功,并输出”s=”
B.代码编译成功,并输出”s=null”
C.由于String s没有初始化,代码不能编译通过。
D.代码编译成功,但捕获到NullPointException异常

解析:局部变量没有默认值

55、下面有关SPRING的事务传播特性,说法错误的是?
A.PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行
B.PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就抛出异常
C.PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
D.PROPAGATION_NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚

解析:
Spring的API设计很不错,基本上根据英文翻译就能知道作用:Required:必须的。说明必须要有事物,没有就新建事物。supports:支持。说明仅仅是支持事务,没有事务就非事务方式执行。mandatory:强制的。说明一定要有事务,没有事务就抛出异常。required_new:必须新建事物。如果当前存在事物就挂起。not_supported:不支持事物,如果存在事物就挂起。never:绝不有事务。如果存在事物就抛出异常

56、在java7中,下列哪个说法是正确的:
A.ConcurrentHashMap使用synchronized关键字保证线程安全
B.HashMap实现了Collection接口
C.Arrays.asList方法返回java.util.ArrayList对象
D.SimpleDateFormat对象是线程不安全的

解析:hashMap在单线程中使用大大提高效率,在多线程的情况下使用hashTable来确保安全。hashTable中使用synchronized关键字来实现安全机制,但是synchronized是对整张hash表进行锁定即让线程独享整张hash表,在安全同时造成了浪费。concurrentHashMap采用分段加锁的机制来确保安全

57、下面有关maven和ant的描述,描述错误的是?
A.Ant 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码
B.Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里
C.maven和ant都有“生命周期”的概念,当你输入一个命令后,maven或者ant会执行一系列的有序的步骤,直到到达你指定的生命周期
D.Ant构建文件默认命名为build.xml,Maven默认构建文件为pom.xml

解析:
Ant和Maven都是基于Java的构建(build)工具。理论上来说,有些类似于(Unix)C中的make ,但没有make的缺陷。Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。
Ant特点
没有一个约定的目录结构 ›必须明确让ant做什么,什么时候做,然后编译,打包 ›没有生命周期,必须定义目标及其实现的任务序列 ›没有集成依赖管理
Maven特点
拥有约定,知道你的代码在哪里,放到哪里去 ›拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程 ›只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情 ›拥有依赖管理,仓库管理

58、下面这段程序的输出结果是()

public class Main {
   
   
    public static void main(String[] args) {
   
   
        split(12);
    }
    public static int split(int number) {
   
   
        if (number > 1) {
   
   
            if (number % 2 != 0) System.out.print(split((number + 1) / 2));
                System.out.print(split(number / 2));
            }
        return number;
       }
}

A.12136
B.63121
C.61213
D.11236

解析: 考察方法进栈与出栈的顺序。先进后出
有个知识点,方法在出栈的时候,执行的是return语句。因为出栈就意味着方法结束并消费,如果没有return语句,那么方法出栈的时候什么都不执行,就直接销毁。

59、下面代码的输出是什么?

public class Base
{
   
   
    private String baseName = "base";
    public Base()
    {
   
   
        callName();
    }

    public void callName()
    {
   
   
        System. out. println(baseName);
    }

    static class Sub extends Base
    {
   
   
        private String baseName = "sub";
        public void callName()
        {
   
   
            System. out. println (baseName) ;
        }
    }
    public static void main(String[] args)
    {
   
   
        Base b = new Sub();
    }
}

A.null
B.sub
C.base

60、以下关于final关键字说法错误的是()
A.final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
B.final修饰的类肯定不能被继承
C.final修饰的方法不能被重载
D.final修饰的变量不允许被再次赋值

解析: final修饰类、方法、属性!不能修饰抽象类,因为抽象类一般都是需要被继承的,final修饰后就不能继承了。
final修饰的方法不能被重写而不是重载!
final修饰属性,此属性就是一个常量,不能被再次赋值!

61、使用mvc模式设计的web应用程序具有以下优点,除了?
A.可维护行强
B.可扩展性强
C.代码重复少
D.大大减少代码量

解析:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVC只是将分管不同功能的逻辑代码进行了隔离,增强了可维护和可扩展性,增强代码复用性,因此可以减少代码重复。但是不保证减少代码量,多层次的调用模式还有可能增加代码量。

62、下面有关java基本类型的默认值和取值范围,说法错误的是?
A.字节型的类型默认值是0,取值范围是-27—27-1
B.boolean类型默认值是false,取值范围是true\false
C.字符型类型默认是0,取值范围是-215 —215-1
D.long类型默认是0,取值范围是-263—263-1

解析:

数据类型 默认值 取值范围 例子
字节型 0 -27—-27-1 byte b=10
字符型 ‘ \u0000′ 0—-2^16-1 char c=’c’
short 0 -215—-215-1 short s=10
int 0 -231—-231-1 int i=10
long 0 -263—-263-1 long o=10L
float 0.0 f -231—-231-1 float f=10.0F
double 0.0d -263—-263-1 double d=10.0
boolean false true\false boolean flag=true

63、下面字段声明中哪一个在interface主体内是合法的? ()
A.private final static int answer = 42;
B.public static int answer = 42;
C.final static answer = 42;
D.int answer;

解析:
在接口中,属性都是默认public static final修饰的,所以:
A(错误):不能用private修饰;
B(正确):在接口中,属性默认public static final,这三个关键字可以省略;
C(错误):没写属性的类型;
D(错误):final修饰的属性必须赋值;

64、下列程序的运行结果

public void getCustomerInfo() {
   
   
        try {
   
   
            // do something that may cause an Exception
        } catch (java.io.FileNotFoundException ex) {
   
   
            System.out.print("FileNotFoundException!");
        } catch (java.io.IOException ex) {
   
   
            System.out.print("IOException!");
        } catch (java.lang.Exception ex) {
   
   
            System.out.print("Exception!");
        }
    }

A.IOException!
B.IOException!Exception!
C.FileNotFoundException!IOException!
D.FileNotFoundException!IOException!Exception!

解析:
try-catch-finally 规则( 异常处理语句的语法规则 )

  1. 必须在 try 之后添加 catch 或 finally 块。
### 推荐的Java学习网站 对于希望提升Java编程技能并获取基础练习题的学生来说,有多个优质资源可供选择。这些平台仅提供了丰富的理论知识讲解,还特别注重实践能力培养,通过大量有针对性的习题帮助学习者巩固所学概念。 #### 1. 海码爸爸在线评测系统 该网站专注于算法与数据结构的教学以及各类编程语言的基础训练,其中就包含了专门针对Java初学者设置的系列题目集[^2]。访问链接可以直接进入Java专项练习页面,在这里可以找到从简单到复杂的同难度级别的练习题,并配有详细的解题思路分析和最终答案解析。 #### 2. LeetCode 虽然LeetCode更广为人知的是其作为面试准备工具的角色,但对于想要加强自己逻辑思维能力和解决实际问题技巧的人来说同样适用。平台上拥有众多关于Java的核心知识点考察题目,覆盖范围广泛,能够有效检验个人掌握程度的同时也促进了技术成长。 #### 3. HackerRank HackerRank是个面向全球程序员的技术挑战社区,它提供的Java分类下有许多适合新手入门级别的任务等待完成。除了常规的选择题外,还有更多开放式的项目型作业鼓励参与者运用课堂上学到的知识去创造性的解决问题。 #### 4. Codecademy Codecademy采用互动式课程模式教授计算机科学基础知识,其中包括完整的Java教程路径。每章节结束后都会安排相应的动手实验环节来加深理解记忆效果;而且官方还会定期更新内容保持与时俱进的特点。 ```java // 示例:简单的数组操作练习 public class ArrayPractice { public static void main(String[] args) { int[] numbers = {1, 2, 3}; // 声明并初始化整数类型的数组 String[] names = {"Alice", "Bob", "Charlie"}; // 字符串类型 // 打印第个数组中的所有元素 for (int number : numbers) { System.out.println(number); } // 访问第二个数组特定位置上的值 System.out.println(names[1]); // 输出 "Bob" } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值