面向对象编程练习题库test
- 格式:docx
- 大小:110.45 KB
- 文档页数:7
《面向对象程序设计(java)》编程题库(含答案)《面向对象程序设计(Java)》资源文档——深圳职业技术学院《面向对象程序设计(Java)》编程题库(含答案) 1、已知数组a={4,67,32,78,56,13,90,48,22},编程实现求该数组最大值并输出的方法。
2、编写程序实现求0~150之间的奇数的乘积;3、已知类People里含有属性money初值是20,方法void work(int m)实现增加m到money里,定义它的子类ChinaPeople,重写方法void work(int m)实现把增加m到money里(体现汇率变化)。
4、定义接口Worker,有一个方法login()实现打卡功能。
定义该接口实现类ChinaWorker,给出login()的具体实现,只需输出“我来了~~”即可。
5、使用Scanner类实现从键盘输入一句英文,主程序实现把这句英文的单词按照字典顺序排序输出。
6、使用Scanner类实现从键盘输入若干个双精度数,主程序实现把这些数求和输出。
7、定义窗体,窗体上含有两个文本区,一个按钮,实现一个文本区内输入若干个整数,单击按钮后在另一个文本区内显示这些整数中奇数的个数,并输出所有奇数。
8、编写类比如Circle实现模拟圆形,类中封装与圆有关的数据和方法(比如半径和获取面《面向对象程序设计(Java)》资源文档——深圳职业技术学院积),在主方法中定义一个对象,让这个对象操作自己的数据和方法输出相应结果。
9、编写一个类People,含有两个属性String 类型的name和int类型的age,定义一个方法speak()输出这两个属性。
如“我是zhanghua,我今年12了”。
编写People的子类Boy,重写方法speak(),输出“我是男孩,我今年***”。
编写People的子类Girl,重写方法speak(),输出“我是女孩,我叫****“。
编写主类,声明一个People的对象p。
面向对象测试题及答案一、选择题(每题2分,共20分)1. 面向对象编程(OOP)的核心概念不包括以下哪一项?A. 类B. 继承C. 多态D. 过程2. 在Java中,以下哪个关键字用于定义类?A. classB. typeC. structD. interface3. 下列哪个选项不是Java中访问控制的关键字?A. publicB. privateC. protectedD. global4. 封装是面向对象编程的一个重要特性,它主要指的是:A. 将数据和操作数据的方法组合在一起B. 将所有数据都设为公开访问C. 只允许通过特定的方法访问数据D. 将数据和方法分离5. 在Java中,以下哪个不是构造方法的特点?A. 与类名相同B. 没有返回类型C. 可以重载D. 可以被继承6. 继承在面向对象编程中允许:A. 一个类只能继承一个类B. 一个类可以继承多个类C. 一个类可以继承多个接口D. 一个类可以同时继承多个类和接口7. 接口在Java中的主要作用是:A. 定义类B. 实现多继承C. 定义方法的实现D. 定义方法的签名8. 以下哪个是Java中实现多态的方式?A. 继承B. 接口C. 重载D. 重写9. 抽象类在Java中不能:A. 被实例化B. 包含抽象方法C. 包含具体方法D. 被继承10. 下列哪个不是Java集合框架中接口?A. ListB. SetC. MapD. Array二、简答题(每题5分,共30分)1. 简述面向对象编程的三大特性。
2. 解释什么是多态,并给出一个Java中多态的例子。
3. 什么是封装?封装在Java中是如何实现的?4. 什么是接口?接口和抽象类有什么区别?5. 什么是构造方法?构造方法的作用是什么?6. 什么是继承?继承在Java中是如何实现的?三、编程题(每题25分,共50分)1. 编写一个Java程序,定义一个名为`Car`的类,包含以下属性和方法:- 属性:品牌(String类型),颜色(String类型),速度(int 类型)- 方法:启动汽车(startCar),加速(accelerate),减速(decelerate)2. 在上述`Car`类的基础上,创建一个名为`ElectricCar`的子类,继承`Car`类,并添加一个额外的属性:电池电量(int类型),并重写`startCar`方法以显示电动汽车启动的信息。
java面向对象练习题# Java面向对象练习题一、选择题1. 在Java中,以下哪个关键字用于定义类的访问权限为“仅包内可见”?- A. public- B. private- C. protected- D. 默认(不写访问修饰符)2. 以下哪个是Java中的构造方法?- A. 与类名相同,没有返回类型的方法- B. 与类名不同,没有返回类型的方法- C. 与类名相同,有返回类型的方法- D. 与类名不同,有返回类型的方法3. 在Java中,哪个关键字用于实现类的继承?- A. extends- B. implements- C. override- D. abstract4. 以下哪个是Java中类的成员变量?- A. 局部变量- B. 实例变量- C. 静态变量- D. 方法参数5. 以下哪个是Java中的多态性?- A. 接口- B. 继承- C. 封装- D. 抽象类二、简答题1. 解释Java中的封装性,并给出一个封装的类的例子。
2. 描述Java中接口和抽象类的区别。
3. 什么是Java中的继承?请举例说明如何使用继承。
三、编程题1. 创建一个名为`Person`的类,包含姓名(name)、年龄(age)和性别(gender)三个属性。
为每个属性提供getter和setter方法。
2. 编写一个名为`Student`的类,它继承自`Person`类,并添加一个名为`studentID`的属性。
为`studentID`提供getter和setter方法,并重写`toString`方法以返回学生的详细信息。
3. 创建一个接口`Movable`,包含一个方法`move()`。
然后创建一个名为`Car`的类实现该接口,并提供`move`方法的具体实现。
四、综合应用题1. 设计一个简单的银行账户系统,包含以下类:- `Account`:基本账户类,包含账户ID、账户余额和存款(deposit)与取款(withdraw)方法。
专题1初识Java一、填空题1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是()、()、()。
2.环境变量的设置,若JDK安装在“D:JDK”,则应设置Path为()、classpath为()。
3.Java源文件的扩展名为(),用Javac编译Java源文件,得到的字节码文件的扩展名为()。
4.如果Java源文件中有多个类,那么只能有一个类是()类。
二、选择题1.作为Java应用程序入口的main方法,其声明格式是()A.publicstaticintmain(Stringargs[])B.publicstaticvoidmain(Stringargs[]) C.publicvoidmain(Stringargs[])D.publicintmain(Stringargs[])2.下面命令正确的是()A.javaAppFirst.javaB.javaAppFirstC.javaappfirst.classD.javacAppFirst3.设有一个Java小程序,源程序名为FirstApplet.java,其HTML文件为FirstApplet.html,则运行该小程序的命令为()A.javaFirstAppletB.javacFirstApplet.javaC.appletviewerFirstApplet.javaD.appletviewerFirstApplet.html4.JDK安装完成后,主要的命令如javac、java等,都存放在根目录的()文件夹下。
A.binB.jreC.includeD.doc5.Java语言是一种__语言。
A.机器B.汇编C.面向过程的D.面向对象的6、Java程序的最基本组成单位是__。
A.函数B.过程C.变量D.类三、简答题(十分重要)1.Java语言有哪些特点?2.JDK安装完成后,如何设置环境变量?4.简述Java应用程序的开发过程专题2标识符、表达式、数据类型一、填空题1.Java逻辑常量有两个:()和()。
面向对象编程考试(答案见尾页)一、选择题1. 在面向对象编程中,以下哪个是类的组成部分?A. 数据成员B. 成员函数C. 友元函数D. 静态数据成员2. 在面向对象编程中,以下哪个是对象的组成部分?A. 属性B. 方法C. 继承D. 封装3. 在面向对象编程中,以下哪个是封装的含义?A. 将数据成员隐藏起来B. 将成员函数隐藏起来C. 将数据成员和成员函数结合在一起D. 将对象的状态和行为封装在一起4. 在面向对象编程中,以下哪个是继承的定义?A. 创建一个新的类,这个新类是已存在的类的扩展B. 创建一个新的类,这个新类的内容与已存在的类完全相同C. 创建一个新的类,这个新类的内容是已存在的类的部分D. 创建一个新的类,这个新类的所有成员都与已存在的类相同5. 在面向对象编程中,以下哪个是多态的含义?A. 同一个接口可以被不同的对象以不同的方式实现B. 同一个接口可以被不同的对象以相同的方式实现C. 同一个接口不能被不同的对象以不同的方式实现D. 同一个接口不能被不同的对象以相同的方式实现6. 在面向对象编程中,以下哪个是抽象类的定义?A. 一个包含抽象方法的类B. 一个包含抽象成员函数的类C. 一个不包含任何成员函数的类D. 一个不包含抽象成员函数的类7. 在面向对象编程中,以下哪个是接口的定义?A. 一个包含抽象方法的类B. 一个包含抽象成员函数的类C. 一个不包含任何成员函数的类D. 一个不包含抽象成员函数的类8. 在面向对象编程中,以下哪个是类的实例化过程?A. 创建一个新的对象,将对象的属性设置为类的初始化数据B. 创建一个新的对象,将对象的属性设置为类的初始化数据,并调用类的构造函数C. 创建一个新的对象,将对象的属性设置为类的初始化数据,并调用类的析构函数D. 创建一个新的对象,将对象的属性设置为类的初始化数据,并执行类的初始化代码9. 在面向对象编程中,以下哪个是类的继承的好处?A. 提高代码的可重用性B. 提高代码的可维护性C. 提高代码的可扩展性D. 提高代码的执行效率10. 在面向对象编程中,以下哪个是接口的用途?A. 描述对象的属性B. 描述对象的行为C. 描述对象的实现细节D. 描述对象的状态11. 什么是面向对象编程(OOP)?A. OOP是一种编程范式,它使用对象和类的概念来组织和表示程序中的数据和功能。
java面向对象编程练习题及答案一、选择题1. 在Java中,以下哪个关键字用于定义类?A. structB. classC. interfaceD. enum2. Java中的继承是:A. 多重继承B. 单一继承C. 无继承D. 可选继承3. 以下哪个是Java中的访问修饰符?A. publicB. privateC. protectedD. 所有选项都是4. 以下哪个不是Java对象的三个基本特征?A. 封装B. 继承C. 多态D. 线程5. 以下哪个方法用于获取对象的内存地址?A. hashCode()B. equals()C. getClass()D. toString()二、简答题1. 解释Java中的封装是什么,并给出一个封装的例子。
2. 描述Java中的继承是如何工作的,并给出一个继承的例子。
3. 解释Java中的多态性,并给出一个多态性的例子。
三、编程题1. 创建一个名为`Car`的类,它具有以下属性:- 品牌(String)- 型号(String)- 年份(int)并为这些属性提供getter和setter方法。
2. 创建一个名为`ElectricCar`的类,它继承自`Car`类,并添加以下属性:- 电池电量(int)实现`ElectricCar`类,并重写`toString()`方法,以显示电动汽车的详细信息。
3. 创建一个名为`VehicleTest`的类,它包含`main`方法。
在`main`方法中,创建`Car`和`ElectricCar`的实例,并打印它们的状态。
四、代码分析题1. 阅读以下Java代码片段,并解释它的作用:```javapublic class Person {private String name;private int age;public Person(String name, int age) { = name;this.age = age;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}```2. 阅读以下Java代码片段,并指出可能的错误:```javapublic class Animal {public void speak() {System.out.println("The animal makes a sound");}}public class Dog extends Animal {@Overridepublic void speak() {System.out.println("The dog barks");}}public class Cat extends Animal {@Overridepublic void speak() {System.out.println("The cat meows");}}public class TestAnimals {public static void main(String[] args) {Animal myDog = new Dog();Animal myCat = new Cat();myDog.speak();myCat.speak();}}```五、论述题1. 论述Java面向对象编程中接口与抽象类的区别,并给出使用场景。
面向对象练习题一、选择题1. 在面向对象编程中,以下哪个概念不是面向对象的核心概念?A. 封装B. 继承C. 多态D. 函数2. 以下哪个选项是Java语言中实现多态的方式?A. 通过继承B. 通过接口C. 通过重载D. 通过重写3. 在面向对象编程中,一个类可以有多少个父类?A. 0个或1个B. 1个C. 多个D. 无数个4. 以下哪个关键字在Java中用于定义一个类?A. structB. classC. interfaceD. enum5. 以下哪个是Java中创建对象的关键字?A. newB. createC. instanceD. object二、填空题6. 在面向对象编程中,______ 是指将数据和操作这些数据的方法结合在一起。
7. 一个类可以包含______ 和______ 两种成员。
8. 封装的目的是______ 数据,并对外部隐藏内部细节。
9. 继承可以使得子类获得父类的______ 和______。
10. 多态性允许不同类的对象对同一消息做出响应,但具体______ 取决于对象的实际类型。
三、简答题11. 简述面向对象编程的三大特性,并举例说明它们在实际编程中的应用。
12. 解释什么是接口,并说明接口与抽象类的区别。
13. 描述如何使用Java实现一个简单的类,并说明如何创建该类的实例。
四、编程题14. 编写一个Java类`Person`,包含属性`name`和`age`,以及一个方法`introduce()`,该方法输出个人信息。
15. 假设你已经有一个名为`Animal`的抽象类,它包含一个抽象方法`makeSound()`。
编写一个名为`Dog`的类,继承自`Animal`,并实现`makeSound()`方法,使得`Dog`对象调用该方法时输出"Woof!"。
16. 创建一个Java程序,包含一个名为`Vehicle`的类,它有一个属性`speed`和一个方法`increaseSpeed(int increment)`。
java面向对象试题及答案1. 试题一题目:什么是面向对象编程?请简要描述面向对象编程的优势和特点。
答案:面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,将程序中的数据和操作数据的方法进行了封装,使得程序更加模块化和易于理解。
面向对象编程的主要特点包括封装、继承和多态。
封装使得数据和对数据的操作集中在一个对象中,可以隐藏内部实现细节,提供公共的接口进行访问,增加了程序的安全性和灵活性。
继承允许新建的类继承已有类的属性和方法,通过扩展和重写已有类的功能,减少了代码的重复性,提高了代码的复用和可维护性。
多态允许不同的对象对相同的消息作出不同的响应,通过接口和抽象类的使用,实现了更加灵活和可扩展的程序设计。
面向对象编程的优势包括了代码的重用性、可维护性、可扩展性和灵活性。
通过封装和继承的应用,可以减少代码重复,提高开发效率,并且通过多态的应用,可以实现程序的灵活性,方便后续的扩展和修改。
2. 试题二题目:什么是类?请简要描述类的特点和组成部分。
答案:类是面向对象编程中的核心概念,是对一类具有相同属性和行为的对象进行抽象和封装的模板。
类是用来创建对象的蓝图,可以通过实例化类来创建对象。
类的特点包括了封装、继承和多态。
类通过封装将属性和方法进行了封装,提供了公共的接口与外部进行交互,隐藏了内部实现细节。
继承允许新建的类继承已有类的属性和方法,在原有基础上进行修改和扩展。
多态允许不同的对象对相同的消息作出不同的响应,实现了程序的灵活性和可扩展性。
类的组成部分包括了属性(Field)和方法(Method)。
属性(也称为成员变量)用于描述对象的状态,可以是基本类型或其他类的对象。
方法用于描述对象的行为,可以是处理属性的操作,也可以是其他业务逻辑的实现。
3. 试题三题目:请简要解释传值和传引用的区别,并用代码示例说明。
答案:传值和传引用是在方法调用时,参数传递的两种方式。
可编辑修改精选全文完整版第六章 python面向对象青少年编程知识练习题及答案解析一、单选题1、下列创建类,方法正确的是()A.Class food( ):B.Class Food():C.class Food()D.class Food():答案解析:D,创建类用class关键字,与类名中间隔一个空格,后面添加括号和冒号。
2、根据car()类创建实例对象,下列代码正确的是()A.Car=car()B.car=car()C.car=Car()D.Car=Car()答案解析:C,类名为大写Car(),对象名为小写的car。
3、在Car类中自定义speed方法,输出:行驶速度为60km/h,代码书写正确的是()A.B.C.D.答案解析:B,在类中定义方法,注意不要漏掉self和冒号。
4、以下代码创建了一个football对象:football=Ball(),调用football对象的play方法,下列选项正确的是()A.Football.play()B.football.Play()C.football.play()D.football.play答案解析:C,对象调用方法,对象名.方法名,不要忘记括号。
5、在Food类中创建eat方法,下列选项正确的是()A.Class Food():Def eat(self):B.class Food():def eat(self):C.class Food():def eat():D.class Food():def Eat(self)答案解析:B,创建类的关键字class,创建方法的关键字def。
6、以下代码创建了一个monkey对象:monkey=Animals(),调用monkey对象的name属性,下列选项正确的是()()D.monkey:name()答案解析:C,访问属性方法:对象名.属性名7、以传参的方式定义实例化方法时,参数之间用()符号进行分隔:A.分号;B.冒号:C.空格D.逗号,答案解析:D,参数属性之间用逗号分隔。
Java面向对象测试试题一、单选题1. 下面哪个关键字可以用来声明一个抽象类?A) abstractB) finalC) privateD) protected2. 在Java中,一个类可以同时继承多个类吗?A) 可以B) 不可以3. 在Java中,接口的成员变量默认是什么修饰符?A) privateB) protectedC) publicD) 默认不写修饰符4. 下面哪种访问权限修饰符可以让子类访问父类的成员变量?A) privateB) protectedC) publicD) 默认不写修饰符5. 下面哪个关键字可以用来声明一个常量?A) constantB) finalC) staticD) default二、填空题1. 在Java中,可以通过____关键字来引入其他包中的类。
2. 在Java中,____关键字可以用来防止重写一个方法。
3. 在Java中,____关键字表示当前对象的引用。
4. 在Java中,____关键字用于表示父类。
三、编程题请编写一个Java类,实现一个矩形的类,要求具有以下功能:1. 拥有长度和宽度两个属性。
2. 拥有计算矩形面积的方法。
3. 能够输出矩形的属性信息。
```javapublic class Rectangle {private double length;private double width;public Rectangle(double length, double width) {this.length = length;this.width = width;}public double getArea() {return length * width;}public void printInfo() {System.out.println("Length: " + length);System.out.println("Width: " + width);}}```使用上述代码,可以创建一个矩形对象并调用相应方法来获取矩形的面积和属性信息。
面向对象编程练习题库
t e s t
Document serial number【KKGB-LBS98YT-BS8CB-BSUT-BST108】
面向对象编程练习题
专题1 初识Java
一、填空题
1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是()、()、()。
2.环境变量的设置,若JDK安装在“D:\JDK”,则应设置Path为()、classpath
为()。
3.Java源文件的扩展名为(),用Javac编译Java源文件,得到的字节码文件的扩展
名为()。
4.如果Java源文件中有多个类,那么只能有一个类是()类。
二、选择题
1.作为Java应用程序入口的main方法,其声明格式是()
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.下面命令正确的是()
A.java B.java AppFirst
C.java D.javac AppFirst
3.设有一个Java小程序,源程序名为,其HTML文件为,则运行该小程序的命令为
()
A.java FirstApplet B.javac
C.appletviewer D.appletviewer
4.JDK安装完成后,主要的命令如javac、java等,都存放在根目录的()文件夹下。
A.bin B.jre C.include D.doc
5.Java语言是一种语言。
A.机器B.汇编C.面向过程的D.面向对
象的
6、Java程序的最基本组成单位是( )。
A.函数B.过程C.变量
D.类
7. main()方法的返回值类型是()。
A.boolean B.int C. void D.static
8. 下面哪个单词是Java语言的关键字()A.False B.FOR C.For D.for
9. 、线程是Java的()机制。
A.检查 B.解释执行 C.并行 D.并发
专题2 标识符、表达式、数据类型
一、填空题
1.Java逻辑常量有两个:()和()。
2.比较两个数相等的运算符是:。
4、Java中的八种基本数据类型分别是:
char、、、、、、和。
二、选择题
1.下面这些标识符哪个是错误的()
A.Javaworld B._sum C.2Java Program D.$abc
2、下面哪个赋值语句不会产生编译错误()
A.char a=’abc’; B.byte b=152; C.float c=; D.double d=; 3.下面哪个单词是Java语言的关键字()
A.False B.FOR C.For D.for
4.若变量都已经正确说明,则以下程序段输出为()
a=10; b=50; c=30;
if(a>b) a=b;b=c;
c=a;
A.a=10 b=50 c=10 B.a=10 b=30 c=10
C.a=50 b=30 c=10 D.a=50 b=30 c=30
5.下列标识符中,正确的是。
A、1_Back
B、$_Money
C、$-money
D、2-Forward 6.现有一个int类型的整数和一个double类型的浮点数,当它们之间做了加法运算之后,得到的结果类型应该是。
A、int类型
B、double类型
C、float类型
D、long类型
7、对下面的语句执行完后正确的说法是:()
int c=’c’/3;
A.输出结果为21 B.输出结果为22 C.输出结果为32 D.输出结果为33
8、设有定义int a=12;则执行a*=12;语句后,a的值为:()。
A.144 B.12 C.24 D.0
专题3 流程控制语句
一、填空题
1.在switch语句中的表达式的类型必须是()【存放类型】。
2.break在循环语句中的作用是()。
3.分支语句包括()和()。
4.while循环语句的循环次数(),do-while语句的循环次数(),for语句的循环次数()。
5. continue在循环语句中的作用是()。
专题4 面向对象
一、填空题
1.如果一个方法不返回任何值,则该方法的返回值类型为。
2.如果子类中的某个方法名、返回值类型和_ ______与父类中的某个方法完全一致,则称子类中的这个方法了父类的同名方法。
3.接口中所有的属性均为 __、__ _____和_ _____的
4.方法是一种仅有方法声明,没有具体方法体和操作实现的方法,该方法必须在类之中定义。
5.在Java程序中,通过类的定义只能实现重继承,但通过的定义可以实现多重继承关系。
6.一般Java程序的类主体由两部分组成:一部分是,另一部分是。
7.分别用关键字来定义类,用关键字来分配实例存储空间。
8.当一个类的修饰符为时,说明该类不能被继承,即不能有子类。
9.在Java中,能实现多重继承效果的方式是。
二、选择题
.有一个类A,对于其构造方法的声明正确的是(B)。
....
}
A.B.
C.D.无解
34、在JAVA 中,下列说法正确的是:。
A.一个子类可以有多个父类,一个父类也可以有多个子类
B.一个子类可以有多个父类,但一个父类只可以有一个子类
C.一个子类只可以有一个父类,但一个父类可以有多个子类
D.上述说法都不对
35、Father和Son是两个java类,下列()正确的标识出Father是Son的父类A.class Son implements Father B.class Father implements Son
C.class Father extends Son D.class Son extends Father 36、重载指的是方法具有相同的名字,但这些方法的参数必须不同。
下列哪种说法不属于方法参数的不同。
A.形式参数的个数不同。
B.形式参数的类型不同。
C.形式参数的名字不同。
D.形式参数类型的排列顺序不同。
39、关于接口的定义和实现,以下描述正确的是。
A.接口定义的方法只有定义没有实现
B.接口定义中的变量都必须写明final和static
C.如果一个接口由多个类来实现,则这些类在实现该接口中的方法时采用统一的代码D.如果一个类实现接口,则必须实现该接口中的所有方法,但方法未必申明为public
三、阅读程序题
1、写出运行结果:mainbord:微星,cpu:AMD。
public class Computer{
String mainbord,cpu;
public Computer(String s1,String s2){
mainbord=s1;
cpu=s2;
}
public static void main(String[]args){
Computer c=new Computer("微星","AMD");
,cpu:"+;
}
}
2、写出运行结果:Marry is 18 years old!。
public class Person{
String name;
int age;
public Person(String name,int age){
=name;
=age;
}
public static void main(String[]args){
Person c=new Person("Marry",18);
}
}
3、下面是一个类的定义,请将其补充完整
class ___ Stud___{
String name;
int age;
Stud(___String ___ name, int a){
=name;
age=a;
}
}
4.下面是一个源文件,请将其补充完整
public class B {
String x;
___static_ int a=3;
B(String x){
= x ;
}
static int getA(){
return a;
}
}
编程题
1.编写一个Java程序,定义一个Shape类,具有:属性:形状(form)——String类型,功能:求面积(double area( ));再定义Shape类的子类Circle,具有:属性:半径(raduis)——double型,功能:设置半径(void setraduis(double newRaduis)),把新半径赋给raduis。
2. 定义一个人类,包括属性:姓名、性别、年龄;包括方法:吃饭、睡觉,工作。
根据人类,派生一个学生类,增加属性:学校、学号;学生的工作是学习。