《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茹翔  阅读(118)  评论(1编辑  收藏  举报

导航