201521123072《java程序设计》第三周学习总结
标签: 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);
}
}
以上代码可否编译通过?哪里会出错?为什么?尝试改正?
不可以通过编译,第7行,第11行出错。因为geti()方法是静态的,可是i却是非静态的,应该改为:public void geti(),
Test1 Test=new Test1();
Test.geti();
第7行调用方法时的格式写错了,应该为:Test1.getj();
如果创建3个Test1对象,有内存中有几个i,几个j?
三个i,一个j
2,构造函数有什么用?其编写格式是什么?如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
构造函数的作用:给对象中的属性进行初始化,编写格式为:构造函数名与类名相同即可
如果一个类不写构造函数,它有构造函数
如果一个类中只有带参的构造函数,它没有不带参数的默认构造函数
3,使用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.
*/
public static final double E = 2.7182818284590452354;
}
由上可见,Math类的构造函数是没有参数的,并且为私有的,其他的方法也全为私有的,在外部是不能改变的。
如果new Math(),会提示:The constructor Math() is not visible
4,什么是重载?什么是构造函数重载?在java.lang.Math类中举出函数重载的例子?怎么才能区分两个重载函数?
重载:函数的函数名相同,自变量的类型不同或者参数的个数不同
构造函数重载:函数的函数名与类名相同,自变量的类型不同或者参数的个数不同
java.lang.Math类中函数重载的例子:
根据自变量的类型不同或者参数的个数来区分
5,final修饰的变量不能改变,为什么如下代码可以正常运行?
final int[] NUMBS= {1,2,3,4,5};
NUMBS[2] = 1;
因为数组是对象,用final定义数组对象,只是数组这个对象不可变,即该数组名不能指向其他的数组,但是里面的数值还是可以改变的
6,阅读代码EmployeeTest.java,回答:
为什么其属性均为private?这样设计有什么好处?
为Employee类增加一个无参构造函数,调用其有参构造函数,设置name为雇员1, salary为3000, hireDay的年月日为2017年3月5日。(粘贴代码)
为Employee类再增加一个有参构造函数,参数只有name与salary,hideDay为当前日期。(粘贴代码)
其属性为private,限制了访问权限,可以不让外部随意更改类中已经打包好的代码,体现了封装的特性
为Employee类增加一个无参构造函数:
public Employee(){
this ("雇员1",3000,2017,3,5);
}
为Employee类再增加一个有参构造函数:
public Employee(String name, double salary){
System.out.println(LocalDate.now());//当前日期,当前系统默认时区
}
7,编写函数public static boolean isMondayToFriday()
功能:判断今天如果是周一到周五,直接输出如“上班时间”并返回true,否则输出“休息时间”。
提示:使用LocalDateTime, DayOfWeek
参考资料:
JAVA 8:健壮、易用的时间-日期API - ImportNew.pdf
Java8DateTimeTest.java
public static boolean isMondayToFriday(){
LocalDateTime now = LocalDateTime.now();
DayOfWeek dayOfWeek = now.getDayOfWeek();
if(dayOfWeek!=DayOfWeek.SATURDAY && dayOfWeek!=DayOfWeek.SUNDAY){
System.out.println("上班时间");
return true;
}
else {
System.out.println("休息时间");
return false;
}
}
3. 码云代码提交记录
4. PTA实验
题目集:jmu-Java-03-面向对象1-基础-封装继承 中的编程(5-1, 5-2, 5-3)
实验1:
可以通过以下方法建立对象数组:
Person []persons = new Person[n];
for(int i=0;i<n;i++){
persons[i]= new Person(in.next(),in.nextInt(),in.nextBoolean());
}
学会了用快捷方法写Getter,Setter,toString方法
实验2:
对象建立之后会先执行对象初始区块,若有静态初始区块,则先执行静态初始化块,并且只执行一次,接着才调用指定的构造函数