201521123059 《Java程序设计》第三周学习总结

1. 本周学习总结

2. 书面作业

1.代码阅读

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

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

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

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

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

  答:以上代码编译不能通过。编译时在 System.out.println(i)处出错,因为静态方法不能调用一个非静态成员。如果改正的话需要在这个静态中创建一个自身的对象。
      如果创建3个Test1对象,在内存中有3个i,1个j。

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

  答:构造函数的作用是对类进行初始化操作,如初始化类的属性值。如果一个类不写构造函数它也会有构造函数,因为编译器会自动生成一个默认为空的构造函数。如果一个类中只有带参的构造函数,他没有不带参数的默认结构函数了,为了确保准确性,系统不会创建无参构造函数,这时候,如果还想允许无参构造,就必须显式的声明一个。
      格式为
    ```
     public void test(String a){
        另一些需要的代码
     }
    ```

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

  答:由于构造函数被声明为私有的,就是说明不能被外部调用,所以static修饰的都可以直接用类名去调用。如果强行使用new Math()则会系统报错,编译不成功。

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

java.lang.Math的源代码如下

  答:重载就是方法名相同,参数(个数或类型)不同(称之为签名不同);构造函数的重载是从一个构造函数中调用另一个构造函数;可以通过不同的参数区分重载函数,因为不仅参数类型有的差异,而且参数顺序也会不同。如果利用函数返回值来区分时,是不能分别出来的,因为编译器分辨不出该调用哪个函数,所以利用函数返回值不能分辨两个重载函数。

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

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

  答:final是修饰引用类型变量的,final修饰的变量不能改变其值,但对于引用对象的值可以改变 。

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

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

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

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

解答:
1.属性均为private这样的好处是用户不能够随意操作类的成员变量,或者用户可以通过自己所指定的方法来操作类成员变量。
2.代码如下
 public Employee(String name, folat salary, int year, int month, int day) { 
     GregorianCalendar calendar1 = new GregorianCalendar(year, month, day);
     hireDay = calendar.getTime();
  }
 public Employee() {
   this("雇员1", 3000.0, 2017, 3, 5);
  }
 3.代码如下
 public Employee(String name, double salary , Date hireday){
       getName();
       getSalary();
       getHireDay();
   }

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

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

  代码如下
  public static boolean isMondayToFriday() {
    LocalDateTime localDateTime = LocalDateTime.now();
    int day = localDateTime.getDayOfWeek().getValue();
    if (day >= 1 && day <= 5) {
        return true;
    }
    return false;       
 }

3. 码云代码提交记录

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

4. PTA实验

.题目集:jmu-Java-03-面向对象1-基础-封装继承 中的编程(5-1, 5-2, 5-3)
.一定要有实验总结

  实验总结
  (1).实验课上老师教我们在在eclipse里面自动生成toStrig的方法,这可以快速的写成toString函数而且可以有效的减少我们的犯错。
  (2).在eclipse里面写的Main函数是与PTA里面的要求不一定一样,在eclipse里面编写时尽量用Main不用Main1~~~等等,因为在PTA里面只要Main能编译成功,一般我们在eclipse里面编写完成时我们都会忘记改Main函数的Main,所以为了加快效率我们尽量一开始就用Main。
  (3).setter/getter,设置器和访问器。我们之前说到了,通常将成员变量声明为private,是为了防止直接访问成员变量而引起的恶意操作。但是,这并不是不允许访问,我们可以通过setter和getter方法来完成。Eclipse可以自动生成getter和setter方法,在左上角Source菜单栏里
   (4).通过实验我们了解到了toString和deepToString的区别,即Array.toString方法当接受的数组中还有数组时打印出的仅是该内嵌数组的名字,Array.deepToString方法会将内嵌数组的内容也打印出来,不管数组内嵌多少层,都会循环递归到最内层的数据.另外,当数组中的数组有死循环般的引用时,也有相应的保护机制防止死循环 ;deepToString方法主要用于多位数组 而toSring不能用在多维数组中
  (5).PTA答案的格式比较单一,系统只默认了一种对的输出格式,所以在我第一次实验写好时,而且输出答案都是正确的,但在PTA里面提交了挺多次都不成功,直到我问了同学才知道只要有一个空格不符合格式要求就会不成功,并在同学的帮组下成功提交了实验。所以在eclipse里面执行输出时一定要按照格式要求输出。
  (6).写实验之前先把实验构思好,大概写出伪代码,不然边想编写时容易出错也容易出现暂时没思路。

posted @ 2017-03-10 17:09  叶~文柠  阅读(242)  评论(4编辑  收藏  举报