0


做JAVA复习题(一)

一、 阅读程序,写出程序的运行结果

publicclassTestMonth{publicstaticvoidmain(String[]args){try{int month=Integer.parseInt(args[0]);if(month<0||month>12){thrownewArithmeticException("没有"+month+"月份!");}System.out.println("您输入的月份为"+month+"月份");}catch(ArrayIndexOutOfBoundsException e){System.out.println("请输入月份!");}catch(ArithmeticException e){System.out.println("捕获ArithmeticException异常");System.out.println(e.toString());}}}

原文的缩进实在是糟糕,我略微调整了一下
在main中第一个语句就是try,可以看出应该是与异常类有关的题目。后续的if中新创建了一个异常类,并且在month>12或者month<0时抛出。
第一个catch捕获的对象是ArrayIndexOutOfBoundsException异常,也就是数组越界,此时会提示请输入月份。后一个catch是捕获之前的自定义异常并且发出调试信息。用java TestMonth 13运行后,arg[0]的内容应该是"13",所以month的值为13,超出了if中给定的范围,抛出ArithmeticException异常,然后被捕获,执行的应该是

catch(ArithmeticException e)

之后的内容,也就是以下内容:

捕获ArithmeticException异常
java.lang.ArithmeticException: 没有13月份!
packagetest;publicclassOuterClass{privateclassInterClass{publicInterClass(){System.out.println(“InterClass”);}}publicOuterClass(){InterClass  ic=newInterClass();System.out.println(“OuterClass”);}publicstaticvoidmain(String args[]){OuterClass oc=newOuterClass();}}

简单分析类的结构,在public类OuterClass中分别有一个子类与两个方法,main方法不过多介绍。子类为private修饰的类InterClass,其中包含了本身的构造方法,还有一个方法为类OuterClass的构造方法。程序运行时,新实例化了一个OuterClass类的对象oc,那么在实例化时同时执行OuterClass类的构造方法里的内容,也就是实例化一个InterClass类的对象ic,并且执行InterClass类构造方法的内容

System.out.println(“InterClass”);

然后再执行实例化ic的下一个语句

System.out.println(“OuterClass”);

。所以输出的结果为:

InterClass
OuterClass
importjava.io.*;publicclassFileTest{publicstaticvoidmain(String args[]){File f=newFile("document","old");File d=newFile("target");
        d.mkdir();
        f.renameTo(newFile("target","new"));String s[]=d.list();for(int i=0;i<s.length;i++)System.out.println(s[i]);}}

第一行实例化了一个file类对象f,参数为

"document","old"

,查阅File类文档得知,使用的是这一个构造方法

File(String path, String name)

,即f为路径document下的old文件。根据后文对

"target"

的应用,

"target"

的含义应为路径,所以d为路径“target”。

d.mkdir();

为创建目录target,此时多出了一个新创建的目录“target”,renameTo再将f移动至“target”文件夹后重命名为“new”,最后用循环输出target目录下的文件,输出的结果为:

new
importjava.util.*;publicclassStudent6{publicstaticvoidmain(String args[]){List list =newArrayList();
        list.add("Hello");
        list.add("World");
        list.add("Hello");
        list.add("Learn");
        list.remove("Hello");
        list.remove(0);for(int i=0; i<list.size();i++){System.out.println(list.get(i));}}}

本题考察ArrayList的用法,对应知识点
先安装先后次序向数组中添加了几个字符串,再删除掉指定元素,最后输出数组里的元素。考察的点在remove的两种用法:1、remove(Object obj)移除指定元素(如果有多个内容相同的元素则移除首次出现的)2、remove(下标),移除索引对应元素。先正常添加元素,数组内容为:
下标0123/“Hello”“World”“Hello”“Learn”
第一个remove移除首次出现的“hello”
下标012/“World”“Hello”“Learn”
第二个remove移除下标为0的元素
下标01/“Hello”“Learn”
最后输出:

Hello
Learn

篇幅有限,时间紧急,后续内容以源码+注释+少量解释组成

importjava.util.*;publicclass t5 {publicstaticvoidmain(String[] args){List<Integer> list =newArrayList<>();//新建集合
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(0,10);
        list.add(3,30);System.out.println("list is:"+ list);LinkedList<Object> linkedList =newLinkedList<>(list);
        linkedList.add(1,"red");
        linkedList.removeLast();
        linkedList.addFirst("green");ListIterator<Object> listIterator = linkedList.listIterator();//获取迭代器while(listIterator.hasNext()){//判断游标是否可后移System.out.print(listIterator.next()+"");//返回游标后的元素}System.out.println();while(listIterator.hasPrevious()){//判断游标前是否有元素System.out.print(listIterator.previous()+"");//输出游标前元素(等于倒着遍历集合)}}}

java 集合迭代器 ListIterator
运行结果:

list is:[10, 1, 2, 30, 3, 4]
green10red12303
33021red10green

这题代码全是错误,很难不让人怀疑我们学校老师的专业性

publicclassMyThreadextendsThread{//一个java文件只能有一个主类publicstaticvoidrun(){//'MyThread' 中的 static 方法 'run()' 无法重写 'java.lang.Thread' 中的实例方法 'run()'for(int i=0;i<3;i++){System.out.println(getName()+"运行,i="+i);if(i==1){System.out.println(getName()+"线程礼让!");//请用半角符号Thread.yield();}}}}publicclassThreadYieldDemo{publicstaticvoidmain(String[] args){MyThread tp1=newMyThread();
    tp1.setName("tp1");
    tp1.start();MyThread tp2=newMyThread();
    tp2.setName("tp2");
       tp2.start();}}

如果有幸出这题的老师看见我的文章,相信这里可以帮到你:public class与class
以下是修改后的代码,可以正常运行:

classMyThreadextendsThread{//定义多线程类publicvoidrun(){//线程执行时的运行内容for(int i=0;i<3;i++){System.out.println(getName()+"运行,i="+i);if(i==1){System.out.println(getName()+"线程礼让!");Thread.yield();}}}}publicclass t5{publicstaticvoidmain(String[] args){MyThread tp1=newMyThread();//实例化线程类
        tp1.setName("tp1");//线程命名
        tp1.start();MyThread tp2=newMyThread();
        tp2.setName("tp2");
        tp2.start();}}

考察多线程应用
运行结果:

tp2运行,i=0
tp2运行,i=1
tp1运行,i=0
tp1运行,i=1
tp2线程礼让!
tp2运行,i=2
tp1线程礼让!
tp1运行,i=2

详情查阅关键字:“Java 线程礼让”

错误的:

importjava.util.*;publicclassTest{publicstaticvoidmain(String[] args){List<String> list=Arrays.aslist("yellow","red","green","blue");//Arrays.asList()方法L是大写啊,李在淦神魔?Collections.reverse(list);System.out.println(list);List<String> list1=Arrays.aslist("yellow","red","green","blue");List<String> list2=Arrays.aslist("pink","tan");Collections.copy(list1,list2);System.out.println(list1);Collection<String> c1=Arrays.aslist("red","cyan");Collection<String> c2=Arrays.aslist("red","blue");System.out.println(Collections.disjoint(c1,c2));}}

能用的:

importjava.util.*;publicclassTest{publicstaticvoidmain(String[] args){List<String> list=Arrays.asList("yellow","red","green","blue");Collections.reverse(list);//Collections.reverse()反转ListSystem.out.println(list);List<String> list1=Arrays.asList("yellow","red","green","blue");List<String> list2=Arrays.asList("pink","tan");Collections.copy(list1,list2);//Collections.copy拷贝一个ArrayList对象到另一个ArrayList对象中System.out.println(list1);Collection<String> c1=Arrays.asList("red","cyan");Collection<String> c2=Arrays.asList("red","blue");System.out.println(Collections.disjoint(c1,c2));//Collections.disjoint(检查给定的 Collection 对象是否可能包含任何公共元素//当 Collection 对象中不存在公共元素时返回真,否则返回假}}

知识点:Arrays.asList
运行结果:

[blue, green, red, yellow]
[pink, tan, green, blue]
false

这次没问题了

importjava.util.*;publicclassTest{publicstaticvoidmain(String[] args){LinkedHashSet<String> set1=newLinkedHashSet<>();
        set1.add("New York");//向set1中添加“New York”LinkedHashSet<String> set2=set1;//让set2指向与set1相同的属性LinkedHashSet<String> set3=(LinkedHashSet<String>)(set1.clone());//克隆新的对象,内容与此时的set1相等
        set1.add("Atlanta");//向set1属性内添加System.out.println("set1 is"+set1);System.out.println("set2 is"+set2);System.out.println("set3 is"+set3);}}

知识点:LinkedHashSet

运行结果:

set1 is[New York, Atlanta]
set2 is[New York, Atlanta]
set3 is[New York]

由于后来set2指向了与set1相同的堆内存地址,所以内容时刻保持一致。
set3是后来克隆的新对象,修改内容后不影响

明天考试了,加油!

标签: java 开发语言

本文转载自: https://blog.csdn.net/qq_40631525/article/details/125212293
版权归原作者 三天之内给你拿下奥 所有, 如有侵权,请联系我们删除。

“做JAVA复习题(一)”的评论:

还没有评论