zoukankan      html  css  js  c++  java
  • 20145208《Java程序设计》第3周学习总结

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

    教材学习内容总结

    认识对象

    类类型

    • 在第三章的学习中,我了解到JAVA可区分为基本类型和类类型两种类型,在上周的学习中我学习了JAVA的基本类型,在这周学习的就是类类型,这周的学习相对于前两周来说要困难一些,而且所学的知识比较多。
    class Clothes{
        String color;
        char size;
    }
    public class Field{
        public static void main(String[] args){
            Clothes sun = new Clothes();
            Clothes spring = new Clothes();
        }
    }
    

    上面的代码中sun和是spring就是类类型变量,类类型指向的就是对象。

    类与对象

    • 在本章学习的开始,我最先了解到的是关于类与对象的知识,例子还是上面的代码,代码中的 Clothes sun=new Clothes(),其中的sun和Spring就是引用的类类型变量,new Clothes就是在生成的对象,而且sun也可以近似的看成是指针。

    • 在学习本周内容的初期,我还是不太熟悉类类型的注意事项,比如尽管是在两个JAVA文件中,但在同一个scr文件夹中也不可以有相同的类名,就比如书中的Clothes类,前后出现了多次,但不可以都命名为Clothes,必须有所区别。就像图中那样:

    • 不同的构造方法决定了生成对象的方式

      • this构造方法:this代表其所在函数所属对象的引用,this代本类对象的引用,当在函数内需要用到调用该函数的对象时,我们就可以使用this。而 this()代表了调用另外一个构造函数。

    public class CashCard {
    String number;
    int balance;
    int bonus;
    CashCard(String number,int balance,int bonus){
    this.number=number;
    this.balance=balance;
    this.bonus=bonus;
    }
    }

        上述代码就运用了this关键词将参数值指定给了参数number
    	* new构造方法:用new关键字建立实例来构造。
    	```
    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);
        }
    }
    

    上述代码就是先用class定义了类,然后用new建立实例。

    • 封装=类+访问控制(public,protected,private...)
      • 我觉得封装是一种对信息的隐藏,用关键字private等来控制用户对类的修改和访问。

    public class CashCard2 {
    private String number;
    private int balance;
    private int bonus;
    CashCard2(String number, int balance, int bonus) {
    this.number = number;
    this.balance = balance;
    this.bonus = bonus;
    }
    void store(int money) {
    if (money > 0) {
    this.balance += money;
    if (money >= 1000) {
    this.bonus++;
    }
    } else {
    System.out.println("储值是负的?你是乱来的么?");
    }
    }
    int getBalance(){
    return balance;
    }
    int getBonus(){
    return bonus;
    }
    String getNumber(){
    return number;
    }
    }

    上述代码便使用了private对参数进行了封装来限制用户对参数的更改。
    ####标准类
    * java.util.Scanner与java.math.BigDecimal两个基本标准类
    	* java.util.Scanner的nextInt()方法会看标准输入中,有没有输入下一个字符串,有的话会尝试将之剖析为int类型。Scanner对每个基本类型都有对应的方法。
    	* 使用java.math.BigDecimal可以得到更好的精度。而且用BigDecimal比较相等时,可以直接利用调用add(),再调用equals()比较两个BigDecimal实质上是否相同。
    	
    ####对象相等
    * ==与equals的区别
    	* ==比较的是对象之间的地址
    	* equals比较的是逻辑上的相等与否
    
    ###基本类型打包
    * 如int-Integer;long-Long;byte-Byte;float-Float;double-Double;boolean-Boolean。
    
    ###数组对象
    * 数组在JAVA中的存在形式就是对象,JAVA会检查数组的边界,越界就会触发ArrayIndexOutOfBoundsException的错误,所以和在C语言中不同,JAVA中的数组的长度在建立的时候就确定了。
    * System.arraycopy()与Arrays.copyof()用在类类型声明的数组时,都是执行浅层复制。System.arraycopy()复制的方法是进行数组值的复制,Arrays.copyOf()复制的方法,是建立新的数组。
    * 思考题:深拷贝和浅拷贝
    	* 浅拷贝:只复制一个对象。举例如下
    		* 
    

    class Clothes3{
    String color;
    char size;
    Clothes3(String color,char size){
    this.color=color;
    this.size=size;
    }
    }
    public class ShallowCopy {
    public static void main(String[] args) {
    Clothes3[] c1={new Clothes3("red",'L'),new Clothes3("blue",'M')};
    Clothes3[] c2=new Clothes3[c1.length];
    for (int i=0;i<c1.length;i++){
    c2[i]=c1[i];
    }
    c1[0].color="yellow";
    System.out.println(c2[0].color);
    }
    }

    	* 深拷贝:对对象内部的引用均复制。
    		* 
    

    class Clothes4{
    String color;
    char size;
    Clothes4(String color,char size){
    this.color=color;
    this.size=size;
    }
    }
    public class DeepCopy {
    public static void main(String[] args) {
    Clothes4[]c1={new Clothes4("red",'L'),new Clothes4("blue",'M')};
    Clothes4[]c2=new Clothes4[c1.length];
    for (int i=0;i<c1.length;i++){
    Clothes4 c=new Clothes4(c1[i].color,c1[i].size);
    c2[i]=c;
    }
    c1[0].color="yellow";
    System.out.println(c2[0].color);
    }
    }

    ###字符串对象
    * 字符串本质是打包字符数组的对象。
    * 要想比较字符串实际字符内容是否相同,不能使用==,要用equals()。
    * 用 "" 写下的字符串称为字符串常量,使用 + 连接字符串会产生新的String实例。
    * 可以使用length()取得字符串长度,使用charAt()指定取得字符串中某个字符,使用toUppercase()将原本小写的字符串内容转为大写。
    
    ###查询JAVA API文件
    * 在Windows系统下,首先要下载CHM格式的Java API。然后参照老师的博客学习。
    
    ## 教材学习中的问题和解决过程
    在编写代码的时候出现了一个没有解决的问题。
    

    public class Average {
    public static void main(String[] args) {
    long sum = 0;
    for (String arg:args){
    sum +=Long.parseLong(arg);
    }
    System.out.println("平均:"+(float)sum/args.length);
    }
    }

    上述代码的运行结果是![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320022240974-2007046605.png)
    结果是NAN,这不是我想得到的,在网上查到NAN代表not a number,是因为程序中没有给定参数值的原因,但是我想按照书上的方法对其赋予参数变量,却提示无法找到相应的类,这个问题我研究了一会还是没有解决。
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320022746037-1007013052.png)
    
    * p88 DecimalDemo.java:修改代码,测试学习效果,比如打印两个整数的乘积
    修改后代码如下
    

    import java.math.BigDecimal;
    public class DecimalDemo {
    public static void main(String[] args) {
    BigDecimal operand1=new BigDecimal("1.0");
    BigDecimal operand2=new BigDecimal("0.8");
    BigDecimal result=operand1.multiply(operand2);
    System.out.println(result);
    }
    }

    打印结果
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320025348021-1656213326.png)
    
    * Score2.java:把scores填充成{55,65,65,80,75,70,95,90,85,100},测试一下Arrays类的各种排序方法
    修改后代码如下
    
    

    import java.util.Arrays;
    public class Score2 {
    public static void main(String[] args) {
    int[]scores={55,65,65,80,75,70,95,90,85,100};
    for (int score:scores){
    System.out.printf("%2d ",score);
    }
    System.out.println();
    Arrays.fill(scores,60);
    for (int score:scores){
    System.out.printf("%3d",score);
    }
    }
    }

    
    
    结果如图
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320030034599-1978131954.png)
    
    * p108 Sum.java:输入11.1试试,会是什么效果?如果有问题怎么解决?
    输入了11.1之后出现了错误如图
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320030705303-1708131779.png)
    阅读之后发现是因为参数定义的是整型,所以只需要修改为浮点数就可以了,代码如下:
    
    

    import java.util.Scanner;

    public class Sum {
    public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    float sum=0;
    float number=0;
    do {
    System.out.print("输入数字:");
    number=Float.parseFloat(scanner.nextLine());
    sum+=number;
    }while (number!=0);
    System.out.println("总和:"+sum);
    }
    }

    结果如图,果然可以了:
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320030831349-644664789.png)
    
    
    
    
    * p85 Field2.java: 构造方法的使用,构造方法决定了生成对象的方式
    按照教学指导上面说的加了一行加一行``Clothes2 autumn = new Clothes2();``发现不能运行;
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320024237599-2130983867.png)
    原因是实际参数列表和形式参数列表的长度不同,就是新加的一行与形式参数长度存在差异。
    
    
    ## 代码调试中的问题和解决过程
    在代码编译中我遇到了GBK码的一些问题,一些包含汉字的文件我在IDEA是可以正常的运行,但是在cmd上运行就会出现错误,下面是任务日志的内容:
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320022959990-1161601132.png)
    然后我通过上网查找相应的解决方案,发现应该是文件编码方式的问题,只要改成如下方式就可以正常编译运行了:
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160320023201209-1973195142.png)
    
    
    
    
    ## 其他(感悟、思考等)
    * 在本周的学习中,我感受到了JAVA学习的压力,但是也感受到了JAVA学习的一些乐趣,这一周学习的内容有一些我还是理解的不够,很多地方不是很熟练,也有一些地方知其然不知其所以然,所以我觉得我需要加强学习的深度,在以后的学习中知其然更要知其所以然,在JAVA的基础学习上掌握一个扎实的基础,我相信对我以后的JAVA学习乃至于其他编程语言的学习都有很大的好处,说实话,我觉得JAVA的这种翻转课堂的学习方式,让我在这一学期的前三周就获益匪浅,让我觉得我在一学期的学习之后肯定可以有一个自己的惊讶的飞跃。
    * 所谓付出的越多得到的就越多,我觉得这三周我为JAVA付出的时间和收获真的是这样的,代码写的越多,我对JAVA学习的认识也越多了。这种学习方式对我来说真的是新颖而又有效的,我也想着将这样的方法拓展到其他的科目中。
    
    ## 学习进度条
    
    |            | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
    | --------   | :----------------:|:----------------:|:---------------:  |:-----:|
    | 目标        | 5000行            |   30篇           | 400小时            |成为超过高级初学者的存在       |
    | 第一周      | 150/150           |   1/3            | 15/15             |第一个JAVA程序       |
    | 第二周      | 150/300           |   2/5            | 20/35             | 第一次对教材代码进行自己的修改      |
    | 第三周      | 400/700          |   2/7            | 20/50             |     可以熟练地进行代码托管  |
    
    
    ## 参考资料
    -  [Java学习笔记(第8版)](http://book.douban.com/subject/26371167/) 
    -  [《Java学习笔记(第8版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html)
    -  [ 我的git代码托管 ](http://git.oschina.net/20145208/java-besti-is-2015-2016-2-20145208/tree/master)
    - 代码托管截图如下:
    
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160322134425354-914805904.png)
    
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160322134439792-1256094683.png)
    
    ![](http://images2015.cnblogs.com/blog/884768/201603/884768-20160322134448776-705750155.png)
  • 相关阅读:
    对Promise的理解?
    对JavaScript垃圾回收机制的理解?
    说明split()与join()函数的区别?
    目标检测评估标准
    训练自己的数据集
    ssd_mobilenet_demo
    c++读取数据
    0XFF
    python读取数据
    快速排序
  • 原文地址:https://www.cnblogs.com/20145208cy/p/5297070.html
Copyright © 2011-2022 走看看