第二次作业

(一)学习总结

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

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

构造方法的主要作用是为类中的属性初始化构造方法的名称必须与类名一致;构造方法声明处不能有任何返回值类型的声明;不能在构造方法中使用return返回一个值
构造方法的重载,方法名称相同但是参数的类型和参数的个数不同,由此以完成不同功能方法的调用
程序不能通过编译
因为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;
}
···
结果报错
因为没有对arr[1]进行实例化在 arr[1].value=100;前加上arr[1]=new MyClass();

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中是如何实现封装性的?试举例说明。
封装性就是指对外部不可见,把对象的成员属性和成员方法结合成一个独立的相同单位
如何实现封装
属性封装:private 属性类型 属性名称;
方法封装:private 方法返回值 方法名称(参数列表){}
只要是被封装的属性只能通过setter和getter方法设置和取得

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++);
    }
}

不能,因为private对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();
    }
}

不能,因为方法是static,但是x前没有static

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

class Book{
    int bookId;
    String bookName;
    double price;
    // 声明静态变量
    public static a
    //定义静态代码块对静态变量初始化
    static{
        a=0;
    }
    //构造方法
     public Book(String bookName,double price ){
         this.bookName=bookName;
        this.price =price ;
        a++;
        this.bookId=1000+a;
    }
     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 int totalBook(){
          return a;
     }
    //重写toString方法
     public string toString(){
       return "编号"+bookld+“书名”+bookName+"价格"+"price "+"图书总数目为"+a;
    }
}
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.整个系统都要使用这个实例

class Sun {
     . private Sun instance =  new Sun();
      private Sun(){ 
      }
    public static Sun getInstance() {
        if (instance == null) {
            instance = new Sun();
        }
        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.用面向对象思想完成评分系统
声明选手类,打分类,测试类,通过测试类对选手类打分类中的对象进行调用,以完成对应的功能
2.Email验证
输入一个email地址,对满足有效的email条件进行判断其中利用String类的常用方法完成各项功能
3.查找子串
输入字符串和要查找的子串,通过循环来查找子串,查到后变量加一,而且循环下次查找从第一次查找到的下标位置处继续
4.统计文件
用str.substring()进行截取,然后toUpperCase()变大写

原文地址:https://www.cnblogs.com/jg666666/p/8688799.html