类和对象作业
一、填空题
1.类是组成Java程序的基本要素,类体有两部分构成:一部分是变量的定义,另一部分是 的定义。
2.执行Person p = new Person();语句后,将在_ __中给Person对象分配空间,并在栈内存中给引用变量p分配空间,存放Person对象的引用。
3. 是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并且不书写返回值类型,在创建对象实例时由new运算符自动调用。
4.局部变量的名字与成员变量的名字相同,若想在该方法内使用成员变量,必须使用关键字 。
5.使用关键字 来调用同类的其它构造方法,优点同样是以最大限度地代码的利用程度 ,减少程序的维护工作量。
6.用关键字 修饰的成员变量是类变量,类变量是指不管类创建了多少对象,系统仅在第一次调用类的时候为类变量分配内存,所有对象共享该类的类变量。
7.使用static修饰的变量称为静态变量,静态变量可以有两种访问方式,分别是类名.静态变量名和 。
8.在一个类文件中的关键字package,import,class出现的可能顺序是 ________________________。
9. 关键字作为Java源文件的第一条非注释性语句,指明该源文件定义的类所有的包。
10. 包是Java语言的核心类库,它包含了运行Java程序必不可少的系统类,使用该包下的类和接口不需要使用import导入。
二、选择题
-
在Java中,以下程序编译运行后的输出结果为( )。(选择一项)
public class Test {
int x, y;
Test(int x, int y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
Test pt1, pt2;
pt1 = new Test(3, 3);
pt2 = new Test(4, 4);
System.out.print(pt1.x + pt2.x);
}
}A 6
B. 34
C. 8
D. 7 -
分析如下Java程序的代码所示,则编译运行后的输出结果是( )。(选择一项)
public class Test {
int count=9;
public void count1(){
count=10;//局部变量改变了全局变量的值,因此值就变了
System.out.println(“count1=”+count);
}
public void count2(){
System.out.println(“count2=”+count);
}
public static void main(String[ ] args) {
Test t=new Test();
t.count1();
t.count2();
}
}A count1=9;
count2=9;
B. count1=10;
count2=9;
C. count1=10;
count2=10;
D. count1=9;
count2=10; -
以下语句中关于Java构造方法的说法错误的是( )。(选择一项)
A. 构造方法的作用是为创建对象进行初始化工作,比如给成员变量赋值
B. 一个Java类可以没有构造方法,也可以提供1个或多个构造方法
C. 构造方法与类同名,不能书写返回值类型
D. 构造方法的第一条语句如果是super(),则可以省略,该语句作用是调用父类无参数的构造方法 -
在Java中关于静态方法,以下说法中正确的是( )。(选择两项)
A 静态方法中不能直接调用非静态方法
B. 非静态方法中不能直接调用静态方法(递归)
C. 静态方法可以用类名直接调用
D. 静态方法里可以使用this -
下列选项中关于Java中类方法的说法错误的是( )。(选择二项)
A 在类方法中可用this来调用本类的类方法
B. 在类方法中调用本类的类方法时可直接调用
C. 在类方法中只能调用本类中的类方法
D. 在类方法中调用实例方法需要先创建对象
三、判断题
1.类可以看成一类对象的模板,对象可以看成该类的一个具体实例。( )
2.如果没有为类中的某些成员赋初始值,Java会为类成员赋予固定的初始值,如数值变量的值为0,布尔变量的值为true,未初始化的引用为null。( )
3.Java中所有的变量,不管是成员变量还是局部变量( ),在使用前都必须进行初始化。( )
4.在Java中对象可以赋值,只要使用赋值运算符即可,相当于生成了一个各属性与赋值对象相同的新对象。( )
5.System.out.println(“Hello java!”)中out是System类的一个静态成员变量。( )
6.构造方法用于创建对象,一般不允许有任何返回值,因此需要在构造方法返回类型处标注为void。( )
7.Java语言为所有的Java程序自动导入包“java.lang”,因此Java程序可以直接用“java.lang”中的类和接口。( T )
四、简答题
1.面向过程和面向对象的区别。(5分)
2.答:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对类和对象的关系
象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
3.类和对象的关系
答:类是对象的一个模板,而对象是类的一个具体实例。
4.构造方法的作用和特征
答:作用:对类进行初始化;构造方法的特征:方法名与类名一致,没有返回值类型
5.this关键字的作用和用法
答:this的作用是在类中通过this访问自身的属性和方法
6.简述static关键字的作用。
提示:从static可以修饰变量,方法,代码块,内部类四个方面来回答。(5分)
五、编码题
1.请定义一个交通工具(Vehicle)的类其中有: 属性: 速度(speed)、 体积(size)等,方法:移动(move())、设置速度(setSpeed(int speed))、加速 speedUp()、减速 speedDown()等。最后在测试类 Vehicle 中的 main()中实例化一个交通工具对象并通过方法给它初始化 speed,size 的值并且通过打印出来。另外调用加速、减速的方法对速度进行改变。
2.编写 Java 程序用于显示人的姓名和年龄。定义一个人类Person。 该类中应该有两个私有属性: 姓名 (name) 和年龄 (age) 。定义构造方法用来初始化数据成员。再定义显示(display()) 方法将姓名和年龄打印出来。在 main 方法中创建人类的实例然后将信息显示。
3.定义一个圆类——Circle,在类的内部提供一个属性:半径®,同时 提供 两个 方 法 : 计算 面积 ( getArea() ) 和 计算 周长(getPerimeter()) 。 通过两个方法计算圆的周长和面积并且对计算结果进行输出。最后定义一个测试类对 Circle 类进行使用。
4.构造方法与重载:定义一个网络用户类,要处理的信息有用户 ID、用户密码、 email 地址。在建立类的实例时把以上三个信息都作为构造函数的参数输入, 其中用户 ID 和用户密码时必须缺省时 email地址是用户 ID 加上字符串"@gameschool.com"。
六、可选题
1.定义一个类 Calculaion, 其中包含四个方法: 加(add()) 、 减(sub()) 、乘(times()) 和除(div()) 。 创建一个具有 main()函数的类。 在 main()函数中创建一个 Calculation 的实例对象并对其中的方法进行调用。
2.定义一个类 Draw , 在 类 中 提供 3 个 方法:输出直角三角形(drawTrian()) 、 输出矩形(drawRec()) 及平行四边形(drawPra()) 。通过方法可以输出由“*” 组成的一个图形。 同时在类中包含两个属性:星号的个数(count) 、行数(lines) 。最后在测试类中进行调用。
3.创建一个空调,并调用制冷、制热、通风功能。空调包含的属性有品牌、匹数、温度,功能有加热、制冷、通风等功能。
4.定义一个表示学生信息的类 Student,要求如下:
(1)类 Student 的属性如下:
sNO 表示学号; sName 表示姓名; sSex 表示性别; sAge 表示
年龄;sJava:表示 Java 课程成绩。
(2)类 Student 带参数的构造方法:
在构造方法中通过形参完成对成员变量的赋值操作。
(3)类 Student 的方法成员:
getNo():获得学号;
getName():获得姓名;
getSex():获得性别;
getAge()获得年龄;
getJava():获得 Java 课程成绩
(4) 根据类 Student 的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生 Java 语言成绩的平均值,以及计算并输出他们 Java 语言成绩的最大值和最小值。
类和对象作业答案
一、填空题
1.方法
2.堆内存
3.构造方法
4.this
5.this
6.static
7.对象名.静态变量名
8.package import class
9.package
10.java.lang
二、选择题
1.D
2.C
3.B
4.AC
5.AC
三、判断题
1.√
2.×
3.×
4.×
5.√
6.×
7.√
四、简答题
答案略
五、编码题
1.请定义一个交通工具(Vehicle)的类其中有: 属性: 速度(speed)、 体积(size)等,方法:移动(move())、设置速度(setSpeed(int speed))、加速 speedUp()、减速 speedDown()等。最后在测试类 Vehicle 中的 main()中实例化一个交通工具对象并通过方法给它初始化 speed,size 的值并且通过打印出来。另外调用加速、减速的方法对速度进行改变。
public class Vehicle {
private int size;
private int speed;
public static void main(String[] args) {
Vehicle ve = new Vehicle();
ve.setSize(10);//设置初始体积
ve.setSpeed(30);//设置初始速度
ve.move();//调用移动方法
ve.speedUp();//给交通工具减速
ve.speedDown();//加速
}
/** 行进 */
public void move(){
System.out.println("行进中......,速度 "+speed+"km/h" );
}
/** 设置速度 */
public void setSpeed(int speed){
this.speed = speed;
System.out.println("初始速度设置为:"+speed+" km");
}
/** 设置体积 */
public void setSize(int size){
this.size = size;
System.out.println("初始体积设置为:"+size+" m^3");
}
/** 加速20 */
public void speedUp(){
this.speed+=20;
System.out.println("速度增加20后为:"+speed+" km");
}
/** 减速10 */
public void speedDown(){
this.speed-=10;
System.out.println("减速10后为:"+speed+" km");
}
}
2.编写 Java 程序用于显示人的姓名和年龄。定义一个人类Person。 该类中应该有两个私有属性: 姓名 (name) 和年龄 (age) 。定义构造方法用来初始化数据成员。再定义显示(display()) 方法将姓名和年龄打印出来。在 main 方法中创建人类的实例然后将信息显示。
public class Person {
private String name;
private int age;
/** 在构造器中初始化成员变量 */
public Person(String name,int age){
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Person p = new Person("张三",18);
p.display();
}
/** 显示姓名和年龄 */
public void display(){
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
}
}
3.定义一个圆类——Circle,在类的内部提供一个属性:半径(r),同时 提供 两个 方 法 : 计算 面积 ( getArea() ) 和 计算 周长(getPerimeter()) 。 通过两个方法计算圆的周长和面积并且对计算结果进行输出。最后定义一个测试类对 Circle 类进行使用。
public class Circle {
private int r;
/** 无参构造 */
public Circle(){}
/** 有参构造,初始化半径*/
public Circle(int r){
this.r=r;
}
/** 也可以使用setR方法初始化半径 */
public void setR(int r){
this.r = r;
}
/**计算 面积 */
public void getArea(){
double area = Math.PI * r * r;//从Math工具类得到π的值
System.out.println("圆的面积为:"+area);
}
/** 计算 周长 */
public void getPerimeter(){
double zc = Math.PI * 2 * r;
System.out.println("圆的周长为:"+zc);
}
}
/** 测试 */
public class Test {
public static void main(String[] args) {
Circle c = new Circle(4);//初始半径为4,使用构造初始化
c.getArea();
c.getPerimeter();
}
}
4.构造方法与重载:定义一个网络用户类,要处理的信息有用户 ID、用户密码、 email 地址。在建立类的实例时把以上三个信息都作为构造函数的参数输入, 其中用户 ID 和用户密码时必须缺省时 email地址是用户 ID 加上字符串"@gameschool.com"。
public class People {
private String id;
private String password;
private String email;
/** 无参构造 */
public People(){
}
/** 全参构造 */
public People(String id,String password,String email){
this.id = id;
this.password=password;
this.email = email;
}
public People(String id,String password){
this.id = id;
this.password=password;
this.email=id+"@gameschool.com";
}
public void show() {
System.out.println("编号:"+this.id);
System.out.println("密码:"+this.password);
System.out.println("邮件:"+this.email);
}
public static void main(String[] args) {
//调用全参构造
People p1 = new People("sxt0001","123456","zhangsan@163.com");
p1.show();
//调用无参构造
People p2 = new People("sxt0002","654321");
p2.show();
}
}
六、可选题
1.定义一个类 Calculaion, 其中包含四个方法: 加(add()) 、 减(sub()) 、乘(times()) 和除(div()) 。 创建一个具有 main()函数的类。 在 main()函数中创建一个 Calculation 的实例对象并对其中的方法进行调用。
public class Calculaion {
private double a;
private double b;
public Calculaion(double a,double b){
this.a=a;
this.b=b;
}
public void add(){
System.out.println("a加b :"+(a+b));
}
public void sub(){
System.out.println("a减b :"+(a-b));
}
public void times(){
System.out.println("a乘b :"+(a*b));
}
public void div(){
System.out.println("a除以b :"+(a/b));
}
public static void main(String[] args) {
Calculaion c = new Calculaion(7.0,3.0);
c.add();
c.sub();
c.times();
c.div();
}
}
2.定义一个类 Draw , 在 类 中 提供 3 个 方法:输出直角三角形(drawTrian()) 、 输出矩形(drawRec()) 及平行四边形(drawPra()) 。通过方法可以输出由“*” 组成的一个图形。 同时在类中包含两个属性:星号的个数(count) 、行数(lines) 。最后在测试类中进行调用。
public class Draw {
private int count, lines;
public Draw(){}
public Draw(int count, int lines){
this.count=count;
this.lines=lines;
}
/** 直角三角形 */
public void drawTrina() {
for (int i = 0; i < lines; i++) {//共lines行
for (int j = 0; j < i; j++) {//每次增加1
System.out.print("*");
}
System.out.println();//换行
}
}
/** 输出矩形 */
public void drawRec(){
for (int i = 0; i < lines; i++) {
for (int j = 0; j < count; j++) {//每行数量固定
System.out.print("*");
}
System.out.println();
}
}
/** 平行四边形 */
public void drawPra(){
for (int i = 0; i < lines; i++) {
for(int k=0;k<i;k++){
System.out.print(" ");
}
for (int j = 0; j < count; j++) {
System.out.print("*");
}
System.out.println();
}
}
public static void main(String[] args) {
Draw d = new Draw(5,5);
//d.drawTrina();
//d.drawRec();
d.drawPra();
}
}
3.创建一个空调,并调用制冷、制热、通风功能。空调包含的属性有品牌、匹数、温度,功能有加热、制冷、通风等功能。
public class AirConditioning {
// 空调属性
String name;
String pinpai;
String hp;// 匹数
int tempeture;
// 定义制冷行为
void cool() {
tempeture--;
}
// 定义加热行为
void hot() {
tempeture += 7;
}
//通风功能
void ventilate(){
System.out.println("空气通畅,温度不变");
}
// 主函数
public static void main(String[] args) {
AirConditioning kt = new AirConditioning();
kt.hp = "2匹";
kt.tempeture = 20;
kt.pinpai = "格力";
kt.cool();
System.out.println("空调的温度是" + kt.tempeture);
kt.hot();
System.out.println("空调的温度是" + kt.tempeture);
kt.ventilate();
}
}
4.定义一个表示学生信息的类 Student,要求如下:
(1)类 Student 的属性如下:
sNO 表示学号; sName 表示姓名; sSex 表示性别; sAge 表示
年龄;sJava:表示 Java 课程成绩。
(2)类 Student 带参数的构造方法:
在构造方法中通过形参完成对成员变量的赋值操作。
(3)类 Student 的方法成员:
getNo():获得学号;
getName():获得姓名;
getSex():获得性别;
getAge()获得年龄;getJava():获得 Java 课程成绩
public class Student {
String sNO ;
String sName;
String sSex;
int sAge;
int sJava;
public Student(String sNO, String sName, String sSex, int sAge, int sJava) {
this.sNO = sNO;
this.sName = sName;
this.sSex = sSex;
this.sAge = sAge;
this.sJava = sJava;
}
public String getsNO() {
return sNO;
}
public String getsName() {
return sName;
}
public String getsSex() {
return sSex;
}
public int getsAge() {
return sAge;
}
public int getsJava() {
return sJava;
}
}
(4) 根据类 Student 的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生 Java 语言成绩的平均值,以及计算并输出他们 Java 语言成绩的最大值和最小值。
public class Test {
public static void main(String[] args) {
Student s1 = new Student("sxt0001", "张三", "男",18,90);
Student s2 = new Student("sxt0002", "李四", "女",15,92);
Student s3 = new Student("sxt0003", "王五", "男",17,93);
Student s4 = new Student("sxt0004", "赵六", "男",21,95);
Student s5 = new Student("sxt0005", "钱七", "男",19,97);
System.out.println("\t学号\t姓名\t姓别\t年龄\t成绩");
System.out.println("\t"+s1.getsNO()+"\t"+s1.getsName()
+"\t"+s1.getsSex()+"\t"+s1.getsAge()+"\t"+s1.getsJava());
System.out.println("\t"+s2.getsNO()+"\t"+s2.getsName()
+"\t"+s2.getsSex()+"\t"+s2.getsAge()+"\t"+s2.getsJava());
System.out.println("\t"+s3.getsNO()+"\t"+s3.getsName()
+"\t"+s3.getsSex()+"\t"+s3.getsAge()+"\t"+s3.getsJava());
System.out.println("\t"+s4.getsNO()+"\t"+s4.getsName()
+"\t"+s4.getsSex()+"\t"+s4.getsAge()+"\t"+s4.getsJava());
System.out.println("\t"+s5.getsNO()+"\t"+s5.getsName()
+"\t"+s5.getsSex()+"\t"+s5.getsAge()+"\t"+s5.getsJava());
int d = (s1.getsJava()+ s2.getsJava()+ s3.getsJava()
+ s4.getsJava()+ s5.getsJava())/5;
System.out.println("java语言平均成绩:"+d);
}
}