Java面向对象篇选择题练习
- Java选择题练习:类与对象(牛客网)
- Java选择题练习:接口(牛客网)
- Java选择题练习:继承(牛客网)
- Java选择题练习:类与对象(牛客网)
- Java选择题练习:包(牛客网)
- Java选择题练习:final(牛客网)
- Java选择题练习:构造函数(牛客网)
- Java选择题练习:多态(牛客网)
- Java选择题练习:static静态(牛客网)
- Java选择题练习:成员变量(牛客网)
- Java选择题练习:权限(牛客网)
- Java选择题练习:抽象类(牛客网)
- Java选择题练习:封装(牛客网)
- Java选择题练习:内部类(牛客网)
Java选择题练习:类与对象(牛客网)
1.下列说法正确的是()
正确答案: B
A、在类方法中可用this来调用本类的类方法
B、在类方法中调用本类的类方法时可直接调用
C、在类方法中只能调用本类中的类方法
D、在类方法中绝对不能调用实例方法
解析:在类方法中不能有this关键字,直接调用类方法即可,A错误,B正确,在类方法中可以通过创建实例对象调用类的实例方法,C\D错误
2.下面关于 new 关键字的表述错误的是()
正确答案: D
A、new关键字在生成一个对象时会为对象开辟内存空间
B、new关键字在生成一个对象时会调用类的构造方法
C、new关键字在生成一个对象时会将生成的对象的地址返回
D、Java中只能通过new关键字来生成一个对象
解析: java中创建对象有以下几种方法:
1.用new语句创建对象,这是最常用的创建对象的方式。
2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
3.调用对象的clone()方法。
4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法.
Java选择题练习:接口(牛客网)
1.下列对接口的说法,正确的是( )
正确答案: B
A、接口与抽象类是相同的概念
B、若要实现一个接口为普通类则必须实现接口的所有抽象方法
C、接口之间不能有继承关系
D、一个类只能实现一个接口
解析:
A. 抽象类和接口是两个东西
- 抽象类可以包含非抽象方法,抽象类不能实例化,抽象类实现需要使用继承extends,Java的类只能单继承。
- 接口中方法默认为public abstract修饰的,Java 8引入默认方法和静态方法,接口实现需要使用implements,Java的类可以实现多个接口
C. 接口与接口之间,可以使用extends继承
D. 一个类能实现多个接口
2.以下描述正确的是()
正确答案:B
A、CallableStatement是PreparedStatement的父接口
B、PreparedStatement是CallableStatement的父接口
C、CallableStatement是Statement的父接口
D、PreparedStatement是Statement的父接口
解析:
3.将下列(A、B、C、D)哪个代码替换下列程序中的【代码】不会导致编译错误?
interface Com{
int M=200;
int f();
}
class ImpCom implements Com{
【代码】
}
正确答案: A
A、public int f(){return 100+M;}
B、int f(){return 100;}
C、public double f(){return 2.6;}
D、public abstract int f();
解析:
1、必须实现接口中所有的方法。
在实现类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。
2、接口实现类相当于子类,子类的访问权限是不能比父类小的。
接口中所有方法默认都是public,至于为什么要是public,原因在于如果不是public,那么只能在同个包下被实现,可访问权限就降低很多了,那么在实现类中,实现的类相当于子类,子类的访问权限是不能比父类小的,而在java中一个类如果没有权限的修饰符,默认是friendly(同一个包内的其它类才可访问),所以在实现类中一定要写public。
4.能用来修饰interface的有()
正确答案: B
A、private
B、public
C、protected
D、static
解析:java中接口只能使用public修饰,接口内方法默认为public abstract。
Java选择题练习:继承(牛客网)
1.以下关于继承的叙述正确的是()
正确答案: A
A、在Java中类只允许单一继承
B、在Java中一个类不能同时继承一个类和实现一个接口
C、在Java中接口只允许单一继承
D、在Java中一个类只能实现一个接口
解析:类支持单继承,接口支持多继承
B、在Java中一个类可以实现同时继承一个类和实现一个接口
C、在Java中接口支持多继承
D、在Java中一个类可以实现多个接口
2.如果Child extends Parent,那么正确的有()?
正确答案: B C D
A、如果Child是class,且只有一个有参数的构造函数,那么必然会调用Parent中相同参数的构造函数
B、如果Child是interface,那么Parent必然是interface
C、如果Child是interface,那么Child可以同时extends Parent1,Parent2等多个interface
D、如果Child是class,并且没有显示声明任何构造函数,那么此时仍然会调用Parent的构造函数
解析:
A、子类的构造器第一行默认都是super(),默认调用直接父类的无参构造,一旦直接父类没有无参构造,那么子类必须显式的声明要调用父类或者自己的哪一个构造器。
BC、接口只能继承接口,但是可以多继承。类都是单继承,但是继承有传递性。
D、一个类一旦没有显式的定义任何构造,那么JVM会默认给你一个无参构造。无参构造的第一行依然默认是super()。
3.在java中重写方法应遵循规则的包括()
正确答案: B C
A、访问修饰符的限制一定要大于被重写方法的访问修饰符
B、可以有不同的访问修饰符
C、参数列表必须完全与被重写的方法相同
D、必须具有不同的参数列表
解析:方法的重写(override)两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
A错在还可以相等
4.下列选项中,用于在定义子类时声明父类名的关键字是:( )
正确答案: C
A、interface
B、package
C、extends
D、class
解析:
A是接口
B是包
D是类
5.已知如下类定义:
class Base { public Base (){ //... } public Base ( int m ){ //... } public void fun( int n ){ //... }
}
public class Child extends Base{ // member methods
}
如下哪句可以正确地加入子类中?
正确答案: D
A、private void fun( int n ){ //…}
B、void fun ( int n ){ //… }
C、protected void fun ( int n ) { //… }
D、public void fun ( int n ) { //… }
解析:
方法的重写(override)两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
6.在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是()
正确答案: D
A、手机与小米手机
B、企业家与雷军
C、编程语言与Java
D、中国与北京
解析:is-a 的关系:
A:小米手机是一个手机,没毛病
B:雷军是一个企业家,没毛病
C:Java是一门编程语言,没毛病
D:北京是一个中国?!这…
类之间存在以下几种常见的关系:
use-a 是依赖关系
has-a 一般是组合关系
is-a 一般是继承关系
Java选择题练习:类与对象(牛客网)
1.类方法中可以直接调用对象变量。( )
正确答案: B
A、正确
B、错误
解析:静态方法中不能调用对象的变量,因为静态方法在类加载时就初始化,对象变量需要在新建对象new后才能使用
Java选择题练习:包(牛客网)
1.要导入java/awt/event下面的所有类,叙述正确的是?()
正确答案: C
A、import java.awt.* 和import java.awt.event.* 都可以
B、只能是import java.awt.*
C、只能是import java.awt.event.*
D、import java.awt.* 和import java.awt.event.* 都不可以
解析:导包只可以导到当前层,不可以再导入包里面的包中的类
Java选择题练习:final(牛客网)
1.下列表述错误的是?()
正确答案: D
A、int是基本类型,直接存数值,Integer是对象,用一个引用指向这个对象。
B、在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过。
C、封装的主要作用在于对外隐藏内部实现细节,可以增强程序的安全性。
D、final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性。
解析:final关键字:
- final修饰符,可以修饰类,方法,变量,不能修饰接口;
- final修饰的类不可以被继承;
- final修饰的方法不可以被覆盖;
- final修饰的变量为常量。只能赋值一次;
- 一般final化的成员变量也会静态化。
Java选择题练习:构造函数(牛客网)
1.一个类可以有多个不同名的构造函数 (不考虑内部类的情况)。( )
正确答案: B
A、正确
B、错误
解析:构造函数的命名要与类名相同。
2.尝试编译以下程序会产生怎么样的结果?()
public class MyClass {long var;public void MyClass(long param) { var = param; } //(1)public static void main(String[] args) {MyClass a, b;a =new MyClass(); //(2)b =new MyClass(5); //(3)}
}
正确答案: C
A、编译错误将发生在(1),因为构造函数不能指定返回值
B、编译错误将发生在(2),因为该类没有默认构造函数
C、编译错误将在(3)处发生,因为该类没有构造函数,该构造函数接受一个int类型的参数
D、该程序将正确编译和执行
解析:构造方法就是:public 类名, 没有方法修饰符,所以 (1)处就是一个普通方法 ,所以该类没有带参数构造方法 ,编译报错。
Java选择题练习:多态(牛客网)
面向对象方法的多态性是指()
正确答案: C
A、一个类可以派生出多个特殊类
B、一个对象在不同的运行环境中可以有不同的变体
C、针对一消息,不同的对象可以以适合自身的方式加以响应
D、一个对象可以是由多个其他对象组合而成的
解析:简单而言:对于同一个父类方法,不同的子类会有不同的实现方式。
Java选择题练习:static静态(牛客网)
1.阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()
package NowCoder;
class Test {public static void hello() {System.out.println("hello");}
}
public class MyApplication {public static void main(String[] args) {// TODO Auto-generated method stubTest test=null;test.hello();}
}
正确答案: A
A、能编译通过,并正确运行
B、因为使用了未初始化的变量,所以不能编译通过
C、以错误的方式访问了静态方法
D、能编译通过,但因变量为null,不能正常运行
解析:类方法不依附与对象。所以可以正常运行
因为Test类的hello方法是静态的,所以是属于类的,当实例化该类的时候,静态会被优先加载而且只加载一次,所以不受实例化new Test();影响,只要是使用到了Test类,都会加载静态hello方法!
另外,在其他类的静态方法中也是可以调用公开的静态方法,此题hello方法是使用public修饰的所以在MyApplication中调用hello也是可以的。
2.关于以下程序代码的说明正确的()
class HasStatic{private static int x = 100;public static void main(String args[ ]){HasStatic hs1 = new HasStatic();hs1.x++;HasStatic hs2 = new HasStatic();hs2.x++;hs1=new HasStatic();hs1.x++;HasStatic.x--;System.out.println( "x=" +x);}
}
正确答案: D
A、5行不能通过编译,因为引用了私有静态变量
B、10行不能通过编译,因为x是私有静态变量
C、程序通过编译,输出结果为:x=103
D、程序通过编译,输出结果为:x=102
解析:原因是main方法和静态私有变量处在同一个类中,变量对main方法是可见的,所以可以访问,如果不在同一个类里面的话,是不可以访问私有变量的。
所以链接:
刚开始x=100
调用hs1.x++ x为101;
调用hs2.x++ x为102;
调用hs1.x++ x为103 (此时hs1指向了一个新的HasStatic实例,但是依然访问的是同一个X)
调用HasStatic.x-- x为102
所以结果为D
3.关于static说法不正确的是( )
正确答案: D
A、可以直接用类名来访问类中静态方法(public权限)
B、静态块仅在类加载时执行一次
C、static方法中不能有用this调用的方法
D、不可以用对象名来访问类中的静态方法(public权限)
解析:
A、静态方法属于类本身,可以使用类名调用。
B、静态块只执行一次。
C、static块和方法不能出现this和super
D、可以的,实例对象也可以调用静态方法。
4.为AB类的一个无形式参数无返回值的方法method书写方法头,可以用AB.method()方式调用,该方法头的形式为( )。
正确答案: A
A、static void method( )
B、public void method( )
C、final void method( )
D、abstract void method( )
解析:不new一个AB类,也可以通过 AB.method()方式调用,所以是static的。
5.下面代码的运行结果是( )
public class Arraytest{int a[] = new int[6];public static void main ( String arg[] ) {System.out.println ( a[0] );}
}
正确答案: C
A、null
B、0
C、编译出错
D、运行出错
解析:Java静态方法不能访问非静态变量 ,在static方法中是不能访问非静态变量 a 的,需要将 a 声明为static,答案才会是 0 ,否则是编译出错。
6.下面关于静态方法说明正确的是()
正确答案: B
A、在静态方法中可用this来调用本类的类方法
B、在静态方法中调用本类的静态方法时可直接调用
C、在静态方法中只能调用本类中的静态方法
D、在静态方法中绝对不能调用实例方法
解析:
A:静态成员随类的加载而加载,这个时候对象都还没有,this代表当前对象,所以this不能用于static方法中.C还可以调用静态变量D.可以通过对象.进行调用;
B: 正确;
C:在静态方法中,不只可以调用本类的静态方法,也可以使用【类名.静态方法名】调用其他类的静态方法;
D:可以调用实例方法,使用【new 类名().实例方法名】调用。
7.关于以下代码的说明,正确的是( )
1. class StaticStuff
2. {
3. static int x=10;
4. static { x+=5;}
5. public static void main(String args[ ])
6. {
7. System.out.println(“x=” + x);
8. }
9. static { x/=3;}
10. }
正确答案: C
A、4行与9行不能通过编译,因为缺少方法名和返回类型
B、9行不能通过编译,因为只能有一个静态初始化器
C、编译通过,执行结果为:x=5
D、编译通过,执行结果为:x=3
解析:父类静态成员变量 父类静态代码块 子类静态成员变量 子类静态代码块 父类非静态成员变量,父类非静态代码块,父类构造函数,子类非静态成员变量,子类非静态代码块,子类构造函数
8.When is the text “Hi there” displayed?
public class StaticTest
{static{System.out.println("Hi there");}public void print(){System.out.println("Hello");}public static void main(String args[]){StaticTest st1 = new StaticTest();st1.print();StaticTest st2 = new StaticTest();st2.print();}
}
正确答案: C
A、Never.
B、Each time a new object of type StaticTest is created.
C、Once when the class is loaded into the Java virtual machine.
D、Only when the main() method is executed.
解析:类中静态语句块仅在类初始化时被执行一次
9.子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?
正确答案: C
A、父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块->子类A构造函数->子类A非静态代码块
B、父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
C、父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
D、父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
解析:正确的执行顺序是:父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
也就是说非静态初始化块的执行顺序要在构造函数之前。
Java选择题练习:成员变量(牛客网)
1.程序Demo.java编译运行后输出的结果是:( )
public class Demo{int x=1;int y;public static void main(String [] args){int z=2;Demo t=new Demo();System.out.println(t.x+t.y+z);}
}
正确答案: A
A、3
B、12
C、1
D、5
解析:
成员变量为int类型可以不初始化,默认值为0
局部变量为int类型必须初始化,没有默认值
2.关于如下程序的描述哪个是正确的?( )
public class Person{static int arr[] = new int[5];public static void main(String a[]){System.out.println(arr[0]);}
}
正确答案: C
A、编译将产生错误
B、编译时正确,但运行时将产生错误
C、正确,输出0
D、正确,输出 null
解析:类的成员变量会被默认初始化:
- 整型->0
- 引用类型->null
- 布尔类型->false
方法内的局部变量则一定要赋值,不然会报错。
Java选择题练习:权限(牛客网)
1.protected访问权限要小于包访问权限。( )
正确答案: B
A、正确
B、错误
解析:protected访问权限要大于包访问权限
Java类成员的访问控制权限:
public > protected > 同包(default) > private
2.在java中,下列说法正确的是()
正确答案: D
A、一个类可以继承多个父类
B、修饰符可维protected的属性不能被其子类访问
C、抽象类可以实例化对象
D、无public修饰的类,不能被非同一文件夹中的类和非同一包中的类访问
解析:
A、Java中类和类之间是单继承;
B、Java中访问修饰符protected可以修饰属性和方法,本类、同包、子类可以访问;
C、抽象类不可以实例化对象;
D、 public:所有类可见。 pirvate:只有同一类内部的方法可见,在有就是内部类也可以访问到。 默认(friendly):包内可见。 protected:继承可见。
2.要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )
正确答案: A
A、让该类不使用任何关键字
B、使用private关键字
C、使用protected关键字
D、使用void关键字
解析:default和protected的区别是:
前者只要是外部包,就不允许访问。
后者只要是子类就允许访问,即使子类位于外部包。
总结:default拒绝一切包外访问;protected接受包外的子类访问
Java选择题练习:抽象类(牛客网)
1.下列描述正确的是( )?
正确答案: A C
A、类不可以多继承而接口可以多实现
B、抽象类自身可以定义成员而接口不可以
C、抽象类和接口都不能被实例化
D、一个类可以有多个基类和多个基接口
解析:
A D、Java中类与类之间是单继承,接口和接口之间可以多实现
B、抽象类可以定义普通成员变量而接口不可以,但是抽象类和接口都可以定义静态成员变量,只是接口的静态成员变量要用static final public 来修饰
2.对于abstract声明的类,下面说法正确的是()
正确答案: E
A、可以实例化
B、不可以被继承
C、子类为abstract
D、只能被继承
E、可以被抽象类继承
解析:
A、抽象类不能实例化,因为有抽象方法未实现
B、可以被继承。派生类可以实现抽象方法
C、子类可以是抽象的,也可以非抽象的
D、只能被继承说法太肯定,不正确
E、可以被抽象类继承,也可以被非抽象类继承
3.有以下类定义:
abstract class Animal{abstract void say();
}
public class Cat extends Animal{public Cat(){System.out.printf("I am a cat");}public static void main(String[] args) {Cat cat=new Cat();}
}
运行后:
正确答案: B
A、I am a cat
B、Animal能编译,Cat不能编译
C、Animal不能编译,Cat能编译
D、编译能通过,但是没有输出结果
解析:当一个实体类继承一个抽象类时,有两种解决方法:
1、实现抽象类中的全部抽象方法;
2、用abstract修饰子类,不实现抽象方法,方法的实现交由别的类实现。
Java选择题练习:封装(牛客网)
1.以下关于java封装的描述中,正确的是:
正确答案: A
A、封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性
B、封装的意义不大,因此在编码中尽量不要使用
C、如果子类继承父类,对于父类中进行封装的方法,子类仍然可以直接调用
D、只能对一个类中的方法进行封装,不能对属性进行封装
解析:
封装主要是隐藏内部代码;
继承主要是复用现有代码;
多态主要是改写对象行为。
Java选择题练习:内部类(牛客网)
1.内部类(也叫成员内部类)可以有4种访问权限。( )
正确答案: A
A、正确
B、错误
解析:你就把内部类理解成类的成员,成员有4种访问权限吧,内部类也是!分别为private、protected、public以及默认的访问权限。


















