java基础知识巩固作业题及完全解析

   单项选择题的第9题,请大神赐教,我认为是只有它的子类才可以直接访问。

一、单项选择题

   1 、执行的结果是:

            System.out.format("Pi is approximately %d.", Math.PI);

    请问执行结果:  运行时异常

   解释 d%  用来输出 十进制整数,format的第2个参数必须是十进制整数。

                               Math.PI double类型的数据(3.14159...),可以用%f输出。

 

1Math.PI需要用%f来输出

 

2%d只能输出十进制整数

        2、输出的结果是:

             public class Certkiller3 implements Runnable {  
                    public void run() {  
                          System.out.print("running");  
                    }  
                    public static void main(String[] args) {  
                         Thread t = new Thread(new Certkiller3());  
                         t.run();  
                         t.run();  
                         t.start();  
                     }
            }

    输出的结果为: runningrunningrunning


   解释 Thread.run()Thread.start()的区别,Thread.run()相当于只是在主线程中,调用了Thread里的一个普通方法run().未开启多线程。Thread.start()实现了多线程运行程序,run()方法执行完毕,子线程结束。

          3、代码片段1

               public class ComplexCalc {  
                      public int value;  
                      public void calc() {value += 5;}  
                }  

     代码片段2 

               public class MoreComplexCalc extends ComplexCalc {  
                               public void calc() {value -= 2;}  
                               public void calc(int multi) {    //调用这个方法  multi = 3
                                        calc();  //调用自己的方法,value = 1;
                                        super.calc();  
                                        value *= multi;  
                               }  
                               public static void main(String[] args) {  
                                        MoreComplexCalc calc = new MoreComplexCalc();  
                                        calc.calc(3);  
                                        System.out.println("Oh it is:" + calc.value);    // 3
                               }  
                }  

     输出的结果是:Oh it is:9

    解释:请看图解(从main方法开始执行)


           4、下列说法正确的是:

              public class Person {
                        private Stringname;  
                        public Person(String name) {
                                 this.name = name;
                        }
                        public boolean equals(Person p) {
                                return p.name.equals(this.name);  
                        }
                }

                A:equals方法没有正确覆盖Object类中的equals方法。

                B:编译这段代码会出错,因为第5行的私有属性p.name访问不到。
                C:如果要与基于哈希的数据结构一起正常地工作,只需要在这个类中在实现hashCode方法即可。
                D:当添加一组Person对象到类型为java.util.Set的集合时,第4行中的equals方法能够避免重复。

     答案:A

    解释:如果正确覆盖,需要形参为Object


         5 打印的结果是:

             public class JavaContest {  
                         public static void main(String[] args) throws Exception {  
                                    Thread.sleep(3000);  
                                    System.out.println("alive");  
                         }  
                } 

     结果:会在3秒后输出alive

 

    解释:延迟的效果需要自己去试。

           6请问有什么较好的方法来过滤value是空值的情况。

                 public void aSafeMethod(Object value) {  
                           //在这里检查方法的参数  
                          //这里省略其他代码  
                          System.out.println(value.toString());  

                  }  

     答案:

                              if(value == null) {
                                         throw new IllegalArgumentException("value can not be null.");
                               }

     解释IllegalArgumentException 指传入了一个不合法的参数异常。

           7、打印的结果:

             public static void main(String[] args) {  
                  method1(1,2);  // 执行 method1(int x1, int x2),hello java
                  System.out.print("  java");  
             }  
             public static void method1(int x1, int x2) {  
                 System.out.print("hello");  
             }  
             public static void method1(int x1, int x2, int x3) {  
                 System.out.print("hi");  
             }  

     结果是:hello java

 

    解释:从main方法开始执行,第5行只有2个形参,调用有2个参数的method1方法,执行完后才接着执行第6行。

           8、选出正确说法:

                  void waitForSignal() {  
                              Object obj = new Object();  
                              synchronized (Thread.currentThread()) {  
                                              obj.wait();  
                                              obj.notify();  
                               }  
                   }  

                 A: 需要处理InterruptedException

                 B: 代码能编译单可能运行时抛出IllegalStateException.
                 C: 运行10分钟后代码抛出TimeOutException.
                 D: 需要把obj.wait()替换为((Thread) obj).wait()后代码才能通过编译。
                 E: obj.wait()obj.notify()这两句调换一下位置,能使代码执行。

     答案:A

 

           9请问什么类可以直接访问并且改变name的值?

                  package certkiller;  
                  class Target {  
                         public String name = "hello";  
                   }  

     答案:Target的子类(以下3个类的图片),参考答案给的是包certkiller下的类,请大神给解释。


图1:Test类


图2:Person类


图3:t1类

           10 打印的结果:

                    int i = 1;  
                    while(i != 5) {  
                             switch(i++%3) {  
                                   case 0:  
                                         System.out.print("A");  
                                         break;  
                                   case 1:  
                                         System.out.print("B");  
                                         break;  
                                   case 2:  
                                         System.out.print("C");  
                                         break;  
                              }  
                }

     结果:BCAB

 

    解释 i++%3  表达式是先计算,后对i自加1

          11、执行的结果:

               public class Test {  
                    public Test() {  
                          System.out.print("test  ");
                    }
                    public Test(String val) {  
                          this();  
                          System.out.print("test with " + val);  
                    }  
                    public static void main(String[] args) {  
                          Test test = new Test("wow");  
                    }  
              }

     结果:  test test with wow

 

    解释:此题考查构造方法的调用

          12编译运行的结果是: 编译出错

                  String text = "Welcome to Java contest";  
                  String[] words = text.split("\s");  
                  System.out.println(words.length);

 

    解释:鼠标移至错误地方:Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )

        13、以下选项说法正确的是:

               public class Test {  
                      private int a;  
                      public int b;  
                      protected int c;  
                      int d;  
                      public static void main(String[] args) {  
                              Test test = new Test();  
                              int a = test.a++;  
                              int b = test.b--;  
                              int c = test.c++;  
                              int d = test.d--;  
                              System.out.println(a + " - " + b + " - " + c + " - " + d);  
                       }  
              }  

            A编译错误,因为变量abcd没有被初始化
            B编译错误,因为变量a无法被访问
            C编译成功并输出0 - 0 - 0 - 0
            D编译成功并输出1 - -1 - 1 - -1

 

   解释  j=i++  j=++i的区别

                         j=i++,  先将i赋值给j,再对i自身加1

                         j=++i, 先对i自身加1,再赋值给j;

        14、Map<String, ? extends Collection<Integer>> map; 哪个赋值语句会出错

                A、map = new HashMap<>();
                Bmap = new HashMap<String, List<Integer>>();
                Cmap = new HashMap<String, LinkedList<Integer>>();
                Dmap = new LinkedHashMap<Object, List<Integer>>();

     答案:D

    解释MapKey指题目中已经确定为String, A 答案,泛型可以只有一边写明

          15

                   contestKiller = new ReallyBigObject();  
                   //这里省略部分代码  
                   contestKiller = null;  
                    /*在这里补充代码*/

    哪个是告诉虚拟机尽最大可能回收contestKiller 占用的内存空间:

             ARuntime.getRuntime().freeMemory()
             BRuntime.gc()
             CSystem.freeMemory()
             DRuntime.getRuntime().growHeap()
             ESystem.gc()

    答案:E

   解释AB是正在运行过程中的空闲内存,c是系统中的空闲内存,D是运行中的堆栈释放,E是程序运行时所有的空闲内存空间。

二、多项选择题:

       1、给出一个尚未使用泛型的方法    

                   11.   public static int getSum(List list) {
                   12.           int sum = 0;
                   13.           for(Iterator iter = list.iterator(); iter.hashNext();) {
                   14.                  int i = ((Integer) iter.next()).intValue();
                   15.                  sun += i;
                   16.             }
                   17.             return sum;
                   18.   }

      为了适应泛型,需要对代码做以下那三项改动?
            A、删除第14
            B、将第14行替换成int i = iter.next();
            C、将第13行替换成for(int i : intList) {
            D、将第13行替换成for(Iterator iter : intList)
            E、方法的参数声明改为getSum(List<int> intList)
            F、方法的参数声明改为getSum(List<Integer> intList)

    答案: ACF

        2 哪些类的定义是正确的:

               public abstract interface Sudo {  
                     public void crazy(String s);  
                }

             Apublic abstract class MySudo implements Sudo {
                         public abstract void crazy(String s) {}  }

            Bpublic abstract class YourSudo implements Sudo {}
            Cpublic class HerSudo implements Sudo {

                         public void crazy(String i){}
                         public void crazy(Integer s){} }

            Dpublic class HisSudo implements Sudo {
                         public void crazy(Integer i) {} }
            Epublic class ItsSudo extends Sudo {
                         public void crazy(Integer i){} }

   答案:BC

  解释:接口就是抽象的,因此Sudo是否用abstract修饰都没有关系。实现接口就必须要实现接口里的方法。

         3、 请问会输出哪些情况:

            public class Test {  
                     public static void main(String[] args) {  
                              int i = 3, j;  
                              outer:while(i > 0) {  
                                       j = 3;  
                                       inner:while(j > 0) {  
                                                 if(j < 2) break outer;   //跳出外部outer循环
                                                 System.out.println(j + " and " + i);  
                                                 j--;  
                                       }  
                                       i--;  
                               }  
                      } 
                }

     答案: 3 and  3          2 and 3

    解释:本问题考察的是2个while循环,使用inner 和 outer标间。

                           外层循环, i=3 j = 3,进入内层循环, 执行一次输出, j自减后成2

                           再内层循环,执行输出,j自减后成1,执行那个break outer退出外层循环。

         4、  有一个文件夹,它有2个子文件夹,分别是“sora”“shu”, "sora”里面只有名为“aoi.txt”的文件,“shu”里面只有名为“qi.txt”的文件。
     在此文件夹下执行以下命令:
                 java Directories qi.txt
     输出的结果是:“false true”

     请问以下哪些选项的代码分别插到上面的代码中能达到此效果?

               import java.io.*;  
               class Directories {  
                     static String[] films = {"sora", "shu"};  
                     public static void main(String[] args) {  
                            for(String fp : films) {  
                                 //在这里插入第一句代码  
                                 File file = new File(path, args[0]);  
                                 //在这里插入第二句代码  
                                }  
                          }  
               } <span style="font-size:18px;"></span>

         A String path = fp; System.out.print(file.exists() + " ");
         B String path = fp; System.out.print(file.isFile() + " ");
         C String path = File.separator + fp; System.out.print(file.exists() + " ");
         D String path = File.separator + fp; System.out.print(file.isFile() + " ");

   答案: AB

  解释file.isFile()指文件存在,且为标准文件。

       5以下哪些选项的代码存在错误

            Along n1 = 12_3_45____789;
            Blong n2 = __123_45_678_9;
            Cint n3 = 0xFc_aB_C3_353;
            Ddouble n4 = 0b11001_001_0_0_11;
            Efloat n5 = 1.4_142_13;
            Ffloat n6 = 0_1_2_3;

    答案:BCE

   解释 n2不能不以数字开头

                         n3 提示超出了int类型的最大值

                         n5 右侧数据为double类型

 

三、编程题

        1、 写一个名叫Square的类用于求一个数的平方。

     类里面提供两个静态方法,名字都叫square
                           其中一个方法的参数和返回值都是long型,另一个方法的参数和返回值都是double

                答:

               public class  Square{
                       public static long square(long l){
                                return l*l;
                         }
                        public staic  double squre(double d){
                                return d*d;
                       }
                }

        2、给出以下接口HelloWorld,请编写一个类MyHelloWorld实现该接口,并满足接口中所要求的功能。

              答: 

             public interface HelloWorld{
                  public void sayHello();
             }
             Public class MyHelloWorld implements HelloWord{
                    @overide
                    public void sayHello(){
                         System.out.println(“中国你好!”);
                    }
             }

         3、给出如下Shape类,请事先一个公有类Rectangle,满足以下要求:
    继承于Shape,实现Shape的所规定的功能
    int类型的width和height属性(宽和高)及相应的getter和setter

    有一个带两个int参数的共有构造方法,第一个参数设置宽,第二个参数设置高

    给定如下的代码:

               public abstract class Shape {  
                      /**计算形状的面积 */  
                      abstract public int getArea();  
               }  

    请您写出一个类名为Rectangle的类,要求能满足题意。[代码编辑区] 

              public class Rectangle extends Shape{
                   private int width;
                   private int height;
                   public void setWidth(int width){
                         this.width = width;
                   }
                   public int getWidth(){
                         return width;
                   }
                   public void setHeight(int height){
                         this.height = height;
                   }
                   public int getHeight(){
                         return height;
                   }
                   public Rectangle(int width, int height){
                         this.width = width;
                         this.height = height;
                   }
                   public int getArea(){
                         return this.width*this.height;
                   }
              }

         4、在某间软件公司里,小蔡接到上头的一个任务:某位高职的员工留下了一个接口IList,但是该接口的实现类的源码却已丢失,现在需要为该接口重新开发一个实现类MyList.
              下面提供了IList接口的代码。
              要实现的MyList是一个公有类,里面需要提供一个公有的无参构造方法MyList(),用于创建一个空的(不含任何元素的)IList
              请你帮小蔡写出这个实现类的代码。
              (注意。若要使用java.lang包以外的类,请别忘了import。竞赛时将不会有此提醒)
              给定如下的代码: 


             /** 精简的列表(List),用于储存一系列的元素(对象)。 
             IList里面储存的元素会按插入的顺序排放,也能根据下标获取这些元素。下标从0开*始。  */
             public interface IList {
                   /**往列表的尾部增加一个元素 */
                   void add(Object o);
                   /**获取下标所指定的元素。当下标越界时抛出异常 java.lang.IndexOutBoundsException */
                   object get(int i);
                   /**获取列表里当前元素的个数*/
                   int size();
                   /**清空列表,移除列表里所有的元素*/
                   void clear();
             }

    请您写出一个类名为MyList的类,要求能满足题意。[代码编辑区]

            import java.util.ArrayList;
            import java.util.List;
            public class MyList implements IList  {
                List list = null;
                public MyList() {
                      list = new ArrayList();
                }
                void add(Object o) {
                     list.add(o);
                }
                object get(int i) {
                    if(i>list.size()) {
                         throw new IndexOutBoundsException (“超出大小”);
                    }
                    return list.get(i);
                }
                int size() {
                    return list.size();
                }
                void clear() {
                    list.clear();
                }
            }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章