201521123015 《Java程序设计》第3周学习总结

  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)不能通过编译,有两处错误,第一是Test1getj(),代码中并无次方法,第二是public static void geti()这个方法,因为i不是静态变量,系统会报 错(j的定义是private static int j = 2,是静态变量,所以public static void getj()可通过)
(2)第一个错误修改,可以建立先关方法private static void Test1getj(),第二个错误可以把public static void geti()改为public void geti()
(3)会有3个i,1个j,因为i不是静态变量,每个对象都有其i值,但j不同,j是静态变量,不属于任何一个独立的对象,所以j只有1个

Q2.构造函数有什么用?其编写格式是什么?如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
答:如果定义类时,没有撰写任何构造函数,编译程序会自动加入一个无参数,内容为空的构造函数。所以如果类中有了构造参数,程序就不会加入默认的构造函数了。

Q3.使用java.lang.Math类的函数时,为什么不需要new?如果new Math()会产生什么错误?分析原因?
答:Math类本身不是静态的,但它的方法以及成员变量都是静态的,使用Math.方法名就可以,使用new Math()会报错。

Q4.什么是重载?什么是构造函数重载?在java.lang.Math类中举出1个函数重载的例子?怎么才能区分两个重载函数?
答:重载是指就是方法名相同,参数的个数或类型不同;构造函数重载是指只要参数的个数或类型不同,就可以在类中定义多个构造函数
void fun(int x) {……};void fun(double x) {……}

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

final int[] NUMBS= {1,2,3,4,5};
NUMBS[2] = 1;
答:NUMBS这个对象是不能变得,但是它指向的内容是可以变的

Q6.阅读代码EmployeeTest.java,回答:
1.为什么其属性均为private?这样设计有什么好处?
2.为Employee类增加一个无参构造函数,调用其有参构造函数,设置name为雇员1, salary为3000, hireDay的年月日为2017年3月5日。(粘贴代码)
3.为Employee类再增加一个有参构造函数,参数只有name与salary,hideDay为当前日期。(粘贴代码)
(1)本代码创建了3个独立的对象,如果不使用pravate的话,其属性将会随输入值的不同而改变(外部操作),导致对象的属性发生错误,用private,只对起内部的改变而改变(内部操作),使得独立对象各自的属性不变
(2)
public Employee()
{
name="雇员1";
salary = 3000;
GregorianCalendar calendar = new GregorianCalendar(2017, 3, 5);
// GregorianCalendar uses 0 for January
hireDay = calendar.getTime();
}
(3)
public Employee(String name, double salary){

     Calendar Day=Calendar.getInstance();   
     Day.get(GregorianCalendar.YEAR);
     Day.get(GregorianCalendar.MONTH); 
     Day.get(GregorianCalendar.DAY_OF_MONTH);

}

Q7.编写函数public static boolean isMondayToFriday()
功能:判断今天如果是周一到周五,直接输出如“上班时间”并返回true,否则输出“休息时间”。
提示:使用LocalDateTime, DayOfWeek
参考资料:
JAVA 8:健壮、易用的时间-日期API - ImportNew.pdf
Java8DateTimeTest.java
public static boolean isMondayToFriday(){
LocalDate date = LocalDate.now();
int day=LocalDateTime.getDayOfWeek().getValue();
if (day>=1&&day<=5){
system.out.Println("上班时间");
return true;
}
else{
system.out.Println("休息时间");
retun false;
}
}

posted on 2017-03-11 17:03  王华俊  阅读(132)  评论(1编辑  收藏  举报