本周学习总结
初学面向对象,会学习到很多碎片化的概念与知识。尝试学会使用思维导图将这些碎片化的概念、知识组织起来。
书面作业
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中重载函数例子:
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,否则输出“休息时间”。
码云代码提交记录
在码云的项目中,依次选择“统计-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对象。。。
来源:https://www.cnblogs.com/zyjjj/p/6520414.html