201521123082《Java程序设计》第3周学习总结

标签(空格分隔): Java


1.本周学习总结

XMind图:

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)如果创建3个Test1对象,有内存中有几个i,几个j?

编译结果如下:

答:

(1)由上图可知不可通过编译。错误如下截图:



分析:对于Test1getj()出错,因为静态方法不能调用一个非静态的成员变量。



分析:关于static的用法,不能直接访问非static的成员变量

改正:可以把public static void geti()改为public void geti()

修改后运行截图:



(2)如果创建3个Test1变量,内存中会有3个i,1个j。

因为一个static在一个类内来说只有一个存储空间,而非static对于其中每个对象都会有一个新的存储空间。

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

答:

1.作用:

构造函数是在创建给定类型的对象时执行的类方法。构造函数具有与

类相同的名称,它通常初始化新对象的数据成员。

构造函数主要用来在创建对象时完成对对象属性的一些初始化等操作,当创建对象时, 对象会自动调用它的构造函数。一般来说,构造函数有以下三个方法:

■ 给创建的对象建立一个标识符;

■ 为对象数据成员开辟内存空间;

■ 完成对象数据成员的初始化。

2.编写格式:

public 类名(){

、、、、、

}

构造方法的名字要和类名一样,没有返回类型,可以是public、private。

简单的例子:

public class Moyi {
String name;
public Moyi(String name){
this.name=name;
} }

3.第三问与第四问:

一个类,如果没有定义构造函数,那么系统默认会有一个无参的构造函数(无参数、内容为空)。如果程序定义了一个有参的构造函数,程序自己不会创建无参构造函数,如果想构造无参函数,就必须显式的声明一个。

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

答:

因为在Math类里面的所有成员变量和成员方法都是静态的,所以不需要new实例化。Math是已有方法,直接调用就可以了。开发者将Math的构造器用private修饰了,限定了在类的外部无法调用。只要import java.lang.Math,然后用类名.方法就可以调用。

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

答:

1.重载,就是函数或者方法有相同的名称。方法的重载指方法名相同,但是参数的类型不同或参数的个数不一样。

例子:

//举例一:
void test(int x) {
};
void test(double x) {
……};//这个叫参数类型不同的方法重载 。
//举例二:
void test(int x) {
……};
void test(int x, int y) {
……};//这个叫参数个数不同的方法重载 。

2.构造函数的重载,其实是构造函数具有相同的名字,而参数的个数或参数类型不相同。

3.截图:





4.通过参数的顺序,类型不同进行区分。

可以参考3的截图中abs和max函数的例子。

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

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

答:

final修饰的是引用型变量,指的是所指向的变量值不能修改,但指向的对象的值可以修改。题目中指向的地址没有变,值由3变为1。

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

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

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

3.为Employee类再增加一个有参构造函数,参数只有name与salary,hireDay为当前日期。(粘贴代码)

答:

1.因为把属性设置为private,可以通过指定的方法来操作类成员变量,不能随意地操作类的变量成员。

2.代码如下:

public Employee() {
this("雇员1", 3000.0, 2017, 3, 5);
}

3.代码如下:

public Employee(String n, double s) {
name = n;
salary = s;
Calendar calendar = Calendar.getInstance();
hireDay = calendar.getTime();
}

Q7.编写函数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();
System.out.println(dayOfWeek);
if(dayOfWeek!=DayOfWeek.SATURDAY && dayOfWeek!=DayOfWeek.SUNDAY)
{
System.out.println("上班时间");
return true;
}
else
{
System.out.println("休息时间");
return false;
} }

在原来的代码上修改isMondayToFriday运行后的截图:

Q8.Runnable Jar(可选)

我们以前编写的程序,必须打开Eclipse或者将相应的.class文件拷贝出来在命令行下执行相应命令才能运行,如果.class文件较多且类文件中有包名,需要将完整的目录结构及文件拷贝出来,才能运行。现在希望将Eclipse项目中的Java文件打打成一个可运行的jar包,在命令行直接运行。改造题目7,使其从命令行接收参数,参数为年-月-日,将项目打成jar包,然后在命令行通过java -jar运行,并截图。参考文件如下:http://www.cnblogs.com/yuki-lau/archive/2013/02/27/2935778.html

3. 码云代码提交记录

4. PTA实验

questionOne:

本周开始学习Java中面向对象的基础,在这个实验中对Person类中的age、gender、id设置为私有变量。学会了编写无参和有参构造函数,学会用MyEclipse生成toString函数和setter、getter函数。重温了数组和this的用法。

quetionTwo:

题目2是对题目的改进,题目中涉及了构造函数、初始化块、静态初始化块。

编写定义类的初始化块和静态初始化块的代码如下:

static {
System.out.println("This is static initialization block");
} {
id = Id;
Id++;
System.out.println("This is initialization block, id is " + this.id);
}

重点是了解构造函数、初始化块、静态初始化块这三种方法执行的先后顺序:

静态代码块>构造代码块>构造函数

对这三者的了解可参考:

http://blog.csdn.net/jeep_ouc/article/details/26412191

http://www.cnblogs.com/BlackStorm/p/5699965.html

questionThree:

本体中代码还是比较简单的,pta中已提交成功,但暂时未用到继承和多态的思想。也是用到了构造函数和toString函数,然后就是Arrays.deepToString分别输出上面建立的Rectangle数组与Circle数组。

总结:

这是的3道题都是面向对象的基础,最重要的是了解了构造函数的重要性。

201521123082《Java程序设计》第3周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. 我的Chrome

    插件: CaretTab - New Tab Clock and Date 完全就是为了好看

  2. [转载]Splay Tree数组实现+详解

    变量声明:f[i]表示i的父结点,ch[i][0]表示i的左儿子,ch[i][1]表示i的右儿子,key[i]表示i的关键字(即结点i代表的那个数字),cnt[i]表示i结点的关键字出现的次数(相当于 ...

  3. 诡异错误一: ValueError: embedded null character

    使用如下语句读取名为0_xx.txt 文件时,遇到错误  ValueError: embedded null character if __name__ == '__main__': fr = ope ...

  4. MySQL多字节字符集造成主从数据不一致问题

    MySQL多字节字符集造成主从数据不一致问题 来自江羽   2013-04-27 16:03:56|  分类: 默认分类|举报|字号 订阅 转载: http://backend.blog.163.co ...

  5. oracle启动 init.ora spfile pfile[转]

    昨天晚上快下班的时候,公司数据库突然堵住了,一个buf表中累计了20多W的数据提取不出来,改了程序,效果不明显.因为之前有一次也重启过oracle,所以这次还是想把oracle重启一下,因为那些数据都 ...

  6. How to call C/C++ sytle function from C# solution?

    1. Write native(unmanaged) code with C/C++, and make sure compile it as a DLL, the sample is as belo ...

  7. linux 网络编程

    linux网络编程中主要分为服务器和客户端两部分,而网络编程中又分为TCP和UDP两种.TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. ...

  8. C语言 入门程序

    #include "stdio.h" #include "stdlib.h" #include "string.h" #define MAX ...

  9. uva11991 Easy Problem from Rujia Liu?

    Though Rujia Liu usually sets hard problems for contests (for example, regional contests like Xi'an ...

  10. HTML (Hyper Text Markup Language) 常用标签

    HTML是什么?  英文全称:Hyper Text Markup Language  中文全称:超文本标记语言  网页主要由 机构  表现 行为  组成 什么是标签?    < > 里的叫 ...