学号 20172313 《程序设计与数据结构》第三周学习总结
教材学习内容总结
- 学习使用对象引用变量的声明与初始化以及注意事项。
- 学习使用不同的类(String、Random、Math、DecimalFormat、printf)。
- 学习“包”的概念以及使用。
- 学习格式化输出的形式以及使用。
- 学习没举行变量的形式以及使用。
- 学习包装器类的概念以及使用。
教材学习中的问题和解决过程
- 问题1:对于类,对象,变量的概念混淆。
- 问题1解决方案:
1.对象的概念 :万物皆对象,客观存在的事物皆为对象。
2.什么是面向对象:人关注一个对象,实际上是关注该对象的事务信息。
3.类:类是模子,确定对象将会拥有的特征(属性)和行为(方法)。类的特点:类是对象的类型,具有相同属性和方法的一组对象的集合
4。什么是对象的属性:属性,对象具有的各种特征 ,每个对象的每个属性都拥有特定值
5.什么事对象的方法:对象执行的操作
6.类与对象方法,属性的联系和区别:类是一个抽象的概念,仅仅是模板,比如:“手机”对象是一个你能够看得到,摸得着的具体实体
如何定义Java中的类:
1.类的重要性:所有Java程序都以类class为组织单元
2.什么是类:类是模子,确定对象将会拥有的特征(属性)和行为(方法)
3.类的组成:属性和方法
4.定义一个类的步骤:a.定义类名
b.编写类的属性
c.编写类的方法
而变量是对象的属性。
(这里截取了部分信息: https://blog.csdn.net/qq_33557220/article/details/54580361)- 问题2:不理解空字符串和空引用的区别
空字符串“”
1、类型:“”是一个空字符串(String),长度为0,占内存,在内存中分配一个空间,可以使用Object对象中的方法。(例如:“”.toString()等)
2、内存分配:表示声明一个字符串类型的引用,其值为“”空字符串,这个引用指向str1的内存空间。
null
1、类型:null是空引用,表示一个对象的值,没有分配内存,调用null的字符串的方法会抛出空指针异常。(例如:str1.endsWith(str2); java.lang.NullPointerException)
2、内存分配:表示声明一个字符串对象的引用,但指向null,也就是说没有指向任何内存空间。
例: String str1 = ""; //str1对应一个空串,声明对象的引用
String str2 = null; //str2引用为空
String str3 = new String(); //str3将指向具体的String实例,默认值为“”
注意:str1和str3被实例化,而str2没有实例化,但str1和str3所指的地址不同,但值一样,都为空。
null不是对象(空引用),“”是对象,故比较的时候应该是if(str1.equals(""))和if(str2 == null),也即对象用equals()比较,null用等号比较。正确的写法是先判断是不是对象,如果是,再判断是不是空字符串。
补充说明:1、Java中类的对象都是用句柄来访问的, 类似于C中的指针。
2、Java中有两个判断相等的方法:“==”和equals()方法,前者是根据地址来比较,只有地址和值都相等,这两个变量(引用类型)才相等;后者比较的是变量的值,只要值相等,两者就相等。
3、在Java中变量和引用变量是存在栈中(stack),而对象(new出来的)都是存放在堆中(heap)。
例如:String str = new String("abc");//str存放在stack中,abc这个值存放在heap中,并指向其分配的内存空间。
代码调试中的问题和解决过程
- 问题1:在做习题3_2时,编写好了程序出现以下的问题。
- 问题1解决方案:我检查了一下我的代码语句觉的没有问题╮(╯▽╰)╭,只能说我还是太粗心了吧...在创建对象时(System.in)输成了(System.out)。(PS:我在这道题上浪费了很多时间)学习还是要细心。嗯....没错!
- 问题2:在做习题3_6的时候,显示无法编译成功。
- 问题2解决方案:我仔细看了一下错误提示,“String”类型无法转换为“Double”,我又查看了一下书本,格式化输出的结果是以字符串的形式返回的,所以吧代码修改一下,问题就迎刃而解了。
- 问题3:在做习题3_7的时候运行代码始终得不到正确的结果。(错误的代码忘记截图了)
- 问题3解决方案:我没有检查出毛病...我把代码重新写了一遍问题就解决了,所以应该还是我哪个地方的数值写错了吧_(:」∠)
- 问题4: 做习题3_3的时候惊奇的发现我只能输出两位数字,甚至有时候只能输出一位,可我代码上写的是三位啊,更加惊奇的是如果我在最后的输出前面加上汉字就能输出三位了。
- 问题4解决方案:在两位助教的帮助下我知道了,在前面没有字符串的情况下,系统自动把结果默认为相加所以也就最多只能输出三位了,只要在前面加上字符串就默认后面的数是字符串了。
代码托管
上周考试错题总结
- 错题1: Consider the following statement:
System.out.println("1 big bad wolf\t8 the 3 little pigs\n4 dinner\r2night");
This statement will output ________ lines of text (思考下面的语句,该语句将输出___行文本)
A . 1
B . 2
C . 3
D . 4
E . 5 - 错题1解析: t转义序列插入一个选项卡,但将光标留在同一行上。 n转义序列会产生一个新行,以便在下一行输出“4 dinner”。 转义序列 r导致回车返回(即将光标移回到左边距),但由于它不会开始新行,所以在“4 dinn”上输出“2night”,导致第二行 看起来像“2nighter”。(错因:粗心大意)
- 错题2: What value will z have if we execute the following assignment statement? float z = 5 / 10; (如果我们执行下面的赋值语句,得到的z将会是什么值?)
A . z will equal 0.0 (z将等于0.0)
B . z will equal 0.5 (z将等于0.5)
C . z will equal 5.0 (z将等于5.0)
D . z will equal 0.05 (z将等于0.05)
E . none of the above, a run-time error arises because z is a float and 5 / 10 is an int (以上都不对,因为z是float类型,5 / 10是int类型,所以会发生运行时错误) - 错题2解析:5和10都是int值,所以5/10是一个整数除法。 结果是0.尽管z是一个浮点数,并且可以存储真正的答案0.5,但由于整数除法,它只能得到0。 为了得到0.5,我们必须先投5或10作为浮点数。(错因:概念理解不清
- 错题3: What is output with the statement System.out.println(x+y); if x and y are int values where x=10 and y=5? (如果x和y是int类型的数值,x=10,y=5,那么语句System.out.println(x+y);的输出是什么?)
A . 15
B . 105
C . 10 5
D . x+y
E . An error since neither x nor y is a String (因x和y都不是字符串而引起的一个错误) - 错题3解析:跟上面的一个实验错位类似,已解决。
- 错题4: If a, b, and c are int variables with a = 5, b = 7, c = 12, then the statement int z = (a * b - c) / a; will result in z equal to (如果a、b和c是int类型的变量,a=5,b=7,c=12,那么语句int z = (a * b - c) / a;得出的z等于___)
A . 0
B . 4
C . 5
D . -5
E . 23 - 错题4解析:(a * b-c)/ a =(5 * 7-12)/ 5 =(35-12)/ 5 = 23/5,并且由于23和5是整数值,所以除法作为整数除法执行, 或23/5 = 4。(错因:概念理解不清)
- 错题5: A double is wider than a float and a float is wider than an int. (一个double类型的数比float类型的数更宽泛,一个float类型的数比一个int类型的数更宽泛。)
A . true
B . false - 错题5解析:更宽的类型尺寸更大或可以存储更大范围的值。 double是64位,而float是32位,由于存储的方式,浮点数可以存储比int大得多的值范围。(错因:粗心大意)
- 错题6: A variable of type boolean will store either a 0 or a 1. (Boolean类型的变量将被存储为0或1)
A . true
B . false - 错题6解析:布尔变量只能存储两个值中的一个,但这些值是保留字true和false。 在C,C ++和C#中,布尔值被实现为只存储0或1的int变量,但在Java中,语言的作者选择使用布尔文字true和false,因为这被认为在语义上更容易理解( 并且更安全)。
(错因:概念理解不清)
其他(感悟、思考等,可选)
如果说上一周的内容是一个难度的转折点的电话,难免这一周的难度则更上一层楼,对对象的描述单看书本内容的话我感到无法理解,在不断的代码练习中才从迷惘中一点点明白过来。在最后我感觉对对象的理解也没有彻底透彻,在以后的学习生活要继续努力。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
第三周 | 706/1000 | 1/7 | 17/60 |
- 计划学习时间:17小时
- 实际学习时间:17小时