Java日常练习题|Java日常练习题,每天进步一点点(5)

目录

  • 1、下列关于Java类中方法的定义,正确的是()
  • 2、Java Application 中的主类需包含main方法,以下哪项是main方法的正确形参?( )
  • 3、下面有关java的一些细节问题,描述错误的是?
  • 4、以下代码执行后输出结果为( )
  • 5、下面哪个Set类是排序的?
  • 6、下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
  • 7、给出下面的代码段:
  • 8、下面描述属于java虚拟机功能的是?
  • 9、byte b1=1,b2=2,b3,b6,b8;
  • 10、下面选项中,哪些是interface中合法方法定义?()
    • 答案汇总:
  • 总结
    承蒙各位厚爱,我们一起每天进步一点点!(鼠标选中空白处查看答案)

    1、下列关于Java类中方法的定义,正确的是()
    正确答案: D

    若代码执行到return语句,则将当前值返回,而且继续执行return语句后面的语句。

    只需要对使用基本数据类型定义的属性使用getter和setter,体现类的封装性。

    方法的返回值只能是基本数据类型。

    在同一个类中定义的方法,允许方法名称相同而形参列表不同。
    题解:
    A、一旦执行到return,就不再执行后续的代码。
    B、类的封装性可不是这么体现的,数据域和方法都可以被封装。数据域可以是基本数据类型也可以是引用类型。
    C、方法的返回值可以是引用类型。
    D、重载,判定方法只有方法名一致,形参列表不同。

    2、Java Application 中的主类需包含main方法,以下哪项是main方法的正确形参?( )
    正确答案: B
    String args

    String[] args

    Char arg

    StringBuffer[] args
    题解:
    送分题,main函数的形式为public static void main(String[] args),所以选B
    String[] args / String args[] / String… args都是正确的。

    3、下面有关java的一些细节问题,描述错误的是?
    正确答案: B
    构造方法不需要同步化

    一个子类不可以覆盖掉父类的同步方法

    定义在接口中的方法默认是public的

    容器保存的是对象的引用
    题解:
    B选项,synchronized关键字实并不属于方法签名的一部分,子类的同名方法可以覆盖父类的对应方法,只不过synchronized修饰符不会被继承,也就是说子类覆盖后子类的对应方法就不同步了,但是可以调用的。这个时候调用父类的对应方法还是可以同步的。
    接口中的方法默认都是public static final

    4、以下代码执行后输出结果为( )
    public class ClassTest{String str = new String("hello"); char[] ch = {'a','b','c'}; public void fun(String str, char ch[]){str="world"; ch[0]='d'; } public static void main(String[] args) {ClassTest test1 = new ClassTest(); test1.fun(test1.str,test1.ch); System.out.print(test1.str + " and "); System.out.print(test1.ch); } }

    正确答案: A

    hello and dbc

    world and abc

    hello and abc

    world and dbc
    题解:
    我记得这题以前用图解释过,想简单理解的话,就是String不变,字符会变。
    java中都是按栈中的值传递,基本数据类型栈中的值就是实际存储的值,引用类型栈中的值就是指向堆中的地址
    1)String和char[ ]都是引用类型,所以在方法中传递的都是指向真实数据的地址
    2)假设String str指向的hello的地址为d1,str传递到fun函数中的也是地址d1,成员变量str和fun的形参str不是同一个变量,把fun型中的str赋值为world只是修改了该str指向的地址,该地址由d1更改成了world的地址,并没有改变成员变量str指向的地址及堆中的数据,所以str还是hello。
    3)假设char[ ] ch指向的abc的地址是d2,传递到fun函数中的地址也是d2,同上成员变量ch和fun的形参ch不是同一个变量,(1)如果把fun中的ch[0]='d'更改为ch = new ch[3];ch[0]=‘d',那么成员变量ch的值是没有变化的,还是abc,原理同上String,只是改变了引用ch指向的堆数据的地址,并没有改变成员变量ch指向的地址以及堆中的数据。(2)改变了堆中的数据,所以最终结果编程dbc,此ch只是形参而不是成成员变量ch,如果对ch变化对成员变量ch没有影响,但是ch[i]指向了堆数据的地址,直接修改堆数据,所以成员变量变了。

    5、下面哪个Set类是排序的?
    正确答案: B
    LinkedHashSet

    TreeSet

    HashSet

    AbstractSet
    题解:
    TreeSet
    使用二叉树的原理对新 add()的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。

    6、下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
    byte[] src,dst;

    正确答案: B
    A:dst=String.fromBytes(src,“GBK”).getBytes(“UTF-8”)

    B:dst=new String(src,“GBK”).getBytes(“UTF-8”)

    C:dst=new String(“GBK”,src).getBytes()

    D:dst=String.encode(String.decode(src,“GBK”)),“UTF-8” )
    题解:
    答案:B
    操作步骤就是先解码再编码
    用new String(src,“GBK”)解码得到字符串
    用getBytes(“UTF-8”)得到UTF8编码字节数组

    7、给出下面的代码段:
    public class Base{

    int w, x, y ,z;

    public Base(int a,int b)

    {

    x=a; y=b;

    }

    public Base(int a, int b, int c, int d)

    {

    // assignment x=a, y=b

    w=d; z=c;

    }}

    在代码说明// assignment x=a, y=b处写入如下哪几个代码是正确的?()

    正确答案: C D

    Base(a,b);

    x=a, y=b;

    x=a; y=b;

    this(a,b);
    题解:
    A错,调用Base这个构造方法应该这样 new Base(a,b)
    B错,和C相比应该是分号不是逗号,帅的一塌糊涂
    C正常赋值操作
    D调用本类的构造方法

    8、下面描述属于java虚拟机功能的是?
    正确答案: A B C D
    通过 ClassLoader 寻找和装载 class 文件

    解释字节码成为指令并执行,提供 class 文件的运行环境

    进行运行期间垃圾回收

    提供与硬件交互的平台
    题解:
    D说的是提供平台,也算对的

    9、byte b1=1,b2=2,b3,b6,b8;
    final byte b4=4,b5=6,b7;

    b3=(b1+b2); //语句1

    b6=b4+b5; //语句2

    b8=(b1+b4); //语句3

    b7=(b2+b5); //语句4

    System.out.println(b3+b6);

    下列代码片段中,存在编译错误的语句是()

    正确答案: B C D

    语句2

    语句1

    语句3

    语句4
    题解:
    本题答案应为:B、C、D
    ------------知识点------------
    Java表达式转型规则由低到高转换:
    1、所有的byte,short,char型的值将被提升为int型;
    2、如果有一个操作数是long型,计算结果是long型;
    3、如果有一个操作数是float型,计算结果是float型;
    4、如果有一个操作数是double型,计算结果是double型;
    5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
    --------------解析--------------
    语句1错误:b3=(b1+b2); 自动转为int,所以正确写法为b3=(byte)(b1+b2); 或者将b3定义为int;
    语句2正确:b6=b4+b5; b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
    语句3错误:b8=(b1+b4); 虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
    语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变。

    10、下面选项中,哪些是interface中合法方法定义?()
    正确答案: A C D

    public void main(String [] args);

    private int getSum();

    boolean setFlag(Boolean [] test);

    public float get(int x);
    关于抽象类:
    JDK1.8以前:抽象类的方法默认访问权限为protected
    JDK1.8时:抽象类的方法默认访问权限变为default
    关于接口:
    JDK1.8以前:接口中的方法必须是public的
    JDK1.8时:接口中的方法可以是public的,也可以是default的
    JDK1.9时:接口中的方法还可以是private的
    没强调版本,所以这题站在现在的角度看ABCD都对,JDK1.9时接口中的方法可以是private的
    A项没有static修饰符,可以作为普通的方法。
    B刚才说了JDK1.9就是对的
    C不显示标明方法的访问修饰符,接口中默认是public,没毛病
    D项也正常get也不是关键字可以作为方法名

    答案汇总:

    1、正确答案: D

    2、正确答案: B

    3、正确答案: B

    4、正确答案: A

    5、正确答案: B

    6、正确答案: B

    7、正确答案: C D

    8、正确答案: A B C D

    9、正确答案: B C D

    10、正确答案: A C D

    总结 【Java日常练习题|Java日常练习题,每天进步一点点(5)】本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

      推荐阅读