20145319 第三周学习总结
20145319 《Java程序设计》第三周学习总结
教材学习内容总结
本周学习教材第四、五章,这两章主要讲述了java语言中“对象”的相关知识,认识对象以及对象封装。
1. 类与对象
- 定义:对象是java语言中极为重要的一环,在使用java编写程序时基本离不开对象,而java中有基本类型和类类型两种类型系统,在使用对象前就需先定义类(Class),类是对象的设计图,对象是类的实例
- 使用事项:
1对象的一些使用和c语言中的指针极为相似,例如Clothes c1 = new Clothes();,其中c1是在栈内存中产生,而对象c1则是产生在堆内存中,c1可以近似看成指向堆内存中的指针。
2一些系统的标准类可以直接使用,如java.util.Scanner,java.math.BigDecimal。
3对象中的相等即类类型中"=="和基本类型中"=="在本质上也有着一定区别,"=="用于基本类型时,判断两个变量存储的值是否相等,"=="用于类类型时,是判断两个参考名是否表示同一对象,如要判断对象a、b的内含值是否相等,就要使用a.equals(b)
2. 基本类型包装
- 用途:让java中基本类型可以像对象一般操作
- int-Integer
- long-Long
- byte-Byte
- float-Float
- double-Double
- boolean-Boolean
3. 数组对象
- 与c语言不同,在java中数组就是对象,需按照对象的基本性质来使用数组
- 数组存储数目不能超过其索引范围,否则会报错:ArrayIndexOutOfBoundsException(在编译时,系统并不会提示错误,但是运行时会发生错误)
- java中与c语言有些许区别,c语言中int abc[10]代表为可以存储十个数的空数组,然而java中int[] abc=new int[10],却是一个十个数均为0的数组,并非空数组,如果不能清除分辨两者在程序中可能会出错(之后会用程序详细展示)
- 数组的复制,可以用System.arraycopy()与Arrays.copyof(),可以通过这些类快速复制一个数组,不过在调用时要注意括号中参变量的含义,类型内容都要一致。
4. 字符串对象
- 定义:在java中,字符串本质是打包字符数组的对象,是java.lang.String类的实例
- 操作方法:
- length():取得字符串长度
- charAt():指定取得字符串中某个字符
- toUpperCase():将小写字符串内容转换成大写字符串内容
- Byte.parseByte(number):将字符串转换成byte整数类型
- Integer.parseInt(number):将字符串转换成int整数类型
- Xxx.parseXxx(number):将字符串转换成long、short等相应类型
……
3. 字符串池:如果将一串字符指定给2个字符串变量,则这2个字符串变量会参考到同一对象。只要""中字符串内容相同,无论在程序代码中出现多少次,JVM都只会建立一个 String实例,并在字符串池中维护。
4. 不可变动字符串:在Java中,字符串对象一旦建立,就无法更改对象中的任何内容,对象上没有任何一个方法可以更改字符串内容。使用+字符可以达到这样的效果,不过 根据反编译的过程,可以发现,实际上是产生了新的字符串对象。而大量的产生新对象又是不希望看到的,所以我们可以用StringBuilder来改善,它的特点在于每次调用完 后都会返回原有的StringBuilder对象,这样可以避免产生多个对象。
5. 查询Java API文件
- 打开java官方网站:http://www.oracle.com/technetwork/java/
- 知道类的完全吻合名称以及想查询的版本,就可以在搜索引擎中直接进行查询,单击即可看到说明
- 在Windows下可以下载CHM格式的Java API
6. 封装
- 封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,隐藏对象细节,将对象当作黑箱进行操作,可将函数、流程、值都封装在类中,即可直接调用
7. 类语法细节
-
public:用在类、函数、方法、对象数据成员之前,用在类前,表示其是公开类,可以在其他包的类中调用。用在函数前,表示其他包的类可以直接调用此函数,用于方法前,表示其他包的方法中可以调用这个方法
-
this:可出现在类的任何地方,在构造函数参数与对象数据成员同名时,可以用this加以区别,在java中,this()也代表了调用另一个构造函数。注意:this()调用只能出现在构造函数的第一行
-
static:可用在类、方法、对象数据成员之前。声明为static的成员,不会让个别对象拥有,而是属于类。 在static方法中不能出现this关键字,static方法中不能用非static数据或方法成员。 import static语法是为了偷懒,但要注意名称冲突的问题。
-
final:可用在类、方法、对象数据成员之前,final int x=10;即x为10,不可改动。final int x;即表示在之后一定要对x赋值,否则会出现编译错误
教材学习中的问题和解决过程
- 在一开始时候学到对象可以封存函数,方法,流程之类的并不是很能理解,后来对照书上自己敲了代码并且运行之后才有初步的了解,感觉比较类似于c语言中的函数调用,只是java中除了构造函数也可在定义class类时候做到一样的效果。
代码调试中的问题和解决过程
课后作业题3(进阶版 冒泡法)
- 代码:
2. 运行结果:
这里因为c语言习惯性思维,认为int[]maopao=new int[5319];即定义出一个可以存储5319个数的空数组,其实是定义了一个含5319个0的数组,所以在输出结果时,for(int jieguo:maopao)因为数组输出结果太多,从而导致了结不能正常输出结果。
3. 修改代码:
4. 运行结果:
修改过后程序就可正常输出结果
cashcard(对象)
1. 代码:
2. 运行结果:
代码托管截图
其他(感悟、思考等,可选)
- 虽然java可以类比着c语言来学习,但是很多地方还是会有些许出入,例如这次在学习数组时候就过于想当然而犯了错误,在之后学习中还是要多落于实践,细节处也要多敲代码验证自己的猜想,体会java和c语言之间的区别才行。
学习进度条
|
代码行数(新增/累积) |
博客量(新增/累积) |
学习时间(新增/累积) |
重要成长 |
目标 |
3500行 |
28篇 |
300小时 |
|
第一周 |
150/150 |
1/1 |
20/20 |
|
第二周 |
200/350 |
1/2 |
20/40 |
|
第三周 |
300/650 |
1/3 |
20/60 |
|
第四周 |
|
|
|
|