java第四章(上)

合集下载

考试酷java第四章

考试酷java第四章

考试酷java第四章第四章1. 关于内部类,下列说法不正确的是()。

内部类不能有⾃⼰的成员⽅法和成员变量2. 有⼀个类B,下⾯为其构造⽅法的声明,正确的是()。

B(int x) {}3. 为AB类定义⼀个⽆返回值的⽅法f,使得使⽤类名就可以访问该⽅法,该⽅法头的形式为()static void f()4. 在Java语⾔中,哪⼀个包中的类是⾃动导⼊的?()/doc/63169f32b5daa58da0116c175f0e7cd184251802.html ng5. 定义外部类时不能⽤到的关键字是()。

protected6. 下列哪种类成员修饰符修饰的变量只能在本类中被访问?()private7. 定义⼀个公有double型常量PI,哪⼀条语句最好?()public final static double PI=3.14;8. 下⾯关于⽅法的说法,不正确的是()。

如果⼀个类定义了构造⽅法,也可以⽤该类的默认构造⽅法9. 下⾯关于类的说法,不正确的是()。

类就是对象10. 给出下⾯的程序代码:public class X4_1_3 {private float a;public static void m ( ){ }}如何使成员变量a被⽅法m( )访问()将private float a改为static float a11. 给出下⾯程序代码:byte[] a1, a2[];byte a3[][];byte[][] a4;下列数组操作语句中哪⼀个是不正确的?()a2 = a112. 下⾯代码运⾏后的输出结果为()。

public class X6_1_5 {public static void main(String[] args) {AB aa = new AB();AB bb;bb = aa;System.out.println(bb.equals(aa));}}class AB{ int x = 100; }true13. 设有下列数组定义语句:int a[] = {1, 2, 3};则对此语句的叙述错误的是()。

JAVA第四章课后习题解答

JAVA第四章课后习题解答
public Test4_8(){ super("简单的四则运算器"); setSize(300,400); setVisible(true); setLayout(new GridLayout(3,1));
txtFl1=new TextField(5); txtFl2=new TextField(5); txtFl3=new TextField(5); btn1=new Button("+"); btn2=new Button("-"); btn3=new Button("*"); btn4=new Button("÷");
public class Test4_9 extends Frame implements ActionListener{ Button btn; public Test4_9(){ super("弹出窗口练习"); setSize(300,200);
5
setVisible(true); setLayout(new BorderLayout());
TextField txtFl1,txtFl2,txtFl3;
2
Button btn; public Test4_6(){
super("简单加法运算器"); setSize(300,200); setVisible(true); setLayout(new FlowLayout());
txtFl1=new TextField(5); txtFl2=new TextField(5); txtFl3=new TextField(10); btn=new Button("=");

第四章Java面向对象特性课件

第四章Java面向对象特性课件
第4章 Java面向对象特性
对象的基本概念
面向对象程序语言三个关键特点: 封装 ( Encapsulation ) 多态 ( Polymorphism ) 继承 ( Inheritance )
1
第4章 Java面向对象特性
抽象数据类型
基本数据类型和聚集类型的变量与一些操作 (如+, -)之间不需特殊的联系。 在面向对象语言中,在数据类型的声明与操作
数据隐藏与封装举例
class Date{
private int day, month, year;
void setDate( int a, int b, int c){
day = a;
month = b;
year = c ;
}
}

Date d1;
d1=new Date( ); d1.setDate(30,9,2001);
4
第4章 Java面向对象特性
对象生命周期
创建对象 使用对象 清除不用的对象
5
第4章 Java面向对象特性
创建对象
创建对象的三个步骤: 声明 (Declaration ) 实例化(Instantiation) 初始化(Initialization)
例: Point origin_one ; origin_one = new Point(23, 94); Rectangle rect_one = new Rectangle(origin_one, 100, 200); Rectangle rect_two = new Rectangle(50, 100);
public void changeObjValue( PassTest ref){
ref.ptValue = 99.0f; }

Java基础教程(第3版)_第4章_类与对象

Java基础教程(第3版)_第4章_类与对象

如果有一个类是 public 类 , 那 么源文件的名字必须与这个类的 名字完全相同,扩展名是.java。编 译源文件将生成多个扩展名 为.class的字节码文件,每个字节 码文件的名字与源文件中对应的 类的名字相同,这些字节码文件 被存放在与源文件相同的目录中 。
2018/11/2
第 14 页
例子3 例子3中有两个Java源文件Example4_3.java和Rectangle.java,其 中Rectangle.java含有Rectangle类、Example4_3.java含有Circle类和 主类。程序运行效果如图4.5。
构造方法和对象的创建密切相关 。
2018/11/2
第 16 页
4.3.1 构造方法
构造方法是一种特殊方法,它的名字必须与它所在的类的名 字完全相同,而且没有类型。 允许一个类中编写若干个构造方法,但必须保证他们的参数 不同,即参数的个数不同,或者是参数的类型不同。
需要注意的是 ( 1) 如果类中没有编写构造方法, 系统会默认该类只有一个构造方法, 该默认的构造方法是无参数的,且方 法体中没有语句。 ( 2 )如果类里定义了一个或多个构 造方法,那么 Java 不提供默认的构造 方法 。
4.1.1
例子1 一个能输出圆的面积的 Java应用程序。
public class ComputerCircleArea { public static void main(String args[]) { double radius; //半径 double area; //面积 radius=163.16; area=3.14*radius *radius; //计算面积 System.out.printf("半径是%5.3f的园的面积:\n%5.3f\n",radius,area); } } 事实上, 如果其他Java应用程序也想计算圆的面积,同样需要知道计算 圆面积的算法,即也需要编写和这里同样多的代码。 现在提出如下问题: 能否将和圆有关的数据以及计算圆面积的代码进行封装,使得需要计 算圆面积的Java应用程序的主类无需编写计算面积的代码就可以计算出圆的 面积呢?

第四章 面向对象(上)

第四章 面向对象(上)

②构造方法时在产生对象时被Java系统自动调用的,我们不能在程序 中像调用其他方法一样去调用构造方法,但是可以在一个构造方法中调用其 他重载的构造方法,不是用构造方法,而是用this(参数列表)的形式,根 据其中的参数列表,选择相应的构造方法。 public class Person { String name; int age; public Person(String name) { =name; } public Person(String name,int age) { this(name); this.age=age; } }
2、类与对象
1)类的定义 类可以将数据和方法封装在一起,其中数据表示类的属性,方法表示类的 行为。定义类就是要定义类的属性与行为(方法)。 例子:TestPerson.java
2)对象的产生与使用
仅有设计图是无法实现汽车的功能的,只有产生了实际的汽车才行,同样 地,要实现类的属性和行为,必须创建具体的对象。要创建新的对象,需要使 用new关键字和想要创建对象的类名,如:Person p1=new Person();等号 左边以类名 Person 作为变量类型定义了一个变量 p1 ,来指向等号右边通过 new关键字创建的一个Person类的实例对象,变量p1就是对象的引用句柄, 对象的引用句柄是在栈中分配的一个变量,对象本身是在堆中分配的。 例子:TestPerson.java
知识点
1.面向对象的概念 2.类与对象 3.方法与方法的重载 4.构造方法 5.This引用句柄 6.垃圾回收 7.Static关键字 8.包 9.继承
1、面向对象的概念
1)面向过程 在早期出现的编程语言中,如C语言,要用来定义一个复杂的数据 类型,譬如 Windows 窗口时,可以用结构体来实现,只要在结构体 中使用那些基本的数据类型来定义窗口的大小、位置、颜色、背景等 属性就可以了。如果要对一个 Windows窗口进行各种操作,如隐藏 窗口、移动窗口、最小化窗口等,就要为每个操作都定义一个函数, 这 些 函 数 与 窗 口 本 身 的 定 义 没 有 任 何 关 系 , 如 HideWindow 、 MoveWindow、MinimizeWindow,这些函数都需要接收一个参数, 即要操作的窗口。这是一种谓语与宾语的关系,“隐藏”、“移动” 等都是谓语,“窗口”是宾语。程序重心集中在函数(即谓语)上。

第四章 面向对象(上)

第四章 面向对象(上)

4.3 类的域(属性)与方法(操作)

Java中类包括域和方法两部分

域:即属性也称数据成员,是事特物静态特征 的抽象,可以是基本数据类型的数据或数组, 也可以是某一个类的对象
方法:即操作也称成员方法,是事物动态特征 的抽象,用于处理该类的数据

类的基本定义格式如下:
[修饰符] class 类名 [extends 父类] [implements 接口名] { 成员变量基本数据类型或某个类的对象 成员方法函数 }

类与对象


对象是对客观事物的抽象 类是对对象的抽象,在语言中是一种抽象的数 据类型。 它们的关系是,对象是类的实例,类是对象的 模板。

对象引用


类类型变量称为引用变量,它们并不直接保留 对象,只是保留对象的地址,而不是拥有对象 本身,通过引用变量即可以得到一个对象。 所有对象总是且只能通过内存引用访问,这种 方式称为间接寻址。
第四章 类与对象(上)
主要内容
4.1 面向对象技术 4.2 抽象、 类、对象及引用 4.3 类的域与方法 4.4 对象 4.5 构造方法 4.6 类成员属性和方法的非访问修饰符 4.7 包(Package)
4.1 面向对象技术
4.1.1 面向过程与面向对象的比较 面向过程程序设计方法


过程化程序设计先确定算法,再确定数据结构 程序=算法+数据结构 缺点
类成员方法
[修饰符] 返回值类型 方法名(参数列表)
[throws 例外名1,例外名2,…] { 局部变量声明;
语句序列;
}
类成员方法

局部变量


局部变量在某一个语句(如for语句)或代码块 (如方法体)中声明,作用域是声明该变量的 语句或代码块 局部变量使用前必须初始化

Java面向对象程序设计第4章_类与对象

Java面向对象程序设计第4章_类与对象
例4722共52页46static关键字用static修饰的变量类变量没有用static修饰的变量实例变量方法声明中用static修饰的方法类方法方法声明中不用static修饰的方法实例方法23共52页461实例变量和类变量的区别如果类中有类变量那么所有对象的这个类变量都分配给相同的一处内存改变其中一个对象的这个类变量会影响其它对象的这个类变量
值的级别不可以高于该参数的级别 。
例4-4
public class Rect { //负责创建矩形对象的类 double width,height,area; void setWidth(double width) { if(width>0){ this.width=width; }} void setHeight(double height) { if(height>0){ this.height=height; } } double getWidth(){ return width; } double getHeight(){ return height; } double getArea(){ area=width*height; return area; }}
1.对成员变量的操作只能放在方法中,方 法可以对成员变量和该方法体中声明的局部变 量进行操作。 2.需要注意的是:实例方法既能对类变量操 作也能对实例变量操作,而类方法只能对类变 量进行操作。 3.一个类中的方法可以互相调用,实例方法 可以调用该类中的其它方法;类中的类方法只 能调用该类的类方法,不能调用实例方法。
给类命名时,遵守下列编程风格(这不是语法要求 的,但应当遵守):
◆ 1.如果类名使用拉丁字母,那么名字的首字母使用大写字母, 如。 2.类名最好容易识别、见名知意。当类名由几个“单词”复 合而成时,每个单词的首字母使用大写。

考试酷java 第四章

考试酷java 第四章

第四章1、关于内部类,下列说法不正确的就是( )。

内部类不能有自己的成员方法与成员变量2、有一个类B,下面为其构造方法的声明,正确的就是( )。

B(int x) {}3、为AB类定义一个无返回值的方法f,使得使用类名就可以访问该方法,该方法头的形式为( )static void f()4、在Java语言中,哪一个包中的类就是自动导入的?( )java、lang5、定义外部类时不能用到的关键字就是( )。

protected6、下列哪种类成员修饰符修饰的变量只能在本类中被访问?( )private7、定义一个公有double型常量PI,哪一条语句最好?( )public final static double PI=3、14;8、下面关于方法的说法,不正确的就是( )。

如果一个类定义了构造方法,也可以用该类的默认构造方法9、下面关于类的说法,不正确的就是( )。

类就就是对象10、给出下面的程序代码:public class X4_1_3 {private float a;public static void m ( ){ }}如何使成员变量a被方法m( )访问( )将private float a改为static float a11、给出下面程序代码:byte[] a1, a2[];byte a3[][];byte[][] a4;下列数组操作语句中哪一个就是不正确的?( )a2 = a112、下面代码运行后的输出结果为( )。

public class X6_1_5 {public static void main(String[] args) {AB aa = new AB();AB bb;bb = aa;System、out、println(bb、equals(aa));}}class AB{ int x = 100; }true13、设有下列数组定义语句:int a[] = {1, 2, 3};则对此语句的叙述错误的就是( )。

《Java知识点总结系列》第四章——函数篇

《Java知识点总结系列》第四章——函数篇

知识点预览函数的概念函数的语法函数的参数(形参实参)函数的返回值类型(voidreturn)函数的嵌套调用函数的递归调用函数的概念1. 什么是函数(方法过程)a) 代码冗余------->程序维护性差b) 函数、方法、过程等效函数的语法1. 形式a) 返回值类型函数名(函数参数1, 函数参数2){函数体}b) 函数的三要素:返回值类型函数名函数参数(函数声明)c) 返回值类型:运行完后,往外界返回数据d) 函数名:为所封装的代码起个名字e) 函数参数:封装的代码处理的数据往外界传入f) 函数体:经常需要重复利用的代码(函数实现)g) public static voidprint();//public static 避免类(Java)2. 使用a) 函数之间平级关系b) 定义在类中c) 避免多次书写重复代码------>解决代码冗余3. 函数使用中的注意事项a) 现实生活中例子-------->肯德基套餐b) 定义:在类代码中不能再次在其他函数中定义平级关系c) 使用了函数后程序流程变复杂(利用函数调用点进行分析)d) 使用了函数引入两种角色i. 函数提供者:封装经常需要重复使用代码的程序员(函数声明实现) ii. 函数使用者:用这个函数的人(调用)iii. 有的时候,一个人充当两种角色,有时,不同的人充当不同的角色iv. 这其中就需要函数提供者和函数调用者达成约定4. 使用函数的好处a) 提高代码的重用性b) 便于程序分工协作开发c) 便于代码的集中管理函数的参数1. 什么是函数的参数a) 函数使用者传入数据------>函数提供者b) 参数不是必需的c) 现实生活中类似场景-------->快递d) public static void print(introws, int cols ){} //rows 行cols 列形参需要传参e) 变量------>可变化的数据f) print(2, 3);//调用2,3实参--------->函数调用者真正调用传入的数据g) 合理定义形参-------->函数提供者定义函数时定义的变量2. 函数参数注意a) 函数的形式参数等同于局部变量函数的返回值1. 函数的返回值a) 示例:KFC 卖饭;包子b) 有返回值的例子------->加法运算2. void关键字3. 有返回值的函数与return关键字a) public static int add(inti, int j) {return}b) return:运算的结果返回给调用者4. return关键字的特殊应用a) return关键字的特殊用法public static void test(int i){if (i == 0){return;//return后没有任何内容//程序或者说函数到此结束,返回调用点,后面的代码不执行}System.out.println(“This is atest!”);}test(1);test(0);函数的嵌套调用1. 示例代码public staticvoid main(String[] args){System.out.println(“main 1”);test1(2);System.out.println(“main 2”);}public static void test1(int a){System.out.println(“test1” + a);test2(a);}public static void test2(intb){System.out.println(“test2” + b);}执行结果;main 1test1 2test2 2main 2函数的递归调用1. 递归调用(自己调用自己)2. 示例代码:public staticvoid main(String[] args){test();}//死递归public static void test(){System.out.pri ntln(“TestFunction”);test();}3. 处理递归------>收敛条件:满足特定条件,自己不会调用自己4. 示例代码public class Test{static int i = 3;//全局变量,在多个方法中调用public static voidmain(String[] args){test();}//有效递归public static void test(){//收敛条件if(i < 0){return;System.out.println(“Test Function”);i --;test();}}。

java题库第四章

java题库第四章

第四章4.3 习题解答1.问答题略.2.选择题4-1 Applet类是属于(B)包的。

A.java.awtB.java.appletC.java.iong4-2 下列关于Applet程序的描述中,错误的是(B)。

A.Applet程序的主类必须是Applet类的子类B.Applet程序的主类中应该有一个main()方法C.Applet不是完整的独立程序D.Acm的字节码文件必须嵌套在一个HTML文件中4-3 下列关于Applet程序的描述中,错误的是(D)。

A.将编辑好的Java源文件,使用javac命令生成字节码文件B.讲字节码文件嵌入HTML文件,并存放在一个WWW服务器中C.使用浏览器解释HTML文件中的标记D.使用编译器直接执行嵌套在HTML文件中的字节码文件4-4 在Applet类的主要方法中,用来实现初始化操作的是(A)。

A.init() B.stop() C.start() D.paint()4-5 下列关于HTML文件的描述,错误的是(C)。

A.HTML文件是使用一种超文本标记语言(HTML)书写的文件B.HTML文件中使用的标记通常是用一对尖括号括起来的,两个标记之间是正文内容C.HTML文件中没有单独出现的标记D.HTML中不区分大小写字母4-6 下列关于向Applet程序传递参数的描述中,错误的是(A)。

A.Applet程序可以通过命令获得外部参数B.Applet程序可以通过HTML文件获取外部参数C.使用Applet编辑的PARAM标记来实现D.Applet程序中使用getParameter()方法读取参数值4-7 下列关于字体的描述中,错误的是(C)。

A.Font类型提供了创建字体对象的方法B.字体风格(字型)使用了3个静态常量表示C.表示字型的字体风格只能单独使用,不可以组合D.字号表示字的大小,用点表示,一个点为1/72英寸4-8 下列用来获取当前颜色的方法是(B)。

JAVA程序设计教程第四章参考答案

JAVA程序设计教程第四章参考答案

import java.util.*;public class Person{private String name;private char sex;private int year,month;public Person( ){}public Person(String nm,char sx,int y,int m) {name=nm;sex=sx;year=y;month=m;}public void printPerson( ) {Calendar now=Calendar.getInstance();int age=now.get(Calendar.YEAR)-year;System.out.println("Name: "+name+",Sex: "+sex+", Age: "+age);}public static void main(String args[]){Person pe1=new Person("Tom",'m',1980,10);pe1.printPerson();}}2.public class Rectangle{double width,length,girth,area;public Rectangle(){};public Rectangle(double wd,double le) {width=wd;length=le;}public void setWidth(double wd) {width=wd;}public void setLength(double le) {length=le;}public double getWidth( ) {return width;}public double getLength( ) {return length;}public double girth(){return 2*(width+length);public double area(){return width*length;}public void printRectangle(){System.out.println("Width="+width+" ,Length="+length);}public static void main(String args[]){Rectangle re1=new Rectangle(10,20);Rectangle re2=new Rectangle();re2.setWidth(3);re2.setLength(4);re1.printRectangle();System.out.println("Girth="+re1.girth()+",Area="+re1.area());re2.printRectangle();System.out.println("Girth="+re2.girth()+",Area="+re2.area());}}3.public class Matrix{private int mx[][],m,n;public Matrix(int r,int c) {m=r;n=c;mx=new int[m][n];iniMatrix();}public Matrix(){m=3;n=3;mx=new int[3][3];iniMatrix();}public void iniMatrix(){int i,j;for(i=0;i<=m-1;i++)for(j=0;j<=n-1;j++)mx[i][j]=(int)(Math.random()*100);}public void tranMatrix(){int i,j,t;int mt[][]=new int[m][n];for(i=0;i<=m-1;i++)for(j=0;j<=n-1;j++)mt[i][j]=mx[i][j];t=m;m=n;n=t;mx=new int[m][n];for(i=0;i<=m-1;i++)for(j=0;j<=n-1;j++)mx[i][j]=mt[j][i];}public void printMatrix(){int i,j;for(i=0;i<=m-1;i++){for(j=0;j<=n-1;j++)System.out.print(" "+mx[i][j]);System.out.println();}}public void addMatrix(Matrix b) {int i,j;for(i=0;i<=m-1;i++)for(j=0;j<=n-1;j++)mx[i][j]=mx[i][j]+b.mx[i][j];}public static void main(String args[]){Matrix ma=new Matrix(4,3);Matrix mb=new Matrix(4,3);System.out.println("The matrix_A:");ma.printMatrix();System.out.println("The matrix_B:");mb.printMatrix();System.out.println("Matrix_A + Matrix_B:");ma.addMatrix(mb);ma.printMatrix();System.out.println("Transpose Matrix_B:");mb.tranMatrix();mb.printMatrix();}}4.public class Substring{public static void main(String args[]){String str1=new String("addActionListener");String str2=new String("Action");int n;n=str1.indexOf(str2);if(n>=0){System.out.println("String_2 is in String_1");System.out.println("The substring before String_2 is "+str1.substring(0,n));System.out.println("The substring behind String_2 is "+str1.substring(n+str2.length( )));}}}五、写出程序运行后的结果1.2.。

第4章 Java语言程序设计

第4章  Java语言程序设计

CommonEmployee类的所有属性为: class CommonEmployee extends Employee{ //定义子类:一般员工类 String employeeName; //姓名 int employeeNo; //个人编号 String employeeSex; //性别 //以上都是来自父类的继承属性 private double bonus; //奖金, 新定义的数据成员 …… } TimeWorker类的所有属性为: class TimeWorker extends Employee { ///定义子类:钟点工类 String employeeName; //姓名 int employeeNo; //个人编号 String employeeSex; //性别 //以上都是来自父类的继承属性 double ratePerHour; //每小时酬金,新定义的数据成员 double workHours; //当月工作小时数,新定义的数据成员 …… }
2.super关键字 super表示的是当前对象的直接父类对象,是当 前对象的直接父类对象的引用。所谓直接父类是相 对于当前对象的其他“祖先”而言的。 (1)调用父类的构造函数 super(name); //通过super()的调用,给父 类的数据成员赋初值 (2)调用父类的方法 s = super.toString();//调用父类的toString() 方法
(1)编译时多态 在编译阶段,具体调用哪个被重载的方法,编译 器会根据参数的不同来静态确定调用相应的方法。 (2)动态联编 程序中凡是使用父类对象的地方,都可以用子类 对象来代替。在程序运行期间可以通过引用子类的 实例来调用子类的方法。
4.2 继承机制
4.2.1继承的定义 定义派生类的一般格式为: class 派生类名 extends 基类名 { //派生类的属性和方法的定义 }; 其中: 基类名是已声明的类,派生类名是新生成的类名; extends说明了要构建一个新类,该类从已存在的 类派生而来。已存在的类成为基类或父类,而新类就 叫派生类或子类。

java PPT 教学4

java PPT 教学4

方法声明Method Declarations 4.3 方法声明
1、方法的声明 [修饰符] 返回值类型 方法名称([参数表]) { } 注意:若没有返回值,则指定为void void 修饰符为:public、 static 、private等. 例:static double area(double r) { } double s=Math.PI*r*r; return(s); // 方法体;
2、方法的调用 方法的定义是要说明方法的名称及 功能,而调用是实现方法的功能。调 用时,用实参(实元)替换方法中的 虚参(形参、哑元),实参的个数、 类型、顺序要与定义的虚参表一致。 (三一致原则)
例:无参数方法调用示例 import java.io.*; public class Test1 { public static void main(String[] args) { System.out.println(“无参调用”); printMethod( ); } static void printMethod( ) { for(int i=1;i<=10;i++) System.out.print("*"); } }
方法的递归调用
import java.io.*; public class Dgdy { public static void main(String[] args) { int n=20 ; for(int i=1; i<=n ; i++) System.out.print(fun(i)+” “); } static long fun(int n ) { if(n==1||n==2) return 1; else return(fun(n-1)+fun(n-2)); } }

《Java程序规范》PPT课件

《Java程序规范》PPT课件

实现注释的格式
程序可以有4种实现注释的风格:块(block)、 单行(single-line)、尾端(trailing)和行末(endof-line)。
package语句
Java用包来管理类名空间 程序中包含了package语句,则在运行时就必 须包含包名。 运行带有包的Java类:
第一种:在命令行下的path目录下输入字符 "java p1.p2.HelloWorldApp"。 第二种:在环境变量classpath中加入目录path, 则运行时在任何目录下输入"java p1.p2.HelloWorldApp"即可。
import语句
import语句标识,以通知编译器在编译时找到 相应的类文件。 ng 中的类不需要import。 classpath可以称为类路径,编译器和解释器 将从它指定的目录寻找类。
Classpath可以是文件夹也可以是zip或jar格式 的压缩文件。
源文件的命名规则
如果在源程序中包含有公共类的定义,则该源 文件名必须与该公共类的名字完全一致,字母 的大小写都必须一样。 一个java源程序中至多只能有一个公共类的定 义。
文件组织
一个文件由被空行分割而成的段落以及标识每 个段落的可选注释共同组成。超过2000行的 程序难以阅读,应该尽量避免。"Java源文件 范例"提供了一个布局合理的Java程序范例。
Java源文件
Java源文件还遵循以下规则:
- 开头注释 - 包和引入语句 - 类和接口声明
开头注释
所有的源文件都应该在开头有一个C语言风格 的注释,其中列出类名、版本信息、日期和版 权声明:
Java编程规范
软件开发是一个集体协作的过程,程序员之间 的代码是经常要进行交换阅读的,因此,java 源程序有一些约定成俗的命名规定,主要目的 是为了提高java程序的可读性。

自考教材《java语言程序设计(一)》第四章习题解答

自考教材《java语言程序设计(一)》第四章习题解答

第四章习题解答4.1举例说明如何声明、创建和初始化一维数组。

声明一维数组有两种格式:数组元素类型数组名[]; 或者数组元素类型[] 数组名例如String subStr1[]; int[] aa;创建一维数组有三种方法:先声明后创建先用前面的两种方式声明数组,然后使用:数组名字=new 数组元素类型[元素个数]; 创建例如int aa[];aa[]=new int[6];在声明时创建数组元素类型[] 数组名(或者是:数组元素类型数组名[])=new 数组元素类型[元素个数];例如int aa[]=new int[6];直接赋值创建例如int aa[]={2,3,4,5,6,7};4.2举例说明如何声明、创建和初始化多维数组。

声明二维数组:类型数组名[ ][ ] 类型[ ][ ]数组名类型[ ]数组名[ ]例如:声明Sting subStr[ ][ ]; String [ ] [ ] subStr; String[ ] subStr[ ];创建(1)String subStr[ ][ ]=new String[3][5];(直接分配,平衡数组)(2)String subStr[ ][ ]=new String[3][ ];(从最高维开始对每一维分配不等长空间,非平衡数组)subStr[0]=new String[4];//第1个子数组有4个元素subStr[1]=new String[5];//第2个子数组有5个元素subStr[2]=new String[2];//第3个子数组有2个元素(3)int[ ][ ] x={{5,6,7},{8,9,10,11},{18,19,10,10},{2,98}};//直接赋值创建初始化:数组创建后,如果没有初始化,则根据类型java会自动赋予默认值。

一般用循环语句对其动态初始化,例如,以下循环给三维整型数组aa初始化为三角数组。

int a[]=new int[5];int aaa[][][]=new int [4][3][3];for (int i=0;i<a.length;i++) {a[i]=i+1;}for (int i=0;i<aaa.length;i++) {for (int j=0;j<aaa[i].length;j++) {for (int k=0;k<aaa[i][j].length;k++){aaa[i][j][k]=(i+j+1)*(k+1);}}}4.3一个数组能够存储不同类型的元素吗?答:不能4.4 编写一个java程序,形成以下形式的二维数组,并输出。

自考Java程序语言设计(一)第四章面向对象程序设计讲义

自考Java程序语言设计(一)第四章面向对象程序设计讲义

第四章面向对象程序设计目录第一节类和对象第二节定义方法第三节静态成员第四节包装类01 类和对象类的定义类的定义也称为类的声明。

类中含有两部分元素,分别是数据成员变量和成员方法。

类定义的一般格式如下。

修饰符 class 类名 [extends父类名]{修饰符类型成员变量1;修饰符类型成员变量2;……修饰符类型成员方法 1 (参数列表){方法体}……}其中,class是关键字,表明其后定义的是一个类。

含有class的这一行称为类头,后面大括号括住的部分称为类体。

class前的修饰符可以有多个,用来限定所定义的类的使用方式。

类名是用户为该类所起的名字,它必须是一个合法的标识符,并尽量遵从命名约定。

extends是关键字。

如果所定义的类是从某一个父类派生而来,那么,父类的名字要写在extends之后。

类定义中的数据成员变量可以有多个。

成员变量前面的类型是该变量的类型;类中的成员方法也可以有多个,其前面的类型是方法返回值的类型。

如果没有返回值,则写void。

方法体是要执行的真正语句。

在方法体中还可以定义该方法内使用的局部变量,这些变量只在该方法内有效。

方法的参数列表中可以含有0 个或多个参数,每个参数的前面要指明该参数的类型。

类定义中的修饰符是访问权限修饰符,包括 public、private和protected,也可以不写,表示是默认修饰符。

它们既可以用来修饰类,又可以修饰类中的成员,修饰符决定所修饰成员在程序运行时被访问的方式。

具体来说,用public修饰的成员表示是公有的,也就是它可以被其他任何对象访问。

类中限定为private的成员只能被这个类本身访问,在类外不可见。

用 protected修饰的成员是受保护的,只可以被同一包及其子类的实例对象访问。

如果不写任何修饰符,则表明是默认的,相应的成员可以被所在包中的各类访问。

类的示例使用类可以构造所需的各种类型。

例如,程序中要说明日期这个类型,它含有3个成员变量:日、月、年,分别用3个整数来表示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

t2 0xDD
t1 0xAA m 18 height
11 22 33
above bottom height
Java具有“垃圾收集”机制,Java的运行环境周期 地检测某个实体是否已不再被任何对象所引用,如果 发现这样的实体,就释放实体占有的内存。因此, Java编程人员丌必时刻自己检查哪些对象应该释放内 存。 没有实体的对象称作空对象。空对象不能使用, 即不能让一个空对象去调用方法产生行为。假如程序 中使用了空对象,程序在运行时会出现异常: NullPointerException. 由亍对象是动态地分配实体,所以Java的编译器 对空对象丌做检查。因此,在编写程序时要避免使用 空对象。
2.方法体的构成 方法体的内容包括变量的定义和合法的Java语句, 在方法体中声明的变量以及方法的参数称作局部变量, 局部变量仅仅在该方法内有效。方法的参数在整个方 法内有效,方法内定义的局部变量从它定义的位置乊 后开始有效。局部变量的名字必须符合标识符规定, 遵守习惯:名字如果使用拉丁字母,首写字母使用小 写。如果由多个单词组成,从第2个单词开始的其它单 词的首写字母使用大写。
返回
4.9 this 关键字
this是Java的一个关键字,可以出现在实例方法 和构造方法中,但不可以出现在类方法中。 1.在构造方法中使用this this关键字可以出现在类的构造方法中,代表使用该 构造方法所创建的对象。 下述例子4-11中的构造方法中出现了this,表示该对 象在构造自己时调用了方法cry()。 2.在实例方法中使用this this关键字可以出现在类的实例方法中,代表使用该方 法的当前对象。
(2)引用类型参数的传值 Java的引用型数据包括我们以前学习过的 对象、数组以及后面将要学习的接口。当参数 是引用类型时,“传值”传递的是变量的引用 而不是变量所引用的实体。
传值
引用 引用类型变量
实体
引用 引用类型参数
图4.12 引用类型参数的传值
如果改变参数变量所引用的实体,就会导致原变量 的实体发生同样的变化,因为,两个引用型变量如果具 有同样的引用,就会用同样的实体。但是,改变参数的 引用不会影响向其传值的变量的引用。 下面的例子4-8 向一个方法的引用型参数传值。效果如图4-13
3.实例方法不类方法 除构造方法外,其他的方法可分为实例方法戒类 方法。方法声明中用关键字static修饰的称作类方法或 静态方法,不用static修饰的称作实例方法。一个类中 的方法可以互相调用:实例方法可以调用该类中实例 方法或类方法;类方法只能调用该类的类方法,不能 调用实例方法; A类中的max方法和getMaxSqrt方法是类方法;sum 和min方法是实例方法。
4.参数传值 当方法被调用时,如果方法有参数,参数必须要 实例化,即参数变量必须有具体的值。在Java中,方 法的所有参数都是“传值”的,也就是说,方法中参 数变量的值是调用者指定的值的拷贝。如果向方法的 int型参数x传递一个int值,那么参数x得到的值是传递 值的拷贝。方法如果改变参数的值,丌会影响向参数 “传值”的变量的值。 (1)基本数据类型参数的传值 下面的例子4-7中,向一个方法的基本型参数传值。 效果如图4-11
注意在上述例子4-8中,cat调用方法f把对象jerry的 引用“传值”给参数mouse后,对象jerry和对象mouse 就具有同样的成员变量,即同样实体。因此,jerry和 mouse就具有同样的功能,也就是说mouse调用方法产 生的行为和jerry调用同一方法产生的行为完全相同。 当对象mouse执行 mouse=null; 后,mouse就丌再有任 何实体,变成一个空对象,如果再执行: mouse.setLeg(100);就会引起NullPointerExcetion异常。 但是,jerry的引用没有发生任何变化,它依然引用着 原来的实体,仍然可以调用方法产生行为。 在下面的例子4-9中,“Cone”类在创建对象时,将一 个“Circle”对象的引用“传值”给“Cone”对象的 “bottom”。效果如图4-14
2.为声明的对象分配成员变量 使用new运算符和类的构造方法为声明的对象分 配成员变量,如果类中没有构造方法,系统会调用默 认的构造方法(默认的构造方法是无参数的,你一定 还记得构造方法的名字必须和类名相同这一规定), 上述的Rect类提供了一个构造方法,下面都是合法的 创建对象的语句: rectangleOne = new Rect(); 戒 rectangleOne = new Rect(10,20);
返回值类型 方法名称(类型 参数1,类型参数2,…) { 程序语句; //方法主体 return 表达式; //方法主体 } 1.方法声明和方法体 最基本的方法声明包括方法名和方法的返回类型,返回类型也简称作 方法的类型。如: float area() { …. }
方法的名字必须符合标识符规定。在给方法起名 字时应遵守以下习惯:名字如果使用拉丁字母,首写 字母使用小写。如果由多个单词组成,从第2个单词开 始的其它单词的首写字母使用大写。例如 float getTrangleArea() void setCircleRadius(double radius) 等。 方法声明之后的一对大括号“{”、“}”以及之间的 内容称作方法的方法体。 类中的方法必须要有方法体, 如果方法的类型是void类型,方法体中也可以不书写 任何语句。
2.常量 如果一个成员变量修饰为final,就是常量, 常量的名字习惯用大写字母,例如: final int MAX; 声明常量时必须初始化。对亍final修饰的 成员变量,对象可以操作使用,但不能做更改 操作。
4.7 方法
我们已经知道,类体内容可以有2种类型的成员: 成员变量和方法。其中一部分方法称作构造方法,供 类创建对象时使用,用来给出类所创建的对象的初始 状态。另一部分方法可分为实例方法和类方法,类所 创建的对象可以调用这些方法形成一定的算法,体现 对象具有某种功能。当对象调用方法时,方法中出现 的成员变量就是指分配给该对象的成员变量。对象不 可以调用构造方法,构造方法是专门用来创建对象的。 方法的定义包括两部分:方法声明和方法体。一般格 式为:
4.5 对象的引用与实体
我们已经知道,当用类创建一个对象时,成员变量被分 配内存空间,这些内存空间称做该对象的实体戒变量, 而对象中存放着引用,以确保这些变量由该对象操作 使用。因此,如果两个对象有相同的引用,那么就具 有同样的实体。 假如使用例子4-3“Ladder”类的构造方法创建了两个对 象 t1,t2。 t1=new Ladder(11,22,33); t2=new Ladder(6,12,18); 然后赋值 t1= t2;
创建对象就是指为它分配成员变量,并获得一个 引用,以确保这些成员变量由它来“操作管理”。为 对象分配成员变量后,内存模型由声明对象时的模型 图4-3,变成如图4-4所示,箭头示意对象可以操作这 些属亍自己的成员变量。
RectangleOne 0xAA11
10 20
sideA
sideB
图4-4 分配实体后的对象
实例方法可以操作成员变量,无论是实例变量戒 类变量;而类方法只能操作类变量不能操作实例变量, 也就是说类方法中丌能有操作实例变量的语句。二者 为何有着这样的区别呢? (1)实例方法必须通过对象来调用 (2)类方法可以通过类名调用 无论类方法或实例方法,当被调用执行时,方法中 的局部变量才被分配内存空间,方法调用完毕,局部 变量即刻释放所占的内存。 下面的例子4-6,通过类名调用类方法。
因此,类变量不仅可以通过某个对象访问也可 以直接通过类名访问。 实例变量仅仅是和相应的对象关联的变量, 也就是说,丌同对象的实例变量互丌相同,即 分配丌同的内存空间,改变其中一个对象的实 例变量丌会影响其它对象的这个实例变量。实 例变量必须通过对象访问。 下面例子4-4中,两个“ Lader”对象共享bottom。 效果如图4-9
sideA sideB
图4-5 创建多个对象
4.使用对象 对象丌仅可以操作自己的变量改变状态,而且还 拥有了使用创建它的那个类中的方法的能力,对象通 过使用这些方法可以产生一定的行为。 通过使用运算符“.”,对象可以实现对自己的变 量访问和方法的调用。 1)对象操作自己的变量(对象的属性) 2)对象调用类中的方法(对象的功能) 下面例4-3中,“Ladder”类创建了2个对象:ladderOne, ladderTwo。
Java程序设计基础
—— 贾骋
4.4 构造方法与对象的创建
类中有一部分方法称作构造方法,类创建 对象时需使用构造方法,以便给类所创建的对 象一个合理的初始状态。构造方法是一种特殊 方法,它的名字必须不它所在的类的名字完全 相同,并且丌返回任何数据类型,即它是void 型,但void必须省略丌写。 Java允许一个类中有若干个构造方法,但 这些构造方法的参数必须丌同,即戒者是参数 的个数丌同,戒者是参数的类型丌同。 下面的Rect类有两个构造方法:
class 类名称
{
访问权限类名称(类型1 参数1,类型2 参数2,…) { 程序语句; … // 构造方法没有返回值 } }
当使用一个类创建了一个对象时,我们也 说给出了这个类的一个实例。创建一个对象包 括对象的声明和为对象分配成员变量两个步骤。 1.对象的声明。 一般格式为: 类的名字 对象名字; 如: Rect rectangleOne;
4.8 方法重载
方法重载是指一个类中可以有多个方法具有相同 的名字,但这些方法的参数必须不同,即或者是参数 的个数不同,或者是参数的类型不同。方法的返回类 型和参数的名字不参与比较,也就是说,如果两个方 法的名字相同,即使类型不同,也必须保证参数不同。 下面例4-10Area类中getArea方法是一个重载方法。 效果如图4-15
4.6成员变量
用关键字static修饰的成员变量称作静态变量戒类 变量, 而没有使用static修饰的成员变量称作实例变量。 例如,下述A类中,x是实例变量,而y是类变量。 class A { float x; //实例变量 static int y; //类变量 } 类变量是不类相关联的数据变量,也就是说,类 变量是和该类所创建的所有对象相关联的变量,改变 其中一个对象的这个类变量就同时改变了其它对象的 这个类变量。
相关文档
最新文档