《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;
    }
}

构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。
1.必须在同一个类2.方法名相同3.方法参数个数或参数类型(或参数顺序)不同
否,构造函数 Foo()未定义。
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;
}

编译错误,未对对象进行实例化。通过new对arr[1]实例化。
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中是如何实现封装性的?试举例说明。
封装就是指对外部不可见,外部只能通过对象提供的接口来访问。

public class Test
{
    public static void main(String args[]){
        Clerk clerk1=new Clerk("qingfeng",22,5321.12f);
        System.out.println("名字为"+clerk1.name+"薪资为"+clerk1.getSalary());  //只能通过授权的操作(成员方法)进行访问
        
    }
}
class Clerk
{
    public String name ;
    private int age;
    private float salary;
    public Clerk(String name, int age, float sal){     //构造方法
        this.name = name;
        this.age = age;
        this.salary = sal;
    }
    public float getSalary(){      //成员方法
        return this.salary;
    }
}

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是私有属性,不能通过对象直接访问。
(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 进行静态引用。
6.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。

class Book{
    int bookId;
    String bookName;
    double price;
    // 声明静态变量
    static int num=1000;
    //定义静态代码块对静态变量初始化
    
    //构造方法
    Book (String bookName,double price){
    	this.bookName=bookName;
    	this.price=price;
    	bookId=num++;
    }
     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 num;
    }
    //重写toString方法
    public String toString(){
    	return "编号:"+this.bookId+"书名:"+this.bookName+"书价:"+this.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。
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
1.私有构造方法 2.私有静态引用指向自己实例 3.以自己实例为返回值的公有静态方法

public class Sun {
        private Sun() {};
        public static Sun instance = new Test();
        public Sun getInstance() {
                return instance;
        }
}

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。值传递不会改变原有属性的值。
(二)实验总结
1.用面向对象思想完成评分系统
程序设计思路:创建选手类,评分类,测试类,在测试类中创建选手对象,评分类为每位选手打分。
问题:直接用冒泡排序,没用Arrays方法
原因:不会用,没理解
解决方案:同学讲解
2.Email验证
程序设计思路:编写一个方法,判断一个email地址是否有效。在main方法中对该方法进行测试。
问题:没用条件嵌套优化程序
原因:没想到
解决方案:同学指出
3.查找子串
程序设计思路:编写一个方法,查找在一个字符串中指定子串出现的次数。在main方法中输入字符串和查找的子串,对该方法进行测试。
问题:将字符串换成字符数组,进行比较
解决方案:利用substring方法截取字符串进行比较
4.统计文件
程序设计思路:
问题:将文件类型首字母大写,未将文件名首字母大写
原因:为弄清题意
解决方案:仔细读题
5.类的设计
问题:搞不清关系
三)代码托管(务必链接到你的项目)
码云提交历史截图
上传实验项目代码到码云,在码云项目中选择“统计-提交”,设置搜索时间段,搜索本周提交历史,并截图。
https://gitee.com/hebau_java_cs16/Java_CS02CQ/tree/master/ex02/src

原文地址:https://www.cnblogs.com/chenqiu/p/8688889.html