201521123036 《Java程序设计》第3周学习总结
本周学习总结
初学面向对象,会学习到很多碎片化的概念与知识。尝试学会使用思维导图将这些碎片化的概念、知识组织起来。
书面作业
Q1:代码阅读
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() {
System.out.println(i);
}
public static void getj() {
System.out.println(j);
}
}
以上代码可否编译通过?哪里会出错?为什么?尝试改正?
如果创建3个Test1对象,有内存中有几个i,几个j?
answer:编译无法通过。System.out.println(i)会出错。static是属于类的,非Static是属于对象,每个对象的值可能都不一样。geti是静态方法不能直接调用未经static定义的变量i。
改正如下:
如果创建3个Test1对象,内存中有3个i,1个j。j被static修饰后,在编译时由内存分配一块内存空间,该类的所有对象都会共享这块内存空间。
####Q2:构造函数有什么用?其编写格式是什么?如果一个类不写构造函数,它有构造函数吗?如果一个类中只有带参的构造函数,它有没有不带参数的默认构造函数? answer:在程序中可能会出现重复的流程,可以使用构造函数初始化同类的一个新对象,即属性初始化。编写格式public 类名(){}。构造方法与类名同名,无返回类型,除了public也可用private。 如果一个类不写构造函数,编译程序会自动加入一个无参数,内容为空的构造函数。
###Q3:使用java.lang.Math类的函数时,为什么不需要new?如果new Math()会产生什么错误? answer: Math是final类,不是static类。且构造函数被声明为privata,说明不能被外部调用,所以不能new出来一个新的对象。Math类的所有方法都是静态方法,使用Math.方法名就可以。 强行使用new会提示`The constructor Math() is not visible`此构造函数Math()不可见。
###Q4:什么是重载?什么是构造函数重载?在java.lang.Math中举出函数重载的例子?怎么才能区分两个重载函数? >answer: > - 重载是指在类中可以创建多个同名,不同参数或不同返回值的方法,调用方法时通过传递的参数个数和自变量类型来决定使用哪个方法。 > - 构造函数重载是指当构造函数没有构造方法时,系统会自动加上没有参数的构造函数。 > - 在java.lang.Math中重载函数例子: ![](http://images2015.cnblogs.com/blog/1109832/201703/1109832-20170309204933750-200149771.png) Math()类存在多个函数名为abs,但是参数类型和返回值不同的函数 > - 区分两个重载函数可根据函数的返回值或参数类型。
###Q5:final修饰的变量不能改变,为什么如下代码可以正常运行?
final int[] NUMBS= {1,2,3,4,5};
NUMBS[2] = 1;
answer:final 限定的是NUMBS这个对象。这个对象不能再被修改指向新的对象。但它所指向的对象(NUBMS[2])本身是可以修改的。
###Q6:阅读代码EmployeeTest.java,回答: 6.1为什么其属性均为private?这样设计有什么好处?
answer:用private封装了类私有数据,不希望被外部的类访问。这样可以让用户无法直接存取,而必须通过管理者提供的操作方法,经过定义的流程才有可能存取私有数据。增强了保密性和安全性。
6.2为Employee
类增加一个无参构造函数,调用其有参构造函数,设置name为雇员1
, salary为3000
, hireDay的年月日为2017年3月5日
。
6.3为Employee
类再增加一个有参构造函数,参数只有name与salary,hideDay为当前日期。
##编写函数`public static boolean isMondayToFriday()` 功能:判断今天如果是周一到周五,直接输出如“上班时间”并返回true,否则输出“休息时间”。 >![](http://images2015.cnblogs.com/blog/1109832/201703/1109832-20170310143339467-1471878407.png)
---
码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
##PTA实验总结 - 在IDE中,可以使用程序代码自动产生功能来生成取值方法,点击`source`—>`Generate Constructors from Superclass`,创建一个空参的构造函数;点击`Source` –> `Generate Getters and Setters`自动生成Getter和Setter方法,可提高效率。 - 调用Scanner对象的next()方法获取控制台输入,返回的是一个String类型。虽然没有nextChar()方法,但可使用`str.charAt(0)`来获取第一个字符。 - 在Person类中初始化id时没有使用static静态变量,导致id赋值都为0,没有进行递增。 - Integer是一个对象,int是一种基础数据类型,没办法创建int对象。。。