1.本周学习总结

2.书面作业

1.代码阅读

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() {
            Test1 test=new Test1();
    	System.out.println(test.i);
	}

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

}

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

  • 编译无法通过,i会报错,它不是一个静态的对象。第二行不能更改,所以增加Test1 test=new Test1();
  • 创建了三个Test1对象,内存中有三个i,一个j。因为静态对象的每个类就只有一个存储空间,三个j都是同一个。但是i不是静态对象,所以每次都会创建新的i,所以有三个。

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

  • 构造函数最大的好处是方便,能够便捷的快速调用编写好的一些程序,规则,同时也能区不同类型,用途的不同代码。
  • 编写格式 public(或者private)类名(有无参数都行){}构造函数不写返回类型。
  • 没有。如果一个类,没有定义构造函数,那么系统就会默认有一个无参的构造函数。但是如果定义了一个有参函数,为了保证正确性,系统不会创建无参构造函数。这时候如果还想允许无参构造,就必须显式的声明一个。

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

  • Math()是外部类,Math()类里面的方法是静态的。所以直接使用类访问就可以了。
  • 如果new Math(),那么也找不到math下面的其他方法。

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

  • 重载,简单来说就是函数活着方法有相同的名称,但是参数列表不相同的情况。可使函数、运算符等处理不同类型数据或接受不同个数的参数。
  • 函数名可以相同,但是特征标必须不同。用函数名来确定函数的不同,用特征标来确定重载函数的不同。同时,参数的顺序,类型不同也可以确定重载函数的不同。

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

final int[] NUMBS= {1,2,3,4,5};
NUMBS[2] = 1;
  • 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。这里引用的是int型的变量,但是他的内容还是可以改变的,所以代码可以正常运行。输出NUMBS[2]的答案为1;

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

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

  • 私有的,只能对自己使用,对别的类是不能访问的,也就是说对于别的类来说是隐藏不可见的。如果所有方法都public,万一被调用了本来应该封装的方法,那么很容易造成整个相关程序的修改。危害很大。

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

 public Employee(){
		this("雇员1",3000.0,2015,3,5);
	   }

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

public Employee(String n, double s, LocalDate hireDay)
   {
  name = n;
  salary = s;
  hireDay = LocalDate.now();
   }

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

功能:判断今天如果是周一到周五,直接输出如“上班时间”并返回true,否则输出“休息时间”。

  public static boolean isMondayToFriday()
   {
   	LocalDateTime now = LocalDateTime.now();
   	DayOfWeek dayOfWeek = now.getDayOfWeek();
   	System.out.println(dayOfWeek);
   	if(dayOfWeek!=DayOfWeek.SATURDAY && dayOfWeek!=DayOfWeek.SUNDAY)
   		return true;
   	return false;
   }


 if(isMondayToFriday())
	  System.out.println("上班时间");
  else
	  System.out.println("休息时间");

提示:使用LocalDateTime, DayOfWeek

参考资料:
JAVA 8:健壮、易用的时间-日期API - ImportNew.pdf
Java8DateTimeTest.java

3.码云

4. PTA实验总结

  • 初始化块的修饰符只能是static,使用static修饰的初始化块被称为静态初始化。初始化块里的代码可以包含任何可执行性语句,包括定义局部变量 ,调用其他对象的方法,以及使用分支,循环语句等。{}单纯被一个大括号括起来的叫初始化块,static{}叫做静态初始化。
  • 静态初始化的等级是最高的,会最优先执行
  • Shift+Alt+S,Generate toString()自动补全toString;Generate Getter and Setters,自动添加。
  • Private ,编程语句在模块级别中使用,用于声明私有变量及分配存储空间。使用private修饰符可以完全隐藏类的成员,使得不能从类外直接访问它们。相对的,使用public修饰符允许任何类访问类的成员。
  • 在main函数里调用新建的类中定义的函数,必须先new一个对象,然后对这个对象进行操作。
  • 这次的实验感觉不会太难,而且数量也比较适中,感觉这样挺好的。。。
posted on 2017-03-10 10:39  谷LL  阅读(271)  评论(7编辑  收藏  举报