java笔试选择题

1.下列说法中正确的是?(A)

A、java程序的main方法必须写在类里面
B、java程序中可以有多个main方法
C、java程序中类名必须与文件名一样
D、java程序的main方法中如果只有一条语句,可以不用{}括起来。

2.Java中,如图所示的Test类中(D)个构造方法。

public class Test{
    private int x;
    public Test(){
        x=35;
    }
    public void Test(double f){
        This.x=(int)f;
    }
    public Test(String s){}
}

A、0
B、1
C、2
D、3 

构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建对象(new 运算符)之后自动调用。Java 中的每个类都有一个默认的构造方法,并且可以有一个以上的构造方法。
Java 构造方法有以下特点:

  • 方法名必须与类名相同
  • 可以有 0 个、1 个或多个参数
  • 没有任何返回值,包括 void
  • 默认返回类型就是对象类型本身
  • 只能与 new 运算符结合使用

值得注意的是,如果为构造方法定义了返回值类型或使用 void 声明构造方法没有返回值,编译时不会出错,但 Java 会把这个所谓的构造方法当成普通方法来处理。
这时候大家可能会产生疑问,构造方法不是没有返回值吗?为什么不能用 void 声明呢?
简单的说,这是 Java 的语法规定。实际上,类的构造方法是有返回值的,当使用 new 关键字来调用构造方法时,构造方法返回该类的实例,可以把这个类的实例当成构造器的返回值,因此构造器的返回值类型总是当前类,无须定义返回值类型。但必须注意不要在构造方法里使用 return 来返回当前类的对象,因为构造方法的返回值是隐式的。
注意:构造方法不能被 static、final、synchronized、abstract 和 native(类似于 abstract)修饰。构造方法用于初始化一个新对象,所以用 static 修饰没有意义。构造方法不能被子类继承,所以用 final 和 abstract 修饰没有意义。多个线程不会同时创建内存地址相同的同一个对象,所以用 synchronized 修饰没有必要。如果不了解除 static、final 之外其他的关键字,教程后面会详细讲解。

3.以下不是合法标识符的是(C) 

A、STRING
B、x3x
C、void
D、de$f

Java标识符由数字,字母和下划线(_),美元符号($)或人民币符号(¥)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。

下面的标识符是合法的:myName,My_name,Points,$points,_sys_ta,OK,_23b,_3_

下面的标识符是非法的:#name,25name,class,&time,if

4.表达式(11+3*8) /4%3的值是(D)

A、31
B、0
C、1
D、2

5.以下表达式不可以作为循环条件的是(A)

A、i++
B、i>5
C、str1 = str.equals("q")
D、count == i

循环条件需要结果为true或false,i++为死循环,不可以作为循环条件

6. 运算符优先级排序正确的是(A)

A、由高到低分别是 算术运算符,关系运算符,逻辑运算符,赋值运算符
B、由高到低分别是 关系运算符,算术运算符,赋值运算符,逻辑运算符
C、由高到低分别是 算术运算符,逻辑运算符,关系运算符,赋值运算符
D、由高到低分别是 关系运算符,赋值运算符,算术运算符,逻辑运算符

7.以下程序的运行结果是:B

public class Increment {
    public static void main(String[] args) {
        int a;
        a = 6;
        System.out.println(a);
        System.out.println(a++);
        System.out.println(a);
    }
}

A、666
B、667
C、677
D、676

8.下列程序输出果是(B)

int i = 10;
while (i>0){
  i = i+1;
  if (i ==10){
     break;
   }
}

A、while循环10次
B、死循环
C、循环一次都不执行
D、循环执行一次

9.在java中下面代码是几条语句?B

int i;
i=123;
int j=0,k=0;
System.out.println(i+";"+";"+j+""+k);

A、3
B、4
C、5
D、6

10.下列之不为true的表达式有(C)

A、"john" = = "john"
B、"john".equals("john")
C、"john" = "john"
D、"john".equals(new String("john"))

c选项会报错

java: 意外的类型
  需要: 变量
  找到:    值

11. 执行下面代码的结果是 D

 for (int i=0;;){
   System.out.println("这是"+i);
   break;
 }

A、语法错误,缺少表达式2和表达式3
B、死循环
C、程序什么都不输出
D、输出“这是0”

12 .下面代码的输出结果是 B

int i=0,s=0;
do {
      if (i%2 == 0){
          i++;
          continue;
       }
       i++;
       s = s+i;
}while (i<7);
System.out.println(s);

A、16
B、12|
C、28
D、21

15.下列关于java封装的说法错误的是(D)

A、封装就是将属性私有化,提供共有的方法访问私有属性
B、属性的访问方法包括 setter方法和 getter方法
c、setter方法用于赋值,getter方法用于取值
D、包含属性的类都必须封装属性,否则无法通过编译

16.在JAVA中,LinkedList类和ArrayList类同属于集合框架类,下列()选项中的方法是LinkedList类有而ArrayList类没有的是?(D)

A、add(Object o)
B、add(int index,Object o)
C、remove(Object o)
D、removeLast()

17.下面关于数组的说法,错误的是(B)

A、数组是最简单的复合数据类型,是一系列数据的集合
B、声明数组时,必须分配内存
C、数组的元素可以是值(基本数据类型)、对象或其他数组
D、一个数组中的所有值都必须是相同的类型

一维数组的声明语法有两种:

  1. 类型 数组名字[];
  2. 类型[] 数组名字;

这两种效果完全一样,类型可以是基本数据类型,也可以是类类型,即引用类型。需要注意的是,这时候数组名还不能直接使用,因为没有初始化,也就没有分配内存。Java在定义数组时并不为数组元素分配内存,因此[ ]中无需指定数组元素的个数,即数组长度。而且对于如上定义的一个数组是不能访问它的任何元素的,我们必须要为它分配内存空间,这时要用到运算符new,其格式如下:arrayName = new type[arraySize];

18.访问修饰符的作用范围由大到小是(D) 

A. private-default-protected-public
B. public-default-protected-private
C. private-protected-default-public
D. public-protected-default-private

19.假设如下代码中,若线程t1线程在t2线程启动之前已经完成启动,代码的输出是(B)

public static void main(String[] args) throws InterruptedException {
        final Object obj = new Object();
        Thread t1 = new Thread() {
            public void run() {
                synchronized (obj) {
                    try {
                        obj.wait();
                        System.out.println("Thread 1 wake up.");
                    } catch (InterruptedException e) {
                    }
                }
            }
        };
        t1.start();
        Thread.sleep(1000);//We assume thread 1 must start up within 1 sec.
        Thread t2 = new Thread() {
            public void run() {
                synchronized (obj) {
                    obj.notifyAll();
                    System.out.println("Thread 2 sent notify.");
                }
            }
        };
        t2.start();
    }

A、Thread 1 wake up
      Thread 2 sent notify.
B、Thread 2 sent notify.
       Thread 1 wake up.
C、A、B皆有可能
D、程序无输出卡死

解析:
执行obj.wait();时已释放了锁,所以t2可以再次获得锁,然后发消息通知t1执行,但这时t2还没有释放锁,所以肯定是执行t2,然后释放锁,之后t1才有机会执行。notify()就是对对象锁的唤醒操作。但有一点需要注意的是notify()调用后,并不是马上就释放对象锁的,而是在相应的synchronized(){}语句块执行结束,自动释放锁后,JVM会在wait()对象锁的线程中随机选取一线程,赋予其对象锁,唤醒线程,继续执行。这样就提供了在线程间同步、唤醒的操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值