java周考1

  1. main不是关键字,main入口不仅可以在公共类中定义,也可以在普通类中定义,但如果公共类定义了main入口那么入口会是这个,此时普通类中的main入口作为静态方法可以被调用.而且类中没有定义main入口的情况下是可以定义名字为main的方法的.

  2. 下面程序哪个语句是正确的
    A. byte a=0,b=3; byte c =a+b;
    B. short s =23; s=s+12;
    C. short s=23; s+=12;
    D. float f = 23+23.23;
    我的答案:D,正确答案:C
    以字面值和确定类型的变量来进行赋值时判定条件是不同的.
    +=会自动转换,C等同于s=(short)(s+12)

  3. 下面程序执行的结果是?
    int i = 100;
    while(true) {
    if ( i++ > 100 )
    break;

    System.out.println(i);
    }
    A. 100
    B. 101
    C. 102
    D. 103
    我的答案c,正确答案b
    这题是粗心没看清,把打印语句看到循环外面了.

  4. 下面程序执行的结果是?C
    boolean b=true;
    if(b=false) {
    System.out.println(“a”);
    } else if(b) {
    System.out.println(b);
    } else if(!b&&!false==true&&!true==false) {
    System.out.println(“c”);
    } else
    System.out.println(“d”);
    A. a
    B. true
    C. c
    D. d
    选c,做对了,半猜半做,这里第一次知道在判断语句里给变量赋值,会直接用这个值来做判断了.即小括号里可以进行赋值,但不能进行定义.

  5. 下面程序执行的结果是? B D
    int x=2,y=3;
    switch(x) {
    default:
    y++;
    case 3:
    y++;
    case 4:
    y++;
    }
    Sysetem.out.println(y);
    A. 3
    B. 4
    C. 5
    D. 6
    我的答案B,正确答案D
    穿透现象是根据位置穿透,不是根据逻辑穿透,因为运行逻辑是先case后default,而穿透时会从当前位置开始直到出现break或者switch语句结束.

  6. 关于对象成员占用内存的说法哪个正确? ()
    A、同一个类的对象共用同一段内存
    B、同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间
    C、对象的方法不占用内存
    D.以上都不对
    答案B,做对了,希望有时间看一下底层内存具体实现,比如探究一下同一个类的对象的方法区是只有一份吗?

  7. 构造函数何时被调用? ()
    A、创建对象时 B、类定义时
    C、使用对象的方法时
    D、使用对象的属性时
    答案A,希望探究底层

  8. this和super:
    A、都可以用在main()方法中
    B、都是指一个内存地址
    C、不能用在main()方法中
    D、意义相同
    答案c,希望探究底层,了解一下this,super是指向地址的吗?

  9. 类定义如下
    class Foo {
    public static void main(String args[]) {
    String s;
    System.out.println(“s=” + s);
    }
    }
    则下列结论正确的是( )。 C
    A、有输出结果,且为空
    B、没有输出结果
    C、编译错误
    D、有输出结果,且不为空
    答案c,字符串参与的加法是字符串拼接,如果是字符串+别的类型,如果是引用类型,非null的是本串和该引用类型的toString()返回的字符串做拼接,null的是拼接"null",如果是基本类型,应该是自动装箱后进行如上拼接(猜想,未验证).

  10. 下列Java代码输出的结果是 ()C
    public class T14 {
    public static void main(String[] args) {
    int[] ary1 = {3,4,5};
    int[] ary2 = {3,4};
    int[] ary3 = f(ary1, ary2);
    System.out.println(Arrays.toString(ary3));
    }
    public static int[] f(int[] ary1, int[] ary2){
    int[]ary = Arrays.copyOf(ary1,ary1.length+ary2.length);
    System.arraycopy(ary2, 0, ary, ary1.length, ary2.length);
    return ary;
    }
    }
    A.[3, 4, 5]
    B.[3, 4, 5, 0, 0]
    C.[3, 4, 5, 3, 4]
    D.[3, 4, 3, 4, 5]
    答案c
    Arrays.copyof(1,2)和Arrays.copyofRange(1,2,3)是数组截取
    System.arraycopy(1,2,3,4,5)是数组复制
    参数1:表示源数组
    参数2:表示源数组的起始位置
    参数3:表示目标数组
    参数4:起始位置
    参数5:结束位置

  11. 对于代码 ()
    import java.util.Scanner;
    public class Demo{
    public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    int i=sc.nextInt();
    int j=sc.nextInt();
    i+=i*=i-=j;
    System.out.println(i);
    }
    }
    如果输入的值是-5,3,则输出结果为:E
    A .-5 B. 5 C. 15 D. 25 E.35
    选e
    赋值符号"="是从右往左进行计算的

  12. 类A,B和C的定义如下:
    public class A {
    public void f() {
    System.out.println(“A.f()”);
    }
    }
    public class B extends A {
    public void f() {
    System.out.println(“B.f()”);
    }
    }
    public class C {
    public void g(A a) {

    System.out.println(“g(A a)”);
    a.f(); }
    public void g(B b) {
    System.out.println(“g(B b)”);
    b.f();
    }
    }
    运行下面程序:
    C c = new C();
    A a = new B();
    c.g(a);
    输出的结果是:()。B
    A. g(A a)
    A.f()
    B. g(A a)
    B.f()
    C. g(B b)
    A.f()
    D. g(B b)
    B.f()
    答案选B,考查知识点是多态,编译看左边,运行看右边,这个题可以作为模板记忆

  13. 在switc(expression)语句中,expression的数据类型可以是char,byte,short,int在jdk1.7中及之后还可以使用String类型,而且只有这五种能用.
    知识点更新:选择结构switch小括号中expr的类型可以是:byte short char int String enum(枚举类型)Integer类型也可以的原因是包装类型可以自动拆箱成基本类型

  14. 请看下列代码:
    class ClassA {
    }
    class ClassB extends ClassA {
    }
    class ClassC extends ClassA {
    }
    public class Test{
    public static void main(String[] args) {
    ClassA p0 = new ClassA();
    ClassB p1 = new ClassB();
    ClassC p2 = new ClassC();
    ClassA p3 = new ClassB();
    ClassA p4 = new ClassC();
    <插入代码>
    }
    } 可以在<插入代码>处,填入的代码正确的是()C
    A.p2=p4;
    B. p1 =p2;
    C. p0 = p1;
    D. p2 = (ClassC)p1;
    选c,考查知识点是多态,有时间思考下如果是双层继承呢?
    多层继承和继承使用多态时的规则一致,编译看左边,运行看右边.
    编译能不能通过是看我们最后赋予的值的规定类型是否合适,运行能不能通过是看运行到此处时的内存中的对象够不够格来完成操作.

  15. 对于代码:
    package cn.tedu.cn;
    public class Text{
    public static void main(String args[]){
    System.out.println(“Text”);
    }
    }
    的说法正确的是:BE BCE
    A:可以将程序放入Demo.java编译运行
    B:可以利用javac Text.java编译此段代码
    C:可以利用javac -d . Text.java来编译此段代码 属于带包编译
    D:可以利用java Text来运行此段代码
    E:可以利用java -cp . cn.tedu.text.Text来运行此段代码
    答案BCE
    公共类名要和类名一致
    可以在文档的搜索框直接cmd以命令行进入当前
    带包编译?编译之后clss文件有包路径

  16. 下列选项中,哪个可以使下列代码成功编译 BD DE
    class Super{
    Private int a; //第二行
    protected Super(int a){
    this.a=a;
    }
    }
    public class Sub extends Super{
    public Sub(int a){
    super(a);
    }
    public Sub(){
    this.a=5;//第7行
    }
    }
    A:将第2行改成public int a;
    B:将第7行改成super(a);
    C:将第2行改成int a;
    D:将第7行改成super(5);
    E:将第7行改成this(5);
    我的答案:BE,正确答案DE
    看一下底层为什么把a改成公共也不行
    分析编译报错原因:
    首先第二行p不应该大写,不过应该是写错了,第7行问题有两个,一是创建子类时寻找父类构造函数找不到,二是this.a是私有的,子类无法调用父类的私有资源,this无法调用,super也不可以(还不知道为啥).所以A的解决方法还会有问题,C也同理,B是因为此时父类未构造无法从子类调用父类的资源(这是真正原因,此时的原因并不是子类无法使用父类的私有资源).

  17. 在java接口中 下列选项里有效方法声明的是 AB
    A.void method();
    B.public abstract void method();
    C.public static void method();
    D.protected void method();
    答案AB
    想说一下C,接口中是可以有静态方法的,但是静态方法要实现,就是要有方法体,并且也可以通过接口名直接调用,但是不能用实现这个接口的类的类名调用,当然更不可能用这个类的实例对象调用.

补充

instanceof 是 Java 的一个二元操作符,它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 类型的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值