Java面向对象程序设计第4章_类与对象 耿祥义 张跃平主编
java面向对象程序设计课后习题答案耿祥义张跃平主编清华大学出版社解析

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
习题
1.用该类创建对象时。
2.所谓方法重载是在一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。构造方法可以重载。
3.可以。不可以。
4.不可以。
5.成员变量又分为实例变量和类变量,用static修饰的变量是类变量。那么类变量和实例变量有什么区别呢?一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间;如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。也就是说对象共享类变量。
{ A a=new A();
B b=new B();
System.out.println("最大公约数:"+a.f(36,24));
System.out.println("最小公倍数:"+b.f(36,24));
}
}
习题
1.仍然有效。
2.可以。
3.不可以。
4.大家好,祝工作顺利!
5.96
乘数超过99
System.out.println("\""+ch3+"\"的位置:"+(int)ch3);
Java 2实用教程课件(耿祥义 第3版第4章)

4.1 编程语言的几个发展阶段 4.2 类 4.3 对象 4.4 static 关键字 4.5 this 关键字 4.6 包 4.7 访问权限 4.8 类的继承 4.9 对象的上转型对象 4.10 多态性
4.1 编程语言的几个发展阶段 4.2 类
4.1 编程语言的几个发展阶段
机器语言(0,1)
封装性
面向对象核心思想就是将数据和对数据的 操作封装在一起。 通过抽象,从具体实例中抽取共同性质形 成一般的概念,比如类的概念。 例如:机动车类,有属性和功能。 封装在一类中。
继承性
继承体现了一种先进的编程模式。子类继 承父类的属性和功能,同时又可增添子类 独有的属性和功能。 例如:人类继承了哺乳类的属性和功能。 有增添了独有的属性和功能。会说话
3.对象的引用和实体
当用类创建一个对象时,类中的成员变量 被分配内存空间,这些内存空间称做该对 象的实体,而对象中存放着引用,以确保 实体由该对象操作使用。 一个类创建的两个对象,如果具有相同的 引用,那么就具有完全相同的实体。 没有实体的对象称作空对象,空对象不能 使用,即不能让一个空对象去调用方法产 生行为。
class A { void f() { int m=0,sum=0; if (m>9) { int z=10; //1 } for (int i=0;i<m;i++) { sum=sum+I; //2 } m=sum; //3 z=i+sum; //4 } }
5.方法重载
方法重载的意思是:一个类中可以有多个 方法具有相同的名字,但这些方法的参数 必须不同,即或者是参数的个数不同,或 者是参数的类型不同。重要
计算机处理信息的早期语言是所谓的机器语言,这种语言中的指令都 是由0,1组成的序列,称这样的序列为一条机器指令。
java面向对象程序设计第四章

第四章 面向对象(上)
主要内容
什么是抽象 类与对象及其关系 类中定义的属性(域)与方法(操作) 对象 构造方法 类成员属性和方法的其它修饰符 包(Package)
什么是抽象
抽象的定义
抽象(abstraction)是从被研究对象中舍弃个别的、非本质的、或与 研究主旨无关的次要特征,而抽取与研究有关的共性内容加以考察, 形成对研究问题正确的简明扼要的认识。
F ighterPlane
String name; int missileNum;
F ighterPlane
NEW
String name; int missileNum;
void fire()
类
void fire()
对象
fp
对象的内存空间
内存空间分为堆和栈,当在程序中发生函数调用时,为被调函数在栈
fp 0x9000
对象作为参数的特点
普通数据类型作为参数传递是值传递,而对象是引用传递。
public class X { private static int a = 0; public static void main(String [] args) { modify(a); System.out.println(a); } public static void modify(int a) { a++; } }
构造方法可以重载;构造方法也可以继承;
如果用户在一个自定义类中未定义该类的构造方法,系统 将为这个类定义一个缺省的空构造方法。这个空构造方法 没有形式参数,也没有任何具体语句,不能完成任何操作。 但在创建这个类的新对象时,系统要调用该类的缺省构造 方法将新对象属性初始化,这个构造方法前的修饰符将同 类前的修饰符保持一致。 如果自行定义了构造方法,则系统不再创建这个默认的构 造方法。
大学_《Java面向对象程序设计》(耿祥义张跃平著) 课后答案下载

《Java面向对象程序设计》(耿祥义张跃平著) 课后答案下载《Java面向对象程序设计》(耿祥义张跃平著) 课后答案预览Java语言具有面向对象、与平台无关、安全、稳定和多线程等优良特性,是目前软件设计中极为强大的编程语言。
Java已成为网络时代最重要的语言之一。
本书注重结合实例以及重要的设计模式,循序渐进地向读者介绍了Java面向对象编程的重要知识。
针对较难理解的问题,所列举例子都是由简到繁,便于读者掌握Java面向对象编程的思想。
全书分为l7章,分别讲解了基本数据类型、枚举和数组、运算符、表达式和语句、类、对象和接口、面向对象的几个基本原则、重要的设计模式、常用实用类、JavaSwin9图形用户界面、对话框、Java输入输出流、泛型与集合框架、BC数据库操作、Java多线程机制、Java网络基础以及JavaApplet等内容。
《Java面向对象程序设计》(耿祥义张跃平著)内容提要第1章Java入门1.1 Java的地位1.1.1 网络地位1.1.2语言地位1.1.3需求地位-1.2 Java的特点1.2.1简单1.2.2面向对象1.2.3与平台无关1.2.4多线程1.2.5安全1.2.6 动态1.3安装K1.3.1 3种平台简介1.3.2安装Java SE平台1.4 Java程序的开发步骤1.5简单的Java应用程序1.5.1源文件的编写与保存1.5.2编译1.5.3 运行1.6 Java应用程序的基本结构 1.7注释1.8编程风格1.8.1 Allmans风格1.8.2 Kernighan风格1.9 Java之父——James Goslin91.10小结习题l第2章基本类型、数组和枚举类型2.1标识符和关键字《Java面向对象程序设计》(耿祥义张跃平著)目录1.James Gosling2.(1)使用一个文本编辑器编写源文件。
(2)使用Java编译器(javac.exe)编译Java源程序,得到字节码文件。
耿祥义张跃平java大学实用教程-编程题答案.(DOC)

习题解答第一章作业题1.public class Hello{public static void main (String args[ ]){System.out.pintln(“早上好,good Morning”);}}2.import java.applet.*;import java.awt.*;public class Boy extends Applet {public void paint(Graphics g) {g.setColor(Color.blue);g.drawString("你好,hello",12,30);}}第二章作业题1.public class ZuoYe2_1{public static void main (String args[ ]){char c='а';System.out.println("字母"+c+"在unicode表中的顺序位置:"+(int)c);System.out.println("字母表:");while(c<='я'){System.out.print(" "+c);c=(char)(c+1);}}}2.import java.util.*;public class ZuoYe2_2{public static void main (String args[ ]){Scanner reader=new Scanner(System.in);long chengji=1;int m=0;while(reader.hasNextInt()){int x=reader.nextInt();m=m+1;chengji=chengji*x;}System.out.println(m+"个数的乘积为"+chengji); }}第三章作业题1.import java.util.*;public class ZuoYe3_1{public static void main (String args[ ]){Scanner reader=new Scanner(System.in);double y=0,x=0;x=reader.nextDouble();if(x<0)y=-1+2*x;else if(x==0)y=-1;else if(x>0)y=-1+3*x;System.out.println(y);}}2.public class ZuoYe3_2{public static void main(String args[]){int sum=0,m=3,n=7,a=1;while(a<=1000){if(a%m==0&&a%n==0)sum=sum+a;a++;}System.out.println("sum="+sum);}}3.public class ZuoYe3_3{public static void main(String args[]){long sum=0,a=8,item=a,n=10,i=1;for(i=1;i<=n;i++){ sum=sum+item;item=item*10+a;}System.out.println(sum);}}4.public class ZuoYe3_4{public static void main(String args[]){double sum=0,a=1,b=1,fuhao=1,item=a/b; int i=1;while(i<=1000){sum=sum+fuhao*item;i++;fuhao=fuhao*(-1);b=b+2;item=a/b;}System.out.println("sum="+sum);}}5.public class ZuoYe3_5{public static void main(String args[]) {double sum=0,a=1;int i=1;while(i<=20){if(i>=10)sum=sum+a;i++;a=a*i;}System.out.println("sum="+sum);}}8.第四章作业题1.class DengCha{int start,d;DengCha(){}DengCha(int start,int d){this.start=start;this.d=d;}void setStart(int s){start=s;}void setD(int d){this.d=d;}int getSum(int n){int sum=0,i=1;while(i<=n){sum=sum+start;start=start+d;i++;}return sum;}}public class ZuoYe4_1{public static void main (String args[ ]) {DengCha shulie=new DengCha(2,3);System.out.println(shulie.getSum(100)); shulie.setStart(10);shulie.setD(5);System.out.println(shulie.getSum(9)); }}2.class Letter{public void printLetter(){for(char c='a';c<='z';c++)System.out.print(" "+c);}}public class ZuoYe4_2{public static void main (String args[ ]) {Letter p=new Letter();p.printLetter();}}3.class SquareEquation{double a,b;static double c;double root1,root2;boolean boo;public SquareEquation(double a,double b,double c){this.a=a;this.b=b;SquareEquation.c=c;if(a!=0){boo=true;}else{boo=false;}}public void getRoots(){if(boo){System.out.println("是一元2次方程");double disk=b*b-4*a*c;if(disk>=0){root1=(-b+Math.sqrt(disk))/(2*a);root2=(-b-Math.sqrt(disk))/(2*a);System.out.printf("方程的根:%f,%f\n",root1,root2); }else{System.out.printf("方程没有实根\n");}}else{System.out.println("不是一元2次方程");}}public void setCoefficient(double a,double b,double c){this.a=a;this.b=b;SquareEquation.c=c;if(a!=0){boo=true;}else{boo=false;}}}public class ZuoYe4_3{public static void main(String args[ ]){SquareEquation equation1=new SquareEquation(4,5,1); SquareEquation equation2=new SquareEquation(3,5,-7); equation1.getRoots();equation2.getRoots();}}4.import java.util.Scanner;class A{int f(int m,int n){if(m*n<0){ System.out.println("有负数,程序退出");System.exit(0);}if(m<n){ int temp=m;m=n;n=temp;}int a=m,b=n;int r=m%n;while(r!=0){ m=n;n=r;r=m%n;}return n;}}class B{A a;B(){a=new A();}int g(int m,int n){int temp=a.f(m,n);return m*n/temp;}}public class ZuoYe4_4{public static void main (String args[ ]){Scanner reader=new Scanner(System.in);System.out.println("输入2个正整数,程序计算出它们的最大公约数和最小公倍数");System.out.print("输入第一个整数:");int m=reader.nextInt();System.out.print("输入第二个整数:");int n=reader.nextInt();A a=new A();B b=new B();System.out.println(m+"和"+n+"的最大公约数是"+a.f(m,n));System.out.println(m+"和"+n+"的最小公倍数是"+b.g(m,n));}}5.import java.applet.Applet;import java.awt.*;public class Example4_10 extends Applet{Button redbutton;public void init(){redbutton=new Button("我是一个红色的按钮");redbutton.setBackground(Color.red);redbutton.setForeground(Color.white);add(redbutton);}}第五章作业题1.import java.util.Scanner;class A{public int f(int m,int n){if(m<n){int temp=m;m=n;n=temp;}int r=m%n;while(r!=0){m=n;n=r;r=m%n;}return n;}}class B extends A{public int f(int m,int n){int division=super.f(m,n);return (m*n)/division;}}public class ZuoYe5_1{public static void main (String args[ ]) {A a=new A();B b=new B();Scanner reader=new Scanner(System.in);System.out.println("输入2个整数,程序计算出它们的最大公约数和最小公倍数");System.out.print("输入第一个整数:");int m=reader.nextInt();System.out.print("输入第二个整数:");int n=reader.nextInt();if(m*n<0){ System.out.println("有负数,程序退出");System.exit(0);}System.out.printf("%d和%d的最大公约数是%d\n",m,n,a.f(m,n));System.out.printf("%d和%d的最小公倍数是%d\n",m,n,b.f(m,n));}}2.abstract class A{public abstract void f(int x);public abstract void g(int x,int y);public abstract double h(double x);}class A1 extends A{public void f(int x){System.out.println(x);}public void g(int x,int y){int z=x+y;System.out.println(z);}public double h(double x){return x*x;}}class A2 extends A{public void f(int x){System.out.println("Hello:"+x);}public void g(int x,int y){int z=x-y;System.out.println(z);}public double h(double x){return Math.sqrt(x);}}class A3 extends A{public void f(int x){System.out.println("你好:"+x);}public void g(int x,int y){double z=(double)x/y;System.out.println(z);}public double h(double x){return 1/x;}}public class ZuoYe5_2{public static void main(String args[ ]){ A a=new A1();a.f(10);a.g(12,20);System.out.println(a.h(100));a=new A2();a.f(10);a.g(12,20);System.out.println(a.h(100));a=new A3();a.f(10);a.g(12,20);System.out.println(a.h(100));}}3.interface A{public abstract void f(int x);public abstract void g(int x,int y); public abstract double h(double x); }class A1 implements A{public void f(int x){System.out.println(x);}public void g(int x,int y){int z=x+y;System.out.println(z);}public double h(double x){return x*x;}}class A2 implements A{public void f(int x){System.out.println("Hello:"+x); }public void g(int x,int y){int z=x-y;System.out.println(z);}public double h(double x){return Math.sqrt(x);}}class A3 implements A{public void f(int x){System.out.println("你好:"+x); }public void g(int x,int y){double z=(double)x/y;System.out.println(z);}public double h(double x){return 1/x;}}public class ZuoYe5_3{public static void main(String args[ ]){ A a=new A1();a.f(10);a.g(12,20);System.out.println(a.h(100));a=new A2();a.f(10);a.g(12,20);System.out.println(a.h(100));a=new A3();a.f(10);a.g(12,20);System.out.println(a.h(100));}}4.class Cubic{ double getCubic(int n){ return 0;}}abstract class Sqrt{ public abstract double getSqrt(int x);}class A{ void f(Cubic cubic){ double result=cubic.getCubic(3);System.out.println(result);}}public class ZuoYe5_4{ public static void main(String args[]){ A a=new A();a.f(new Cubic(){ double getCubic(int n){ return n*n*n;}});Sqrt ss=new Sqrt(){ public double getSqrt(int x){ return Math.sqrt(x);}};double m=ss.getSqrt(5);System.out.println(m);}}5.class IntegerException extends Exception{ String message;IntegerException(int m){ message="年龄"+m+"不合理";}public String toString(){ return message;}}class People{ private int age=1;public void setAge(int age) throws IntegerException{if(age>=160||age<=0)throw new IntegerException(age); //方法抛出异常,导致方法结束 elsethis.age=age;}public int getAge(){ System.out.println("年龄"+age+"合理");return age;}}public class ZuoYe6_5{ public static void main(String args[]){ People wang=new People(),zhang=new People();try { wang.setAge(189);System.out.println(wang.getAge());}catch(IntegerException e){ System.out.println(e.toString());}try { zhang.setAge(28);System.out.println(zhang.getAge());}catch(IntegerException e){ System.out.println(e.toString());}}}第六章作业题1.import java.util.regex.*;import java.util.*;public class ZuoYe6_1{public static void main(String args[ ]){Scanner reader=new Scanner(System.in);String s1=reader.nextLine();Pattern p;Matcher m;p=pile("[24680]A[13579]{2}");m=p.matcher(s1);while(m.find()){String str=m.group();System.out.print("从"+m.start()+"到"+m.end()+"匹配模式子序列:"); System.out.println(str);}}}2.import java.util.regex.*;import java.util.*;public class ZuoYe4_1{public static void main(String args[ ]){Scanner reader=new Scanner(System.in);String s1=reader.nextLine();Pattern p;Matcher m;p=pile("\\d+");m=p.matcher(s1);while(m.find()){String str=m.group();System.out.print(str);}}}第七章作业题1.import java.util.*;public class ZuoYe7_2{ public static void main(String args[]){int year,month;try{year=Integer.parseInt(args[0]);month=Integer.parseInt(args[1])+1;}catch(NumberFormatException e){year=2004;month=1;}System.out.println(" 日一二三四五六");Calendar 日历=Calendar.getInstance();日历.set(year,month,1);int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;String a[]=new String[星期几+31];for(int i=0;i<星期几;i++){ a[i]="**";}for(int i=星期几,n=1;i<星期几+31;i++){ if(n<=9)a[i]=String.valueOf(n)+" ";elsea[i]=String.valueOf(n) ;n++;}for(int i=0;i<a.length;i++){ if(i%7==0){ System.out.println("");}System.out.print(" "+a[i]);}}}2.class ZuoYe7_2{ public static void main(String args[]){int year1,month1,day1,year2,month2,day2;try{year1=Integer.parseInt(args[0]);month1=Integer.parseInt(args[1]);day1=Integer.parseInt(args[2]);year2=Integer.parseInt(args[3]);month2=Integer.parseInt(args[4]);day2=Integer.parseInt(args[5]);}catch(NumberFormatException e){year1=2009;month1=0;day1=1;year2=2008;month2=0;day2=1;}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+"日相隔"+相隔天数+"天");}}3.import java.math.*;public class ZuoYe4_1{public static void main(String args[]){BigInteger chengji=new BigInteger("1"),ONE=new BigInteger("1"),i=ONE,m=new BigInteger("10");while(pareTo(m)<=0){chengji=chengji.multiply(i);i=i.add(ONE);}System.out.println(chengji);}}4.import java.util.*;public class ZuoYe7_4{public static void main(String args[]){HashSet<Integer> A=new HashSet<Integer>(),B=new HashSet<Integer>(),tempSet=new HashSet<Integer>();A.add(new Integer(1));A.add(new Integer(2));A.add(new Integer(3));A.add(new Integer(4));B.add(new Integer(1));B.add(new Integer(3));B.add(new Integer(7));B.add(new Integer(9));B.add(new Integer(11));tempSet=(HashSet<Integer>)A.clone();tempSet.retainAll(B);System.out.println("交:");Iterator<Integer> iter=tempSet.iterator(); while(iter.hasNext()){Integer te=iter.next();System.out.printf("%d,",te.intValue()); }tempSet=(HashSet<Integer>)A.clone();tempSet.addAll(B);iter=tempSet.iterator();System.out.println("并:");while(iter.hasNext()){Integer te=iter.next();System.out.printf("%d,",te.intValue()); }tempSet=(HashSet<Integer>)A.clone();tempSet.removeAll(B);System.out.println("差:");iter=tempSet.iterator();while(iter.hasNext()){Integer te=iter.next();System.out.printf("%d,",te.intValue()); }}}5.import java.util.*;class MyKey implements Comparable{double number=0;MyKey(double number){this.number=number;}public int compareTo(Object b){MyKey st=(MyKey)b;if((this.number-st.number)==0){return -1;}else{return (int)((this.number-st.number)*1000);}}}class 硬盘{int size;double price;硬盘(int n, double p){size=n;price=p;}}public class ZuoYe4_1{public static void main(String args[ ]){int [] size={10,3,7,12,10,22,100,4,6,2};double [] price={1.2,9.56,2.4,9.3,16.77,12.66,7.4,5.5,5.6,8.9,1.9};硬盘 [] s=new 硬盘[10];for(int i=0;i<s.length;i++)s[i]=new 硬盘(size[i],price[i]);TreeMap<MyKey,硬盘> treemap=new TreeMap<MyKey,硬盘>();for(int i=0;i<s.length;i++)treemap.put(new MyKey(s[i].size),s[i]);int number=treemap.size();System.out.println("树映射中有"+number+"个对象:");Collection<硬盘> collection=treemap.values();Iterator<硬盘> iter=collection.iterator();while(iter.hasNext()){硬盘 te=iter.next();System.out.println(te.size+","+te.price);}treemap.clear();for(int i=0;i<s.length;i++)treemap.put(new MyKey(s[i].price),s[i]);number=treemap.size();System.out.println("树映射中有"+number+"个对象:"); collection=treemap.values();iter=collection.iterator();while(iter.hasNext()){硬盘 te=iter.next();System.out.println(te.size+","+te.price);}}}第八章作业题1.属于操作题目,省略2.参见例子8-23.参见例子8-34.参见例子8-10第九章作业题1.import java.io.*;import java.awt.*;import java.awt.event.*;public class ZuoYe9_1{ public static void main(String args[]){ int b;byte tom[]=new byte[25];try{ File f=new File("Example.java");FileInputStream in=new FileInputStream(f);while((b=in.read(tom,0,25))!=-1){ String s=new String (tom,0,b);System.out.print(s);}in.close();}catch(IOException e){ System.out.println("File read Error"+e);}}}2.import java.io.*;import java.util.*;public class ZuoYe9_2{public static void main(String args[]){Scanner reader=new Scanner(System.in);int b;try{FileOutputStream writefile=new FileOutputStream("line.txt"); int line=1,n=10;System.out.println("输入"+n+"行文本,并存入磁盘:");while(line<=n){String s=reader.nextLine();byte buffer[]=s.getBytes();writefile.write(buffer,0,buffer.length);line++;}writefile.close();}catch(IOException e){System.out.println("Error "+e);}}}3.import java.io.*;public class ZuoYe9_3{public static void main(String args[ ]){int n=-1;CharArrayWriter out=new CharArrayWriter();for(char c='а';c<='я';c++){out.write(c);}CharArrayReader in=new CharArrayReader(out.toCharArray()); try{ while((n=in.read())!=-1){if(n%2==0){System.out.printf("\n");}System.out.printf("\t位置%d,字符\'%c\'",n,(char)n); }}catch(IOException e){}}}4.import java.io.*;import java.util.*;public class ZuoYe9_4{public static void main(String args[]){try{FileOutputStream fos=new FileOutputStream("jerry.dat"); DataOutputStream out_data=new DataOutputStream(fos);Scanner reader=new Scanner(System.in);for(int i=1;i<=10;i++){int x=reader.nextInt();out_data.writeInt(x);}out_data.close();}catch(IOException e){}try{FileInputStream fis=new FileInputStream("jerry.dat"); DataInputStream in_data=new DataInputStream(fis);for(int i=1;i<=10;i++){int m=in_data.readInt();System.out.print(" "+m);}in_data.close();}catch(IOException e){}}}5.import java.io.*;import java.util.*;class Student implements Serializable{String name ;int number;Student(String name,int number){=name;this.number=number;}}public class ZuoYe9_5{public static void main(String args[]){List<Student> list=new LinkedList<Student>();List<Student> cloneList=null;for(int k=1;k<=12;k++)list.add(new Student("I am "+k,k));try{ FileOutputStream fileOut=new FileOutputStream("a.txt");ObjectOutputStream objectOut=new ObjectOutputStream(fileOut);objectOut.writeObject(list);FileInputStream fileIn=new FileInputStream("a.txt");ObjectInputStream objectIn=new ObjectInputStream(fileIn);cloneList=(List)objectIn.readObject();}catch(Exception event){System.out.println(event);}Iterator iter=cloneList.iterator();while(iter.hasNext()){Student te=(Student)iter.next();System.out.println(te.number+","+);}}}6.import java.io.*;public class ZuoYe9_6{ public static void main(String args[]){File f=new File("Xiti12_6.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; //一个汉字占2个字节 random.seek(m);byte cc[]=new byte[2];random.readFully(cc);System.out.print(new String(cc));}}random.close();}catch(IOException ee){}}}5.import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Xiti8_5{ public static void main(String args[]){ ComputerFrame fr=new ComputerFrame();fr.setTitle("计算");}}class ComputerFrame extends JFrame implements ActionListener { JTextField text1,text2,text3;JButton button1,button2,button3,button4;JLabel label;public ComputerFrame(){setLayout(new FlowLayout());text1=new JTextField(10);text2=new JTextField(10);text3=new JTextField(10);label=new JLabel(" ",JLabel.CENTER);label.setBackground(Color.green);add(text1);add(label);add(text2);add(text3);button1=new JButton("加");button2=new JButton("减");button3=new JButton("乘");button4=new JButton("除");add(button1);add(button2);add(button3);add(button4);button1.addActionListener(this);button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);setSize(400,320);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 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,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("请输入数字字符");}}validate();}}6.import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Xiti8_6{ public static void main(String args[]){ new WindowPanel();}}class Mypanel extends JPanel implements ActionListener { JButton button;JTextField text;Mypanel(){ button=new JButton(" ");text=new JTextField(12);add(button);add(text);button.addActionListener(this);}public void actionPerformed(ActionEvent e){ String name=text.getText();if(name.length()>0)button.setText(name);validate();}}class WindowPanel extends JFrame{ 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);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}7.import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Xiti8_7{ public static void main(String args[]){ new WindowColor();}}class WindowColor extends JFrame{ JButton button;JTextField text;JComboBox list;WindowColor(){ setLayout(new FlowLayout());button=new JButton("hello");button.setBackground(Color.pink);button.setForeground(new Color(12,26,200));text=new JTextField("how are you");text.setBackground(Color.yellow);text.setForeground(new Color(200,26,20));list=new JComboBox();list.addItem("Hello");list.addItem("Java");list.setBackground(Color.cyan);list.setForeground(new Color(100,100,100));add(list);add(button);add(text);setSize(300,320);setVisible(true);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}8.import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Xiti8_8{ public static void main(String args[]){ MoveFrame f=new MoveFrame();f.setBounds(12,12,300,300);f.setVisible(true);f.setTitle("移动");f.validate();f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}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,180,30);movedButton.setBounds(100,100,20,20);}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.*;import javax.swing.*;public class E{ public static void main(String args[]){ JFrame fr=new JFrame();fr.add(new LP(),BorderLayout.CENTER);fr.setVisible(true);fr.setBounds(12,12,300,300);fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);fr.validate();}}class LP extends JLayeredPane implements MouseListener,MouseMotionListener { JButton button[];JTextField text[];int x,y,a,b,x0,y0;LP(){ setLayout(new FlowLayout());button=new JButton[8];for(int k=0;k<button.length;k++){ button[k]=new JButton("用鼠标拖动我");add(button[k]);button[k].addMouseListener(this);button[k].addMouseMotionListener(this);}text=new JTextField[10];for(int k=0;k<text.length;k++){ text[k]=new JTextField("用鼠标拖动我");text[k].addMouseListener(this);add(text[k]);text[k].addMouseMotionListener(this);}addMouseMotionListener(this);}public void mousePressed(MouseEvent e){ Component com=null;com=(Component)e.getSource();setLayer(com,JLayeredPane.DRAG_LAYER);a=com.getBounds().x;b=com.getBounds().y;x0=e.getX(); //获取鼠标在事件源中的位置坐标y0=e.getY();}public void mouseReleased(MouseEvent e){ Component com=null;com=(Component)e.getSource();setLayer(com,JLayeredPane.DEFAULT_LAYER);Component component[]=this.getComponents();for(int k=0;k<component.length;k++){ Rectangle rect1=component[k].getBounds();Rectangle rect2=com.getBounds();if(rect1.intersects(rect2)&&com!=component[k]){ component[k].setVisible(false);//this.remove(component[k]); }}}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e){}public void mouseMoved(MouseEvent e){}public void mouseDragged(MouseEvent e){ Component com=null;if(e.getSource() instanceof Component){ com=(Component)e.getSource();a=com.getBounds().x;b=com.getBounds().y;x=e.getX(); //获取鼠标在事件源中的位置坐标 y=e.getY();a=a+x;b=b+y;com.setLocation(a-x0,b-y0);}}}10.import java.awt.*;import java.awt.event.*;import javax.swing.*;public class E{ public static void main(String args[]){ JFrame fr=new JFrame();fr.add(new MoveButton(),BorderLayout.CENTER);fr.setVisible(true);fr.setBounds(12,12,300,300);fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);fr.validate();}}class MoveButton extends JLayeredPane implements KeyListener { JButton b[]=new JButton[8];int x,y;MoveButton(){ setLayout(new FlowLayout());for(int i=0;i<8;i++){ b[i]=new JButton(""+i);b[i].addKeyListener(this);。
Java程序设计实用教程(第2版)第4章_类 与 对 象

2019/8/2 9
§4.2.4 方法_ 1.方法声明
方法的定义包括两部分:方法声明和方法体。一 般格式为:
2019/8/2 6
§4.2.2 类体
◆ 类声明之后的一对大括号“{”,“}”以及它 们之间的内容称作类体,大括号之间的内容称作 类体的内容。 ◆类体的内容由两部分构:一部分是变量的声明, 用来刻画属性;另一部分是方法的定义,用来刻 画功能。
2019/8/2 7
例4-1 Vehicle .java
2019/8/2 31
§4.4.4 可变参数
可变参数是指在声明方法时不给出参数列表中从某项 直至最后一项参数的名字和个数,但这些参数的类型必 须相同。可变参数使用“…”表示若干个参数,这些参 数的类型必须相同,最后一个参数必须是参数列表中的 最后一个参数。例如: public void f(int … x) 那么, 方法f的参数列表中,从第1个至最后一个参数都是int 型,但连续出现的int型参数的个数不确定。称x是方法 f的参数列表中的可变参数的“参数代表”。
2019/8/2 29
§4.4.3 引用类型参数的传值
当参数是引用类型时,“传值”传递的是变 量中存放的“引用”,而不是变量所引用的实体。
2019/8/2 30
例4-5 TV.java ,Chineses.java , Example4_5.java
TV.java中的TV类负责创建“电视”对 象,Chinese.java中的Chinese类负责创 建“人物”对象。 在主类的main方法中首先使用TV类创 建一个对象:haierTV,然后使用 Chinese类再创建一个对象:zhangsan, 并将先前TV类的实例:haierTV的引用 传递给zhangsan对象的成员变量 homeTV。由于haierTV和zhangsan对 象的成员变量homeTV具有相同的引用, 因此其中一个TV对象改变了所引用的 实体,如更改了频道,那么另一个自然 也就更改了频道,程序运行效果如图 4.12所示。
Java面向对象程序设计第4章_类与对象
class Angle{ float sideA,sideB,sideC,lengthSum; void setSide(float sideA,float sideB,float sideC){ this.sideA=sideA; this.sideB=sideB; this.sideC=sideC; } }
§4.2.4 方法 方法的定义包括两部分:方法声明和方法体。一般格式 为:
方法声明部分 { 方法体的内容 }
1.方法声明 方法声明包括方法名和方法的返回类型,如:
float area() { … }
注:当一个方法不需要返回一个数据时,返回类型必须是void
2.方法体 方法声明之后的一对大括号“{” ,“}”以及之间的内容称 作方法的方法体。方法体的内容包括局部变量的声明和Java语句。
3.实例变量与类变量:在声明成员变量时,用 关键字static给予修饰的称作类变量,否则称 作实例变量(类变量也称为static变量,静态 变量)。 4.成员变量的隐藏:如果局部变量的名字与成 员变量的名字相同,则成员变量被隐藏,即这 个成员变量在这个方法内暂时失效。 5.编程风格 (1)一行只声明一个变量。 (2)变量的名字符合标识符规定。 (3)变量名字见名知意,避免容易混淆的变量 名字。
《Java语言程序设计》
第4章 类与对象
导读
主要内容 • 类 • 对象 • 参数传值 • 对象组合 • static关键字 • this关键字 • 包 • import语句 • jar文件 难点 • 参数传值与对象组合 • 包和import语句
§4.1 段
编程语言的几个发展阶
◆ 面向机器语言 ◆面向过程语言
class 梯形{ float 上底,下底,高,laderArea; float CalculateArea( ){ laderArea=(上底+下底)*高/2.0f; return laderArea; } void ModifyHigh(float h) {高=h; } }
面向对象Java程序设计 第4章
第4章类与对象4.1 类与对象的概念4.2 封装机制4.3 数据成员4.4 成员方法4.1 类与对象的概念程序设计所面对的问题域——客观世界,是由许多事物构成的,这些事物既可以是有形的(比如一辆汽车),也可以是无形的(比如一次会议)。
把客观世界中的事物映射到面向对象的程序设计中就是对象。
对象是面向对象程序设计中用来描述客观事物的程序单位。
客观世界中的许多对象,无论其属性还是其行为常常有许多共同性,抽象出这些对象的共同性便可以构成类。
所以,类是对象的抽象和归纳,对象是类的实例。
4.1.1 抽象原则所谓抽象(abstraction),就是从被研究对象中舍弃个别的、非本质的、或与研究主旨无关的次要特征,而抽取与研究工作有关的实质性内容加以考察,形成对所研究问题正确的、简明扼要的认识。
例如,“马”就是一个抽象的概念,实际上没有任何两匹马是完全相同的,但是我们舍弃了每匹马个体之间的差异,抽取其共同的、本质性的特征,就形成了“马”这个概念。
抽象是科学研究中经常使用的一种方法,是形成概念的必要手段。
在计算机软件开发领域,抽象原则的运用非常广泛,概括起来,可分为过程抽象和数据抽象两类。
1. 过程抽象过程抽象是指:软件开发者可以把任何一个完成确定功能的操作序列都看作是一个单一的实体,尽管它实际上可能是由一系列更低级的操作完成的。
运用过程抽象,软件开发者可以把一个复杂的功能分解为一些子功能(模块),如果子功能仍比较复杂,则可以进一步分解。
这使得开发者可以在不同的抽象层次上考虑问题,在较高层次上思考时可以不关心较低层次的实现细节。
面向过程的程序设计采用的是过程抽象方法。
使用过程抽象有利于控制、降低整个程序的复杂度,但是,这种方法允许在全系统的范围内进行功能的描述,本身自由度大,难于规范化和标准化,不易保证软件的质量,而且操作起来也有一定难度。
2. 数据抽象数据抽象把系统中需要处理的数据和施加于这些数据之上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。
java面向对象程序设计第2版第4章_类与对象
类与对象
4/4/2020
Power point 制作:耿祥义 张跃平
配合< Java面向对象程序设计>第2版 例子源代码一起使用
1
导读
主要内容 •类 • 对象 • 参数传值 • 对象组合 • static关键字 • this关键字 •包 • import语句 • jar文件 难点 • 参数传值与对象组合 • 包和import语句
那么存储文件的目录结构中必须包含有如下的结 构
…\tom\jiafei
如:
c:\1000\tom\jiafei
并且要将源文件编译得到的类的字节码文件保 存 在 目 录 c:\1000\tom\jiafei 中 ( 源 文 件 可 以 任 意 存放)。
4/4/2020
29
§4.8.3 运行有包名的主类
例4-7
4/4/2020
20
§4.6 static关键字 用static 修饰的变量 类变量
没有用static 修饰的变量 实例变量 方法声明中用static 修饰的方法—类方法
方法声明中不用static 修饰的方法—实例方法
4/4/2020
21
§4.6.1 实例变量和类变量的区别
如果类中有类变量,那么所有对象的这个 类变量都分配给相同的一处内存,改变其中一 个对象的这个类变量会影响其它对象的这个类 变量。也就是说对象共享类变量。
class 类名 { 类体的内容
}
4/4/2020
4
§4.2.1 类声明
◆类声明 :class 类名
如:class People”和“class 动物”称作类声明;“People”和 “动物”分别是类名。
第4章 类和对象
《Java面向对象程序设计案例教 程》
4.4 修饰符的使用 4.4.1 类的访问控制修饰符
(2)不使用public修饰的类仅允许在包内具有可见性,即只 能被同一个包中的类访问,不能被其他包中的类访问。 例如:
class Telphone { //成员变量; //方法();
《Java面向对象程序设计案例教 程》
4.4 修饰符的使用 4.4.1 类的访问控制修饰符
• 针对类的访问控制修饰符,Java仅能使用public(公有)和 默认这两种访问控制符。
(1)使用public修饰的公有类是类的访问控制级别中使用数 量较多的一种,它对所有类都是可见的,既可以被同一个包中 的类访问,也可以被其他包中的类访问。 例如:
《Java面向对象程序设计案例教 程》
4.5 基础类的使用
4.5.1 Math类的使用
Math类包含常用的数学运算的标准方法,如初等指数、对 数、平方根和三角函数等。Math类提供的方法都是静态的,可 以直接调用,无需实例化。
• Math类常用方法的名方法:
abs(double a) ceil(double a) floor(double a) round(double a) max(double a,double b) min(double a,double b) sin(double a) tan(double a) cos(double a) sqrt(double a) pow(double a,double b) random()
boolean after(Date when) 判断日期是否在指定日期之后,如果是则返回ture,否则返回false
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注:主类名是:“包名.主类名” 例4-11
2010-1-10
30
§4.9 import 语句
一个类可能需要另一个类声明的对象作为自 己的成员或方法中的局部变量,如果这两个类 在同一个包中,当然没有问题。 如果一个类想要使用的那个类和它不在一个 包中,要使用import语句完成使命。
2010-1-10
5
§4.2.2 类体
◆
类声明之后的一对大括号“{”,“}”以及它 们之间的内容称作类体,大括号之间的内容称作 类体的内容。 ◆类体的内容由两部分构:一部分是变量的声明, 用来刻画属性;另一部分是方法的定义,用来刻 画功能。
2010-1-10
6
§4.2.3 成员变量和局部变量
类体中变量声明部分所声明的变量被称作类的成员变量。在方法体中声明
2010-1-10
15
§4.4 参数传值
§4.4.1 基本数据类型参数的传值
对于基本数据类型的参数,向该参数传递
的值的级别不可以高于该参数的级别 。
例4-4
2010-1-10
16
§4.4.2 引用类型参数的传值
当参数是引用类型时,“传值”传递的是变 量中存放的“引用”,而不是变量所引用的实体。
例4-5
2010-1-10
11
§4.2.8 几个值得注意的问题
1.对成员变量的操作只能放在方法中,方 法可以对成员变量和该方法体中声明的局部变 量进行操作。 2.需要注意的是:实例方法既能对类变量操 作也能对实例变量操作,而类方法只能对类变 量进行操作。 3.一个类中的方法可以互相调用,实例方法 可以调用该类中的其它方法;类中的类方法只 能调用该类的类方法,不能调用实例方法。
2010-1-10
31
§4.9.1 引入类库中的类
如果用户需要类库中的类就必须使用import语 句,如:
import java.until.Date; 例4-12
2010-1-10
32
§4.9.2 引入自定义包中的类
用户程序可以使用tom.jiafei包中的类,即使 用非类库中有包名的类,也要使用import语句, 如:
2010-1-10
38
§4.10.3 友好变量和友好方法
当在另外一个类中用类Tom 创建了一个对象 后,如果这个类与Tom类在同一个包中,那么该 对象能访问自己的友好变量和友好方法。 在任何一个与Tom同一包中的类中,也可以通 过Tom类的类名访问Tom类的类友好成员变量和 类友好方法。
2010-1-10
2010-1-10 2
§4.1 编程语言的几个发展阶段
◆ 面向机器语言 ◆面向过程语言
◆面向对象语言
面向对象编程主要体现下列三个特性
◇封装性
◇继承 ◇多态
2010-1-10 3
§4.2 类
类是组成Java程序的基本要素。类封装了 一类对象的状态和方法。类是用来定义对象的 模板。 类的实现包括两部分:类声明和类体。基 本格式为:
2010-1-10 35
§4.10 访问权限
访问限制修饰符有 private、protected和 public,都是Java的关键字,用来修饰成员变 量或方法。
2010-1-10
36
§4.10.1 私有变量和私有方法
பைடு நூலகம்
用关键字private修饰的成员变量和方法称为私 有变量和私有方法。 对于私有成员变量或方法,只有在本类中创建 该类的对象时,这个对象才能访问自己的私有 成员变量和类中的私有方法。
5.编程风格
(1)一行只声明一个变量。 (2)变量的名字符合标识符规定。 (3)变量名字见名知意,避免容易混淆的变量名字。
2010-1-10 7
§4.2.4 方法 方法的定义包括两部分:方法声明和方法体。一般格 式为:
方法声明部分 { 方法体的内容 }
1.方法声明 方法声明包括方法名和方法的返回类型,如:
2010-1-10
24
§4.7.1 在构造方法中使用this
this关键字出现在类的构造方法中时,代 表使用该构造方法所创建的对象。
例4-10
2010-1-10
25
§4.7.2 在实例方法中使用this
当this关键字出现实例方法中时,代表正 在调用该方法的当前对象。 当实例成员变量在实例方法中出现时,默认 的格式是:this.成员变量。 当static成员变量在实例方法中出现时, 默认的格式是:类名.成员变量。
import tom.jiafei.*; 例4-13, 例4-14
2010-1-10
33
§4.9.3 使用无包名的类
如果一个类想使用无名包中的类,只要将这 个无包名的类的字节码和当前类保存在同一目 录中即可。
例4-15
2010-1-10
34
§4.9.4 避免类名混淆
1.区分无包名和有包名的类 如果想同时使用tom.jiafei包中的A类和无 名包中的A类,就不能省略包名,例如:
2010-1-10
26
§4.8 包
包是Java语言中有效地管理类的一个机制。 包名的目的是有效的区分名字相同的类。
2010-1-10
27
§4.8.1 包语句
通过关键字package声明包语句。 package语句作为Java源文件的第一条语句, 为该源文件中声明的类指定包名。 package语句的一般格式为:
例4-7
2010-1-10
20
§4.6 static关键字 用static 修饰的变量 类变量
没有用static 修饰的变量 实例变量 方法声明中用static 修饰的方法—类方法
方法声明中不用static 修饰的方法—实例方法
2010-1-10
21
§4.6.1 实例变量和类变量的区别
如果类中有类变量,那么所有对象的这个 类变量都分配给相同的一处内存,改变其中一 个对象的这个类变量会影响其它对象的这个类 变量。也就是说对象共享类变量。
A a1=new A(); tom.jiafei.A a2=new tom.jiafei.A();
2.区分有包名的类 如果一个源文件引入了两个包中同名的类, 那么在使用该类时,不允许省略包名,比如:
tom.jiafei.A bird=new tom.jiafei.A(); .A goat=new .A();
2010-1-10
9
§4.2.6 构造方法
构造方法是一种特殊方法,它的名字必须 与它所在的类的名字完全相同,而且没有类型, 构造方法也可以重载。
2010-1-10
10
§4.2.7 类方法和实例方法
方法声明时,方法类型前面不加关键字 static修饰的是实例方法、加static修饰的是 类方法(静态方法)。
例4-16,例4-17
2010-1-10
37
§4.10.2 共有变量和共有方法
用public修饰的成员变量和方法被称为共有变 量和共有方法 。 我们在任何一个类中用类Tom 创建了一个对 象后,该对象能访问自己的public变量和类中 的public方法(也可以通过类名来操作成员变 量、方法) 。
2010-1-10
18
§4.4.4 有理数的类封装
面向对象编程核心思想之一就是将数据和对 数据的操作封装在一起。。 1.Rational(有理数)类 2.用Rational对象做运算
Rational.java MainClass.java
2010-1-10
19
§4.5 对象的组合
一个类可以把对象作为自己的成员变量, 如果用这样的类创建对象,那么该对象中就会 有其它对象,也就是说该对象将其他对象作为 自己的组成部分,或者说该对象是由几个对象 组合而成。
package 包名;
2010-1-10
28
§4.8.2 有包名的类的存储目录
程序如果使用了包语句,例如:
package tom.jiafei;
那么存储文件的目录结构中必须包含有如下的结 构
…\tom\jiafei
如:
c:\1000\tom\jiafei
并且要将源文件编译得到的类的字节码文件保 存在目录c:\1000\tom\jiafei中(源文件可以任意 存放)。
2010-1-10 29
§4.8.3 运行有包名的主类
如果主类的包名是tom.jiafei,那么主类的字节 码一定存放在…\tom\jiefei目录中,运行时必须到 tom\jiefei的上一层(即tom的父目录)目录中去 运行主类。 假设tom\jiefei的上一层目录是1000,那么,必 须如下格式来运行:
float area() { … }
注:方法的返回类型、方法的参数、方法的名字
2.方法体 方法声明之后的一对大括号“{” ,“}”以及之间的内容 称作方法的方法体。方法体的内容包括局部变量的声明和Java 语句。
2010-1-10 8
§4.2.5 方法重载
方法重载的意思是:一个类中可以有多个方 法具有相同的名字,但这些方法的参数必须不 同,即或者是参数的个数不同,或者是参数的 类型不同。
《Java面向对象程序设计》 第4章
类与对象
Power point 制作:耿祥义 张跃平
配合< Java面向对象程序设计>例子源代码一起使用
2010-1-10 1
导读
主要内容 • 类 • 对象 • 参数传值 • 对象组合 • static关键字 • this关键字 • 包 • import语句 • jar文件 难点 • 参数传值与对象组合 • 包和import语句
39
§4.10.4
受保护的成员变量和方法
2010-1-10