Java基础入门》习题答案
第1章Java开发入门
一、填空题1 、 Java EE、 Java SE、 Java ME 2、 JRE 3、 javac 4、 bin 5、 path、 classpath二、选择题1 、 ABCD 2、 C 3、 D
4、 B 5、 B三、简答题1 、 面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、 JRE Java RuntimeEnvironment Java运行时环境 它相当于操作系统部分提供了Java程序运行时所需要的基本条件和许多Java基础类例如IO类、 GUI控件类、 网络类等。 JRE是提供给普通用户使用的如果你只想运行别人开发好的Java程序那么你的计算机上必须且只需安装JRE。 JDKJava Development Kit Java开发工具包 它包含编译工具、解释工具、文档制作工具、打包工具多种与开发相关的工具是提供给Java开发人员使用的。初学者学习和使用Java语言时 首先必须下载和安装JDK。 JDK中已经包含了JRE部分初学者安装JDK后不必再去下载和安装JRE了。 四、编程题publ ic class Hel loWorld{publ ic static void main(String[]args) {System out println("这是第一个Java程序 "); } }
第2章Java编程基础
一、填空题1 、 class 2、 true和false 3、 单行注释、多行注释、文档注释4、 基本数据类型、 引用数据类型5、 1 、 2、 4、 86、&&&| | |7、 08、 5
9、 3410、 56二、判断题1 、 错2、对3、错4、对5、错三、选择题1 、 AD 2、 AD 3、 C 4、 ABCD 5、 C 6、 A7、 AC 8、 A
9、 B 10、 A四、程序分析题1 、 编译不通过。 int值4和b相加时由于变量b的类型为byte 取值范围没有int类型大存不下int类型的值因此编译不通过。 2、 编译不通过。这是因为y是在最里层的代码块中定义的一个变量只有在那个代码块中才可使用在使用y=x;语句时已经超过了y变量的作用域所以编译无法通过。 3、 打印结果为 3。 4、 打印结果为 987五、 问答题1 、 Java语言的八种基本数据类型有 byte字节型占一个字节。 short短整型占两个字节。 int整型 占4个字节。 long长整型占8个字节。 float单精度浮点型占4个字节。 double双精度浮点型 占8个字节。 char字符型占两个字节。 boolean型表示逻辑值有true和false两个值分别占一个字节。 2、如果使用“&”在表达式之间进行连接那么无论任何情况 “&”两边的表达式都会参与计算。 如果使用“&&”进行连接当“&&”左边的表达式为false 则不会执行其右边的表达式。例如定义int x=2,y=0;boolean b=x<y&x/2>0表达是会发生被0除异常 因为x/y的表达式执行了。而boolean b=x<y&x/2>0是不会出现这种异常的因为x<y为false 表达式x/y不会执行。 3、方法重载指的是在一个类中可以声明多个同名的方法而方法中参数的个数或者数据类型不一致。 调用这些同名的方法时 JVM会根据实际参数的不同绑定到不同的方法。 六、编程题1 、参考答案publ ic class Test01 { publ ic static void main(String[] args) { int sum= 0; for (int i = 1 ; i < 100; i++) { if (i%2 != 0) sum+= i ; }System out println(sum); } }
2、参考答案publ ic class Test02{publ ic static void main(String args[]) { int y=function(0);
System out println(y); }publ ic static int function(int x) { int y; if (x>0) {y=x+3; }else if (x==0) {y=0; }else{y=x*x- 1 ; } returny; } }
3、参考答案publ ic class Test03{publ ic static void main(String[]args) { int[]arr={25,24, 12,76, 101 ,96,28}; for (int i=0; i<arr length- 1 ; i++) { //定义内层循环for (int j=0; j<arr length- i - 1 ; j++) { if (arr[j]>arr[j+1]) { //比较相邻元素//下面的三行代码用于交换两个元素int temp=arr[j];arr[j]=arr[j+1] ;arr[j+1]=temp; } } } for (int i=0; i<arr length; i++) {System out print(arr[i]+" "); //打印元素和空格} } }
第3章面向对象上
一、填空题1 、封装、继承、多态2、 new3、成员变量、局部变量4、类、类5、 this6、 final ize()
7、静态变量8、 内部类9、 javadoc 10、 private二、判断题1 、对2、对3、错4、对5、错三、选择题1 、 B 2、 D 3、 B 4、 ABC
5、 ABCD 6、 ACD 7、 ABCD 8、 ABCD 9、 D 10、 D四、程序分析题1 、程序不能编译通过因为在类A中的成员变量secret用private修饰所以在类Test1中无法访问。 2、程序不能编译通过因为在静态方法method()中不能访问非静态成员变量x。 3、程序能够编译通过运行的结果为“inner” 。 五、简答题1 、构造方法是类的一个特殊成员它会在类实例化对象时被自动调用。而普通方法只有在使用的时候才会被调用。在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值2、单例模式可以保证在整个程序运行期间针对该类只存在一个实例对象。 六、编程题1 、参考答案class Student { private String name; private double grade; publ ic Student() { } publ ic Student(String name, double grade){ this name=name; this grade=grade; }publ ic String getName() { return name; }publ ic void setName(String name) { this name=name; }publ ic double getGrade() { return grade; }publ ic void setGrade(double grade) { this grade=grade; } } publ ic class Test01{publ ic static v"oid main(S"tring[]args) {Student stu1 =new Student();stu1 setName( zhangsan );stu1 setGrade(99);Student stu2=new Student("l isi" 100); } }
2、参考答案class Father {private String name="zhangjun";class Chi ld{publ ic void introFather() {System out println("My Father's name is "+name); } } }publ ic class Test02{publ ic static void main(String[]args) {Father Chi ld chi ld=new Father() new Chi ld();chi ld introFather(); }}
第4章面向对象下
一、填空题1 、继承2、方法抽象类3、 import 4、子类、父类、基类5、 Exception 6、 final 7、 super 8、 Object 9、 try、 catch
10、 jar–cvf java–jar二、判断题1 、错2、对3、错4、对5、对三、选择题1 、 B 2、 C 3、 ABC 4、 ABCD 5、 C 6、 AC 7、 C
8、 D 9、 A 10、 B四、程序分析题1 、程序编译能通过这是因为int x=2/0;System out println(x);这两条语句使用了try块捕获了程序因为除以0而产生的异常情况之后程序会继续向下执行输出“进入catch代码块” “进入final ly代码块” 。 2、程序编译不通过这是因为在程序中使用了final关键字修饰Animal类使得Animal类不能被继承。 shout()方法中同样使用了final关键字使得该方法不能被重写。
3、程序编译能通过输出结果为“动物叫 ”和“汪汪……” 因为在程序中调用shout()方法时首先会通过supershout()调用父类的方法说出“动物叫 ”之后再输出“汪汪……”4、程序编译不通过因为接口中定义的方法不能有方法体所以定义的eat()方法是错误的。接口中的方法必须在子类中全部实现由于run()方法在子类中并没有重新实现所以这也是错误的。 五、简答题1 、在继承关系中子类的方法与父类的某一方法具有相同的方法名、返回类型和参数列表则称子类的该方法重写(覆盖)父类的方法。 2、多态意味着一个对象有着多种形态可以在特定的情况下表现不同的状态从而对应着不同的属性和方法。简单的说多态就是使用父类类型的变量引用子类对象根据被引用子类对象的特性程序会得到不同的运行效果。 3、在Java中使用abstract关键字修饰的类称之为抽象类。抽象类是不能被实例化的通常需要写一个子类来继承抽象类同时实例化子类来获得该类的对象。抽象类通常用于表示一种抽象的概念。 接口可以说是一种特殊的抽象类接口中只能定义常量和抽象方法。 由于接口的特殊性在定义时需要使用interface关键字。 六、编程题1 、参考答案class Student {publ ic String"name;"publ ic int"age;p"ubl ic Student(String name, int age){ this name=name; this age=age; }publ icvoidshow(){System out println( name: +name+ age: +age); } } class UnderGraduate extends Student{ publ ic String degree; publ icUnderGraduate(Strin"g nam"e, int a"ge,Stri"ng de"gree){ s"uper(name, age); this degree=degree; } publ ic void show(){System out println( name: +nam"e+ age: +"age+ degree: +degree); } }publ ic class Test01 {publ ic static void main(String"[]a"rgs){"Student"student=new Student( zhangsan 16); student show();UnderGraduate underGraduate=new UnderGraduate( l isi 20,bechalor );underGraduate show(); }
}
2、参考答案interface Shape { *double area(double givenValue); } class Square implements Shape{ publ ic double area(d*o*uble sideLength){ return sideLength sideLength; } }class Circle implements Shape{publ ic double area(double r) { return Math PI r r; } }publ ic classTest02 { publ ic static void main(String[] args) { Shape square = new Square(); Shape circle = new Circle();System out println(square area(2));System out println(circle area(3)); } }
3、参考答案class NoThisSongException extends Exception{ publ ic NoThisSongException(){ super(); } publ ic NoThisSongException(Stringmessage){ super(message); } } class Player{ publ ic void play(int index)throws NoThisSongException{ if(index>10){ throw newNoThisSongException("您播放的歌曲不存在"); }System out println("正在播放歌曲"); } } publ ic class Test03{ publ ic static voidmain(String[]args) {Player player=new Player(); try{player play(13); }catch (NoThisSongException e) {System out println("异常信息为 "+e getMessage()); } } }
第5章多线程
一、填空题1 、 线程、通信2、 Thread、 Runnable 3、 就绪4、 synchronized、对象、 this 5、 进程6、新建状态(New)、 就绪状态(Runnable)、 运行状态(Running)、 阻塞状态(Blocked)、 死亡状态(Terminated)7、 10、 1 8、 开启一个新线程、 run()方法9、wait()、 notify()、 notifyAl l() 10、 setDaemon(true)、 start()二、判断题1 、错2、对3、对4、错5、错三、选择题1 、 B 2、 AC
3、 ABC4、 BC5、 ABD6、 ABC7、 C8、 D9、 AB 10、 ABCD四、程序分析题1 、程序不能编译通过因为RunHandler类没有实现Runnable接口 因此RunHandler的实例对象不能作为参数传递给Thread的构造方法。 2、程序不能编译通过因为Thread的子类A重写的run()方法的访问级别不能低于父类run()方法的。 访问级别3、程序不能编译通过因为同步方法中调用wait()方法的对象必须为同步锁对象。 4、 t start();五、简答题1 、 一种是继承java lang包下的Thread类覆写Thread类的run()方法在run()方法中实现运行在线程上的代码。new Thread() {publ ic void run(){} }start();
另一种就是实现java lang Runnable接口同样是在run()方法中实现运行在线程上的代码。new Thread(new Runnable(){publ ic void run(){} })start()
2、调用sleep()方法正在执行的线程主动让出CPU去执行其他线程在sleep()方法指定的时间过后 CPU才会回到这个线程上继续往下执行如果当前线程进入了同步锁 sleep()方法并不会释放锁即使当前线程使用sleep()方法让出了CPU但其它被同步锁挡住了的线程也无法得到执行。wait()
在一个已经进入了同步锁的线程内进行调用让当前线程暂时让出同步锁以便其它正在等待此锁的线程可以得到同步锁并运行。当其它线程调用了notify()方法后调用wait()方法的线程就会解除wait状态当再次获得同步锁后程序可以继续向下执行。 六、编程题1 、参考答案publ ic class MyThread extends Thread{ publ ic MyThread(String name) { super(name); "} publ ic" void run(){ System out println(this getName()); } publ ic static void main(String[] args) { new MyThread(Thread1 )start(); newMyThread("Thread2")start(); } }
2、参考答案publ ic class MyRunnable implements Runnable{publ ic void run() { for (int i=0; i<50; i++) {System out println("ne"w"); }"}publ icstatic void main(String[]args) {new Thread(new MyRunnable())start(); for (int i=0; i<100; i++) {System out println(main ); } } }
3、参考答案publ ic class Test01 { publ ic static void main(String[] args) {Teacher t = new Teacher(); new Thread(t, "陈老师")start(); newThread(t, "高老师")start(); new Thread(t, "李老师")start(); } }class Teacher implements Runnable{private int notes=80;publ icvoid run() {whi le(true) {dispatchNotes(); //调用售票方法if (notes <= 0) { break; } } } private synchronized void dispatchNotes() { if (notes > 0) { try{ Thread sleep(10); // 经过的线程休眠 10 毫秒 } catch (InterruptedException e) { e printStackTrace(); }System out println(Thread currentThread()getName()+"---发出的笔记"+notes--); } } }
4、参考答案publ ic class Accumulator extends Thread { private int stratNum; publ ic static int sum; publ ic Accumulator(int startNum){ this stratNum=startNum; }publ ic static synchronized void add(int num) {sum+=num; }publ ic void run() { int sum=0; for (int i=0; i< 10; i++) { sum+=stratNum+i ; }add(sum); } publ ic static void main(String[]args) throws Exception {Thread[] threadList=new Thread[10]; for (int i=0; i<10; i++) { threadList[i]=new Accumulator(10* i+1 ); threadList[i]start(); } for (int i=0; i<10; i++) {threadList[i] join(); }"
System out println(Sum is: "+sum); } }
第6章JavaAPI
一、填空题1 、 String、 StringBuffer 2、 Date、 Calendar、 DateFormat 3、 getRuntime()4、 sqrt()5、 DateFormat 6、 π、 e 7、Random、 java uti l 8、 length()9、 静态10、 edcba二、判断题1 、错2、错3、对
4、错5、对6、 B7、 C8、 A9、 A10、 B
三、选择题1 、 C2、 C3、 D4、 C5、 C四、程序分析题1 、程序编译能通过输出结果如下
570-80-581 -61
2、程序编译能通过输出结果如下str length():15 str charAt(0):d lastIndexOf(m):10 substring(2,4):fe indexOf(g):5
五、简答题1 、 String类是不可变类即字符串值一旦初始化后就不可能改变。 StringBuffer是可变字符串类类似String的缓冲区可以修改字符串的值。 2、 Date类用来表示某个特定的瞬间能够精确到毫秒。而在实际应用中往往需要把一个日期中的年、 月、日等信息单独返回进行显示或处理这个类中的大部分方法都已被标记过时。 Calender类基本取代了Date类该类中定义了一系列用于完成日期和时间字段操作的方法。 Calendar的getTime()方法 getTime()返回一个表示Calendar时间值的Date对象同时Calendar有一个setTime(Date date)方法 setTime()方法接收一个Date对象将Date对象表示的时间值设置给
Calendar对象通过这两个方法就可以完成Date和Calendar对象之间的转换。 六、编程题1 、 参考答案publ ic class Test01 { publ ic static void main(String[] args) {String str = "Hel loWorld"; //字符串转成char数组char[] ch =str toCharArray();StringBuffer buffer= new StringBuffer(); for (int i = str length() - 1 ; i >= 0; i--)' {' if (ch[i] >= 'A'&&ch[i] <= ''Z'){ buffer append(String valueOf(ch[i]) toLowerCase()); } else if (ch[i] >= a && ch[i] <= z){buffer append(String valueOf(ch[i]) toUpperCase()); } }System out println(buffer toString()); } }
2、 参考答案import java text DateFormat; import java uti l Calendar; import java uti l Date; publ ic class Test02 { publ ic static void main(String[]args) { Calendar calendar = CalendargetInstance(); calendar add(Calendar DATE, 100); Date date = calendargetTime();DateFormat format = DateFormat getDateInstance(DateFormat FULL); String string = format format(date);System out println(string); } }
3、 参考答案import java uti l Random; publ ic class Test03{ publ ic static void main(String[] args) {Random rand = new Random(); int[] num=new int[5]; for (int i=0; i<num length; i++) {num[i]=20+rand nextInt(31 );System out println(num[i]); } }
}
第7章集合类
一、填空题1 、集合2、 Comparator 3、有序、可重复无序、不可重复4、 hashNext()、 next()5、 Col lection、 Map 6、键、值
7、 ListIterator 8、 ArrayList、 LinkedList HashSet、 TreeSet HashMap、 TreeMap 9、 put()、 get() 10、 Col lections、 Arrays二、判断题1 、错2、对3、对4、错5、对三、选择题1 、 BC 2、 A3、 D 4、 ABD 5、 C 6、 AB 7、 D 8、 AB 9、 ABC 10、 B四、程序分析题1 、程序可以编译通过输出结果是“a、 b、 c” 因为TreeSet集合不允许存放重复元素第2次增加的元素c会覆盖之前存入的元素c 所以输出结果是“a、 b、 c” 而不是“a、 b、 c、 c” 。 2、程序不可以编译通过这是由于向ArrayList集合中存入元素时集合并不能记住元素的类型因此在取出元素时只能使用Object类型而不能使用String类型。 3、程序可以编译通过但是什么也没有打印。使用ListIterator进行从后向前的遍历集合可以使用以下两种方法一是使用l istIterator(int index)方法将索引index的值设置为集合元素的数目 也就是ListIterator it=l ist l istIterator(3); 二是将程序先从前向后遍历然后再从后向前遍历。
4、程序编译不通过由于Map集合在遍历的过程中不能使用集合对象本身删除元素这会导致并发修改异常若想删除集合中的元素可以使用Iterator的remove()方法。 五、简答题1 、 为了使程序能方便的存储和操作数目不固定的一组数据 JDK提供了一套类库这些类都位于java uti l包中统称为集合。集合框架中包含3个接口 分别是List、 Set、 Map。 2、 List的特点是元素有
序、元素可重复。 List接口的主要实现类有ArrayList和LinkedList。 Set的特点是元素无序、元素不可重复。 Set接口的主要实现类有HashSet和TreeSet。 Map的特点是存储的元素是键(Key)、值(Value)映射关系元素都是成对出现的。 Map接口的主要实现类有HashMap和TreeMap。 3、 Col lection是一个单例集合接口。它提供了对集合对象进行基本操作的通用方法。 Col lections是一个工具类。它包含各种有关集合操作的方法。 六、编程题1 、参考答案import java uti l *;publ ic class Test01 {publ ic"st"atic void main(String[]args) {ArrayList l ist=newArrayList();for(int i = 0; i < 10; i++) { l ist add(A+i); } Iterator it = l ist iterator(); whi le(it hasNext()) { Object obj = it next();System out println(obj); } } }
2、参考答案import ja"va ut"i l *;publ ic class Test02{publ ic s"tatic v"oid main(String[]args) {HashSe"t has"hSet=new HashSet();Person p1 =newPerson( Jack 25); Person p2 = new Person(Rose 23); Person p3 = new Person( Jack 27);"h"ashSet add(p1 ); hashSet add(p2);hashSet add(p3); for(Object obj :hashSet){Person p=(Person)obj ;System out println(p name+ :+p age); } } } class Person{Stringname; int age; publ ic Person(String name, int age) { super(); this name= name; this age=age; } publ ic int hashCode() { returnname hashCode(); } publ ic boolean equals(Object obj) { if (this == obj) return true; if (obj == nul l) return false; Person other =(Person)obj ;return other name equals(this name); } }
3、参考答案import jav"a"u"ti l *;p"ubl ic class T"es"t0"3{pu"bl ic static v"oid"m"ain(S" tring[]args)" {"T"reeMap"map=new"T"re"eMap(ne"w MyComparator());map put( 1 Lucy);map put(2 Lucy); "m"ap put(3 John );map put(4 Smith );map put(5 Amanda); for (Object key :map keySet()) { System out println(key + : +map get(key)); } } } class MyComparator implements Comparator { publ ic intcompare(Object obj1 ,Object obj2) {String ele1 =(String)obj1 ;String ele2=(String)obj2; return ele2 compareTo(ele1 ); } }第8章IO输入输出
一、填空题1 、 字节流、 字符流2、 Fi le、 java io 3、 SequenceInputStream 4、 RandomAccessFi le 5、 管道流6、LineNumberReader 、 BufferedReader 、 setLineNumber(int) 、 getLineNumber() 7 、 字节流、 字符流 8 、PrintStream、 setOut(PrintStream out)9、 Unicode 10、 newLine()二、判断题1 、 错2、对3、对4、对5、错三、选择题1 、 AB
2、 C 3、 C4、 ABCD 5、 AB 6、 ACD 7、 A8、 A9、 D 10、 A四、程序填空题
1 、 InputStreamReader、 br readLine() 、运行结果为22、 Fi leInputStream(fi le1 ) 、 Fi leOutputStream、 fis avai lable()五、 问答题
1 、 Java程序通过流来完成输入和输出流是输入或输出信息的抽象。流通过Java的输入/输出系统与外设连接进行数据通信。流是抽象的对象具体实现代码在java io包中。 2、字节流的两个基类是InputStream和OutputStream字符流的两个基类是Reader和Writer 它们都是Object类的直接子类字节流是处理以8位字节为基本单位的字节流类 Reader和Writer类是专门处理16位字节的字符流类。 3、管道流分为管道输入流PipedInputStream和管道输出流PipedOutputStream 通常由一个PipedInputStream实例对象和一个PipedOutputStream实例对象相互连接而实现管道通信 PipedOutputStream向管道写入数据PipedInputStream从管道中读取PipedOutputStream写入的数据管道流主要用来完成线程之间的通信。 六、编程题1 、参考答案import java io*; publ ic class Test01 {publ ic static void main(String[]args) throws Exception { //字节流拷贝Fi leInputStream in=new Fi leInputStream("E:/src txt");Fi leOutputStream out=new Fi leOutputStream("E:/des1 txt");byte[]buf=new byte[1024]; int len;whi le ((len = in read(buf)) != -1 ) { out write(buf, 0, len); } in close(); out close(); // 字符流拷贝 BufferedReader bf = newBufferedReader(new Fi leReader("E:/src txt")); BufferedWriter bw= new BufferedWriter(new Fi leWriter("E:/des2 txt")); String str;whi le((str=bf readLine()) !=nul l) {bw write(str);bw newLine(); }bf close();bw close(); } }
2、参考答案import java io*; publ ic class Test02 { publ ic static void main(String[] args) throws Exception { BufferedReader br = newBufferedReader(new InputStreamReader(System in));
String password=""; boolean b=false; for (int i=0; i<5; i++) {System out println("请输入密码:"); password=br readLine(); if(password equals("123456")) {System out println("恭喜你进入游戏");b=true;break; } } if (!b) {System out println("密码错误游戏结束");System exit(0); } } }
第9章GUI 图形用户界面
一、填空题1 、 GUI、 java awt、 javax swing 2、 适配器3、 Graphics 4、 事件监听器5、 JComponent 6、 窗体事件、键盘事件、鼠标事件、动作事件7、 WindowListener、 windowClosing(WindowEvent e)8、 模态对话框、非模态对话框9、 setLayout(nul l)
10、 JMenuBar、 JMenu、 JMenuItem二、判断题1 、对2、错3、对4、错5、错三、选择题1 、 D 2、 D3、 ABD 4、 A5、 D
6、 ABCD四、程序分析题1 、参考答案extends Stdno=new JTextField();Name=new JTexxtField();
7、 ABD
8、 ABC
9、 D
10、 C
2、参考答案card next(cp);cp add(jbt);
五、简答题
1 、参考答案通过实现XxxListener接口或者继承XxxAdapter类实现一个事件监听器类并对处理监听动作的方法进行重写创建事件源对象和事件监听器对象调用事件源的addXxxLisntener()方法为事件源注册事件监听器对象2、参考答案AWT是Abstract Window ToolKit (抽象窗口工具包)的缩写这个工具包提供了一套与本地图形界面进行交互的接口。 AWT中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系当我们利用AWT来构件图形用户界面的时候我们实际上是在利用操作系统所提供的图形库。 由于不同操作系统的图形库所提供的功能是不一样的在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现J ava语言所宣称的"一次编译到处运行"的概念AWT不得不通过牺牲功能来实现其平台无关性也就是说AWT所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。 由于AWT是依靠本地方法来实现其功能的我们通常把AWT控件称为重量级控件。 Swi n g是在AWT的基础上构建的一套新的图形界面系统它提供了AWT所能够提供的所有功能并且用纯粹的Java代码对AWT的功能进行了大幅度的扩充。 由于在Swing中没有使用本地方法来实现图形功能我们通常把Swing控件称为轻量级控件。 AWT和Swi n g之间的基本区别 AWT是基于本地方法的C/C++程序其运行速度比较快 Swi n g是基于AWT的Java程序其运行速度比较慢。对于一个嵌入式应用来说 目标平台的硬件资源往往非常有限而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下简单而高效的AWT当然成了嵌入式J ava的第一选择。而在普通的基于P C或者是工作站的标准Java应用中硬件资源对应用程序所造成的限制往往不是项目中的关键因素所以在标准版的Java中则提倡使用Swing 也就是通过牺牲速度来实现应用程序的功能。 六、编程题1 、参考答案import java awt *; import java awt event *; import javax swing*;publ ic class MyMouseHandler extends JFrame{publ icMyMouseHandler() { final JLabel label=newJLabel("此处显示鼠标右键点击的坐标"); label setOpaque(true);label setBackground(Color PINK); this add(label ,BorderLayout NORTH); this setSize(300,200);this setDefaultCloseOperation(JFrame EXIT_ON_CLOSE); this addMouseListener(new MouseAdapter() {publ ic voidmouseCl icked(MouseEvent e) { if (e getButton()==e BUTTON1 ) { int x=e getX(); int y=e getY();String banner="鼠标当前点击位置的坐标是"+x+""+y; label setText(banner); } } });this setVisible(true); }publ ic static void main(String[]args) {new MyMouseHandler(); } }
2、参考答案import java awt *; import java uti l *; import javax swing*; import java awt event *;publ ic class Information extends JFrame{ //窗口NORTH部的JPanel面板private JPanel panel=new JPanel(); //爱好标签private JLabel lb1 =new JLabel("爱好"); //三个表示爱好的JCheckBox复选框private JCheckBox cb1 =new JCheckBox("羽毛球");private JCheckBox cb2=new JCheckBox("乒乓球");private JCheckBox cb3=new JCheckBox("唱歌"); //性别标签private JLabel lb2=new JLabel("性别"); //表示性别的JRadioButton单选框private JRadioButton rb1 =new JRadioButton("男");private JRadioButton rb2=new JRadioButton("女"); //ButtonGroup添加JRadioButton,实现单选功能private ButtonGroup bg = new ButtonGroup(); //文本域组件private JTextArea area = newJTextArea(); //窗口CENTER部的JScrol lPane面板其中放置area文本域private JScrol lPane pane=new JScrol lPane(area); //Set集合存放选中的兴趣private Set hobbies=new HashSet(); //gender选中的性别private String gender=""; //JCheckBox复选框的事件监听器private ActionListener l istener1 =new ActionListener() {publ ic void actionPerformed(ActionEvent e) {JCheckBoxcb=(JCheckBox)e getSource(); //选中的复选框把文本添加到Set集合中if (cb isSelected()) { hobbies add(cb getText()); //反之从集合中移除}else{hobbies remove(cb getText()); } print(); } }; // JRadioButton 单选框的事件监听器 private ActionListener l istener2 = newActionListener() { publ ic void actionPerformed(ActionEvent e) { JRadioButton jb = (JRadioButton) e getSource(); gender =jb getText();print(); } }; //打印方法private void print() { //清空文本域area setText(""); //如果Set集合中有元素打印兴趣if(hobbies size()>0)area append("你的兴趣爱好有: "); Iterator it=hobbies iterator();whi le(it hasNext()) {area append(it next()+""); } //如果gender不为空字符串打印性别if (!""equals(gender))area append("你的性别为 "+gender); }publ ic Information() { //添加标签、 单选和复选按钮panel add(lb1 ); panel add(cb1 ); panel add(cb2); panel add(cb3); panel add(lb2); panel add(rb1 );panel add(rb2); bg add(rb1 ); bg add(rb2); // 为单选和复选按钮添加事件监听器 cb1 addActionListener(l istener1 );cb2 addActionListener(l istener1 );cb3 addActionListener(l istener1 ); rb1 addActionListener(l istener2);rb2 addActionListener(l istener2); //将JPanel 面板和 JScrol lPane 面板添加到 JFrame容器中 Container container =this getContentPane(); container add(panel , BorderLayout NORTH); container add(pane, BorderLayout CENTER); this pack();this setDefaultCloseOperation(JFrame EXIT_ON_CLOSE); this setVisible(true); } publ ic static void main(String[] args) { newInformation(); } }
3、参考答案import javax swing*; import java awt *; import java awt event *; publ ic class MyMenu extends JFrame implements ActionListener{ JLabel label = new JLabel("请选择菜单" JLabel CENTER); JMenuItem aaMenuItem, baMenuItem;MyMenu() { JMenuBarmenuBar = new JMenuBar(); JMenu aMenu = new JMenu("菜单A"); JMenu bMenu = new JMenu("菜单 B"); JMenuItemaaMenuItem=new JMenuItem("菜单项AA");JMenuItem abMenuItem=new JMenuItem("菜单项AB");JMenuItem baMenuItem=new JMenuItem("菜单项BA");menuBaradd(aMenu);menuBaradd(bMenu); aMenu add(aaMenuItem); aMenu addSeparator();
aMenu add(abMenuItem); bMenu add(baMenuItem); aaMenuItem addActionListener(this); abMenuItem addActionListener(this);baMenuItem addActionListener(this); setJMenuBar(menuBar); getContentPane()add(label , BorderLayout CENTER); } publ ic voidactionPerformed(ActionEvent e) { JMenuItem source = (JMenuItem) (e getSource()); label setText("选择了菜单:" +source getText()); label setHorizontalAl ignment(JLabel CENTER); }publ ic static void main(String args[]) { JFrame frame = new MyMenu();frame setDefaultCloseOperation(JFrame EXIT_ON_CLOSE); frame setSize(300,200); frame setVisible(true); } }
第10章
网络编程
一、填空题1 、 面向连接、客户端、服务器端2、 2、 0-65535 3、链路层、 网络层、运输层、应用层4、 InetAddress
5、 DatagramPacket、 DatagramSocket二、判断题1 、错2、对3、对4、错5、对三、选择题1 、 C 2 A 3、 ABD 4、 B 5、 A 6、 D
7、 B 8、 C四、简答题1 、在Internet中传输数据都需要遵守一定的规则这种规则通常被称作网络通信协议。网络通信协议对数据传输格式、传输速率、传输步骤等作了统一规定通信双方必须共同遵守这个规定才能完成数据的交互。到目前为止网络通信协议已经有很多种其中TCP/IP协议在世界范围内应用最为广泛。 2、 UDP协议是无连接通信协议所谓的无连接就是指数据的发送端和接收端不建立逻辑连接。 由于UDP协议消耗资源小通信效率高通常都会用于音频、视频和普通数据的传输。 UDP协议在传输数据时不能保证数据的完整性因此在传输重要数据时不建议使用UDP协议。 TCP协议是面向连接的通信协议即在传输数据前先在发送端和接收端建立逻辑连接然后再传输数据它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端由客户端向服务端发出连接请求每次连接的创建都需要经过“三次握手” 。 3、 ServerSocket类用于创建服务端程序通过调用ServerSocket对象的accept()方法接收来自客户端的请求。 Socket类用于创建客户端程序当客户端和服务端的两个Socket建立了专线连接后连接的一端既能向另一端连续写入字节也能从另一端读取字节。 Socket类中定义了getInputStream()方法返回Socket的输入流对象定义了getOutputStream()方法返回Socket的输出流对象。只要连接的一端向该输出流对象写入了数据连接的另一端就能从其输入流对象中读取到。 五、编程题1 、参考答案import java net InetAddress;publ ic class Test01 {publ ic static void main(String[]args) throws Exception{ InetAddress localAddress=InetAddress getLocalHost(); InetAddress remoteAddress=InetAddress getByName("www oracle com");
System out println("本机的IP地址 "+localAddress getHostAddress());System out println("本地的主机名 "+localAddress getHostName());System out println("甲骨文的IP地址 "+remoteAddress getHostAddress()); } }
2、 参考答案接收端import java net *;publ ic class Test02{publ ic static void main(String[]args) throws Exception{byte[]buf=new byte[1024];DatagramSocket ds=new DatagramSocket(8001 );DatagramPacket dp=new DatagramPacket(buf, 1024);ds receive(dp);Stringstr=new String(dp getData(),0,dp getLength());System out println(str);ds close(); } }
发送端import java net *;publ ic class Test03"{publ ic sta"tic void main(String[]args) throws Exception{DatagramSocket ds=newDatagramSocket(3000);S"tring str=" hel lo world ;DatagramPacket dp=new DatagramPacket(str getBytes(),str length(),InetAddress getByName( localhost ),8001 );ds send(dp);ds close(); } }
3、参考答案服务端import java io*; import java net *;publ ic class Test04{publ ic static void main(String[]args) throws Exception{new
TCPServer() l isten(); } }class TCPServer {publ ic void l isten() throws Exception{ServerSocket serverSocket=new
ServerSocket(8002);
Socket cl ient=serverSocket accept();OutputStream os=cl ient getOutputStream();os write("hel lo world")getBytes());Thread sleep(5000);os close();cl ient close(); } }
客户端import java io*; import java net *;publ ic class Test05{publ ic static void main(String[]args) throws Exception{new
TCPCl ient()connect(); } }class TCPCl ient {publ ic void connect() throws Exception{Socket cl ient=new
Socket(InetAddress getLocalHost(),8002); InputStream is=cl ient getInputStream();byte[]buf=new byte[1024]; int len=is read(buf);System out println(new String(buf,0, len));cl ient close(); } }
妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...
官方网站:点击访问华纳云活动官网活动方案:一、香港云服务器此次推出八种配置的香港云服务器,满足不同行业不同业务规模的客户需求,同时每种配置的云服务都有不同的带宽选择,灵活性更高,可用性更强,性价比更优质。配置带宽月付6折季付5.5折半年付5折年付4.5折2年付4折3年付3折购买1H1G2M/99180324576648直达购买5M/17331556710081134直达购买2H2G2M892444...
legionbox怎么样?legionbox是一家来自于澳大利亚的主机销售商,成立时间在2014年,属于比较老牌商家。主要提供VPS和独立服务器产品,数据中心包括美国洛杉矶、瑞士、德国和俄罗斯。其中VPS采用KVM和Xen架构虚拟技术,硬盘分机械硬盘和固态硬盘,系统支持Windows。当前商家有几款大硬盘的独立服务器,可选美国、德国和瑞士机房,有兴趣的可以看一下,付款方式有PAYPAL、BTC等。...