文档库 最新最全的文档下载
当前位置:文档库 › JAVA面向对象02_对象和类(下)_数组

JAVA面向对象02_对象和类(下)_数组

JAVA面向对象02_对象和类(下)_数组
JAVA面向对象02_对象和类(下)_数组

1. 对象和类(下)

1.1. 方法的重载

1.1.1. 方法的签名

方法的签名包含如下两个方面:方法名和参数列表。

Java语法规定,一个类中不可以有两个方法签名完全相同的方法,即:一个类中不可以有两个方法的方法名和参数列表都完全相同,但是,如果一个类的两个方法只是方法名相同而参数列表不同,是可以的。下面看如下代码:

1.public class Cashier {

2.public boolean pay(double money){…}

3.public boolean pay(double money){…}

4.}

分析如上代码,结论会出现编译错误,因为在同一个类Cashier中的两个方法,签名相同,这在java语法中是不允许出现的。而下面的代码就是正确的:

1.public class Cashier {

2.public boolean pay(double money){…}

3.public boolean pay(String cardId,

4. String cardPwd){…}

5.}

可以看到上面的代码,在类Cashier中,虽然pay方法名相同,但是参数列表不同,这样是被允许的,可以正常编译通过。

1.1.

2. 方法重载及其意义

假想收款窗口的设计,可以采用两种方式:

1.开设三个窗口,分别用来接收现金,信用卡和支票的交付方式(分别在窗口上标明),

用户根据需要选择窗口,并投入指定的物件,如图–8所示:

图- 8

1.开设一个窗口,标为“收款”,可以接收现金,信用卡和支票三种物件。该窗口可以

按照输入的不同物件实施不同的操作。例如,如果输入的是现金则按现金支付,如果输入的是信用卡则按信用卡支付,以此类推,如图–9所示。

图- 9

通过对如上两种方式的分析,请问:哪种方式更好一些呢?常规情况下认为,相对于A的方式,B的设计可以降低用户的负担,用户去付款时不需要去找对应的窗口,只需要到收款窗口就可以了,减少了用户使用时的错误,B的设计更加优雅一些。

按B的设计方式即为方法重载,在Java语言中,允许多个方法的名称相同,但参数列表不同,此种方式称为方法的重载(overload)。

下面的代码即为收款窗口的两种设计方式,可以看出B方式即为方法的重载方式。

1.public class PayMoney { //----------A方式

2.…payByCash(double money){}

3.…payByCard(String cardId,StringcardPwd){}

4.…payByCheck(String compayName,double money){}

5.}

6.public class PayMoney { //-----------B方式

7.…pay(double money){}

8.…pay(String cardId,StringcardPwd){}

9.…pay(String compayName,double money){}

10.}

通过如上的代码可以看出,按照A的方式若想付款,需在三个方法之中进行选择,不同的方法即为不同的付款方式,而B的方式即为重载方式,若想付款,只需要找到pay方法,只不过,传递不同的参数即可。

1.1.3. 编译时根据签名绑定调用方法

当调用重载的方法时,编译器会在编译时根据签名的不同来绑定调用不同的方法,可以把重载的方法看成是完全不同的方法,只不过,恰好方法名称相同而已。请看下面的两组代码:

重载方法:

1.…pay(double money){}

2.…pay(String cardId,StringcardPwd){}

3.…pay(String compayName,double money){}

调用方法:(只管调用即可,由编译器来根据签名绑定不同的方法)

1.pay(8888.88);

2.pay(“12345678”,”666666”);

3.pay(“tarena”,8888.88);

1.2. 构造方法

1.2.1. 构造方法语法结构

构造方法是在类中定义的方法,但不同于其他的方法,构造方法的定义有如下两点规则:

1.构造方法的名称必须与类名相同。

2.构造方法没有返回值,但也不能写void。

如下所示为构造方法的语法:

1.【访问修饰符】类名(){

2. //构造方法体

3.}

1.2.2. 通过构造方法初始化成员变量

Java语言中的构造方法常常用于实现对对象成员变量的初始化,如下代码展示了构造方法的使用。

1.class Cell {

2.int row ;

3.int col ;

4.public Cell (int row1 , int col1){

5. row = row1;

6.col = col1;

7.}

8.}

9.class TestCell {

10.public static void main(String args[]){

11.Cell c1 =new Cell(15,6);

12. printCell(c1);

13.}

14.}

可以看出,在创建对象时,构造方法写在new关键字之后,可以理解为:“new”创建了对象,而构造方法对该对象进行了初始化。

1.2.3. this关键字的使用

在上面的代码中,为该构造方法定义了两个参数,分别表示行和列。为了区分于Cell类的成员变量row和col,为两个参数分别取名为row1和col1,这显然不是一种好方法,因为,我们会希望依然使用变量row来表示行,col来表示列,而不是row1和col1。为了解决这个问题,需要使用到this关键字。

this关键字用在方法体中,用于指代调用该方法的当前对象,简单的说:哪个对象调用方法,this指的就是哪个对象。严格来讲,在方法中需要通过this关键字指明当前对象。请看如下代码:

1.public void drop (){

2.this.row ++;

3.}

上面的drop()方法可以解释为:将调用该方法对象的成员变量的row加1。很多时候,为了方便起见,在没有歧义的情况下可以省略this,如下所示:

1.public void drop (){

2.row ++;

3.}

在构造方法中,用来初始化成员变量的参数一般和成员变量取相同的名字,这样会有利于代码的可读性,但此处就必须通过this关键字来区分成员变量和参数了,而不能省略this了,如下代码所示:

1.public Cell (int row , int col ){

2.this. row = row ;

3.this. col = col ;

4.}

如上的代码中,this.row表示的为Cell类的成员变量,而row为参数变量。

1.2.4. 默认的构造方法

JAVA语法规定,任何一个类都必须含有构造方法,假如源程序中没有定义,则编译器在编译时将为其添加一个无参的空构造方法(此方法称之为“默认的构造方法”)。

例如:先前所定义的Cell类源文件中没有写构造方法,但也可以编译成功,因为在编译时由编译器为其添加了如下的构造方法:

1.Cell(){}

但是有一个问题需要注意,当类定义了构造方法后,Java编译器将不再添加默认的构造方法,看如下代码:

1.class Cell{

2. int row;

3.int col;

4. Cell (int row,int col){

5.this.row = row;

6.this.col = col;

7.}

8.}

9.public class CellGame {

10.public static void main(String[] args){

11. Cell cell =new Cell(); //编译错误

12.}

13.}

可以看出,在创建Cell类对象时,发生了一个编译期错误,那是因为,在Cell 类中已经定义了Cell(int,int)的构造方法,此时,编译器将不会再提供无参的构造方法了。所以此处发生了编译期错误。

1.2.5. 构造方法的重载

很多时候,为了使用的方便,可以对一个类定义多个构造方法,这些构造方法都有相同的名称(类名),只是方法的参数不同,称之为构造方法的重载。

在创建对象时,Java编译器会根据不同的参数调用来不同构造方法。看如下的几组构造方法的声明及调用。

1.声明:

2.Cell ( int row , int col ){

3.}

4.调用:

5.Cell c1 =new Cell (5,6);

6.

7.声明:

8.Cell (){

9.}

10.调用:

11.Cell c1 =new Cell ();

12.

13.声明:

14.Cell (int row){

15.this(row , row );

16.}

17.调用:

18.Cell c1 =new Cell (5);

可以注意到,在第三段声明的构造方法中,使用了this关键字,在构造方法中可以通过this关键字来调用另外的一个重载的构造方法。this(row,row)调用了第一段声明Cell(int row, int col)构造方法。

2. 数组

2.1. 引用类型数组

2.1.1. 数组是对象

在java中,数组属于引用数据类型,数组对象存放在堆中存储,数组变量属于引用类型,存储数组对象的地址信息,指向数组对象。而数组的元素可以看成数组对象的成员变量(只不过类型全部相同)。看如下代码:

1.int[] arr =new int [3]

内存的分配如下图–4所示:

图- 4

说明:在堆内存中分配了数组对象,分配三个int型空间,并将每个元素赋初始值为0,栈中存储对堆中数据的引用,即堆中int数组的首地址。

2.1.2. 引用类型数组的声明

刚刚声明的数组为基本类型数组,除了基本类型数组以外,也可以声明引用类型数组。所谓引用类型数组,即数组元素的类型不是基本类型(int,char,float。。) , 而是引用类型,看如下代码:

1.Cell [] cells =new Cell [4];

其内存分配如下图–5所示:

图- 5

从上图示可以看出,new Cell[4]实际是分配了4个空间用于存放4个Cell类型的引用,并赋初始值为null,而并非是分配了4个Cell类型的对象。

2.1.

3. 引用类型数组的初始化

前面所介绍的基本类型数组的默认值同成员变量默认的初始值(如int类型的数组初始值为0),而引用类型数组的默认初始值都是null。

如果希望每一个元素都指向具体的对象,则需要针对每一个数组元素进行“new”运算。与基本类型数组一样,也可以采用静态初始化的方式进行初始化操作。如下代码所示:

1.Cell[] cells =new Cell[4];

2.cells[0]=new Cell(0,4);

3.cells[1]=new Cell(1,3);

4.cells[2]=new Cell(1,4);

5.cells[3]=new Cell(1,5);

等价于:

1.Cell[] cells =new Cell[]{

2.new Cell(0,4),

3.new Cell(1,3),

4.new Cell(1,4),

5.new Cell(1,5)

6.};

如上数组内存分配图如下图–6 所示:

图- 6

2.1.4. 数组的类型是基本类型数组

前面所介绍的数组的元素或为基本类型int,或为引用类型Cell,而数组本身也是一种数据类型,当然也可以作为数组的元素。看下面的代码:

1.int [][] arr =new int[3][];

2.arr[0]=new int[2];

3.arr[1]=new int[3];

4.arr[2]=new int[2];

5.arr[1][1]=100;

分析如上代码可以看出,变量arr指向一个数组,该数组有三个元素,每个元素都是int类型数组,长度分别为2,3,2,arr[1][1]=100表示将arr数组中的第2个元素(数组)的第2个元素赋值为100,其内存分配如图–7所示:

图- 7

对于元素为数组的数组,如果每个数组元素的长度相同,也可以采用如下的方式声明:

1.int row =3, col =4;

2.int[][] arr =new int[row][col];

3.for(int i =0; i < row; i++){

4.for(int j =0; j < col; j++){

5.arr[i][j]= i * j;

6.}

7.}

如上形式的数组可以用来表示类似“矩阵”这样的数据结构(3行4列),如下图-8所示,arr[i][j] 可以认为访问行号为i,列号为j的那个元素。在其他的一些语言中有专门表示这样结构的所谓二维数组;但严格的讲,Java语言中没有真正的二维数组。

第4章-Java语言与面向对象作业习题与答案

第4章 Java语言与面向对象作业习题与答案 一、简答题 1.什么是对象?什么是类? 对象是一种抽象数据类型。它包含了事物的静态特征(属性)和动态特征(行为)两大特征。 类是一组同种对象的集合与抽象。即是具有相同属性和方法的一组对象集合。 2.Java语言的单继承是指什么? 一个类可以派生出多个子类,但子类只允许有一个父类,而不允许存在多个父类。 3.在一个共有类中的数据成员及方法成员的访问控制符为缺省,则这个类可供什么样的包引用? 当一个类的访问控制符为public共有时,表明这个类作为整体对其它类是可见和可引用的;但其数据成员和方法成员访问控制符为缺省时,它们只能被包中类(含当前类)引用。 4.抽象类的用途 (1)设计在更高的层次上进行,不考虑具体对象,从而大大简化了处理问题的复杂性; (2)设计出的类也具有更加良好的可扩展性。 5.什么是非静态的成员变量? 非静态成员即为实例成员变量(没有加static修饰的变量)。 6.异常Exception和错误Error有什么不同?Java如何处理它们? 答:错误通常是指程序本身存在非法情形,常常是因为代码存在问题而引起的,如造成系统崩溃、虚拟机粗错、动态失败等,这一类错误无法恢复或不可能捕获,并将导致应用程序中断。 异常表示另外一种“非同寻常”的错误。这种错误通常是不可预测,但可以被捕获且可以恢复。常见的异常情况包括存不足、找不到所需文件等。 对于错误,编程人员可以通过对程序进行更仔细的检查,以避免这种错误。 对于异常,可以使用捕获机制进行捕获,再编写出相应的处理程序。 7.简单述Java的异常处理机制。 答:Java采取“抛出—捕获”的方式,一旦一个异常想象产生,Runnable环境和应用程序会抛出各种标准类型和自己定义的异常,系统就可以捕获这些异常,并一定有相应的机制来处理它,确保不会产生司机、死循环或其它对操作系统的损害,从而保证了整个程序运行的安全性。 8.简单述throw语句和throws关键字之间的差别。 答:throw语句是在一个方法中用来直接抛出异常对象,其格式是: throw 异常对象; throws关键字是用一个方法声明首部,用来指出这个方法中可能产生若干种异常,其格式:[方法修饰符] 返回类型方法名(参数表)throws 异常类型表 { /*方法体*/ } 二、填空题 1.所有Java应用程序都必须包含的一个类方法是 main() 。 2.面向对象程序设计语言的三种重要特性是封装性、继承性和多态性。

最新JAVA语言与面向对象程序设计课后习题答案

1 第1章面向对象软件开发概述 2 1.简述面向过程问题求解和面向对象问题求解的异同。试列举出面向对象和面向3 过程的编程语言各两种。 4 答:面向过程问题求解,以具体的解题过程为研究和实现的主体,其思维特点更5 接近于计算机;面向对象的问题求解,则是以“对象”为主体,“对象”是现实世6 界的实体或概念在计算机逻辑中的抽象表示,更接近于人的思维特点。 7 面向过程的编程语言:C,Pascal, Foratn。 8 面向对象的编程语言:C++, Java,C#。 9 2.简述对象、类和实体及它们之间的相互关系。尝试从日常接触到的人或物中抽10 象出对象的概念。 11 答:面向对象技术中的对象就是现实世界中某个具体的物理实体在计算机逻辑中12 的映射和体现。类是同种对象的集合与抽象。类是一种抽象的数据类型,它是所有13 具有一定共性的对象的抽象,而属于类的某一个对象则被称为是类的一个实例,是14 类的一次实例化的结果。如果类是抽象的概念,如“电视机”,那么对象就是某一15 个具体的电视机,如“我家那台电视机”。 16 3.对象有哪些属性?什么是状态?什么是行为?二者之间有何关系?设有对象“学17 生”,试为这个对象设计状态与行为。 18

答:对象都具有状态和行为。 19 对象的状态又称为对象的静态属性,主要指对象内部所包含的各种信息,也就是20 变量。每个对象个体都具有自己专有的内部变量,这些变量的值标明了对象所处的21 状态。 22 行为又称为对象的操作,它主要表述对象的动态属性,操作的作用是设置或改变23 对象的状态。 24 学生的状态:姓名、性别、年龄、所在学校、所在系别、通讯地址、电话号码、25 入学成绩等; 26 学生的行为:自我介绍、入学注册、选课、参加比赛等。 27 4.对象间有哪三种关系?对象“班级”与对象“学生”是什么关系?对象“学生” 28 与对象“大学生”是什么关系? 29 答:对象间可能存在的关系有三种:包含、继承和关联。 30 对象“班级”与对象“学生”是包含关系。 31 对象“学生”与对象“大学生”是继承关系。 32 5.有人说“父母”和“子女”之间是继承的关系。这种说法是否正确?为什么? 33 答:“父母”和“子女”之间不是面向对象意义上的“继承”关系。因为这里的34

java面向对象精华总结教学文案

j a v a面向对象精华总 结

Java面向对象精华总结 面向对象是相对面向过程而言的,面向过程强调的是功能行为,面向对象是将功能封装进对象,强调具备了功能的对象。 面试官若问什么是面向对象(开放式问题,回答必须有自己的体会): 1、面向对象是一种思想,可以使复杂的问题简单化,可以使我们从执行者变成 指挥者 2、结合实际场景举个例子说明:面试官就是在用面向对象的思想思考问题,公 司里面现在有招人的需求,说明公司现在的业务量比较大,代表着公司在蓬勃发展,你需要找一些具有专业编程经验的人来帮你完成公司的工作,我就是那个对象,我具备专业编程的功能,你就是在指挥我做事情,就是使用我的功能,来为公司创造效益。【万物皆对象】 面向对象三大特征:封装、继承、多态 类和对象的关系: 类:对现实生活中事物的描述 对象:就是这类事物,实实在在存在个体 描述事物就是描述事物的属性(对应类中变量)和行为(对应类中方法),属性和行为共同称为类的成员(成员变量和成员方法) 成员变量作用于整个类中,局部变量作用于函数中,或者语句中 成员变量在堆内存中,因为对象的存在,才在内存中存在,局部变量:存在栈内存中 封装(Encapsulation):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式

好处:将变化隔离、便于使用、提高重用性、提高安全性 封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问 private(私有):权限修饰符,用于修饰类中的成员(成员变量,成员函数),私有只在本类中有效。 static用于修饰成员(成员变量和成员函数) 被修饰的成员:随着类的加载而加载,优先于对象存在,被所有对象所共享,可以直接被类名调用。类名.静态成员【方法区、共享区、数据区】----存放类中的方法和共享数据。 什么时候定义静态函数:当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的,用类名直接调用。 Eg:获取数组的最大值 class ArrayTool { public static void main(String[] args) { int[] arr={5,8,4,1,3,5,8,77,55,99}; int max=GetMax.getMax(arr); System.out.println("max="+max); } } class GetMax { public static int getMax(int[] arr) { int max=0; for(int x=0;xarr[max]) max=x; } return arr[max];

Java面向对象程序设计_习题解答

Java面向对象程序设计 清华大学出版社 (编著耿祥义张跃平) 习题解答 建议使用文档结构图 (选择Word菜单→视图→文档结构图)

习题1 1.James Gosling 2. (1)使用一个文本编辑器编写源文件。 (2)使用Java编译器(javac.exe)编译Java源程序,得到字节码文件。 (3)使用J ava解释器(java.exe)运行Java程序 3.Java的源文件是由若干个书写形式互相独立的类组成的。 应用程序中可以没有public类,若有的话至多可以有一个public类。 4.系统环境path D\jdk\bin; 系统环境classpath D\jdk\jre\lib\rt.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" https://www.wendangku.net/doc/733476590.html,ng.NoSuchMethodError: main 执行java xiti8得到的错误提示 Exception in thread "main" https://www.wendangku.net/doc/733476590.html,ng.NoClassDefFoundError: xiti8 (wrong name: Xiti8) 执行java Xiti8.class得到的错误提示 Exception in thread "main" https://www.wendangku.net/doc/733476590.html,ng.NoClassDefFoundError: Xiti8/class 执行java Xiti8得到的输出结果 I'm glad to meet you 9.属于操作题,解答略。

JAVA面向对象基础测试题

读书破万卷下笔如有神 JAVA面向对象基础测试题 提示:本题为第一阶段,JAVA面向对象基础部分练习题,包括对象,类,继承,封装,多态,接口,内部类等等,java核心基础,适合初学者对面向对象基础的知识进行测试,以便查漏补缺。 1. 程序执行的结果是:()。 01 public class Point{ 02 int y = 7; 03 public void step(int y) { 04 y += y; 05 System.out.println(y); 06 读书破万卷下笔如有神 } 07 public static void main(String[] args) {

08 Point p = new Point(); 09 p.step(10); 10 } 11 } A.14 B.20 C.10 D.17 正确答案:B解析: 2. 读书破万卷下笔如有神 程序的执行结果是:()。 01 public class Question { 02 private int num; 03 public static void main(String [] args){ 04

Question q = new Question(); 05 q.num=13; 06 update(q); 07 System.out.println(q.num); 08 } 读书破万卷下笔如有神 09 public static void update(Question q){ 10 q.num=9; 11 } 12 } A.13 B.9 C.0 D.4

正确答案:B解析: 3. 程序执行的结果是:()。 01 public class Answer { 读书破万卷下笔如有神 02 public static void main(String[] args) { 03 int score = 20; 04 Answer ans= new Answer(); 05 ans.add(score); 06 System.out.println( main:score = + score); 07 } 08 void add(int score) { 09 System.out.println( add:score= + score++); 10

java的心得体会[工作范文]

java的心得体会 篇一:java初学者学习心得 学习Java心得体会 学习了一学期的Java课程,觉得是该总结自己的心得体会了。开始学习任何一门课,兴趣最重要。一直觉得自己在学计算机编程语言,学习了很多,但每门语言都停留在知识边缘地带,都没深入到它们的精华部分,对它们的精华部分知之甚少,于是趁学校开设这门课,并且有自己的老师讲解,还有了上机的机会,比自己自学省事多了,于是鼓足信心,开始了漫长的java征途。 还记得我编写的第一个经典程序“hello Word”。从那时起我已开始走进Java的世界。当时自己不是很理解为什么main方法一定要这样来定义public static void main,能不能不这样写?问了好多同学,他们告诉我的答案是一样的“java本身要求就是这样子的”,但我自己不甘心,就进行了下面的好多操作:把main改个名字运行一下,看看报什么错误,然后根据出错信息进行分析;把main的public 取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main方法是否一定要传一个String[]数组的,把String[]改掉,改成int[],或者String试试看;不知道是否必须写args参数名称的,也可以把args改成别的名字,

看看运行结果如何。结果把Hello World程序反复改了七八次,不断运行,分析运行结果,最后就彻底明白为什么了main方法是这样定义的了。接着在以后的学习中我也采用这样的方法解决问题,却发现自己的速度比别人慢了好多,我就把自己的课余时间也分一部分给了java。 因为基础是最重要的,只有基础牢固才有可能对后面的学习有更加深刻的认识! 学习一门新的语言,参考书是离不开的。听老师说订的教材偏难,不适合我们初学者,于是我在图书馆借了参考书(一本篇幅较短的入门书来学习那些最简单、最基本的东西,包括学习Java语法等)。同时,对一个最简单的程序也应该多去调试,多想想如果改动一下会出现什么结果?为什么必须那样写?多去想想这些问题然后去操作,会让你有更多的收获。这样反复地思考是很有用的。 在学习Java的语法时,Java的语法是类似c语言的,所以学习的比较轻松。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要用,怎么用,和同学一起讨论了好久才得以解决。 在学习Java的面向对象的编程语言的特性。比如继承,构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。对于一个没有面向对象语言背景的人来说,

Java面向对象编程练习题精编

J a v a面向对象编程练习 题精编 Lele was written in 2021

Java面向对象编程练习题 专题1 初识Java 一、填空题 1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是(SE)、( EE )、( ME )。 2.环境变量的设置,若JDK安装在“D:\JDK”,则应设置 Path为()、classpath为()。 3.Java源文件的扩展名为(),用Javac编译Java源文件,得到的字节码文件的扩展名为()。 4.如果Java源文件中有多个类,那么只能有一个类是()类。 5.Java程序可以分成两类,即()和()。 二、选择题 1.作为Java应用程序入口的main方法,其声明格式是(B )A.public static int main(String args[]) B.public static void main(String args[]) C.public void main(String args[]) D.public int main(String args[]) 2.下面命令正确的是(B) A.java B.java AppFirst

C.java D.javac AppFirst 3.设有一个Java小程序,源程序名为,其class文件为,则 运行该小程序的命令为(B) A.java FirstApplet B.javac C.appletviewer D.appletviewer 4.JDK安装完成后,主要的命令如javac、java等,都存放在 根目录的(A)文件夹下。 A.bin B.jre C.include D.doc 5.Java语言是一种 D 语言。 A.机器B.汇编C.面向过程的D.面向对象的 6、Java程序的最基本组成单位是 D 。 A.函数B.过程C.变量 D.类 三、简答题(十分重要) 1.Java语言有哪些特点 跨平台、一种简单、面向对象、分布式、半编译半解释、健 壮、安全、多线程 2.JDK安装完成后,如何设置环境变量 Path 配置:

java面向对象考试题-练习版

JAVA面向对象结课考试题 班级_______ 姓名________得分___________ 1下列程序编译或运行的结果是。() public static void main(String args[]){ int a = 10, b,c; if(a>50){ b=9; } c = b + a; System.out.println(c); } A.10 B. 19 C.9 D.编译错误 2、已知’1’的ascii码值为31下列语句片段中,four 的值为( ) int three = 3; char one = ‘1’; char four = (char)(three+one); A. 3 B. 1 C. 31 D. 4 3、下列代码的运行结果是( ) public static void main(String[] args){ int a = 7; System.out.println(a%3); } A 6 B 2 C 5 D 1 4、以下程序的输出结果为( )。 public static void main(String[]args) { int x = 1, y = 1, z =1; if(x--==1&&y--==1||z--==1) System.out.println(“x=” +x+”,y=” +y+”,z=” +z); } A x=0, y=1,z=1 B x=0,y=2,z=2 C x=0,y=2,z=1 D x=0,y=0,z=1 5、下列代码段编译和运行的结果是() public static void main(String args[]){ String str = “null”; if(str==null){ System.out.println(“null”); }else if(str.length()==0){ System.out.println(“zero”); }else { System.out.println(“some”); } } A null B zero C some D 编译错误6、下列代码的运行结果是(): public class Animal{ public String noise(){ return “peep”; } public static void main(String[] args){ Animal animal = new Dog(); Cat cat = (Cat)animal; System.out.println(cat.noise()); } } class Dog extends Animal{ public String noise(){ return “bark”; } } class Cat extends Animal{ public String noise(){ return “meow”; } } A. peep B.bark C.meow D.编译错误 E.抛出运行时异常 7、关于下列代码说法正确的是( ) public class Foo{ public int add(int a,int b){ return a+b; } public static void main(String[] args){ Foo foo= null; System.out.println(foo.add(10,20)); } } A. 编译错误 B. 正常运行,但无结果输出 C.30 D NullPointerException 8、程序的执行结果是( ) public class Test{ int x; public static void change(Test t){ t.x = 3; } public static void main(String[] args){

面向对象试题(答案)

CoreJavaOOP考试题 考试时间:90分钟 考试总分:100分 一、选择题(不定项选择)(22*4=88) 1. 类A,B的定义如下: class A { private int a = 100; A() { System.out.print("A()"); System.out.println(a); } } class B extends A { private int a = 200; B() { System.out.print("B()"); System.out.println(a); } } 运行下面的代码: new B(); 输出的结果是:(A )。 A. A() 100 B() 200 B. A() 200 B() 200 C. B() 200 A() 100 D. B() 200 A() 200

2.下列说法正确的是(D ) A.所有类都必须定义构造方法(构造器) B.构造方法必须初始化类的所有数据成员 C.子类定义了构造器后,不再调用父类的构造器 D.构造方法可以访问类的非静态成员 3.在Java中,哪个关键字使类不能派生子类?, (A ) A : final B : public C : private D : native 4.class Base{ static void test(){ System.out.println(“Base.test()”); } } public class Child extends Base{ static void test(){ System.out.println(“Child.test()”); } public static void main(String[] args){ Base base = new Child(); Child child = new Child(); base.test(); child.test(); } } 程序运行的结果是( C ) A.Child.test() Child.test() B.Child.test() Base.test() C.Base.test() Child.test() D.Base.test() Base.test()

java面向对象知识点总结

j a v a面向对象知识点总 结 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

1 类和对象 类: 类是用来描述一类事物的共性内容的, 类是抽象的; 创建类,如何描述 属性功能 用变量来描述属性 用方法来描述功能 对象: 就是现实中具体的事物,对象是具体的; 创建对象 类名对象名 = new 类名(); 如何通过对象访问类中属性和方法呢 对象名.变量名 对象名.方法名(); 只要是new的对象,就是新创建的,就会在内存中开辟一段单独的空间匿名对象 创建的对象没有赋值给具体的变量; 所以给匿名对象的属性赋值是没有任何意义的; 匿名对象使用场景

1 调用方法 2 作为参数传递 3 添加进容器中 This 关键字 This. 类中的普通方法访问到的成员前边都有this.这个关键字This. 就代表当前对象, 普通方法, 创建对象调方法, 谁调用就代表谁 This(); 可以用来在构造函数中调用本类与之相对应的构造函数使用注意事项: 1 this() 只能是构造函数的第一条执行语句 2 this() 不能在构造函数之间相互调用 3 this() 不能调用自己 构造函数(方法) 构造函数的作用 用来给对象进行初始话的(初始化就是指给对象的各个属性赋值) 构造函数何时执行 对象一创建就会调用与之相对应的构造函数

构造函数语法 修饰符没有返回值类型类名(参数列表){ 具体执行的代码 } 构造函数自动添加 当一个类中我们没有明确指定构造函数的话,jvm会自动帮我们添加一个空参数的构造, 如果我们指定了,就不添加了 构造函数和普通函数的区别 执行时机不同 对象一创建就会调用与之相对应的构造函数 普通函数只有被调用才会执行 return 1 就是用来在方法中返回具体结果(结果类型必须和方法的返回值类型一致) 2 即便方法的返回值类型是void,方法中也可以出现 return; 3 构造函数中也可以有return关键字 成员变量和局部变量 1 作用范围不同, 成员变量是定义在类中的,在整个类中都起作用 局部变量是定义在方法中的,在所在代码块起作用

JAVA面向对象基础测试题,继承,封装,多态等测试题

JAVA面向对象基础测试题 提示:本题为第一阶段,JAVA面向对象基础部分练习题,包括对象,类,继承,封装,多态,接口,内部类等等,java核心基础,适合初学者对面向对象基础的知识进行测试,以便查漏补缺。 1. 程序执行的结果是:()。 01 public class Point{ 02 int y = 7; 03 public void step(int y) { 04 y += y; 05 System.out.println(y); 06 } 07 public static void main(String[] args) { 08

Point p = new Point(); 09 p.step(10); 10 } 11 } A.14 B.20 C.10 D.17 正确答案:B解析: 2. 程序的执行结果是:()。 01 public class Question { 02 private int num; 03 public static void main(String [] args){ 04 Question q = new Question();

05 q.num=13; 06 update(q); 07 System.out.println(q.num); 08 } 09 public static void update(Question q){ 10 q.num=9; 11 } 12 } A.13 B.9 C.0 D.4 正确答案:B解析: 3.

程序执行的结果是:()。 01 public class Answer { 02 public static void main(String[] args) { 03 int score = 20; 04 Answer ans= new Answer(); 05 ans.add(score); 06 System.out.println(" main:score = " + score); 07 } 08 void add(int score) { 09 System.out.println(" add:score=" + score++); 10 } 11

Java面向对象测试试题

《使用Java实现面向对象编程》阶段测试-笔试试卷 一、选择题(共25题,每题4分,满分100分) 1) 在Java类中,使用以下()声明语句来定义公有的int型常量MAX。 A. public int MAX = 100; B. final int MAX = 100; C. public static int MAX = 100; D. public static final int MAX = 100; 2) 在Java中,下列关于方法重载的说法中错误的是()。 A. 方法重载要求方法名称必须相同 B. 重载方法的参数列表必须不一致 C. 重载方法的返回类型必须一致 D. 一个方法在所属的类中只能被重载一次 3) 给定Java代码如下所示,在横线处新增下列()方法,是对cal方法的重载。 public class Test{ public void cal(int x, int y, int z) {} } A. public int cal(int x, int y, float z){ return 0; } B. public int cal(int x, int y, int z){ return 0; } C. public void cal(int x, int z){ } D. public void cal(int z, int y, int x){ } 4) 在Java中,下面对于构造函数的描述正确的是()。 A. 类必须显式定义构造函数 B. 构造函数的返回类型是void C. 构造函数和类有相同的名称,并且不能带任何参数 D. 一个类可以定义多个构造函数

java面向对象试卷及答案

java面向对象程序设计 系班级姓名成绩得分评卷人 一、填空题(每空2分,共20分) 1.Java源程序的扩展名是,经过编译后的程序的扩展名是。2.Socket通常也称为,用于描述和。3.线程的优先级在至之间,数值越大 4.构造方法是一种特殊的成员方法,构造方法名与相同 5.Java语言只允许单继承,指每个类只能有一个。 二、选择题(每题2分,共50分) 1.下列哪个概念是面向对象和面向过程程序设计所共有的() A、继承 B、流程控制 C、抽象 D、封装 2.以下关于执行Java小程序的论述错误的是:() A、可以通过浏览器调用嵌入了Java小程序的HTML文档 B、可以通过appletviewer.exe调用嵌入了Java小程序的HTML文档 C、可以通过java.exe调用嵌入了Java小程序的HTML文档 D、可以在Java集成开发环境中调用嵌入了Java小程序HTML文档 3.符合对象和类关系的是:() A、人和老虎 B、书和汽车 C、楼和土地 D、松树和植物 4.关于选择结构下列哪个说法正确?() A.if语句和else语句必须成对出现 B.if语句可以没有else语句对应 C.一个if语句只能有一个else if语句与之对应 D.else if结构中必须有default语句 5.while循环和do…while循环的区别是:()

A.没有区别,这两个结构任何情况下效果一样 B.while循环比do…while循环执行效率高 C.do…while循环执行次数可能为0 D.while循环执行次数可能为0 6.关于for循环和while循环的说法哪个正确?() A.while循环先判断后执行,for循环先执行后判断。 B.while循环判断条件一般是程序结果,for循环的判断条件一般是非程序结果C.两种循环任何时候都不可以替换 D.两种循环结构中都必须有循环体,循环体不能为空 7.下列修饰符中与访问控制无关的是() A.private B.public C.protected D.final 8.方法内的形参:() A.必须定义多个形参B.可以没有 C.至少有一个D.只能是简单变量 9.throws的作用:() A.表示方法可能会抛出例外 B.表示后面是方法的输出量 C.方法的标志,每个方法都必须有 D.没有意义 10.在Java语言中,整型常量123占用的存储字节数是:()A.1B.2 C.4 D.8 11.关于对象成员占用内存的说法哪个正确?() A.同一个类的对象共用同一段内存 B、同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间C.对象的方法不占用内存 D.以上都不对 12.return语句:()

完成Java面向对象程序设计实验课的心得体会范文

Java面向对象程序设计实验课的心得体会经过这几周对Java面向对象程序设计的学习,让我更加了解到Java学习的重要性。 在实验课上,我们完成多个实验,在这个阶段的学习中,我从认识到熟悉,而后到能够自主运用。通过对Java的了解,我发现它确实有很多方便之处,它集抽象性、封装性、继承性和多态性于一体,实现了代码重用和代码扩充,提高了软件开发的效率。对于我们这个专业来说学好Java语言是很重要的,所以在实验的过程中我都尽力理解java编程思想、掌握基本技巧,尽量学到最多的知识。 学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能,Java面向对象程序设计是一门实践性比较强的课程,在实际中,我们必须把理论和实践结合起来。在实验中,我们理解理论课上的知识,然后运用到实际的操作中,我们必须在现有的理论的基础上,进行实践。多次实验后,也让我看到了现在学习的一个很大弱点:只听不练,永远不会熟练运用;空记技巧,忽略思想,会在多变的习题中十分无奈。 Java思想:Java是一门面向对向语言,他定义一切都是对象面向对象,就是面对现实; 现实中的一切都是对象,他们有分类,就产生了“类”; 他们有不同,类和类之间的不同,使用类来区分; 同一个类中不同的对象的区别,使用成员区分。

所以,面向对象的内部逻辑是分类。 面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等 原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就变成为“类”。这种集合上定义了操作的东西利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性可事半功倍。 面向对象的编程思想就要想近世代数的分析思想,首先要确定“论域”,即工程所涉及到的所有的“对象”,然后要分类处理,把隶属同一类别的对象集合在一起(做成一个集合),定义他们之间的运算性质及可以进行的操作,这样就构建了一个类,当然以后用到这个类的对象时都要通过已经定义了的操作来完成各项功能,这就是常要求的类的“类的成员变量要通过共有函数来操作”。 我想真正的面向对象编程思想不应该是编程思想,应该是面向对象的分析方法才对! 我的理解: 1、将分析过程为抽象的过程:简言之:分成多个小问题(组成部分),

Java面向对象练习经典题

JA V A程序作业题 1、设计一个包含多个构造函数的类,并分别用这些构造函数实例化对象。 2、编写一个类Calculate1,实现加、减两种运算,然后,编写另一个派生类Calculate2,实现乘、除两种运算。 3、建立三个类:居民、成人、官员。居民包含身份证号、姓名、出生日期,而成人继承自居民,多包含学历、职业两项数据;官员则继承自成人,多包含党派、职务两项数据。要求每个类的字段都以属性的方式对外提供数据输入输出的功能。 4、编写一个类,其中包含一个排序的方法sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。 5. 编写一个控制台应用程序,定义一个类MyClass,类中包含有public、private以及protected数据成员及方法。然后定义一个从MyClass类继承的类MyMain,将Main方法放在MyMain中,在Main方法中创建MyClass类的一个对象,并分别访问类中的数据成员及方法。要求注明在试图访问所有类成员时哪些语句会产生编译错误。 7.创建一个类包含有protected数据。在相同的文件里创建第二个类,用一个方法操纵第一个类里的protected数据 9 编写一个控制台应用程序,完成下列功能,并回答提出的问题。 1) 创建一个类A,在构造函数中输出“A”,再创建一个类B,在构造函数中输出“B”。 2) 从A继承一个名为C的新类,并在C内创建一个成员变量B。不要为C创建构造函数。 3) 在Main方法中创建类C的一个对象,写出运行程序后输出的结果。 4) 如果在C中也创建一个构造函数输出“C”,整个程序运行的结果又是什么? 10 编写一个控制台应用程序,完成下列功能,并写出运行程序后输出的结果。 1) 创建一个类A,在A中编写一个可以被重写的带int类型参数的方法MyMethod,并在该方法中输出传递的整型值加10后的结果。 2) 再创建一个类B,使其继承自类A,然后重写A中的MyMethod方法,将A中接收的整型值加50,并输出结果。 3) 在Main方法中分别创建类A和类B的对象,并分别调用MyMethod方法。 11. 创建一个类,它存储一个int数据成员MyNumber,并给该数据成员创建属性,当该数据成员被存储时,将其乘以100;当其被读取时,将其除以100。 12. 定义一个车辆(Vehicle)基类,具有Run、Stop等方法,具有Speed(速度)、MaxSpeed (最大速度)、Weight(重量)等字段。然后以该类为基类,派生出bicycle、car等类。并编

Java面向对象测试试题(经典)

《使用实现面向对象编程》阶段测试-笔试试卷 一、选择题(共25题,每题4分,满分100分) 1) 在类中,使用以下()声明语句来定义公有的型常量。 A. = 100; B. = 100; C. = 100; D. = 100; 2) 在中,下列关于方法重载的说法中错误的是()。 A. 方法重载要求方法名称必须相同 B. 重载方法的参数列表必须不一致 C. 重载方法的返回类型必须一致 D. 一个方法在所属的类中只能被重载一次 3) 给定代码如下所示,在横线处新增下列()方法,是对方法的重载。 { ( x, y, z) {} } A. ( x, y, z){ 0; } B. ( x, y, z){ 0; } C. ( x, z){ }

D. ( z, y, x){ } 4) 在中,下面对于构造函数的描述正确的是()。 A. 类必须显式定义构造函数 B. 构造函数的返回类型是 C. 构造函数和类有相同的名称,并且不能带任何参数 D. 一个类可以定义多个构造函数 5) 下面代码的运行结果是()。 { ; 名字 0; 健康值 ; 性别 () { = 10; = "雄"; ("执行构造方法。"); } () { ("企鹅的名字是" + + ",健康值是" + + ",性别是" + "。"); } ([] ) { = (); (); } } A. 企鹅的名字是,健康值是10,性别是雄。 B. 执行构造方法。

企鹅的名字是,健康值是0,性别是。 C. 企鹅的名字是,健康值是0,性别是。 D. 执行构造方法。 企鹅的名字是,健康值是10,性别是雄。 6) 下列选项中关于中封装的说法错误的是()。 A. 封装就是将属性私有化,提供公有的方法访问私有属性 B. 属性的访问方法包括方法和方法 C. 方法用于赋值、方法用于取值 D. 类的属性必须进行封装,否则无法通过编译 7) 使用实现封装,第一步是修改属性可见性来限制对属性的访问,第二步是创建赋值和取值方法,用于对属性的访问,第三步应该是()。 A. 使用赋值和取值方法访问属性 B. 编写常规方法访问属性 C. 在赋值和取值方法中,加入对属性的存取限制 D. 编写方法创建对象,调用赋值和取值方法访问属性 8) 分析如下所示的代码,其中关键字的意思是()。 { ; () { ;

面向对象程序设计java语言程序设计期末考试试题及部分答案

《面向对象程序设计JAVA语言程序设计》期末考试试题及部分答案2 一、单选择题(每小题2分,共10分) 1、编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( B )。 A. .java B. .class C. .html D. .exe 2、设x = 1 , y = 2 , z = 3,则表达式y+=z--/++x 的值是( A )。 A. 3 B. 3. 5 C. 4 D. 5 3、在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的( D )方法来完成一些画图操作。 A. start( ) B. stop( ) C. init( ) D. paint( ) 4、不允许作为类及类成员的访问控制符的是( C )。 A. public B. private C. static D. protected 5、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( A )。 A. static void method( ) B. public void method( ) C. final void method( ) D. abstract void method( ) 二、填空题(每空格1分,共20分) 1、开发与运行Java程序需要经过的三个主要步骤为编辑源程序、编译生成字节码、和解释运行字节码。 2、如果一个Java Applet源程序文件只定义有一个类,该类的类名为MyApplet,则类MyApplet必须是Applet、类的子类并且存储该源程序文件的文件名为MyApplet。 3、如果一个Java Applet程序文件中定义有3个类,则使用Sun公司的JDK编译器javac.exe编译该源程序文件将产生3 个文件名与类名相同而扩展名为. class的字节码文件。

Java面向对象编程上机-练习题汇总

【练习题】类的成员变量: 猜数字游戏:一个类A有一个成员变量v,有一个初值100。定义一个类,对A 类的成员变量v进行猜。如果大了则提示大了,小了则提示小了。等于则提示猜测成功。 【练习题】类的成员变量: 请定义一个交通工具(Vehicle)的类,其中有: 属性:速度(speed),体积(size)等等 方法:移动(move()),设置速度(setSpeed(int speed)),加速speedUp(),减速speedDown()等等. 最后在测试类Vehicle中的main()中实例化一个交通工具对象,并通过方法给它初始化speed,size的值,并且通过打印出来。另外,调用加速,减速的方法对速度进行改变。 【练习题】类的成员变量与方法、构造方法 在程序中,经常要对时间进行操作,但是并没有时间类型的数据。那么,我们可以自己实现一个时间类,来满足程序中的需要。 定义名为MyTime的类,其中应有三个整型成员:时(hour),分(minute),秒(second),为了保证数据的安全性,这三个成员变量应声明为私有。 为MyTime类定义构造方法,以方便创建对象时初始化成员变量。 再定义diaplay方法,用于将时间信息打印出来。 为MyTime类添加以下方法: addSecond(int sec) addMinute(int min) addHour(int hou) subSecond(int sec) subMinute(int min) subHour(int hou) 分别对时、分、秒进行加减运算。 【练习题】构造方法 编写Java程序,模拟简单的计算器。 定义名为Number的类,其中有两个整型数据成员n1和n2,应声明为私有。编写构造方法,赋予n1和n2初始值,再为该类定义加(addition)、减(subtration)、乘(multiplication)、除(division)等公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。 在main方法中创建Number类的对象,调用各个方法,并显示计算结果。 【练习题】构造方法: 编写Java程序,用于显示人的姓名和年龄。 定义一个人类(Person),该类中应该有两个私有属性,姓名(name)和年龄(age)。定义构造方法,用来初始化数据成员。再定义显示(display)方法,将姓名和年龄打印出来。

相关文档
相关文档 最新文档