嚼口香糖的恶魔  

1. 本周学习总结

初学面向对象,会学习到很多碎片化的概念与知识。尝试学会使用思维导图将这些碎片化的概念、知识组织起来。请使用纸笔或者下面的工具画出本周学习到的知识点。截图或者拍照上传。

2. 书面作业

Q1.代码阅读

public class Test1 {
    private int i = 1;//这行不能修改
    private static int j = 2;

    public static void main(String[] args) {
        geti();
        Test1.getj();
    }

    public static void geti() {
        System.out.println(i);
    }

    public static void getj() {
        System.out.println(j);
    }

}

以上代码可否编译通过?哪里会出错?为什么?尝试改正?
如果创建3个Test1对象,有内存中有几个i,几个j?请分析原因?

答:

如图所示编译不通过,有两处错误。(1)Test1.getj()尚未定义方法,不可直接调用。(2) geti为静态变量,无法直接调用非静态变量i。
如果创建3个Test1对象,则有3个i和1个j。因为j为静态变量,只占用了一个内存,而i为非静态,所以占了3个内存。

Q2.构造函数有什么用?其编写格式是什么?如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?

答:构造函数可以根据需要编写一个数据间的关系,也可以对数据进行初始化。格式为public/private 类名(){}。如果一个类中只有带参的构造函数,系统会为其自动生成一个无参构造函数。如果一个类中只有带参的构造函数,那么构造完便不会有无参构造函数。

Q3.使用java.lang.Math类的函数时,为什么不需要new?如果new Math()会产生什么错误?分析原因?

答:Math函数final类,不允许被继承,而且是私有的,外部无法调用,所以不需要new,会产生错误。

Q4.什么是重载?什么是构造函数重载?在java.lang.Math类中举出1个函数重载的例子?怎么才能区分两个重载函数?

答:重载就是函数名相同。构造函数重载就是可以写多个构造函数,参数类型、个数不同。和普通函数重载是一样的。

要区分两个重载函数,可以使其参数类型不同,如一个int型,一个double型;或者可以使参数个数不同。

Q5.final修饰的变量不能改变,为什么如下代码可以正常运行?

final int[] NUMBS= {1,2,3,4,5};
NUMBS[2] = 1;

答:当含有final属性的类被加载进内存并且被实例化的时候,就会为这个final属性分配内存,同时必须对该属性进行初始化,之后不可变。也就是说如果是基本类型的,那么它的值不能再改变;如果是对象,则引用不可变,而对象本身还是可以改变的。

Q6.阅读代码EmployeeTest.java,回答:

(1)为什么其属性均为private?这样设计有什么好处?

答:防止被修改,保证了数据的安全性。

(2)为Employee类增加一个无参构造函数,调用其有参构造函数,设置name为雇员1, salary为3000, hireDay的年月日为2017年3月5日。(粘贴代码)

答:


class Employee
{
   public Employee(String n, double s, int year, int month, int day)
   {
      name = n;
      salary = s;
      GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
      hireDay = calendar.getTime();
   }
   public Employee(){
       this("雇员1",3000,2017,3,5);
   }

(3)为Employee类再增加一个有参构造函数,参数只有name与salary,hideDay为当前日期。(粘贴代码)

答:

public Employee(String n,double s){
       this(n,s,Calendar.getInstance().get(Calendar.YEAR),Calendar.getInstance().get(Calendar.MONTH)+1,Calendar.getInstance().get(Calendar.DAY_OF_WEEK));
   }

Q7.编写函数public static boolean isMondayToFriday()

功能:判断今天如果是周一到周五,直接输出如“上班时间”并返回true,否则输出“休息时间”。
提示:使用LocalDateTime, DayOfWeek
参考资料:
JAVA 8:健壮、易用的时间-日期API - ImportNew.pdf
Java8DateTimeTest.java

答:


import java.time.LocalDate;
import java.time.DayOfWeek;

public class Time {
    public static boolean isMondayToFriday(){
        LocalDate now = LocalDate.now();
        DayOfWeek dayOfWeek = now.getDayOfWeek();
        int d=now.getDayOfMonth();
        if (d>=1&&d<= 5) 
        {
            System.out.println("上班时间");
            return true;
        }
        else
        {
            System.out.println("休息时间");
            return false;
        }       
    }

public static void main(String[] args) {
isMondayToFriday();
    }

}

3. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

4. PTA实验

实验总结:学会了如何初始化一个对象,以及弄清类与对象的关系。
posted on 2017-03-11 17:53  嚼口香糖的恶魔  阅读(142)  评论(1编辑  收藏  举报