• 20145207《Java程序设计》第三周学习总结


    前言

    24号回来的,书看的差不多了,博客一直没写,求老师原谅呀!!!!!哈哈哈哈。博客我从今天开始补,对着书,一天最多能弄个两篇毕竟写这个东西挺费心思德,当然我做事慢也有关系。但是我会尽快的。老实讲,自学真的挺枯燥的。没啥意思呀。废话不说了直接正题。

    教材学习内容总结

    这部分可能要扒一些课本而上的东西了。在第三章中,知道了Java可区分为基本类型和类类型两大类型系统,其中类类型也称为参考类型。在这一周主要学习了类类型。
    对象(Object):存在的具体实体,具有明确的状态和行为
    类(Class):具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属性的一种机制。
    简单来说,类是对象的设计图,对象是类的实例。

    要深刻理解对象的含义,例如Clothes c1 = new Clothes()c1是引用在栈上的,new clothes()在堆上生成对象

    Java遵守IEEE754浮点数运算规范,使用分数与指数来表示浮点数,这样就导致无法精确表示,从而造成运算上的误差,比如1.0-0.8的结果就不是0.2。因此如果要求精确度,那就要小心使用浮点数,不能用==直接比较浮点数运算结果,所以可以使用Java.math.BigDecimal类以获得更好的精确度。

    基本类型打包器

    打包基本类型:基本类型long、int、double、float、boolean等,在J2SE5.0之前必须亲自使用Long、Integer、Double、Float、Boolean等类打包为对象,才能当做对象来操作。

    == equals的区别
    equals()是逻辑上的相等,相比较字符串实际字符内容是否相同,用equals()
    ==表示的是这个类产生的2个对象是否是同一个对象,如果是同一个对象,那么==的返回值才是true,否则为false。
    在Java中为了考虑效率,“”中完全相同的字符串,无论在程序代码中出现几次,JVM都会建立一个String实例放在字符串池中

    数组对象

    数组在Java中就是对象,索引由0开始,如果存取超过索引范围,

    int []arr = new int[2];

    System.out.println(arr[3]);

    就会抛出ArrayIndexOutOfBoundsException数组脚标越界异常的错误

    int[] arr =null;

    System.out.println(arr[0]);

    arr引用没有指向实体,却在操作实体中的元素时,会抛出NullPointerException空指针异常的错误

    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();

    }

    }

    }

    声明二维数组来储存XY坐标位置要放的值。暂时将二维数组看成矩阵就容易理解一点
    格式1:元素类型[] 数组名 =new 元素类型[元素个数或者数组长度];
    例如 int[] arr = new int[5];
    格式2:元素类型[] 数组名 = new元素类型[] {元素,元素...}
    int[] arr= new int[]{3,5,1,7};
    int[] arr= {3,5,1,7};

    栈内存:用于存通储局部变量,当数据使用完,所占用的空间会放在堆内存中。
    堆内存:数组和对象,通过new新建的实例都会放在堆内存
    每一个实体都有内存地址值
    实体中的变量都有默认初始化值

    无论System.arraycopy()还是Arrays.copyOf(),用在类类型声明的数组时,都是执行浅层复制。
    想要深层复制的话

    class Clothes2

    {

    String color;

    char size;

    Clothes2(String color, char size)

    {

        this.color=color;

        this.size=size;

    }

    }

     

    public class DeepCopy

    {

    public static void main(String[] args)

    {

            Clothes2[] c1 = {new Clothes2("red",'S'),new Clothes2("green",'M')};

        Clothes2[] c2 = new Clothes2[c1.length];

        for(int i = 0; i < c1.length; i++)

        {

            Clothes2 c = new Clothes2(c1[i].color, c1[i].size);

            c2[i] = c;

        }

        c1[0].color = "yellow";

        System.out.println(c2[0].color);

    }

    }

    需要自行复制元素,将对象中的每个元素都由c1复制到c2.

    字符串对象

    字符串本质是打包字符数组的对象,是java.lang.String类的实例
    不可变动字符串:在java中,字符串对象一旦建立,就无法更改对象中任何内容,对象上没有任何方法可以更改字符串内容。可以使用 + 连接字符串,改用StringBuilder来改善。它的特点在于每次调用完后都会返回原有的StringBuilder对象,这样可以避免产生多个对象。

    由1+2+...+100 可以用for

    public class Sum1{

        public static void main(String[] args){

            for(int i=1; i<101; i++){

                System.out.print(i);

                if(i!=100){

                    System.oyt.print('+');

                }

            }

    用StringBuilder改善

    public class OneTo100

    {

    public static void main(String[] args)

    {

    StringBuilder builder = new StringBuilder();

    for(int i = 1; i < 100; i++)

    {

        builder.append(i).append('+');

    }

    System.out.println(builder.append(100).toString());

    }

    }

    只产生一个StringBuilder对象,只进行一次输出,效果更好。

    查询Java API文件

    如果我们想用某一个类的某一功能,但不知道如何调用,或者想了解一下某一个类具体有哪种功能等内容,需要查询Java API文件。
    在Windows系统下,可以下载CHM格式的Java API,然后具体过程可以参照教材,离线查询十分方便。

    对象封装

    封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
    封装原则:将不需要对外提供的内容都隐藏起来,吧属性都隐藏起来,提供公共方法对其访问。

    private(私有)关键字
    是一个权限修饰符,用于修饰成员(成员变量和成员函数),被私有化的成员只在本类中有效。

    关于构造函数
    函数名与类名称相同。无须声明返回类型。创建对象时,数据成员就会初始化,如果没有初始指定值,则会使用默认值初始化。不可以写return语句。
    作用:给对象进行初始化。

    使用this关键字
    当在函数内需要用到调用该函数的对象时,就用this。
    this代表其所在函数所属随想的引用。
    例如:this.number= number;

    static(静态)关键字
    static关键字用于修饰成员(成员变量和成员函数)。使用时需注意静态方法只能访问静态成员,静态方法中不可以写this,super关键字,主函数必须是静态的。
    在JDK5后可以使用Import static语法,可以在使用静态成员时少打几个字。

    import java.util.Scanner;

    import static java.lang.System.in;

    import static java.lang.System.out;

    public class ImportStatic

    {

    public static void main(String[] args)

    {

        Scanner scanner = new Scanner(in);

        out.print("请输入姓名:");

        out.printf("%s 你好!%n",scanner.nextLine());

    }

    }


    学习中的问题和解决过程

    书中代码

    Integer i =10;

    System.out.println(i+10);

    System.out.println(i++);

    认为会显示20和11,正确应该是20和10。这里书上的是错误的。10会先装箱,然后在i+10时会先对i进行拆箱,再进行加法运算;i++该行也是先对i拆箱再进行递增运算。递增是最后的操作,只有在输出后才会递增的。

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

    import java.util.Scanner;

    public class Guess

    {

    public static void main(String[] args)

    {

    Scanner scanner = new Scanner (System.in);

    int number = (int) (Math.random() * 10);

    int guess;

     

    do

    {

        System.out.printf("GUESS A NUMBER:");

        guess = scanner.nextInt();

    }

    while(guess != number);

     

    System.out.println("YOU ARE RIGHT!");

     

    }

    }

    用import java.util.Scanner使用import告诉编译程序想偷懒 如果没有就会出现编译错误,除非每次都输入java.util.Scanner。在创建Scanner实例时使用System.in输入。
    刚开始不太理解其中一些代码函数,查阅资料才知道Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机double值,*10并强制转换成int型,可以生成1~10的随机整数。而guess = scanner.nextInt();要求猜出这个整数,直至猜对会显示“YOU ARE RIGHT!”

    心得体会

    再也不想编程了.....确实好麻烦啊。当然兴趣是培养的,我慢慢来...可能跟我自己c的基础不好有关吧,再接再厉。下午弄第四周的,争取晚上再写一个。唉美好的上午啊。不吐槽了哈哈哈,收工。
      

  • 相关阅读:
    jquery序列化form表单使用ajax提交后处理返回的json数据
    log4net VS2012 日志layout自定义,error日志和info日志分别记录到不同文件中
    Bootstrap 填坑1 栅格浮动问题
    C# MVC Transaction 事务
    C# MVC 用户登录状态判断
    SQL中MAX()和MIN()函数的使用
    简单表的 分页存储过程 (不支持多表连接)
    SQL Server 生成数据库代码,包含数据
    js 将数值显示为金额
    Jquery.Validate 扩展方法
  • 原文地址:https://www.cnblogs.com/20145207lza/p/5814662.html
Copyright © 2020-2023  润新知