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

1. 本周学习总结

2.书面作业

Q1.代码阅读

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?

  • 以上代码不可以通过编译。程序执行geti(),Test1getj()时会出错。
    因为i定义的是private,是非静态,而函数geti()则是static,静态不可以调用非静态的对象。
    可以把 System.out.println(i);改成Test1 t = new Test1(); System.out.println(t.i);
    Test1getj()不是已有的函数名,应该改成Test1.getj()。
  • 如果创建3个Test1对象,内存中会有3个i,1个j。因为j属于类而不属于对象,所以实例均共享一个j属性。

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

  • 作用:对类进行初始化操作。
    格式要求类名要与函数名相同,构造函数无返回类型(不是void)。
    一个类不写构造函数,系统默认有一个无参构造方法。
    一个类中只有带参的构造函数,因为系统只默认无参构造函数,所以没有不带参数的默认构造结构函数。

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

Math的源代码为

  public final class Math {

    /**
     * Don't let anyone instantiate this class.
     */
    private Math() {}

    /**
     * The {@code double} value that is closer than any other to
     * <i>e</i>, the base of the natural logarithms.
     */
  • Don't let anyone instantiate this class可见,Math不允许任何人对其进行实例,它是属于整个类的,可以用Math.*方法来直接访问,也就不用new出一个实例对象来进行访问了。
    如果new Math(),eclipse会提示Math() is not visible错误。

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

  • 重载是指创建具有相同名称不同结果的方法。
    构造函数重载是指从一个构造函数调用另一个构造函数,即两个函数具有相同的函数名,但每一个构造函数必须有它自己唯一的参数列表。

    可以根据不同的输入参数区分不同的重载函数。

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

final int[] NUMBS= {1,2,3,4,5};
NUMBS[2] = 1;
  • final关键字是用来修饰引用类型变量,变量的值(引用)不能修改,但是变量指向的对象的值可以修改

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

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

  • 因为用private修饰的变量外部函数无法访问,即不会被人从外部修改一些员工的信息。

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

    public Employee(){
      name = "雇员1";
      salary = 3000;
      GregorianCalendar calendar = new GregorianCalendar(2017, 3, 5);
      hireDay = calendar.getTime();

}

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

    public Employee(String name, double salary){
           name = this.name;
           salary = this.salary;
           GregorianCalendar calendar = new GregorianCalendar(2017, 3, 11);
           hireDay = calendar.getTime();
   }

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

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

import java.time.LocalDateTime;
import java.time.DayOfWeek;
import java.util.Scanner;

public class Test{
	public static boolean isMondayToFriday(int dat){
		LocalDateTime now = LocalDateTime.now();
		DayOfWeek dayOfWeek = now.getDayOfWeek();
		int a = dat;
		if(a>=1&&a<=5){
			System.out.println("上班时间");
			return true;
		}
		if(a==6||a==7) {
			System.out.println("休息时间");
			return false;
		}
	}
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int i = in.nextInt();
		Test.isMondayToFriday(i);
	}
}

码云代码提交记录

pta实验总结

  • 熟悉和练习了构造函数的方法,以及setter、getter的使用。快捷键的使用能让写代码减少很多不必要浪费的时间。
    后两题暂时还未成功
posted @ 2017-03-11 15:41  冬冬冬  阅读(293)  评论(8编辑  收藏  举报