牛客网第一天

1.下列不属于访问控制符的是(D)

A public
B private
C protected
D static

答案:D public 公有 private私有 protected受保护 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。

2.下列外部类定义中,不正确的是:(C )

class x { .... }
class x extends y { .... }
static class x implements y1,y2 { .... }
public class x extends Applet { .... }

内部类可以用static修饰,外部类则不能。

此外,外部类只能用public和defaule以及final修饰。内部类几乎都可以用修饰符public、protected、default、private和final、static修饰。

3.如下代码的 结果是什么 ? B

1

2

3

4

5

6

7

8

9

10

11

12

class Base {

    Base() {

    System.out.print("Base");

    }

}

public class Alpha extends Base {

    public static void main( String[] args ) {

        new Alpha();

        //调用父类无参的构造方法

        new Base();

    }

}

 

Base
BaseBase
编译失败
代码运行但没有输出
运行时抛出异常

在执行new Alpha()时,会先执行父类的构造方法,在执行相应的子类的构造方法,所以此处会打印Base,在执行new Base()时,会直接执行Base中无参构造器的代码,再输出Base,所以选B

4.我们在程序中经常使用“System.out.println()”来输出信息,语句中的System是包名,out是类名,println是方法名。(错)

System是java.lang中的类,out为System中的一个静态成员,out是java.io.PrintStream类的对象,而println()是java.io.PrintStream类的方法,所有可以调用类.静态方法.println()方法

5.下面哪个修饰符修饰的变量是所有同一个类生成的对象共享的(C )

public
private
static
final

static表示静态变量,归类所有,该类的所有对象公用

6.

下面程序的输出结果是什么。

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

public class A2{ 

public static void main(String[] args){

    int[] a={2,4,6,8,3,6,9,12};

    doSomething(a,0,a.length-1);

    for(int i=0;i<=a.length-1;i++)

    System.out.print(a[i]+" ");

private static void doSomething(int[] a,int start,int end){

    if(start<end){

        int p=core(a,start,end);

        doSomething(a,start,p-1);

        doSomething(a,p+1,end);

    }

}

private static int core(int[] a,int start,int end)

{

    int x=a[end];

    int i=start;

    for(int j=start;j<=end-1;j++){

        if(a[j]>=x){

            swap(a,i,j);

            i++;//交换了几次 

        }

    }//把最大的放到最后

    swap(a,i,end);//把最大的放到i的位置 

    return i;

  

private static void swap(int[] a,int i,int j) 

{

    int tmp=a[i];

    a[i]=a[j];

    a[j]=tmp;

}

找到最大值
找到最小值
从大到小的排序
从小到大的排序

这个排序算法虽然能实现从大到小排序,但看得人眼晕。。。

每次排序,先拿前面的值依次和末尾值比较,比末尾值大的则交换,每次排序最大的值放到末尾;关键还没完,还要再和前面的值交换,将最大值放到前面。。。

7.

假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是(D)

 

boolean isOdd = false;

 

for(int i=1;i<=2;++i)

{

if(i%2==1)isOdd = true;

else isOdd = false;

a+=i*(isOdd?1:-1);

}

-1
-2
0
1

假设两线程为A、B,设有3种情况:

1.AB不并发:此时相当于两个方法顺序执行。A执行完后a=-1,B使用-1作为a的初值,B执行完后a=-2
2.AB完全并发:此时读写冲突,相当于只有一个线程对a的读写最终生效。相同于方法只执行了一次。此时a=-1
3.AB部分并发:假设A先进行第一次读写,得到a=1;之后A的读写被B覆盖了。B使用用1作为a的初值,B执行完后a=0

8.

以下的变量定义语句中,合法的是(C)

byte=128
boolean=null
long a=123L
double=0.9239d

9.

以下程序输出(D)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public static void main(String[] args) {

   int num = 2;

   switch (num) {

   case 1:

        ++num;

   case 2:

        ++num;

   case 3:

        ++num;

   default:

        ++num;

   break;

   }

   System.out.println(num);

 }

}

2
3
4
5

记住一点,遇到break才跳出

10.

以下代码执行的结果显示是多少(B)?

505000
0
运行时错误
5050

count = count++   这个count一直为0;

11.

一个递归算法必须包括(B)

递归部分
终止条件和递归部分
迭代部分
终止条件和迭代部分

12.若有定义:byte[]x={11,22,33,﹣66};其中0≤k≤3,则对x数组元素错误的引用是(C)

x[5-3]
x[k]
x[k+5]
x[0]

13.What is displayed when the following is executed; A

1

2

3

double d1=-0.5;

System.out.println("Ceil d1="+Math.ceil(d1));

System.out.println("floor d1="+Math.floor(d1));

 

Ceil d1=-0.0
floor d1=-1.0
Ceil d1=0.0
floor d1=-1.0
Ceil d1=-0.0
floor d1=-0.0
Ceil d1=0.0
floor d1=0.0
Ceil d1=0
floor d1=-1

ceil:大于等于 x,并且与它最接近的整数。

floor:小于等于 x,且与 x 最接近的整数。

14.以下哪几种是java的基本数据类型。BC

String
int
boolean
Double

java 8中基本数据类型:byte,short,int,long,double,float,boolean,char

15.

下列哪个类的声明是正确的?D

 

abstract final class HI{}
abstract private move(){}
protected private number;
public abstract class Car{}

A选项,final是最终类,不能被继承;abstrct类是抽象类,只能被继承,两者冲突。 B选项,private修饰符定义的属性及方法不能被子类实现,而抽象类的子类必须实现所有的抽象方法。两者冲突。 C选项,修饰符重复,而且没有定义数据类型。 D选项,正确。

16.执行下列程序的输出结果为(   D   )

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public class Test {

 public static void main(String[] args) {

 String s1 = "HelloWorld";

 String s2 = new String("HelloWorld");

 if (s1 == s2) {

 System.out.println("s1 == s2");

 } else {

 System.out.println("s1 != s2");

 }

 if (s1.equals(s2)) {

 System.out.println("s1 equals s2");

 } else {

 System.out.println("s1 not equals s2");

 }

 }

 }

 

s1 == s2
s1 not equals s2
s1 == s2
s1 equals s2
s1 != s2
s1 not equals s2
s1 != s2
s1 equals s2

s1直接指向常量池中的字符串变量(没有就在常量池创建一个) s2是指向堆里的一个字符串对象,对象里面有常量池中字符串对象的引用

16.int a[]= {1,2,3,4,5}, int *p = a,  下列表达式与 ++*p 相同的是(C)

*++p
a[0]
++a[0]
*p++

*p指针指向第一位,也就是a[0],++*p就是++a[0]

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值