博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
201521123055 《Java程序设计》第3周学习总结
阅读量:4353 次
发布时间:2019-06-07

本文共 2832 字,大约阅读时间需要 9 分钟。

1. 本章学习总结

pVVGk9J.png

2. 书面作业

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);}}

(1)以上代码可否编译通过?哪里会出错?为什么?尝试改正?

(2)如果创建3个Test1对象,有内存中有几个i,几个j?请分析原因?

(1)ActkSV5.png

根据编译器提供的错误信息可知,geti为静态方法,调用的必须是静态变量

将geti声明为非静态方法,并在main中实例化,则可调用变量i,修改后代码如下:

public class Test1 {private int i = 1;//这行不能修改private static int j = 2;public static void main(String[] args) {    Test1 test1=new Test1();    test1.geti();    Test1.getj();}public void geti() {    System.out.println(i);}public static void getj() {    System.out.println(j);}}

(2)创建Test1数组存储三个Test1对象并进行初始化,利用Arrays.toString进行查看

8nmQtlK.png

得知变量i有三处地址,而j由于是静态变量,属于Test1类,所以不管实例化多少次,都只有一个存储地址。

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

构造函数是用于初始化类的方法,编写格式如下:

classname(Object o,....){    this.o=o;    .....}

若一个类不编写构造函数,则系统默认其有无参构造函数,即:

classname(){}

若一个类已经编写了构造函数,当实例化时采取无参输入,则会报错:

RZdz8sZ.png

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

查看API文档关于Math的描述

java.lang.Object

└java.lang.Math

public final class Math

extends Object

说明Math并不是一个静态类,但继续查看Math类下的方法,比如abs:

abs

public static float abs(float a)

发现Math下的方法都是静态方法,所以不需要实例化Math进行调用

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

Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义,调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。

java.lang.Math中abs方法为例:

abs

public static float abs(float a)

abs

public static double abs(double a)

同样的abs函数,有不同的传入参数的类型,这也是编译器区别各个重载函数的依据。

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

final int[] NUMBS= {1,2,3,4,5};NUMBS[2] = 1;

将上述代码做一些调整:

final int[] NUMBS= {1,2,3,4,5};NUMBS[2] = 1;int[] a={2,3,4,5,6};NUMBS=a;

运行出错,错误信息为:

3lNe5fV.png

对比上述两段代码,结合final关键字的描述可知,final限制的只是数组成员的指向,而并没有限制值的变化,因此第一段代码可以通过,而第二段代码由于改变了NUMBS数组的指向,因此报错。

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

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

对对象进行封装,仅由类的内部方法调用,保证安全性。

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

Employee(){    this.name="雇员1";    this.salary=3000;    this.hireDay=new Date(117,2,5);}

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

Employee(String name,int salary) {    this.name = name;    this.salary = salary;    this.hireDay.getTime();}

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

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

提示:使用LocalDateTime, DayOfWeek

参考资料:

JAVA 8:健壮、易用的时间-日期API - ImportNew.pdf

Java8DateTimeTest.java

public static boolean isMondayToFriday(){    LocalDate date = LocalDate.now();    if (date.getDayOfWeek().equals("SAtURDAY") || date.getDayOfWeek().equals("SUNDAY")) {        System.out.println("休息时间");        return false;    } else {        System.out.println("工作时间");        return true;    }}

3. PTA实验总结及码云上代码提交记录

3.1本周Commit历史截图

iIqjfUi.png

转载于:https://www.cnblogs.com/wkfg/p/6535951.html

你可能感兴趣的文章
【系统安全性】三、加密算法
查看>>
rabbitMQ学习(三)
查看>>
连接Oracle11g数据库时遇到无监听,网络适配器无法建立等问题的一些解决办法...
查看>>
form input限制
查看>>
SVN Berkeley DB Cannot allocate memory解决方案
查看>>
springboot 日志框架
查看>>
菜单栏按钮用控件的Name值在后台操作时出现异常解决
查看>>
Java集合
查看>>
vue中的组件传值
查看>>
Loader 和URLLoader的区别.
查看>>
世界级的安卓测试开发流!
查看>>
战略性情绪分析的5大数据来源
查看>>
Python-匿名函数
查看>>
关于foreach中对集合执行Add或者Remove操作引发枚举值被修改异常
查看>>
java学习笔记(1)
查看>>
event事件坐标
查看>>
C++ 常见面试题目
查看>>
javascript 之 面向对象【继承】
查看>>
初学Java-继承和多态
查看>>
SAP(最短增广路算法) 最大流模板
查看>>