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

    1. 本章学习总结

    - String对象创建之后不能再进行修改,修改字符串使用Stringbuilder;
    - 检测字符串内容是否相同不用==,用equals的方法检测;
    - 使用一维数组的两个步骤:1.声明数组(如int[] score;)2.分配内存给该数组(如score =  new int[4]);
    - 学会使用ArryList();
    

    2. 书面作业

    (1)使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。





    按Ctrl+左键点击类名则可查看String对象的源代码

    设计思路:String 使用 private final char value[]来实现字符串存储,String其本质是字符char,且一旦定义后不可改变。
    

    (2)为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String?

    使用String+拼接字符不会修改原先的字符串而是生成新的对象,大量创建新对象使代码运行效率变低并且占用多余存储空间。若用StringBuilder对字符串修改操作不用生成新对象而是在原字符串上做修改,节省资源。
    

    (3)比较两个字符串的值是否相等?为什么不能用==直接进行比较?

    使用==实际上是比较两个字符串的内存地址,所以用==比较两个字符串是否相等时,对象不同即使值相等也会出现false的结果。因此比较两个字符串是否相等应该用equals方法(str1.equals(str2))。
    

    (4)尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:

    String str1 =“hi“, str2=“hi“;
    String str3 = new String(str1)
    System.out.println(str1==str2);
    
    输出结果为true,创建了两个字符串对象;因为在创建String str1=“hi”时,java会先在字符串池中寻找是否有存在“hi”这个字符串,如果没有就创建一个新对象“hi”并让str1指向它,而str2=“hi”因为字符串池中已存在“hi”字符串,所以不会再新建立对象,而是将str2也指向已存在的“hi”,因此str1与str2的地址相同,==比较的是内存地址,所以结果为true。
    

    (5)Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i

     这是装箱过程,装箱即自动将基本数据类型转换为包装器类型,integer是int的包装类,装箱过程中使用了Integer的valueOf(int),且数值在[-128,127]之间,返回指向已经存在的对象的引用;否则创建一个新的Integer对象。
    

    (6)尝试分析下面代码输出结果

    Integer i1 = 127;Integer i2 = 127;
    i1 == i2;//true of false?
    Integer i1 = 128;Integer i2 = 128;
    i1 == i2;//true of false
    
    true;false。i2=127数值在[-128,127]之间,返回指向已经存在的对象的引用,因此i1=127与i2=127的地址一样,结果为true;i2=128超过数值范围,新建立一个对象,因此i1=128与i2=128的地址不同,结果为false。
    

    (7)package与javac、 java、 -classpath、 -d
    在 com.ibm包中编写 StringUtil类,内有一方法

    public static void foo1(){
     System.out.println(StringUtil.class+" method:foo1");
    }
    

    在edu.jmu包中编写Main类,其中掉了com.ibm.StringUtil的foo1方法
    7.1 尝试用命令行进行编译并运行,截图

    7.3 Eclipse中源代码放在哪个目录、class文件放在哪个目录。在Eclipse项目中按一下ctrl+f11就可以直接运行Main,尝试分析背后实现的原理

    源代码放在src,class文件放在bin目录
    

    (8)自己在这门课的目标与计划

    - C语言\C++、java(还未深入学习)
    - 除了每周的JAVA课外,每晚花一个小时左右学习java;遇到困难先自己查资料,实在不懂向舍友求助,或在群里提问。
    - 目标深入掌握java,熟悉jdk文档,了解尝试安卓开发。
    

    (9) 选做:公交卡里应该还有多少钱?请分析原因

    -0.02元,FFFFFFFC,该机器采用无符号存储形式,在该状态下溢出。
    

    3. PTA实验总结及码云上代码提交记录

    • 在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图

    4. PTA实验

    - 1掌握了调用函数的方法,要特别注意switch的输入不能用字符串,不然放在PTA上会错误,目前代码放在PTA上只有部分正确。。还没搞清楚错在哪
    - 2拼接字符串用StringBuilder,不用“+”
    - 3sort2的排序我用了冒泡法,但是觉得冒泡法有点太过复杂,应该还有更简单的方法待研究,其中还用到了compareTo比较两个字符串大小
    - 5浮点数加减法结果精确需要用到BigDecimal,相加用a.add(b),相乘用a.multiply(b)
    
  • 相关阅读:
    apollo-springboot 整合使用
    axon 过滤存储哪些事件
    springtools 解决lombok
    mylog 自定义注解打印 logger
    java高级应用:线程池全面解析
    监控 Java 线程池运行状态
    线程池获当前使用的活跃线程数
    JVM调优总结 -Xms -Xmx -Xmn -Xss(1)
    java高并发之线程池
    Nginx 网络事件
  • 原文地址:https://www.cnblogs.com/carol520123/p/6494403.html
Copyright © 2011-2022 走看看