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);
}
}
1.以上代码可否编译通过?哪里会出错?为什么?尝试改正?
答:以上代码不能编译通过。共出现了2个错误。错误1:Test1getj();一行会发生错误,因为Test1getj()未定义,可以通过创建一个private static void Test1getj()函数来改正;。错误2:System.out.println(i);一行发生错误,因为无法在静态方法中引用非静态变量,可以通过修改private static int i = 1或者修改函数public static void geti() 为public void geti()来改正。
2.如果创建3个Test1对象,有内存中有几个i,几个j?请分析原因?
答:如果创建3个Test1变量,内存中有3个i,1个j。因为静态变量在类能被一个类的所有实例对象所共享,并且只有一份存储空间,而非静态变量对于每个对象都会分配存储空间。
Q2. 回答问题
1.构造函数有什么用?其编写格式是什么??
答:构造函数的主要目的是为了在实例化对象的同时为这个对象的属性进行赋值(即完成对象的初始工作,并把定义对象时的参数传给对象的域)。
编写格式:
class 类名称 { 访问修饰符 类名称() { 初始化操作; } }
2.如果一个类不写构造函数,它有构造函数吗?3.如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数?
答:在JAVA中的每一个类都至少有一个构造函数。如果一个类没有定义构造函数,系统会自动创建默认的一个无参函数(没有任何代码即什么都不做)。若在类中构造了带参函数,系统不再提供默认的无参构造函数。
Q3. 使用java.lang.Math类的函数时,为什么不需要new?如果new Math()会产生什么错误?分析原因??
答: Math本身虽然不是一个静态类,但是其方法以及成员变量都是静态的,可以用类名.静态变量名/类名.静态方法来直接访问。若new Math()在eclipse中会产生“The constructor is not visible”的错误即所构造函数不可见。
(java.lang.Math类所有常见函数的方法和描述见http://www.yiibai.com/javalang/java_lang_math.html)
Q4. 回答问题
1.什么是重载?什么是构造函数重载?
答:重载指的是在一个类中可以声明多个同名的方法而方法中参数的个数或者数据的类型不一致;构造函数重载是指只要每个构造函数的参数类型或者参数个数不同就可以在一个类中定义多个构造函数。
2.在java.lang.Math类中举出1个函数重载的例子?怎么才能区分两个重载函数?
答:在java.lang.Math类中举出函数重载的例子有很多,比如:
static double abs(double a) //此方法返回一个double值的绝对值.
static float abs(float a) //此方法返回一个float值的绝对值.
static int abs(int a) //此方法返回一个int值的绝对值.
static long abs(long a) //此方法返回一个long值的绝对值.
根据函数重载的定义,区分重载函数的依据在于这些函数的参数的数量、参数的顺序和参数的类型。不同的重载函数的参数的数量、参数的顺序和参数类型至少有一个不相同。
Q5. 回答问题
final修饰的变量不能改变,为什么如下代码可以正常运行??
final int[] NUMBS= {1,2,3,4,5};
NUMBS[2] = 1;
答:final 对于常量来说,意味着值不能改变。但是对于变量来说又不一样了,只是标识这个引用不可被改变,但如果本身有方法修改其中的成员变量,是允许修改的。举一个例子:我们定义了一个final的电脑,这个电脑的外观和里面存的东西都是允许改变的,但我们拥有这台电脑这个事实就不会改变。
Q6. 阅读代码EmployeeTest.java,回答:
1.为什么其属性均为private?这样设计有什么好处?
答:private关键字修饰可以对成员变量的访问做出限定,不允许外界随意访问。(即私有属性只能在它所在的类中被访问,以此可以保护私有变量)
2.为Employee类增加一个无参构造函数,调用其有参构造函数,设置name为雇员1, salary为3000, hireDay的年月日为2017年3月5日。(粘贴代码)
答:
public Employee() {this("雇员1", 3000.0, 2017, 3, 5);
}
3.为Employee类再增加一个有参构造函数,参数只有name与salary,hideDay为当前日期。(粘贴代码)
答:
public Employee(String name, double salary)
{name="雇员1";salary = 3000;Calendar Day=Calendar.getInstance(); Day.get(GregorianCalendar.YEAR);Day.get(GregorianCalendar.MONTH); Day.get(GregorianCalendar.DAY_OF_MONTH);Day.get(GregorianCalendar.HOUR); Day.get(GregorianCalendar.MINUTE); Day.get(GregorianCalendar.SECOND);//得到当前时间 某年某月某日某时某分某秒
}
Q7. 编写函数public static boolean isMondayToFriday()
功能:判断今天如果是周一到周五,直接输出如“上班时间”并返回true,否则输出“休息时间”。
提示:使用LocalDateTime, DayOfWeek
public static boolean isMondayToFriday() {
LocalDateTime localDateTime = LocalDateTime.now();
int day = localDateTime.getDayOfWeek().getValue();
if (day >&#61; 1 && day <&#61; 5) {System.out.println&#xff08;“上班时间”&#xff09;;return true;
}
elseSystem.out.println&#xff08;“休息时间”&#xff09;;return false;
}
3.本周码云代码Commit历史截图
在码云的项目中&#xff0c;依次选择“统计-Commits历史-设置时间段”,然后搜索并截图&#xff0c;如下图所示
4. PTA实验总结记录
实验一&#xff1a;
1.private关键字&#xff08;限定成员变量的访问&#xff0c;保护私有属性&#xff09;、this关键字&#xff08;访问成员变量或成员方法等&#xff09;、setter\getter&#xff08;设置器和访问器&#xff09;、toString&#xff08;&#xff09;的用法&#xff08;把对象转换成String类型&#xff09;、String.format的用法&#xff08;用于创建格式化的字符串、连接多个字符串对象&#xff09;
2.eclipse自动生成getter和setter方法
实验二&#xff1a;
1.static关键字&#xff08;修饰成员变量、成员方法以及代码块等&#xff09;&#xff0c;注意其特殊性。
2.构造函数、非静态初始化块、静态代码块都是用于初始化&#xff0c;三者的执行顺序依次是&#xff1a;静态代码块>构造代码块>构造函数。
有助于理解的小链接&#xff1a;http://blog.csdn.net/jeep_ouc/article/details/26412191
实验三&#xff1a;
1.eclipse自动生成toString的方法。
2.arrays.deepToSring的用法。&#xff08;多维数组&#xff09;
3.理解继承和多态的思想。(难&#xff09;