第一篇:Java面向对象程序设计课后答案
Java面向对象程序设计课后答案
Java面向对象程序设计 清华大学出版社
(编著 耿祥义 张跃平)习题解答
建议使用文档结构图
(选择Word菜单→视图→文档结构图)习题1 1.James Gosling、、、、2.
(1)使用一个文本编辑器编写源文件。
(2)使用Java编译器(javac.exe)编译Java源程序,得到字节码文件。(3)使用Java解释器(java.exe)运行Java程序
3.Java的源文件是由若干个书写形式互相独立的类组成的。应用程序中可以没有public类,若有的话至多可以有一个public类。4.系统环境path Djdkbin;系统环境classpath Djdkjrelibrt.jar;.;5.
B 6. Java源文件的扩展名是.java。Java字节码的扩展名是.class。
7.D 8.(1)Speak.java(2)生成两个字节码文件,这些字节码文件的名字Speak.class 和 Xiti8.class(3)java Xiti8(4)执行java Speak的错误提示
Exception in thread “main” java.lang.NoSuchMethodError: main 执行java xiti8得到的错误提示
Exception in thread “main” java.lang.NoClassDefFoundError: xiti8(wrong name: Xiti8)执行java Xiti8.class得到的错误提示
Exception in thread “main” java.lang.NoClassDefFoundError: Xiti8/class 执行java Xiti8得到的输出结果 I'm glad to meet you 9.属于操作题,解答略。习题2 1.
D 2.【代码1】
【代码2】 错误
//【代码3】更正为 float z=6.89F;3.float型常量后面必须要有后缀“f”或“F”。
对于double常量,后面可以有后缀“d”或“D”,但允许省略该后缀。4.public class Xiti4{ public static void main(String args[ ]){ char ch1='你',ch2='我',ch3='他';System.out.println(“”“+ch1+”“的位置:”+(int)ch1);System.out.println(“”“+ch2+”“的位置:”+(int)ch2);System.out.println(“”“+ch3+”“的位置:”+(int)ch3);} } 5.数组名字.length 6.数组名字.length 7. 【代码1】A,65 【代码2】-127 【代码3】
123456.783,123456.78312 8.
【代码1】false 【代码2】true 【代码3】false 【代码4】3 【代码5】4.4 【代码6】8.8习题3 输出110 if-else语句书写的不够规范,复合语句缺少大括号“{}”,代码不够清晰。2.你好好酷!3.
public class Xiti3_3 {
public static void main(String args[ ]){ int startPosition=0,endPosition=0;char cStart='а',cEnd='я';startPosition=(int)cStart;//cStart做int型转换据运算,并将结果赋值给startPosition endPosition=(int)cEnd;
//cEnd做int型转换运算,并将结果赋值给endPosition
System.out.println(“俄文字母表:”);for(int i=startPosition;i<=endPosition;i++){ char c=' ';c=(char)i;
//i做char型转换运算,并将结果赋值给c System.out.print(“ ”+c);if((i-startPosition+1)%10==0)System.out.println(“");
}
} } 4.
public class Xiti4
{ public static void main(String args[]){
double sum=0,a=1;int i=1;while(i<=20){ sum=sum+a;i++;a=a*i;} System.out.println(”sum=“+sum);} } 5. class Xiti5 { public static void main(String args[]){ int i,j;for(j=2;j<=100;j++)
{ for(i=2;i<=j/2;i++){ if(j%i==0)break;} if(i>j/2){ System.out.print(” “+j);} } } } 6. class Xiti6 { public static void main(String args[]){ double sum=0,a=1,i=1;while(i<=20){ sum=sum+a;i++;a=(1.0/i)*a;} System.out.println(”使用while循环计算的sum=“+sum);
for(sum=0,i=1,a=1;i<=20;i++){ a=a*(1.0/i);sum=sum+a;} System.out.println(”使用for循环计算的sum=“+sum);} } 7.
public class Xiti7 { public static void main(String args[]){ int sum=0,i,j;for(i=1;i<=1000;i++){ for(j=1,sum=0;j
import java.util.Scanner;public class Xiti8 { public static void main(String args[ ]){ System.out.println(”请输入两个非零正整数,每输入一个数回车确认“);Scanner reader=new Scanner(System.in);int m=0,n=0,temp=0,gy=0,gb=0,a,b;a=m = reader.nextInt();b=n = reader.nextInt();if(m import java.util.Scanner;public class Xiti8 { public static void main(String args[ ]){ System.out.println(”请输入两个非零正整数,每输入一个数回车确认“);Scanner reader=new Scanner(System.in);int m=0,n=0,t=0,gy=0,gb=0;m = reader.nextInt();n = reader.nextInt();if(m>n){ t=m;m=n;n=t;} for(int i=1;i<=m;i++){ if(m%i==0 && n%i==0){ gy=i;} } gb=m*n/gy;System.out.println(m+”,“+n+”的最大公约数为 “+gy);System.out.println(m+”,“+n+”的最小公倍数为 “+gb); } } 9. public class Xiti9 { public static void main(String args[]){ int n=1;long sum=0,t=1;t=n*t;while(true){ sum=sum+t;if(sum>9999)break;n++;t=n*t;} System.out.println(” 满足条件的最大整数:“+(n-1));} }// 1至7的阶乘和是sum=5913.0 // 1至8的阶乘和是sum=46233.0习题4 1.用该类创建对象时。 2.所谓方法重载是在一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。构造方法可以重载。3. 可以。不可以。4.不可以。 5.成员变量又分为实例变量和类变量,用static修饰的变量是类变量。那么类变量和实例变量有什么区别呢?一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间;如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。也就是说对象共享类变量。6.C,D 7.【代码1】,【代码4】 8.sum=-100 9.27 10.**20 ##100习题5 1. 如果子类和父类在同一个包中,那么子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法。继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包中,那么子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。 只要子类中声明的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量。子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同,子类如此定义的方法称作子类重写的方法。子类通过方法的重写可以隐藏继承的方法。2.不可以。3.abstract类。 4.假设B类是A类子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到A类的对象中时,称这个A类对象是子类对象的上转型对象。 5.可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。6.A,C,D 7.15.0 8.0 8.98.0 12 9. class A { public final void f(){ char cStart='a',cEnd='z';for(char c=cStart;c<=cEnd;c++){ System.out.print(” “+c);} } } class B extends A { public void g(){ char cStart='α',cEnd='ω';for(char c=cStart;c<=cEnd;c++){ System.out.print(” “+c);} } } public class Xiti9 { public static void main(String args[ ]) { B b=new B();b.f();b.g();} } 10. class A { public int f(int a,int b){ if(b 4.大家好,祝工作顺利!5. 96 乘数超过99习题7 1. (1)Strategy是接口。(2)Army不是抽象类。 (3)Army和Strategy是关联关系。 (4)StrategyA, StrategyB、StrategyC与Strategy是实现关系。2. 3.4.例子13的设计符合开-闭原则。5.例子17的设计符合开-闭原则。习题8 采用新增的策略为选手计算得分。 增加新的具体策略StrategyFour。StrategyFour类将double computeScore(double [] a)方法实现为去掉数组a的元素中的一个最大值和一个最小值,然后计算剩余元素的几何平均值。import java.util.Arrays;public class StrategyFour implements ComputableStrategy { public double computeScore(double [] a){ if(a.length<=2)return 0;double score=0,multi=1;Arrays.sort(a);int n=a.length-2;for(int i=1;i (1)策略(Strategy)PrintCharacter.java public interface PrintCharacter{ public abstract void printTable(char [] a,char[] b);}(2)具体策略 PrintStrategyOne.java public class PrintStrategyOne implements PrintCharacter { public void printTable(char [] a,char[] b){ for(int i=0;i for(int i=0;i public void getPersonScore(char[] a,char[] b){ if(strategy==null)System.out.println(”sorry!“);else strategy.printTable(a,b);} } 应用以 上策略: public class Application { public static void main(String args[]){ char [] a=new char[26];char [] b=new char[26];for(int i=0;i<=25;i++){ a[i]=(char)('a'+i);} for(int i=0;i<=25;i++){ b[i]=(char)('A'+i);} PrintGame game=new PrintGame();//上下文对象 game.setStrategy(new PrintStrategyOne()); //上下文对象使用策略一 System.out.println(”方案1:“);game.getPersonScore(a,b); game.setStrategy(new PrintStrategyTwo()); //上下文对象使用策略二 System.out.println(”方案2:“);game.getPersonScore(a,b); } } 3.参照本章8.3.3自主完成。9 1.A,B,D 2. Love:Game 3.13 abc夏日 4.13579 5.9javaHello 6. public class Xiti6 { public static void main(String args[ ]){ String s1,s2,s3,t1=”ABCDabcd“;System.out.println(”字符串原来是这个样子: “+t1);s1=t1.toUpperCase();System.out.println(”字符串中的小写字母变成大写是这个样子: “+s1);s2=t1.toLowerCase(); System.out.println(”字符串中的大写字母变成小写是这个样子: “+s2);s3=s1.concat(s2); System.out.println(”大写字符串连接小写字符串是这个样子: “+s3);} } 7. class Xiti7 { public static void main(String args[ ]){ String s =”中华人民共和国“;char a=s.charAt(0);char b=s.charAt(6);System.out.println(”第一个字符: “+a);System.out.println(”最后一个字符: “+b);} } 8. import java.util.*;class Xiti8 { public static void main(String args[]){ int year,month;System.out.println(”请输入年份和月份,每输入一个数回车确认“);Scanner reader=new Scanner(System.in);year= reader.nextInt();month= reader.nextInt();String [] day=new String[42];System.out.println(” 日 一 二 三 四 五 六“);Calendar rili=Calendar.getInstance();rili.set(year,month-1,1);//将日历翻到year年month月1日,注意0表示一月...11表示十二月 int 星期几=rili.get(Calendar.DAY_OF_WEEK)-1;int dayAmount=0;if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)dayAmount=31;if(month==4||month==6||month==9||month==11)dayAmount=30;if(month==2)if(((year%4==0)&&(year%100!=0))||(year%400==0))dayAmount=29;else dayAmount=28;for(int i=0;i<星期几;i++)day[i]=”“;for(int i=星期几,n=1;i<星期几+dayAmount;i++){ if(n<=9)day[i]=String.valueOf(n)+” “;else day[i]=String.valueOf(n);n++;} for(int i=星期几+dayAmount;i<42;i++)day[i]=”“;for(int i=0;i<星期 几;i++){ day[i]=”**“;} for(int i=0;i { if(i%7==0){ System.out.println(”“);} System.out.print(” “+day[i]);} } } 9. import java.util.*;class Xiti9 { public static void main(String args[]){ int year1,month1,day1,year2,month2,day2;Scanner reader=new Scanner(System.in);System.out.println(”请输入第一个日期的年份 月份 日期,每输入一个数回车确认“);year1= reader.nextInt();month1= reader.nextInt();day1= reader.nextInt();System.out.println(”请输入第二个日期的年份 月份 日期,每输入一个数回车确认“);year2= reader.nextInt();month2= reader.nextInt();day2= reader.nextInt();Calendar calendar=Calendar.getInstance();calendar.set(year1,month1,day1); long timeYear1=calendar.getTimeInMillis();calendar.set(year2,month2,day2); long timeYear2=calendar.getTimeInMillis();long 相隔天数=Math.abs((timeYear1-timeYear2)/(1000*60*60*24));System.out.println(”“+year1+”年“+month1+”月“+day1+”日和“+ year2+”年“+month2+”月“+day2+”日相隔“+相隔天数+”天“);} } 10. public class Xiti10 { public static void main(String args[]){ double a=0,b=0,c=0;a=12;b=24;c=Math.max(a,b);System.out.println(c);c=Math.min(a,b);System.out.println(c);c=Math.pow(2,3);System.out.println(c);c=Math.abs(-0.123);System.out.println(c);c=Math.asin(0.56);System.out.println(c);c=Math.cos(3.14);System.out.println(c);c=Math.exp(1);System.out.println(c);c=Math.log(8);System.out.println(c);} }习题10 1.BorderLayout布局。2.不可以。3.A,C。4. import java.util.StringTokenizer;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Xiti4 { public static void main(String args[]){ ComputerFrame fr=new ComputerFrame();fr.setTitle(”计算的窗口“);} } class ComputerFrame extends JFrame implements TextListener { TextArea text1,text2;int count=1;double sum=0,aver=0;public ComputerFrame(){ setLayout(new FlowLayout());text1=new TextArea(6,20);text2=new TextArea(6,20);add(text1);add(text2); text2.setEditable(false);text1.addTextListener(this);setSize(300,320);setVisible(true);addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });validate();} public void textValueChanged(TextEvent e){ String s=text1.getText();sum=0;aver=0; StringTokenizer fenxi=new StringTokenizer(s,” ,'n'“);int n=fenx i.countTokens();count=n;double a[]=new double[n];for(int i=0;i<=n-1;i++){ String temp=fenxi.nextToken(); try { a[i]=Double.parseDouble(temp);sum=sum+a[i];} catch(Exception ee){ count--;} } aver=sum/count;text2.setText(null); text2.append(”n和:“+sum);text2.append(”n平均值:“+aver);} } 5. import java.applet.*;import java.awt.*;import java.awt.event.*;public class Xiti5 { public static void main(String args[]){ ComputerFrame fr=new ComputerFrame();fr.setTitle(”计算“);} } class ComputerFrame extends Frame implements ActionListener { TextField text1,text2,text3;Button button1,button2,button3,button4;Label label;public ComputerFrame(){setLayout(new FlowLayout());text1=new TextField(10);text2=new TextField(10);text3=new TextField(10);label=new Label(” “,Label.CENTER);label.setBackground(Color.green);add(text1);add(label);add(text2);add(text3);button1=new Button(”加“); button2=new Button(”减“);button3=new Button(”乘“);button4=new Button(”除“);add(button1);add(button2);add(button3);add(button4); button1.addActionListener(this);button2.addActionListener(this);button3.addActionListener(this); button4.addActionListener(this);setSize(300,320);setVisible(true);addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });validate();} public void actionPerformed(ActionEvent e){ double n;if(e.getSource()==button1){ double n1,n2; try{ n1=Double.parseDouble(text1.getText());n2=Double.parseDouble(text2.getText());n=n1+n2;text3.setText(String.valueOf(n));label.setText(”+“);} catch(NumberFormatException ee){ text3.setText(”请输入数字字符“);} } else if(e.getSource()==button2){ double n1,n2; try{ n1=Double.parseDouble(text1.getText());n2=Double.parseDouble(text2.getText());n=n1-n2;text3.setText(String.valueOf(n));label.setText(”-“);} catch(NumberFormatException ee){ text3.setText(”请输入数字字符“);} } else if(e.getSource()==button3){double n1,n2; try{ n1=Double.parseDouble(text1.getText());n2=Double.parseDouble(text2.getText());n=n1*n2;text3.setText(String.valueOf(n));label.setText(”*“);} catch(NumberFormatException ee){ text3.setText(”请输入数字字符“);} } else if(e.getSource()==button4){double n1,n 2; try{ n1=Double.parseDouble(text1.getText());n2=Double.parseDouble(text2.getText());n=n1/n2;text3.setText(String.valueOf(n));label.setText(”/“);} catch(NumberFormatException ee){ text3.setText(”请输入数字字符“);} } validate();} } 6. import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Xiti6 { public static void main(String args[]){ new WindowPanel();} } class Mypanel extends JPanel implements ActionListener { Button button; TextField text;Mypanel() { button=new Button(” “);text=new TextField(12);add(button);add(text);button.addActionListener(this);} public void actionPerformed(ActionEvent e){ String name=text.getText();if(name.length()>0)button.setLabel(name);validate();} } class WindowPanel extends Frame { Mypanel panel1,panel2;WindowPanel(){ panel1=new Mypanel();panel2=new Mypanel();panel1.setBackground(Color.red);panel2.setBackground(Color.blue);add(panel1,BorderLayout.SOUTH);add(panel2,BorderLayout.NORTH);setSize(300,320);setVisible(true);addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });validate();} } 7.参见10.13, 参照本章例子10.21。8. import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Xiti8 { public static void main(String args[]){ MoveFrame f=new MoveFrame();f.setBounds(12,12,300,300);f.setVisible(true);f.setTitle(”移动“); f.validate();f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0);} });} } class MoveFrame extends JFrame implements ActionListener { JButton controlButton,movedButton; public MoveFrame(){ controlButton=new JButton(”单击我运动另一个按钮“);controlButton.addActionListener(this);movedButton=new JButton();movedButton.setBackground(new Color(12,200,34));setLayout(null);add(controlButton);add(movedButton);controlButton.setBounds(10,30,130,30);movedButton.setBounds(100,100,10,10);} public void actionPerformed(ActionEvent e){ int x=movedButton.getBounds().x;int y=movedButton.getBounds().y;x=x+5;y=y+1; movedButton.setLocation(x,y);if(x>200){ x=100;y=100;} } } 9. import java.awt.*;import java.awt.event.*;public class Xiti9 { public static void main(String args[]) { Win win=new Win();} } class Win extends Frame implements KeyListener { Button b[]=new Button[8];int x,y;Win(){ setLayout(new FlowLayout());for(int i=0;i<8;i++) { b[i]=new Button(”“+i);b[i].addKeyListener(this);add(b[i]);} addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });setBounds(10,10,300,300);setVisible(true);validate();} public void keyPressed(KeyEvent e){ int moveDistance=1;Component com=(Component)e.getSource();int x=(int)com.getBounds().x;int y=(int)com.getBounds().y;Component component[]=this.getComponents();if(e.getKeyCode()==KeyEvent.VK_UP){ y=y-moveDistance;com.setLocation(x,y);Rectangle comRect=com.getBounds();for(int k=0;k y=y+moveDistance;com.setLocation(x,y);Rectangle comRect=com.getBounds();for(int k=0;k else if(e.getKeyCode()==KeyEvent.VK_RIGHT){ x=x+moveDistance;com.setLocation(x,y);Rectangle comRect=com.getBounds();for(int k=0;k . import java.awt.event.*;import java.awt.*;import javax.swing.*;class Dwindow extends Frame implements ActionListener { TextField inputNumber;TextArea save;Dwindow(String s){ super(s);inputNumber=new TextField(22);inputNumber.addActionListener(this);save=new TextArea(12,16);setLayout(new FlowLayout());add(inputNumber);add(save); setBounds(60,60,300,300);setVisible(true);validate();addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0);} });} public void actionPerformed(ActionEvent event){ String s=inputNumber.getText();double n=0;try{ n=Double.parseDouble(s);if(n>1000){ int select=JOptionPane.showConfirmDialog(this,”已经超过1000确认正确吗?“,”确认对话框“, JOptionPane.YES_NO_OPTION);if(select==JOptionPane.YES_OPTION) { save.append(”n“+s);} else { inputNumber.setText(null);} } else { save.append(”n“+s);} } catch(NumberFormatException e){ JOptionPane.showMessageDialog(this,”您输入了非法字符“,”警告对话框“, JOptionPane.WARNING_MESSAGE);inputNumber.setText(null);} } } public class E { public static void main(String args[]){ new Dwindow(”带对话框的窗口“);} } 3.参照以下例子完成 Xiti3.java public class Xiti3 { public static void main(String args[]){ WindowColor win=new WindowColor();win.setTitle(”带颜色对话框的窗口“);} } WindowColor.java import java.awt.event.*;import java.awt.*;import javax.swing.*;public class WindowColor extends JFrame implements ActionListener { JButton button;WindowColor(){ button=new JButton(”打开颜色对话框“);button.addActionListener(this);setLayout(new FlowLayout());add(button);setBounds(60,60,300,300);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);} public void actionPerformed(ActionEvent e){ Color newColor=JColorChooser.showDialog(this,”调色板“,button.getBackground());if(newColor!=null){ button.setBackground(newColor);} } }习题12 1.使用FileInputStream流。 2.FileInputStream按字节读取文件,FileReader按字符读取文件。3.不能。 4.使用对象流写入或读入对象时,要保证对象是序列化的。5.使用对象流很容易得获取一个 序列化对象的克隆,只需将该对象写入到对象输出流,那么用对象输入流读回的对象一定是原对象的一个克隆。6. import java.io.*;public class Xiti6 { public static void main(String args[]){ File f=new File(”E.java“);;try{ RandomAccessFile random=new RandomAccessFile(f,”rw“);random.seek(0);long m=random.length();while(m>=0){ m=m-1;random.seek(m);int c=random.readByte();if(c<=255&&c>=0){ System.out.print((char)c);} else { m=m-1;random.seek(m);byte cc[]=new byte[2];random.readFully(cc);System.out.print(new String(cc));} } } catch(Exception exp){} } } 7.import java.io.*;public class Xiti7 { public static void main(String args[ ]){ File file=new File(”E.java“);File tempFile=new File(”temp.txt“);try{ FileReader inOne=new FileReader(file);BufferedReader inTwo= new BufferedReader(inOne);FileWriter tofile=new FileWriter(tempFile);BufferedWriter out= new BufferedWriter(tofile);String s=null;int i=0;s=inTwo.readLine();while(s!=null){ i++;out.write(i+” “+s);out.newLine();s=inTwo.readLine();} inOne.close();inTwo.close();out.flush();out.close();tofile.close();} catch(IOException e){ System.out.println(e);} } } 8.属于操作题目,解答略。9. import java.util.*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Xiti9 { public static void main(String args[]){ EWindow w=new EWindow();w.validate();} } class EWindow extends Frame implements ActionListener,ItemListener { String str[]=new String[7],s;FileReader file;BufferedReader in; Button start,next;Checkbox checkbox[];TextField 题目,分数;int score=0; CheckboxGroup age=new CheckboxGroup();EWindow(){ super(”英语单词学习“);分数=new TextField(10);题目=new TextField(70);start=new Button(”重新练习“);start.addActionListener(this);next=new Button(”下一题目“);next.addActionListener(this);checkbox=new Checkbox[4];for(int i=0;i<=3;i++){ checkbox[i]=new Checkbox(”“,false,age);checkbox[i].addItemListener(this);} try { file=new FileReader(”English.txt“);in=new BufferedReader(file);} catch(IOException e){} setBoun ds(20,100,660,300);setVisible(true);Box box=Box.createVerticalBox();Panel p1=new Panel(),p2=new Panel(), p3=new Panel(),p4=new Panel(),p5=new Panel();p1.add(new Label(”题目:“));p1.add(题目);p2.add(new Label(”选择答案:“));for(int i=0;i<=3;i++){ p2.add(checkbox[i]);} p3.add(new Label(”您的得分:“));p3.add(分数);p4.add(start);p4.add(next);box.add(p1);box.add(p2);box.add(p3);box.add(p4);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ System.exit(0);} });add(box,BorderLayout.CENTER);reading();} public void reading(){ int i=0;try { s=in.readLine();if(!(s.startsWith(”endend“))){ StringTokenizer tokenizer=new StringTokenizer(s,”#“);while(tokenizer.hasMoreTokens()){ str[i]=tokenizer.nextToken();i++;} 题目.setText(str[0]);for(int j=1;j<=4;j++){ checkbox[j-1].setLabel(str[j]);} } else if(s.startsWith(”endend“)){ 题目.setText(”学习完毕“);for(int j=0;j<4;j++){ checkbox[j].setLabel(”end“);in.close();file.close();} } } catch(Exception exp){ 题目.setText(”无试题文件“);} } public void actionPerformed(ActionEvent event){ if(event.getSource()==start){ score=0;分数.setText(”得分: “+score);try { file=new FileReader(”English.txt“);in=new BufferedReader(file);} catch(IOException e){} reading();} if(event.getSource()==next){ reading();for(int j=0;j<4;j++){ checkbox[j].setEnabled(true); } } } public void itemStateChanged(ItemEvent e){ for(int j=0;j<4;j++){ if(checkbox[j].getLabel().equals(str[5])&&checkbox[j].getState()){ score++;分数.setText(”得分: “+score);} checkbox[j].setEnabled(false); } } }习题13 1.一个使用链式结构,一个使用顺序结构。 2.8。3.ABCD。 4.选用HashMap import java.util.*;class UFlashKey implements Comparable { double d=0;UFlashKey(double d){ this.d=d;} public int compareTo(Object b){ UFlashKey st=(UFlashKey)b;if((this.d-st.d)==0)return-1;else retu rn(int)((this.d-st.d)*1000);} } class UFlash { String name=null;double capacity,price;UFlash(String s,double m,double e){ name=s;capacity=m;price=e;} } public class Xiti5 { public static void main(String args[ ]){ TreeMap } int number=treemap.size();System.out.println(”树映射中有“+number+”个对象,按容量成绩排序:“);Collection 习题14 1. (1)创建数据源 选择“控制面板”→“管理工具”→“ODBC数据源”(某些window/xp系统,需选择“控制面板”→“性能和维护”→“管理工具”→“ODBC数据源”)。双击ODBC数据源图标,选择“系统DSN”或“用户DSN”,单击“添加”按钮,可以创建新的数据源。(2)数据源选择驱动程序 选择单击“添加”按钮,出现为新增的数据源选择驱动程序界面,如果要访问Access数据库,选择Microsoft Acess Driver(*.mdb)。单击完成按钮。(3)数据源名称及对应数据库的所在位置 在设置数据源具体项目的对话框,在名称栏里为数据源起一个自己喜欢的名字。这个数据源就是指某个数据库。在“数据库选择”栏中选择一个已经准备好的数据库。2.参照本章例子14.2。3.参照本章例子14.3。4.参照本章例子14.4。 5.使用预处理语句不仅减轻了数据库的负担,而且也提高了访问数据库 的速度。 6.事务由一组SQL语句组成,所谓事务处理是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。步骤:(1)使用setAutoCommit(boolean autoCommit)方法 con对象首先调用setAutoCommit(boolean autoCommit)方法,将参数autoCommit取值false来关闭默认设置: con.setAutoCommit(false);(2)使用commit()方法。con调用commit()方法就是让事务中的SQL语句全部生效。 (3)使用rollback()方法。con调用rollback()方法撤消事务中成功执行过的SQL语句对数据库数据所做的更新、插入或删除操作,即撤消引起数据发生变化的SQL语句操作,将数据库中的数据恢复到commi()方法执行之前的状态。7.参照本章例子14.2。习题15 1.4种状态:新建、运行、中断和死亡。2.有4种原因的中断: JVM将CPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态。线程使用CPU资源期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状态。经过参数millsecond指定的豪秒数之后,该线程就重新进到线程队列中排队等待CPU资源,以便从中断处继续运行。 线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态。等待状态的线程不会主动进到线程队列中排队等待CPU资源,必须由其他线程调用notify()方法通知它,使得它重新进到线程队列中排队等待CPU资源,以便从中断处继续运行。 线程使用CPU资源期间,执行某个操作进入阻塞状态,比如执行读/写操作引起阻塞。进入阻塞状态时线程不能进入排队队列,只有当引起阻塞的原因消除时,线程才重新进到线程队列中排队等待CPU资源,以便从原来中断处开始继续运行。3.死亡状态,不能再调用start()方法。4.新建和死亡状态。 5.两种方法:用Thread类或其子类。6.使用 setPrority(int grade)方法。 7.Java使我们可以创建多个线程,在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理,否则可能发生混乱。 8.当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,那么可以在同步方法中使用wait()方法。使用wait方法可以中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待 9.不合理。 10.“吵醒”休眠的线程。一个占有CPU资源的线程可以让休眠的线程调用i nterrupt 方法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源。11. public class Xiti11 { public static void main(String args[]){ Cinema a=new Cinema();a.zhang.start();a.sun.start();a.zhao.start();} } class TicketSeller //负责卖票的类。 { int fiveNumber=3,tenNumber=0,twentyNumber=0;public synchronized void sellTicket(int receiveMoney){ if(receiveMoney==5){ fiveNumber=fiveNumber+1; System.out.println(Thread.currentThread().getName()+ ”给我5元钱,这是您的1张入场卷“);} else if(receiveMoney==10) { while(fiveNumber<1){ try { System.out.println(Thread.currentThread().getName()+”靠边等“);wait(); System.out.println(Thread.currentThread().getName()+”结束等待“);} catch(InterruptedException e){} } fiveNumber=fiveNumber-1;tenNumber=tenNumber+1;System.out.println(Thread.currentThread().getName()+ ”给我10元钱,找您5元,这是您的1张入场卷“); } else if(receiveMoney==20) { while(fiveNumber<1||tenNumber<1){ try { System.out.println(Thread.currentThread().getName()+”靠边等“);wait(); System.out.println(Thread.currentThread().getName()+”结束等待“);} catch(InterruptedException e){} } fiveNumber=fiveNumber-1;tenNumber=tenNumber-1;twentyNumber=twentyNumber+1; System.out.println(Thread.currentThread().getName()+ ”给20元钱,找您一张5元和一张10元,这是您的1张入场卷“);} notifyAll();} } class Cinema implements Runnable { Thread zhang,sun,zhao;TicketSeller seller;Cinema(){ zhang=new Thread(this);sun=new Thread(this);zhao=new Thread(this);zhang.setName(”张小有“);sun.setName(”孙大名“);zhao.setName(”赵中堂“);seller=new TicketSeller();} public void run(){ if(Thread.currentThread()==zhang){ seller.sellTicket(20);} else if(Thread.currentThread()==sun){ seller.sellTicket(10);} else if(Thread.currentThread()==zhao){ seller.sellTicket(5);} } } 12.参照本章例子9。13.参照本章例子19。14.BA习题16 1.URL对象调用InputStream openStream()方法可以返回一个输入流。 2.客户端的程序使用Socket类建立负责连接到服务器的套接字对象称为socket对象。使用Socket的构造方法Socket(String host,int port),建立连接到服务器的套接字对象。 参考16.3.2 3.JEditorPane 4.会返回一个和客户端Socket对象相连接的Socket对象。5. 域名/IP 地址 例如,www.xiexiebang.com/202.108.35.210 6.(1)客户端 import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Client { public static void main(String args[]){ new ComputerClient();} } class ComputerClient extends Frame implements Runnable,ActionListener { Button connection,send;TextField inputText,showResult;Socket socket=null;DataInputStream in=null;DataOutputStream out=null;Thread thread;ComputerClient(){ socket=new Socket();setLayout(new FlowLayout());Box box=Box.createVerticalBox();connection=new Button(”连接服务器“);send=new Button(”发送“);send.setEnabled(false);inputText=new TextField(12);showResult=new TextField(12);box.add(connection);box.add(new Label(”输入三角形三边的长度,用逗号或空格分隔:“));box.add(inputText);box.add(send);box.add(new Label(”收到的结果:“));box.add(showResult);connection.addActionListener(this);send.addActionListener(this);thread=new Thread(this);add(box);setBounds(10,30,300,400);setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public void actionPerformed(ActionEvent e){ if(e.getSource()==connection){ try //请求和服务器建立套接字连接: { if(socket.isConnected()){} else { InetAddress address=InetAddress.getByName(”127.0.0.1“);InetSocketAddress socketAddress=new InetSocketAddress(address,4331);socket.connect(socketAddress); in =new DataInputStream(socket.getInputStream());out = new DataOutputStream(socket.getOutputStream());send.setEnabled(true);thread.start();} } catch(IOException ee){} } if(e.getSource()==send){ String s=inputText.getText();if(s!=null){ try { out.writeUTF(s);} catch(IOException e1){} } } } public void run(){ String s=null;while(true){ try{ s=in.readUTF();showResult.setText(s);} catch(IOException e) { showResult.setText(”与服务器已断开“);break;} } } }(2)服务器端 import java.io.*;import java.net.*;import java.util.*;public class Server { public static void main(String args[]){ ServerSocket server=null;Server_thread thread;Socket you=null;while(true) { try{ server=new ServerSocket(4331);} catch(IOException e1) { System.out.println(”正在监听“);//ServerSocket对象不能重复创建 } try{ System.out.println(” 等待客户呼叫“);you=server.accept();System.out.println(”客户的地址:“+you.getInetAddress());} catch(IOException e){ System.out.println(”正在等待客户“);} if(you!=null) { new Server_thread(you).start();//为每个客户启动一个专门的线程 } } } } class Server_thread extends Thread { Socket socket;DataOutputStream out=null;DataInputStream in=null;String s=null;boolean quesion=false;Server_thread(Socket t){ socket=t;try { out=new DataOutputStream(socket.getOutputStream());in=new DataInputStream(socket.getInputStream());} catch(IOException e){} } public void run() { while(true){ double a[]=new double[3];int i=0;try{ s=in.readUTF();//堵塞状态,除非读取到信息 quesion=false;StringTokenizer fenxi=new StringTokenizer(s,” ,“);while(fenxi.hasMoreTokens()){ String temp=fenxi.nextToken();try{ a[i]=Double.valueOf(temp).doubleValue();i++;} catch(NumberFormatException e){ out.writeUTF(”请输入数字字符“);quesion=true;} } if(quesion==false){ double p=(a[0]+a[1]+a[2])/2.0;out.writeUTF(” “+Math.sqrt(p*(p-a[0])*(p-a[1])*(p-a[2])));} } catch(IOException e) { System.out.println(”客户离开“);return;} } } } 7.参照本章例子16.6及以下代码。(1)服务器 Server.java import java.io.*;import java.net.*;import java.util.zip.*;public class Server { public static void main(String args[]){ ServerSocket server=null;ServerThread thread;Socket you=null;while(true) { try{ server=new ServerSocket(4331);} catch(IOException e1) { System.out.println(”正在监听“); } try{ you=server.accept();System.out.println(”客户的地址:“+you.getInetAddress());} catch(IOException e){ System.out.println(”正在等待客户“);} if(you!=null){ new ServerThread(you).start(); } } } } class ServerThread extends Thread { Socket socket;ZipOutputStream out;String s=null;ServerThread(Socket t){ socket=t;try { out=new ZipOutputStream(socket.getOutputStream());} catch(IOException e){} } public void run() { try{out.putNextEntry(new ZipEntry(”Example.java“));FileInputStream reader=new FileInputStream(”Example.java“);byte b[]=new byte[1024];int n=-1;while((n=reader.read(b,0,1024))!=-1){ out.write(b,0,n); //发送压缩后的数据到客户端。} out.putNextEntry(new ZipEntry(”E.java“));reader=new FileInputStream(”E.java“);n=-1;while((n=reader.read(b,0,1024))!=-1){ out.write(b,0,n); //发送压缩后的数据到客户端。} reader.close();out.close();} catch(IOException e){} } }(2)客户端 Client.java import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;import java.util.zip.*;public class Client extends Frame implements Runnable,ActionListener { Button connection,getFile;TextArea showResult;Socket socket=null;ZipInputStream in;Thread thread;public Client(){ socket=new Socket(); connection=new Button(”连接服务器,获取文件内容“);setLayout(new FlowLayout());showResult=new TextArea(10,28);add(connection);add(showResult);connection.addActionListener(this);thread=new Thread(this);setBounds(100,100,460,410);setVisible(true);addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public void run(){ byte b[]=new byte[1024];ZipEntry zipEntry=null;while(true){ try{ while((zipEntry=in.getNextEntry())!=null){ showResult.append(”n“+zipEntry.toString()+”:n“);int n=-1;while((n=in.read(b,0,1024))!=-1){ String str=new String(b,0,n);showResult.append(str);} } } catch(IOException e){ } } } public void actionPerformed(ActionEvent e){ if(e.getSource()==connection){ try { if(socket.isConnected()){} else { InetAddress address=InetAddress.getByName(”127.0.0.1“);InetSocketAddress socketAddress=new InetSocketAddress(address,4331);socket.connect(socketAddress); in=new ZipInputStream(socket.getInputStream()); thread.start();} } catch(IOException ee){ System.out.println(ee);} } } public static void main(String args[]){ Client win=new Client();} }习题17 1. import java.applet.*;import java.awt.*;import java.awt.event.*;public class Xiti1 extends Applet implements ActionListener{ Button button;TextField text;int sum;public void init(){ button=new Button(”点点看...“);text=new TextField(20); add(button);add(text); button.addActionListener(this); } public void actionPerformed(ActionEvent e){ String str=button.getLabel();text.setText(”按钮上写着:“+str);} } 超文本文件: 2. import java.applet.*;import java.awt.*;import java.awt.event.*; import javax.swing.*; public class Xiti2 extends Applet implements ActionListener { TextField text1,text2;Label label;public void init() { text1=new TextField(10);text2=new TextField(20);Box box1=Box.createHorizontalBox();Box box2=Box.createHorizontalBox();Box boxV=Box.createVerticalBox();box1.add(new Label(”输入一个数回车确定:“));box1.add(text1);label=new Label(”数的平方:“);box2.add(label);box2.add(text2);boxV.add(box1);boxV.add(box2);add(boxV);text2.setEditable(false);text1.addActionListener(this);} public void actionPerformed(ActionEvent e){ String number=e.getActionCommand();try{ double n=Double.parseDouble(number);double m=n*n;label.setText(n+”的平方:“);text2.setText(”“+m);text1.setText(”“);validate();} catch(NumberFormatException exp){ text2.setText(”"+exp);} } } 3.参照本章例子17.2,17.3。 武汉大学珞珈学院 系/教研室 Java 面 向 对 象 程 序 设 计 课 教 案 主讲教师:熊春秀 编写时间:2011-4-30 第一章:概述 第 1、2 节:面向对象的基本概念、面向对象程序设计概述 授课时间:2011-2- 22、23 计划学时数:1 教学任务与目的:让学生理解面向对象的基本概念 教学重点:掌握面向对象的基本概念 教学难点:理解面向对象程序设计的方法 教学方法:多媒体+板书 参考书目:《面向对象程序设计导论》,[美]C.Thomas wu著,电子工业出版社 专业词汇:Java虚拟机、Applet程序 备注 第二章:Java特点及运行环境 第 1、2、3 节:Java语言特点、Java应用程序及运行环境、Java Applet程序及运行环境 授课时间:2011-2- 22、23 计划学时数:3 教学任务与目的:让学生学会JDK的下载、安装与环境配置。教学重点:掌握编译和执行Java程序的基本步骤 教学难点:理解Java程序的入口并能够通过命令行传递参数 教学方法:多媒体+板书 参考书目:《面向对象程序设计导论》,[美]C.Thomas wu著,电子工业出版社 专业词汇:JDK、lib、bin 备注 第三章:Java语言基础 第 1、2 节:Java程序的构成、数据类型、表达式以及流程控制语句 授课时间:2011-3- 1、2 计划学时数:3 教学任务与目的:让学生学会Java基本的数据类型和表示方法、数值类型的运算、逻辑运算和比较、条件执行语句(包括三种条件语句和switch语句)、循环控制语句(包括for、while、do while循环及相应的辅助语句)、字符串类String和BufferString以及数组的声明及使用。 教学重点:掌握Java基本的数据类型和表示方法 教学难点:理解Java程序的循环控制语句(包括for、while、do while循环及相应的辅助语句) 教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社 专业词汇:变量、数据类型、循环控制语句 备注 第三章:Java语言基础 第 3 节:Java与C比较 授课时间:2011-3- 8、9 计划学时数:3 教学任务与目的:让学生在C语言的基本上进一步学习Java语言。教学重点:掌握Java语言与C语言的区别与联系。教学难点:理解Java语言在C语言上的改进。教学方法:多媒体+板书 参考书目:《Java2参考大全(第四版)》,[美]Herbert Schildt著,张玉清、吴浦峰、尚勇等译,清华大学出版社。专业词汇:Java、C 备注 第四章:抽象、封装与类 第 1 节:抽象、封装与Java类的概念 授课时间:2011-3- 15、16 计划学时数:3 教学任务与目的:让学生学会面向对象的基本特征、掌握如何定义一个类以及如何生成对象、深入掌握方法的定义及技巧、深入掌握类的访问权限与封装机制、深入掌握包的定义与包的使用方法。 教学重点:掌握类的定义与对象的生成。教学难点:理解类的抽象与封装机制。教学方法:多媒体+板书 参考书目:《Java2 实用教程》,耿祥义、张跃平编著,清华大学出版社。专业词汇:抽象、封装、类 备注 第四章:抽象、封装与类 第 2 节:系统定义的类 授课时间:2011-3- 22、23 计划学时数:3 教学任务与目的:让学生学会使用系统定义的类,并掌握与用户自定义类的区别。教学重点:掌握如何定义所需要的类。 教学难点:熟悉Java平台定义了哪些经常要用到、而且满足我们需要的类。教学方法:多媒体+板书 参考书目:《Java2 实用教程》,耿祥义、张跃平编著,清华大学出版社。专业词汇:系统定义的类、用户自定义类 备注 第四章:抽象、封装与类 第 3 节:类、域和方法的修饰符 授课时间:2011-3- 29、30 计划学时数:3 教学任务与目的:让学生学会类的声明。 教学重点:掌握如何定义类的修饰和方法的修饰符。教学难点:熟悉类的变量的定义与使用方法。教学方法:多媒体+板书 参考书目:《Java2 实用教程》,耿祥义、张跃平编著,清华大学出版社。专业词汇:成员变量、类变量、成员方法、类方法 备注 第五章:继承与多态 第 1、2 节:Java的继承与派生、域的继承与隐藏 授课时间:2011-4- 5、6 计划学时数:3 教学任务与目的:让学生全面掌握面向对象的基本特征、掌握如何使用继承性来到达软件的重用、深入掌握继承过程中域的隐藏和方法的覆盖技巧。教学重点:掌握如何使用继承性来到达软件的重用。教学难点:熟悉继承过程中域的隐藏和方法的覆盖技巧。教学方法:多媒体+板书 参考书目:《Java2 实用教程》,耿祥义、张跃平编著,清华大学出版社。专业词汇:继承派生、域、隐藏 备注 第五章:继承与多态 第 3、4 节:方法的继承、重载与覆盖、this与super、构造函数的继承与重载 授课时间:2011-4- 12、13 计划学时数:3 教学任务与目的:让学生通过继承可以更有效地组织程序结构,明确类之间的关系,并充分利用已有的类来创建新类,通过继承可以实现代码的重用,以完成更复杂的设计、开发。教学重点:掌握类的重载与覆盖的区别与联系。教学难点:熟悉类的重载与覆盖使用方法。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:继承、重载、覆盖、this、super 备注 第五章:继承与多态 第 5、6 节:多态性的实现、接口声明与实现 授课时间:2011-4- 19、20 计划学时数:3 教学任务与目的:让学生深入掌握抽象类和抽象方法的定义,掌握多态通过统一多个相关类的对外接口,在运行时根据不同的情况执行不同的操作,提高类的抽象度和灵活性,深入掌握接口的定义和使用技巧。 教学重点:熟悉多态性实现的两种方式以及接口的实现。教学难点:熟悉多态性与接口的实现方法。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:多态性、接口 备注 第六章:工具类与算法 第 1、2 节:语言基础类库、Applet类与小程序的基本原理 授课时间:2011-4- 26、27 计划学时数:3 教学任务与目的:深入了解Applet生命周期的主要方法和特点、熟练掌握Applet程序的编写方法、深入了解Applet的安全机制及其合理运用。教学重点:熟练掌握Applet程序的编写方法。 教学难点:深入了解Applet的安全机制及其合理运用。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:Applet、生命周期 备注 第六章:工具类与算法 第 3、4 节:数组、字符串、常用算法 授课时间:2011-5- 3、4 计划学时数:3 教学任务与目的:让学生学会字符串类String和BufferString、数组的声明及使用。教学重点:熟练掌握字符串与数组的使用方法。教学难点:深入了解数组的使用方法。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:数组、字符串 备注 第七章:用户图形界面的设计 第 1、2 节:用户自定义成分、事件驱动设计 授课时间:2011-5- 10、11 计划学时数:3 教学任务与目的:让学生学会使用面向对象的程序设计方法构建图形用户界面、深入了解抽象窗口工具包(AWT)、掌握事件处理基本原理和方法。教学重点:熟练掌握图形用户界面的开发方法。教学难点:深入了解图形界面的各种事件。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:AWT、GUI 备注 第七章:用户图形界面的设计 第 3、4 节:GUI对象,包括:按钮、文本框、鼠标、键盘等事件的处理、布局设计 授课时间:2011-5- 17、18 计划学时数:3 教学任务与目的:让学生深入了解GUI构件及掌握布局控制方法、熟练掌握菜单和对话框、掌握简单绘图方法。 教学重点:熟练使用Java语言提供的布局管理器来管理组件在容器中的布局。教学难点:深入了解组件在程序中安排中位置和大小使用方法。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:布局管理器、容器 备注 第八章:Java高级编程 第 1、2、3节:异常处理、多线程机制、Java程序对网上资源的访问 授课时间:2011-5- 24、25 计划学时数:3 教学任务与目的:让学生深入理解多线程的基本概念、熟练掌握创建线程的两种基本方法、熟练处理线程的同步问题和死锁问题、深入理解异常的基本概念、熟悉和掌握Java平台定义异常类、熟练掌握创建自定义异常类的方法。教学重点:熟练掌握创建线程的两种基本方法。教学难点:深入了解线程的同步问题和死锁问题。教学方法:多媒体+板书 参考书目:《Java语言与面向对象程序设计》,印旻编著,清华大学出版社。专业词汇:同步、死锁、多线程、异常 Java面向对象程序设计课程教学大纲 Object-Oriented Programming with Java Syllabus 课程名称 课程类别 建设单位/教研室 前后课程 适用专业、层次 Java面向对象程序设课程英文名Object-Oriented Programming with Java 计 称 专业必修课 学分/学时 4.0/42+42 计算机系/软件工程教研室 考核方式 考试 C语言程序设计 软件工程、计算机科学与技术、网络工程 Upon completion of this course, students should master the basic knowledge of Java language, understand and grasp the basic object-oriented programming design ideas and skillfully use Java language to write, compile and debug programs.These would lay a good foundation for students on independently finish the work of program development with Java in the future.教学目的 The emphasis: 1.The origin of Java, Why should we learn Java language, Java cross-platform principle analysis(JVM)and Java Environment variable configuration.2.Data and Expressions: including Character Strings, Variables and Assignment, Primitive Data Types, Expressions, Data Conversion, Interactive Programs.3.Oriented object programming ideas: including Class, Object, Variables, Methods, Encapsulation, Inheritance, Polymorphism, Interface and so on.4.Java statements: including conditionals and loops statements.5.Arrays: Declaring and using one-dimensional arrays and two-dimensional arrays.6.Exceptions: including exception handling, uncaught exceptions, and try-catch statement and so on.7.GUI: including event handling and graphics user interface.The difficulty: Object-oriented concept and idea, establishing application model and algorithm of description, the algorithm optimization of program and so on.教材和主要参考资料: Text and references Text : John Lewis “Java程序设计教程(第六版)英文版” 电子工业出版社 ISBN-978-7-121-08808-7 References: 1.《Java编程思想(英文版 第3版)》,(美)Bruce Eckel编,机械工业出版社出版社; 2.Java程序设计基础》,(美)Gary J.Bronson编, 赵德奎 林仕平译,北京大学出版社。 3.Cay S.Horstmann, Gary Cornell.Java 2核心技术 卷I:基础知识.机械工业出版社, 2001.4.Cay S.Horstmann, Gary Cornell.Java 2核心技术 卷II:高级特性.机械工业出版社, 2001.教学内容 学时 基本要求 按章、节具体列出 教学内容 Topic 具体列出教学的基本要求,如了解、理解、掌握及应用等。 By the end of chapter ,students should understand Chapter 1 Introduction Chapter 2 Data and ExpressionsChapter 3 Using Classes and Objects Chapter 4 Writing Classes 3+3 To be able to have a fundamental understanding of software role in a computer system. To know components of a computer To understand how those components interact To grasp how computers store and manipulate information To know how computers are connected into networks to share information. To profile programming and programming languages To profile an introduction to Java To grasp object-oriented concepts 3+6 Explore some of the basic types of data used in a Java program and the use of expressions to perform calculations. To understand character strings, concatenation, and escape sequences. To grasp the declaration and use of variables. To be familiar with Java primitive data types. To understand expressions and operator precedence. To grasp the syntax and processing of expressions. To understand the types of data conversions and the mechanisms for accomplishing them. To know how to create interactive programs. To understand the basic graphic concepts and the techniques for drawing shapes. To know the concept of a Java applet.4+4 Use the predefined classes in the Java class library that are provided to us to make the process of writing programs easier. To grasp the creation of objects and the use of object reference variables. To be familiar with the services provided by the String class. To know how the java standard class library is organized into packages. To be familiar with the services provided by the Random and Math class. To grasp ways to format output using the NumberFormat and DecimalFormat classes. To be familiar with enumerated types. To understand wrapper classes and the concept of autoboxing. To understand components and containers used in graphics user interfaces. To know a label component and the use of images.6+6 We've been using predefined classes.Now we will learn to write our own classes to define objects. To grasp the structure and content of a class definition. To understand the concept of object state using instance data. To know the effect of visibility modifiers on methods and data. To grasp the structure of a method definition, including parameters and return values. To grasp the structure and purpose of a constructor. To grasp the creation of graphical objects. To understand the concepts needed to create an interactive graphical user interface.Chapter 5 Conditionals and Loops Chapter 6 OBJECT-ORIENTED DESIGN Chapter 7 Arrays Chapter 8 Inheritance To know some basic GUI components and events.4+4 Now we will examine programming statements that allow us to make decisions and repeat processing steps in a loop. To know the flow of control through a method. To understand Boolean expressions that can be used to make decisions. To grasp to perform basic decision making using if and switch statements. To understand issues pertaining to the comparison of certain types of data. To grasp familiarly to execute statements repetitively using while, do, and for loops. To understand the concept of an iterator object and use one to read a text file. To know how to draw with the aid of conditionals and loops. To know more GUI components and events.4+4 Now we can extend our discussion of the design of classes and objects To know key issues related to the design of object-oriented software. To techniques for identifying the classes and objects needed in a program. To understand the relationships among classes. To understand the effect on the static modifier on methods and data. To grasp the creation of a formal object interface. Further grasp the definition of enumerated type classes. To grasp issues related to the design of methods, including method overloading. To know issues related to the design of graphics user interface, including layout managers.6+3 Arrays are objects that help us organize large amounts of information Define and use arrays for basic data organization. To know bounds checking and techniques for managing capacity. To learn to compare the issues related to arrays as objects and arrays of objects. To grasp the use of command-line arguments. To grasp the syntax and use of variable-length parameter lists. To be familiar with the creation and use of multidimensional arrays. To be familiar with the ArrayList class and its generic parameter. To know more mouse and keyboard events.6+6 Inheritance is a fundamental object-oriented design technique used to create and organize reusable classes. To know the derivation of new classes from existing ones. To understand the concept and purpose of method overriding. To grasp the design of class hierarchies. To grasp the issue of visibility as it relates to inheritance. To have the ability to derive on interface from another. To grasp object-oriented design in the context of inheritance. To know the inheritance structure for GUI components. To explore the creation of listeners by extending adaptor classes.Chapter 9 Polymorphism 3+3 Chapter 10 Exceptions 3+3 有关说明: 拟稿(签名):谢彦麒 Polymorphism is an object-oriented concept that allows us to create versatile software designs To understand polymorphism and explore its benefits. To understand the concept of dynamic binding. To grasp to use inheritance relationships to create polymorphic references. To grasp to use interfaces to create polymorphic references. To grasp sorting and searching using polymorphic implementations. To be familiar with object-oriented design in the context of polymorphism. To know the processing of events as an example of polymorphism. To know more GUI components.Exception handling is an important aspect of object-oriented design To know the purpose of exceptions. To know exception messages and the call stack trace. To be familiar with the usage of the try-catch statement for handling exception. To understand the concept of exception propagation. To be familiar with the exception class hierarchy in the Java standard class library. To be familiar with I/O exception and the ability to write text files. To know how to create GUI using mnemonics and tool tips. To know additional GUI components and containers.核稿(签名): 审批(签名): 年 月 日 《JAVA面向对象程序设计》课程教学大纲 Oriented object Programming in JAVA 编号: 08065121 适用专业:计算机科学与技术、网络工程 学时数:32 学分数:2 执笔者:田小玲 编写日期:2009年11月 一、课程的性质和目的 本课程是为计算机科学与技术以及网络工程专业本科生开设的专业选修课,是一门面向对象的编程语言,通过本课程的学习,培养和提高学生面向对象程序设计的能力和Java语言在web开发中的应用能力。 二、课程教学内容 第一章 面向对象软件开发概述(2学时)1.内容 面向对象问题求解的提出、面向对象问题求解的概述、对象、类与实体、对象的属性与相互关系、面向对象的软件开发过程、面向对象程序设计方法的优点、开发环境设置及开发工具简介。 2.要求 (1)了解:面向对象软件开发概述,面向对象的软件开发过程及面向对象程序设计 方法的优点。 (2)掌握:对象的属性与相互关系,对象、类与实体的基本概念。(3)熟练掌握:开发环境设置及开发工具简介(补充)。3.重点 对象、类与实体的基本概念。 4.难点 面向对象程序设计方法的理解。第二章 Java概述(2学时)1.内容 Java语言的特点、Java虚拟机及垃圾回收机制、JDK目录结构、Java 的API结构及Java程序结构、第一个Java Application程序、第一个Java Applet程序、图形界面的输入输出、字符界面的输入输出。 2.要求 (1)了解:Java语言的发展历史及特点,Java Application程序及Java Applet程 序,图形界面的输入输出,字符界面的输入输出。 (2)掌握:Java语言实现机制(补充),Java体系结构(补充)。(3)熟练掌握:Java Application程序的结构。3.重点 Java Application程序的结构。 4.难点 Java语言实现机制。 第三章 Java语言基础(2学时)1.内容 数据类型、变量与常量、表达式、流程控制语句。2.要求 (1)了解:java语言的发展。 (2)掌握:数据类型、变量与常量的定义及使用。(3)熟练掌握:表达式的使用,流程控制语句。3.重点 表达式的使用,流程控制语句。 4.难点 流程控制语句的运用。 第四章 抽象、封装与类(6学时) 1.内容 抽象与封装、Java的类、类的修饰符、域、方法、访问控制符。2.要求 (1)了解:抽象、封装概念,系统定义的类。 (2)掌握:类的修饰符(abstract和final),域(包括静态域、静态初始化器、最终域和易失域),方法(包括抽象方法、静态方法、最终方法)。 (3)熟练掌握:用户程序自定义类及创建对象与定义构造函数,访问控制符(包括public、缺省访问控制符、private、protected)的运用。 3.重点 自定义类、创建对象与定义构造函数。 4.难点 四种访问控制符的运用。第五章 继承与多态(4学时)1.内容 Java的继承、多态、Java的重载、构造函数的继承与重载、包及接口的概念。2.要求 (1)了解:继承及多态的概念,Java接口的概念。(2)掌握:Java的方法重载,包的创建及引用。(3)熟练掌握:构造函数的继承与重载。 3.重点 方法的重载、类的继承。4.难点 属性的隐藏、方法的覆盖。第六章 工具类与算法(2学时) 1.内容 语言基础类库(包括Object类、数据类型类、Math类及System类)、Applet类与Applet小程序、数组。 2.要求 (1)了解:Applet类与Applet小程序。(2)掌握:Java语言基础类库。(3)熟练掌握:数组的声明及初始化。3.重点 数组的声明及初始化、数组的应用。4.难点 编写Applet小程序。 第七章 图形用户界面的设计与实现(8学时) 1.内容 图形用户界面概述、GUI标准组件概述及布局设计、Java的事件处理机制。2.要求 (1)了解:图形界面组件之间的层次关系、容器的概念和作用。(2)掌握:图形用户界面程序的基本结构。(3)熟练掌握:事件监听机制。3.重点 图形用户界面程序的基本结构。4.难点 Java的事件处理机制。 第八章 Java高级编程(6学时) 1.内容 异常处理、Java多线程机制、Swing GUI 组件、流式输入输出与文件处理、用Java实现底层网络通信、Java程序对网上资源的访问。 2.要求 (1)了解:例外的概念、Java中线程的基本概念、Java的线程类与Runnable接口及如何在程序中实现多线程、Java输入输出类库及文件的处理与随机访问、使用Java实现底层网络通信、Java程序对网上资源的访问。 3(2)掌握:例外处理机制。 (3)熟练掌握:Swing GUI组件的运用。3.重点 例外处理机制、Swing GUI组件的创建。 4.难点 自定义异常类。 三、课程教学的基本要求 课程教学的基本要求包含三项:上机环节、作业要求、考试方式。1.上机环节 根据课堂讲授的理论,并结合上机操作让学生及时掌握每章节所学的知识,通过实操可加深学生对面向对象程序设计的思想及Java程序设计的领会。 2.作业要求 (1)作业要求:独立思考完成、书写工整、按时交(2)作业量:每次课均布置作业,作业量约2~3题(3)总作业量:约30~40道题 3.考试方式 (1)考试方式:闭卷笔试(2)评定成绩要求: 总成绩=平时成绩×30%+考试成绩×70% 四、本课程与其它课程的联系与分工 1.前期课程: 程序设计基础、计算机网络、C语言程序设计、C++程序设计 2.后续课程: 软件工程、Web应用程序开发 五、建议教材与教学参考书 [1] 印旻.《Java语言与面向对象程序设计》,清华大学出版社 [2] 於东军,杨静宇.《Java程序设计与应用开发》,清华大学出版社 [3] 辛运帏.《Java程序设计》,清华大学出版社 [4] 姜刚.《Java语言程序设计》,人民邮电出版社 [5] 阎菲.《Java程序设计教程》,中国水利水电出版社 Java面向对象程序设计 <书中例题> 第1章 Java 语言综述 例1-1 一个加法器 //Add.java public class Add { public static void main(String args[]){ int a,b,c; a=5; b=7; c=a+b; System.out.println(a+“+”+b+“=”+c);} } 例1-2 能接受命令行参数的应用程序 //WhoSayWhat.java class WhoSayWhat { public static void main(String args[]){ if(args.length<2) { System.out.println(“请向应用程序传递两个参数:”); System.exit(0);// } String s1=args[0]; String s2=args[1]; System.out.println(s1+“ Say: ”+s2);} } 例1-3小应用程序举例 //Test.java import java.applet.Applet;import java.awt.Graphics;//Graphics public class Test extends Applet { public void paint(Graphics g){ g.drawString(“hello world!”,50,25);} } 第二篇:java面向对象程序设计教案
第三篇:Java面向对象程序设计教学大纲
第四篇:JAVA面向对象程序设计教学大纲
第五篇:java面向对象程序设计 书中例子