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

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

教材学习内容总结

本章要进行的是第四章和第五章的学习,感觉学习的量还是很大的,知识的内容很丰富,也很有趣,是Java知识中的核心内容了。
第四章主要是认识对象,它的基本目标是:

1.区分基本类型与类类型

2.了解对象与参考的关系

在定义类的部分,作者用衣服的牌子,颜色,尺寸等做了一个比喻。书中相应程序如下:

class Clothes
{
    String color;
    char size;
}
public class  Main
{
    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);
    }
}

在这个程序中,一共定义了两个类,一个是公开的Main类,所以在文档中,主文档的命名就是Main,而另外一个就是非公开的clothes类。在程序中,又分别建立了两个clothes的实例,并分别声明了sun与spring两个名称来参考,接着,将sun绑定对象的color,size分别指定为“red”,“s”,将spring的color与size分别绑定为“green”与“M”。最后分别显示相应的数据成员值。
最后执行的结果如下所示:

sun(red, S)
spring(green, M)

还有就是使用标准类:书中有一个程序是使用Java.util.Scanner。它的作用就是可以用户进行输入,相应的程序实例如下:

import java.util.Scanner;

public class Main
{
    public static void main (String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        int number = (int) (Math.random() * 10);
        int guess;

        do
        {
            System.out.print("猜数字(0~9):");
            guess = scanner.nextInt();
        }
        while (guess != number);

        System .out.println("bingo!!");
    }
}


在idea上运行相应的程序,会有如下的结果:

在这个程序中 import java.util.Scanner; 这条语句便是程序输入的关键部分,他给我们程序的输入带来了很大的便利。
在本书中,还有一个标准类,他就是Java.math.BigDecimal,它可以帮助我们在计算中得到更好的精度。
相应的程序如下:


public class Main
{
    public static void main (String[] args)
    {
        BigDecimal operand1 = new BigDecimal("1.0");
        BigDecimal operand2 = new BigDecimal("0.8");
        BigDecimal result = operand1.subtract(operand2);
        System.out.println(result);

    }
}

在idea中运行的结果如下图所示:

3.从打包器认识对象

打包器的基本类型为:Long、Integer、Double、Float、Boolean。将基本类型打包在对象之中,可以将对象当作基本类型来进行操作。
在本书中的案例为:

public class IntegerDemo
{
    public static void main (String[] args)
    {
        int data1 = 10;
        int data2 = 20;
        Integer wrapper1 = new Integer(data1);
        Integer wrapper2 = new Integer(data2);
        System.out.println(data1/3);
        System.out.println(wrapper1.doubleValue()/3);
        System.out.println(wrapper1.compareTo(wrapper2));
    }
    
}

中运行的结果如图所示:

4.已对象观点看待数组:

在c语言中我们已经学习过数组,所以在学习Java的数组时感觉还是有一点基础。在Java中,数组是对象,而不是单纯的数据集合。数组有一维数组和二位数组之分,一维数组比较简单相应的程序实例如下:

public class Main
{
    public static void main (String[] args)
    {
      int[] score={88,81,74,68,78,76,77,85,95,93};
        for (int i=0;i<score.length;i++)
        {
            System.out.printf("学生分数: %d ,%n",score[i]);
        }
    }

}

在idea运行的结果如下:

二维数组与c语言种的有很多相似之处,将二维数组看成是矩阵会比较容易理解一些。书中有关二维数组的程序如下:

public class XY
{
public static void main(String[] args)
{
int[][] cords={
                {1,2,3},
                {4,5,6}
                };
for(int[] row : cords)
{
    for(int value : row)
    {
        System.out.printf("%2d",value);
    }
    System.out.println();
}
}
}

程序在idea中运行如下所示:

Java数组中还有数组操作与数组复制到的问题:

import java.util.Arrays;
public class Main
{
    public static void main (String[] args)
    {
        int[] score1={88,81,74,68,78,76,77,85,95,93};
        int[] score2={88,81,74,68,78,76,77,85,95,93};
        for (int score: score2)
        {
            System.out.printf("%3d",score);
        }
        System.out.println();
        score2[0]=99;
        for (int score : score1)
        {
            System.out.printf("%3d",score);
        }
    }

}

这是数组的复制操作问题,在idea上会有如下结果:

5.认识字符串的特性

对于Java中字符串的本质是打包字符数组的对象,是Java.lang.String的实例。书中有一个输入整数计算整数和和程序运算;

import java.util.Scanner;
public class Main
{
    public static void main (String[] args)
    {
        Scanner scanner =new Scanner (System.in);
        long sum=0;
        long number =0;
        do
        {
            System.out.print("输入数字:");
            number=Long.parseLong(scanner.nextLine());
            sum += number;
        } while (number != 0);
        System.out.println("总和:" + sum);
    }

}

程序在idea中的运行如下所示:

第五章主要讲的是对象封装的问题

1.何为封装:

封装(Encapsulation)实际上是使用方法(Method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,隐藏对象细节,将对象当作黑箱进行操作。其主要方法有三个:
1.通过构造方法(构造函数)封装初始化流程
2.通过成员方法(函数)封装操作
3.通过成员变量封装数据

2.有关类语法细节:

1.public权限修饰
如果没有声明权限修饰的成员,只有在相同包的类程序代码下才可以直接存取,也就是“包范围权限”。如果想在其他包的类程序代码中存取某包的类或对象成员,则该类或对象成员必须是公开成员,在java中要使用public加以声明。
2.方法重载:

class Some
{
void someMethod(int i)
    {
    System.out.println("int 版本被调用");
    }
void someMethod(Integer integer)
    {
    System.out.println("Integer 版本被调用");
    }
}
public class Overload
{
    public static void main(String[] args)
    {
        Some s = new Some();
        s.someMethod(1);
    }
}

相应的程序截图如下:

3.this关键字:
this代表其所在函数所属对象的引用,当在函数内需要用到调用该函数的对象时,就用this.代码如下:

class Other{
{
System.out.println("对象初始区块");
}
Other()
{
System.out.println("Other() 构造函数");
}
Other(int o )
{
this();
System.out.println("Other(int o ) 构造函数");
}
}

public class ObjectInitialBlock
{
public static void main(String[] args)
{
    new Other(1);
}
}

程序执行如图所示:

在本章中的代码已经托管到git上:

教材学习中的问题和解决过程

在调试第五章的代码时,发现有一些代码是运行不了的,教材的内容也不是很好理解,要好好看看书才能有所理解,需要多看,多学才行。

代码调试中的问题和解决过程

其他(感悟、思考等,可选)

第五章的问题比较多,有很多问题还没有解决,希望在今后的学习中可以更加深入的学习,解决自己的问题。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 250/300 2/4 18/38
第三周 300/500 3/7 22/60

参考资料

posted @ 2016-03-19 19:02  20145107lcd  阅读(271)  评论(7编辑  收藏  举报