牛客Java专项练习错题整理(三星难度)

题目全部来自牛客网,已经滤掉了水题無水题,放心食用~

1、()运算符把其操作数中所有值为0和所有值为1的位分别在结果的相应中设置1和0。

A、&
B、|
C、!
D、~

正确答案:D

&与操作;

|或操作;

!非操作;

~是位运算符,意义是 按位非(NOT)
按位非也叫做补,一元运算符NOT“~”是对其运算数的每一位取反。

例如 :~ 0111 (7) = 1000 (8)

 

2、

    //point X
public class Foo {
    public static void main(String[] args) throws Exception {
        PrintWriter out = new PrintWriter(
            new java.io.OutputStreamWriter(System.out), true);
        out.printIn(“Hello”);
    }
}

在PointX上的哪条语句允许编译和运行这段代码?()

A、import java.io.PrintWriter;
B、include java.io.PrintWriter;
C、import java.io.OutputStreamWriter;
D、include java.io.OutputStreamWriter;
E、no statement is needed.

 

正确答案:A

java中没有include关键字,导包用import

由于代码中使用了printWriter 类,所以要导入此类Import java.io.PrintWriter;注意:在创建OutputStreamWriter的时候,使用的是类的全名称。所以不需要使用import

 

3、下列描述中,错误的是

A、SQL语言又称为结构化查询语言

B、java中”static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问

C、面向对象开发中,引用传递意味着传递的并不是实际的对象,而是对象的引用,因此,外部对引用对象所做的改变不会反映到所引用的对象上

D、java是强类型语言,javascript是弱类型语言

E、面向对象的三大特性包括:封装,继承,多态

正确

答案: C

因为引用代表引用的是实际的对象,对引用的修改就是对对象的修改,可以理解为两把钥匙可以打开同一扇门,所以C错,然而传递String类型的引用,是不会改变原来的String对象内容,因为String是final类,内容不可变。

D中:强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。 java、.NET、C++等都是强制类型定义的。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。

 

4、下列代码输出结果为(      )

class Animal{
    public void move(){
        System.out.println("动物可以移动");
    }
}
class Dog extends Animal{
    public void move(){
        System.out.println("狗可以跑和走");
    }
    public void bark(){
        System.out.println("狗可以吠叫");
    }
}
public class TestDog{
    public static void main(String args[]){
        Animal a = new Animal();
        Animal b = new Dog(); 
        a.move();
        b.move();
        b.bark();
    }
}
A、动物可以移动
狗可以跑和走
狗可以吠叫

B、动物可以移动
动物可以移动
狗可以吠叫

C、运行错误

D、编译错误

编译看左边,运行看右边。编译错误:The method bark() is undefined for the type Animal。Animal中没有定义bark()方法。Dog继承自Animal。当用Dog对象初始化Animal类对象时,完成了对Animal对象中方法与变量的覆盖与隐藏,也就是b.move()调用的是Dog中move()方法。而Animal中本身并没有bark()方法,不存在被覆盖的情况,亦无法访问,也就是b.bark()会报错。

编译看左边,运行看右边。也就是是编译的时候会把它当成左边的类型,运行的时候看右边类型的方法体。这个题动物类没有另一个方法,而b调用了,所以编译器会认为b是一个动物类,所以报错。这就是多态的特性吧

 

5,关于类的叙述正确的是()。

A、在类中定义的变量称为类的成员变量,在别的类中可以直接使用
B、局部变量的作用范围仅仅在定义它的方法内,或者是在定义它的控制流块中
C、使用别的类的方法仅仅需要引用方法的名字即可
D、只要没有定义不带参数的构造函数,JVM都会为类生成一个默认构造函数

正确答案:B。

A在类中定义的变量称为类的成员变量,在别的类中可以直接使用局部变量的

C使用别的类的方法需要通过该类的对象引用方法的名字

D没有任何构造函数的时候才会默认生成一个不带参数的构造方法

 

6、在运行时,由java解释器自动引入,而不用import语句引入的包是()。

A,java.lang
B,java.system
C,java.io
D,java.util

答案选A:java.lang包是java语言的核心包,lang是language的缩写

java.lang包定义了一些基本的类型,包括Integer,String之类的,是java程序必备的包,有解释器自动引入,无需手动导入

 

7、以下哪些方法是Object类中的方法()。

A,clone()
B,toString()
C,wait()
D,finalize()

 

正确答案: A B C D 。如图

牛客Java专项练习错题整理(三星难度)_第1张图片

8、Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(    )

A、Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B、通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C、通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
D、Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
E、Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
F、Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率

正确答案:ADF

A选项Class类位于lang包下面

B 动态代理技术可以动态创建一个代理对象,反射不行

C 反射访问私有成员时,Field调用setAccessible可解除访问符限制

D CGLIB(Code Generator Library)实现了字节码修改,反射不行

F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。

 

9、对于同一类中的两个方法 , 在判断它们是不是重载方法时 , 肯定不考虑( )

A、参数个数
B、参数类型
C、返回值类型
D、参数顺序

 

方法重载的定义:同一个类或与他的派生类中,方法名相同,而参数列表不同的方法。其中参数列表不同指的是参数的类型,数量,类型的顺序这三种至少有一种不同。

方法重载与下列无关:

与返回值类型无关;与访问修饰符无关

构造方法也可以重载

 

10、下列说法错误的有( )

A、在类方法中可用this来调用本类的类方法
B、在类方法中调用本类的类方法时可直接调用
C、在类方法中只能调用本类中的类方法
D、在类方法中绝对不能调用实例方法

首先,成员方法又称为实例方法,静态方法又称为类方法

a,静态方法中没有this指针,可以将this理解为对象,而类方法属于类,不属于对象,所以类方法前不能加this指针,A错B对

答案ACD

 

 

你可能感兴趣的:(Java语法)