1.以下关于Object类的说法正确的是()
A.Java中所有的类都直接或间接继承自Object,无论是否明确的指明,无论其是否是抽象类。
B.Java中的接口(interface)也继承了Object类
C.利用“==”比较两个对象时,Java调用继承自Object的equals方法,判断是否相等。
D.如果类的定义中没有重新定义toString()方法,则该类创建的对象无法使用toStrig()方法。
2.若有定义语句: int a=10 ; double b=3.14 ; 则表达式 ‘A’+a+b 值的类型是()
A.char
B.int
C.double
D.float
3.如果要导入一个java.scut.computer的包,叙述正确的是? ( )
A.只需在代码中加入“import java.scut.computer;”一个语句,并且必须放在代码非注释的第一行
B.只需在代码中加入“import java.scut;”一个语句
C.必须在代码中加入“import java.scut;”和“package java.scut.computer;”两个语句
D.在代码中,不一定是第一句,只要是类定义前,加入package语句即可
4.Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( )
A.Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B.通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C.通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
D.Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
E.Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
F.Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率.
5.通过以下哪些方法可反射获取到User对象中static属性的值?
A.User. class. getDeclaredField (“name”). get (null);
B.User. class. getField (“name”). get (null);
C.User user=new User(); return user. getClass(). getField (“name”).get (user);
D.User user=new User(): return user. getClass(). getDeclaredField (“name”). get (user);
6.如果一个接口Cup有个方法use(),有个类SmallCup实现接口Cup,则在类SmallCup中正确的是? ( )
A.void use() { …}
B.protected void use() { …}
C.public void use() { …}
D.以上语句都可以用在类SmallCup中
7.在Java中,关于HashMap类的描述,以下错误的是()?
A.HashMap能够保证其中元素的顺序
B.HashMap允许将null用作值
C.HashMap允许将null用作键
D.HashMap使用键/值得形式保存数据
8.java语言的下面几种数组复制方法中,哪个效率最高?
A.for 循环逐一复制
B.System.arraycopy
C.Array.copyOf
D.使用clone方法
9.关于java编译和运行命令叙述不正确的是? ( )
A.运行“java Scut.class”
B.运行“java Scut”
C.编译 Scut.java文件,使用“javac Scut.java”命令的输出文件是Scut.class
java这个命令的运行对象是Scut.class
10.Java语言中,方法的重写(Overriding)和重载(Overloading)是多态性的不同表现。下边哪些说法是对的?
A.重写是父类与子类之间多态性的一种表现
B.重写是一个类中多态性的一种表现
C.重载是一个类中多态性的一种表现
D.重载是父类与子类之间多态性的一种表现
(1)A
A:正确,Object类是所有类的父类,可以这么说,Object类是唯一不用指定明确继承的类。
B:类中带有构造方法在extends时就会被子类继承。接口中不带有构造方法,接口与接口之间才能继承。
C:==符号比较的是内存地址,equals才是调用equal方法。
D:可以使用toString()方法,没有定义则默认使用父类的,而最终的类就是Object类。
(2)选C,double类型,因为按照类型大的与类型小的运算,强制转换类型小的进行运算的规则,double>int>char,因此结果是double类型。
(3)A
实际上在Java语言规范中,不允许package name以“java”开头,不然会报一个java.lang.SecurityException 的错误。因为假如我们允许包名以java开头,那么我们完全可以编写和jdk标准包下一模一样的类,如Java.lang.Integer。因此在虚拟机进行类或接口解析时可能会发生冲突。一句话总结就是:假如允许包名以java开头,可能会导致命名空间污染的问题。
(4)ADF
A Class类在java.lang包
B 动态代理技术可以动态创建一个代理对象,反射不行
C 反射访问私有成员时,Field调用setAccessible可解除访问符限制
D CGLIB实现了字节码修改,反射不行
E 反射会动态创建额外的对象,比如每个成员方法只有一个Method对象作为root,他不胡直接暴露给用户。调用时会返回一个Method的包装类
F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。
(5)正确答案: A B C D
(6)C
既然是实现接口,就要实现接口的所以方法,相当于重写方法,方法的重写需要满足:三同一大一小(方法名、返回值类型、形参相同;访问权限>=重写前;抛出异常<=重写前)
(7) A
HashMap是基于哈希算法来确定元素的位置(槽)的,当我们向集合中存入数据时,它会计算传入的Key的哈希值,并利用哈希值取余来确定槽的位置,与存入的先后顺序无关,所以可以认定为HashMap是无序的。
(8)B
(9)正确答案: A
A 错误 运行命令是 java + 你的 Java 程序的名字但是不加后缀 所以这道题错在多了 .class这个后缀
B 正确
C javac 是编译命令,后跟 你的 Java 程序名字加后缀,也就是 YourClassName.java 所以答案正确
D JVM (Java 虚拟机)运行的是编译后的字节码文件(以.class为后缀的文件),也就是 YourClassName.class 所以答案正确
(10)A and C
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型。