《Java技术》第二次作业--面向对象基础

(一)学习总结

1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?


public class Test {
    public static void main(String args[]) {
       Foo obj = new Foo();
    }
}
class Foo{
    int value;
    public Foo(int intValue){
        value = intValue;
    }
}

构造方法:没有返回值,名字与类名相同,当创建对象时会调用构造方法(如果没有写构造方法,那么编译器会自动添加无参构造方法);

构造方法的重载:当有多个构造方法时(无参,有参,以及参数不同的多种构造方法)会用到构造方法的重载;

该程序不能通过编译。因为定义了有参的构造方法,在编译时编译器不会再自动创建无参构造方法,而在调用构造方法时却又想调用无参构造方法;

解决办法:手动创建无参构造方法。

2.运行下列程序,结果是什么?分析原因,应如何修改。


public class Test {
    public static void main(String[] args) {
        MyClass[] arr=new MyClass[3];
        arr[1].value=100;
    }
}
class MyClass{
    public int value=1;
}

结果:运行错误;

原因:创建了对象数组后没有对数组每一个元素分别进行实例化。

解决方法:arr[1]=new MyClass();arr[1].value=100;

3.运行下列程序,结果是什么?说明原因。


public class Test {
    public static void main(String[] args) {
        Foo obj1 = new Foo();
        Foo obj2 = new Foo();
        System.out.println(obj1 == obj2);
    }
}
class Foo{
    int value = 100;
}

结果:false;

原因:每次实例化一个对象时,系统会分配一块内存地址给这个对象,用==判断的时候时是判断的地址,因为两个对象的地址不同,所以它们不会相等。

4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。

封装性:封装性是指有些信息是封闭的,并不是所有人都可以看到;

封装性的实现:Java的封装是通过private修饰符来声明属性和方法实现的;

例子:


public class Date {
    private int year;
    public int month;
    public int day;
}

这个Date类里面的year是封装的,当你定义一个对象Date d=new Date();,关于对象d,可以使用d.month和d.day;但是不能使用d.year;

5.阅读下面程序,分析是否能编译通过?如果不能,说明原因。

(1)


class A{
    private int secret = 5;
}
public class Test{
    public static void main(String args[]){
        A a = new A();
        System.out.println(a.secret++);
    }
}

编译不能通过,因为secret前面写了private,属于私有类,不能再其他类里面直接调用;

(2)


public class Test{
    int x = 50;
    static int y = 200;
    public static void method(){
        System.out.println(x+y);
    }
    public static void main(String args[]){
        Test.method();
    }
}

编译不能通过,以为x不是static类型的,所以不能再static类型的 method里面用;

解决方法:在x前面加static。

6.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。


class Book{
    int bookId;
    String bookName;
    double price;

    static int x;// 声明静态变量
   static{
        x=1000;                 // x=0;//定义静态代码块对静态变量初始化
   }
    public Book(String bookName,double price) {//构造方法
        this.bookName=bookName;
        this.price=price;
        this.bookId=x;
        x++;
    }
     public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public  static int totalBook() {//定义方法求图书总册数
        return x-1000;
    }

    public String toString() {          //重写toString方法
        return "图书编号:"+bookId+",图书名称:"+bookName+",图书价格:"+price;
    }

}
public class Test{
    public static void main(String args[]){
        Book[] books = {new Book("c语言程序设计",29.3),
                        new Book("数据库原理",30),
                        new Book("Java学习笔记",68)};
        System.out.println("图书总数为:"+ Book.totalBook());
        for(Book book:books){
            System.out.println(book.toString());
        }
    }
}

7.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。

单例模式:核心结构中只包含一个被称为单例的特殊类。

特点:通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。


public class Sun{
    private static Sun instance=null;
    public static synchronized Sun getInstance(){
        if(instance==null){
               instance=new Sun();
        }
        return instance;
    }
    private Sun(){
    }
}

8.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。


public class Test {
    String str = new String("你好  ");
    char[] ch = { ‘w‘,‘o‘,‘l‘,‘l‘,‘d‘ };
    public static void main(String args[]) {
        Test test = new Test();
        test.change(test.str, test.ch);
        System.out.print(test.str);
        System.out.print(test.ch);
    }
    public void change(String str, char ch[]) {
        str = "hello";
        ch[0] = ‘W‘;
    }
}

结果:你好 Wolld;

原因:char型传递的是地址,所以结果会改变,而String在传递的时候是新建了一个地址来储存要传递的内容,新地址的内容发生改变,原地址的不会发生改变;

(二)实验总结

1.用面向对象思想完成评分系统

程序设计思路:输入选手数,评委数,然后输入选手信息,让所有评委对输入的选手进行打分,打完分之后将结果排序,去掉最高分和最低分,在算出平均分,将最终的平均分传到选手的信息中,作为选手的成绩;

问题1:不了解封装性的意思,错误的以为不能再封装里面进行任何的信息输入;

解决方法:在评委类里面输入打分数据;

2.Email验证

这个题没问题。

3.查找子串

这个题没问题。

4.统计文件

问题1:对于一些特殊的情况,考虑的不够全面,比如当一个文件名里面包含多个‘.‘;

解决方法:这种情况下我们需要找到最后一个‘.‘,然后去这‘.‘后面的东西,用一个循环来处理不停的查找‘.‘,然后去‘.‘后面的内容,知道该内容里面不含有‘.‘;

5.类的设计

问题1:将两个类之间建立联系;

解决方法:两个类之间互相建立对方的对象,然后进行调用;

例如:d[i].getE()[c].toString();d为Department类的对象,而getE()为Employee类的函数;

https://gitee.com/jiamusi/java-hebau/tree/master/daima

原文地址:https://www.cnblogs.com/w123/p/8672457.html

时间: 2024-10-10 06:56:46

《Java技术》第二次作业--面向对象基础的相关文章

java技术第二次作业

(一)学习总结 1.什么是构造方法?什么是构造方法的重载? 构造方法是用于对对象初始化的方法,当新对象被创建的时候,构造函数会被调用. 每一个类都有构造函数.在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数. 构造函数的重载是函数名与类名相同,参数类型不同,参数不同. 1.构造方法的名称必须与类名一致 2.构造方法的声明处不能有任何返回值类型的声明 3.不能在构造方法中使用return 4.当自己声明构造方法后,系统不再创建默认的无参构造方法 下面的程序是否可

软件测试技术第二次作业

问题描述:假设商店货品价格(R)皆不大于100元(且为整数),若顾客付款在100元内(P) ,求找给顾客之最少货币 个(张)数?(货币面值50元(N50),10元(N10),5元(N5),1元(N1)四种). 请采用边界值测试方法中的健壮性测试方法对以上问题设计测试用例,注意需从输入定义域及输出值域两方面进行考虑,并给出详细的分析过程. 备注:以上作业请于2015年10月20日(含)之前做好将一个word或excel文件,以"学号姓名第二次作业"命名,并以附件附件形式发送到[email

java程序设计作业 c.njupt.edu.cn java实现第二次作业

王利国的"Java语言程序设计第2次作业(2018)"详细 作业结果详细 总分:100 选择题得分:60 1. 表达式9==8&&3<7的运算结果是( ) A.1 B.0 C.true D.false 正确答案是: D 2. 表达式(3>2)?8:9的运算结果是( ) A.3 B.2 C.8 D.9 正确答案是: C 3. 表达式9-7<0||11>8的运算结果( ) A.true B.false C.1 D.0 正确答案是: A 4. 表达式4

JAVA研发面试题总结——面向对象基础

前两天总结了阿里巴巴的笔试,因为之前也参加过一些面试,现在总结下通用面试题吧(不包含问项目的).九月份即将参与面试的童鞋可以参考参考. 异常有哪些? 主要分为:RuntimeException与CheckedException,CheckedException是在编译时候检查的,比如IOException.ClassNotFoundException.ServletException,如果不捕捉或者抛出异常,不能通过编译(之所以需要显式抛出,我个人理解是因为可以预想到的,极容易出现的):而Run

# 《Java技术》第一次作业

(一)学习总结 1.Scanner类数据的使用方法 需要导入java.util.Scanner 每种数据都有对应的输入方法: 需要留意的是String类型,next()方法碰到空格或者回车即结束输入,如果需要输入一整行,包含空格,应该用nextLine(): char 类型,没有输入的方法: package java练习; import java.util.Scanner; public class S1 { public static void main(String[] args) { //

第二十五节:Java语言基础-面向对象基础

面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基于面向过程的.以前是主要以面向过程为思想,现在是将功能装进对象中,如果要用到功能时,就调用该对象即可. 面向对象是入门思想的进步,适用于人类的思考,将复杂的东西进行了简单化,将我们程序员从执行者变化成指挥者.由以前面向功能(面向过程)转变为面向对象(封装的功能). **** 面向对象设计思想 设计思

2017面向对象程序设计(Java)第二周学习总结

2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为第一周学长正在家里吃西瓜吹空调.好了,闲言少叙.我先为你们介绍一下助教的职责,而后再对你们的学习情况进行总结! 身为你们本学期Java课程的助教...之一,我的任务是:指导你们学习,批改我所负责学习小组的实验作业.阅读博文并回复.其他学习小组会有另外三位助教负责.由于我们每周五都会汇总你们的情况,其

Java 技术体系基础概念

Java 技术体系基础概念 =============================================================================== 概述: =============================================================================== 编程语言: [百度百科解释] 编程语言俗称"计算机语言",种类非常的多,总的来说可以分成机器语言.汇编语言.高级语言三大类.电脑每做的

java的第二个实验——JAVA面向对象程序设计

java的第二个实验——JAVA面向对象程序设计 北京电子科技学院 实     验    报     告 课程:Java程序设计 班级:1352 姓名:林涵锦 学号:20135213 成绩:        指导教师:娄嘉鹏  实验日期:2015.4.14 实验密级: 预习程度:  实验时间:19:30~21:50 仪器组次:13 必修/选修:选修 实验序号:2 实验名称:JAVA面向对象程序设计 实验目的与要求: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态