《Java程序设计》第3周学习总结
20145333 《Java程序设计》第3周学习总结
教材学习内容总结
本周学习了第四和第五章,学习量很大,主要是内容更多更复杂,所以投入了更多的时间到Java的学习中去。
第四章主要讲了Java基本类型中的类类型,如何定义类、构造函数、使用标准类、基本类型打包器、数组复制、字符串等内容查询API文档。
首先确定两个基本的概念:
对象(Object):存在的具体实体,具有明确的状态和行为
类(Class):具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属性的一种机制。
要产生对象必须先定义类,类是对象的设计图,对象是类的实例,建立实例要用new。
package cc.openhome;
class Clothes{
String color;
char size;
}
public class Field{
public static void main(String[] args){
Clothes sun =new Clothes();
Clothes spring=new Clothes;
sun.color="red";
sun.size='s';
spring.color="green";
spring.size='M';
System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
System.out.printf("spring (%s,%c)%n",spring.color,spring.size);
}
}
使用标准类
两个基本标准类:①java.util.Scanner ②java.math.BigDecimal
-
java.util.Scanner:利用Scanner的nextInt()实现用户在程序中输入int类型的数据。Scanner对每个基本类型都有对应的next***()方法。比如nextByte()、nextLong()等。需要用到java.util.Scanner的时候,可以在代码最前面写 上“import java.util.Scanner”,接下来每次输入Scanner即可。
-
java.math.BigDecimal:由于Java程序中浮点数遵循一定的规范,使用分数和指数来表示浮点数,导致不能直接用“==”来比较浮点数运算结果。使用java.math.BigDecimal类类型的数据则可以避免上述结果的发生。需要用到java.math.BigDecimal的时候,跟java.util.Scanner一样,在代码最前面写上“import java.math.BigDecimal”, 接下来每次输入BigDecimal即可。
BigDecimal operand1 = new BigDecimal ("1.0"); BigDecimal operand2 = new BigDecimal ("0.8"); BigDecimal result = operand1.subtract(operand2); System.out.println(result);
对象指定与相等性
-
用于基本类型时,“=”是将值复制给变量,“==”是比较两个变量储存的值是否相同
-
用于操作对象时,“=”是用在指定参考名称参考某个对象,“==”是用在比较两个参考名称是否参考同一对象,“equals()”是比较两个对象实际的内含值是否相同。
BigDecimal a=new BigDecimal("0.1"); BigDecimal b=new BigDecimal("0.1"); System.out.println(a==b); System.out.println(a.equals(b));
基本类型打包器
- 打包器:Long、Ingeter、Double、Float、Boolean
数组对象
-
数组在java中是对象
-
在Java中药声明数组并初始值,索引由0开始,若超出索引范围,则会抛出ArrayIndexOutOfBoundsException错误
-
一维数组用int[],在一维数组中可以用数组的length属性获得数组元素的个数。二维数组用int[][] ,通过.length的指数组有几列,通过[x].length得知每列有几个元素。
package cc.openhome; public class Score{ public static void main{String[] args){ int[]scores={88,81,74,68,78,76,77,85,95,93}; for(int i=0;i<scores.length;i++){ Stetem.out.printf("学生分数:%d %n",scores[i]); } } }
字符串对象
-
字符串本质是打包字符数组的对象,是java.lang.String类的实例
-
使用+连接字符串会产生新的String实例
第五章主要内容包括封装、封装对象、类语法细节、this、static类成员、不定长度自变量、内部类。
封装
-
封装的目的:隐藏对象细节,将对象当作黑箱进行操作。
-
封装对象初始流程:构造函数。
-
封装对象操作流程:定义方法
-
封装对象内部数据:使用private关键字定义,并提供取值方法成员
类语法细节
-
public
如果想在其他包的 类程序代码中存取某包的类或对象成员,则该类或对象成员必须是公开成员,在Java中要使用public加以声明。 -
this:在java中,this()代表了调用另一个构造函数,至于调用哪个构造函数,则是调用this()时给的自变量类型与个数而定。this()调用只能出现在构造函数的第一行。
-
static:被声明为static的成员,不会让个别对象拥有,而是属于类
被声明为static的方法,可通过类名称与“.”运算符来调用static方法
如果有些动作想在位码加载后执行,则可定义static区块,
在static区块不能出现this关键字。 -
不定长度自变量
要使用不定长度自变量,声明参数列时要在类型关键字后面加上...
使用不定长度自变量时,方法上声明的不定长度参数必须是参数列最后一个。 -
内部类:可以在类中再定义类。内部类本身可以存取外部类的成员。一个被声明为static的内部类,通常是将外部类当作名称空间,可以存取外部类static成员,但不可存取外部类非static成员。
教材学习中的问题和解决过程
Integer i1=100;
integer i2=100;
if(i1==i2){
System.out.println("i1==i2");
}
else{
System.out.println("i1!=i2");
}
在这段代码中i1和i2都是100,最后的结果显示为"i1==i2"。
Integer i1=200;
integer i2=200;
if(i1==i2){
System.out.println("i1==i2");
}
else{
System.out.println("i1!=i2");
}
而在这段代码中只是把i1和i2都改为了200,可是结果与上一段截然不同,结果显示为"i1!=i2",这是为何?在这两段代码中,两个参考名称的两个对象虽然内含值相同,但是两个对象打包后,若i在IntegerCache.low和IntegerCache.high之间,会从缓存中传回Integer实例,第一段代码中,因为i1,i2的值相等,所以从缓存中传回的是同一个实例,但第二段代码中,i在IntegerCache.low和IntegerCache.high之外,直接建立新的 Integer实例,新建立的实例虽然内含值相同,但并不是同一个实例。由于IntegerCache.low默认值是-128,IntegerCache.high默认值是127,所以200在这个范围之外,所以i1与i2不会参考到同一个Integer实例上,也就有了上面的效果。
代码调试中的问题和解决过程
代码调试过程中问题不太大,主要是练习了书上的一些代码,运行结果也没有大的问题。
其他(感悟、思考等,可选)
以前认为Java与C语言应该是差不多的,现在发现java需要学习的地方还有很多,需要仔细去研究,练习,实验。Java中的面向对象这块还需要在以后的学习中慢慢探索。总之,对于Java的学习,只有自己不断地练习,不断地思考才能真正得到提高。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 15篇 | 400小时 | |
第一周 | 100/100 | 2/2 | 20/20 | |
第二周 | 150/250 | 1/3 | 18/38 | |
第三周 | 100/350 | 1/4 | 22/60 |
代码托管地址https://git.oschina.net/20145333/java-besti-is-2015-2016-2-20145333/tree/week3
posted on 2016-03-20 18:22 20145333茹翔 阅读(121) 评论(1) 编辑 收藏 举报