• 201521123072《Java程序》第二周总结


    201521123072《Java程序》第二周总结

    标签(空格分隔): Java学习


    1,本周小结

    1,字符串的使用,
    (字符串变量作为对象来处理),所以字符串相等就要用到equals()方法,
    学会了字符串的拼接(两种方法),截取,
    字符串池的理解
    Java运行环境有一个字符串池,由String类维护。执行语句String str="abc"时,首先查看字符串池中是否存在字符串"abc",如果存在则直接将"abc"赋给str,如果不存在则先在字符串池中新建一个字符串"abc",然后再将其赋给str。执行语句String str=new String("abc")时,不管字符串池中是否存在字符串"abc",直接新建一个字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然后将其付给str。前一语句的效率高,后一语句的效率低,因为新建字符串占用内存空间。
    【对于字符串中堆,栈的理解】http://jingyan.baidu.com/article/546ae18566c6ce1149f28c36.html
    2,枚举类型
    3.一些常用的数学函数
    4,Scanner扫描器的用法,对文件的读写
    5,图形界面的构造

    2. 书面作业

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

    String类的源代码

    将string转换成动态数组进行操作

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

    因为String 对象是不可改变的。每次使用String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间,所以在需要对字符串执行重复修改的情况下,创建新的String对象相关的系统开销会很大。所以如果要修改字符串而不创建新的对象,则使用StringBuilder 类

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

    因为字符串变量是作为对象来处理的,只能用equals()来比较字符串中的内容是否相等,用来比较对象是否相等
    例如有如下定义:
    String a="student";
    String b="student";
    执行a时会首先检查字符串池中是否存在“student”,如果有则直接赋给a,如果没有则在字符串池中创建一个"student",然后再赋给a,当执行到b时,检查字符串池已经存在了"student",因此直接赋给b,此时a与b指向同一个对象,直接用
    其实是在比较两个对象是否相等
    又例:
    String a=new String("student");
    String b=new String("student");
    而执行String a=new String("student")时,不管字符串池中有没有"student",都会在堆中新建一个字符串对象然后将其赋给a引用,所以其上a,b的值虽然相同,但是却是指向不同的对象

    • 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
      String str1 =“hi“, str2=“hi“;
      String str3 = new String(str1)
      System.out.println(str1==str2);

    输出为true ,创建了两个对象,
    解释:执行String str1时因为在字符串池中没有hi, 所以字符串池中创建一个"hi",然后再赋给str,执行str2时,因为字符串池中已经有了“hi”,所以直接将“hi”赋值给str2,此时只创建了一个对象,所以str==str2,结果输出为ture,而在执行String str3 = new String(str1)时,不管字符串池中有没有"hi",都会在堆中新建一个字符串对象然后将其赋给str3引用, 所以总共创建了两个对象

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

    Integer类是打包器,将基本类型打包在对象之中,这样就可以操作这个对象,就像是将基本类型当做对象操作
    其上为自动装箱功能,自动装箱后可自动拆箱,int会参考至integer,若被指定给int的变量i,则会自动取的打包的int类型再指定给i,
    在JDK上, 编译程序时会自动将程序代码展开为:
    Integer localInteger=Integer.valueof(100);

    • 尝试分析下面代码输出结果
      Integer i1 = 127;Integer i2 = 127;
      i1 == i2;//true of false?
      Integer i1 = 128;Integer i2 = 128;
      i1 == i2;//true of false

    第一次为ture,第二为flase
    在Integer.valuof()建立Integer实例时,valueof()的操作内容如下:
    IntegerCache.low的默认值为-128,IntegerCache.high的默认值为127,所以Integer.valueof()就会针对-128~127的范围中建立打包器进行快速存取,执行Integer i1 = 127时,因为其值在-128~127的范围中,所以会从缓存中传回Integer实例,当执行Integer i2 = 127时,要打包的同样是127,也是从缓存中传回Integer实例,所以会参考到同一个Integer实例,,使用比较就会是true
    因为128没有在范围内,所以直接建立Integer实例,第二次执行Integer i2 = 128也是直接建立Integer实例,使用
    比较就会是flase

    • 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.2 将生成的StringUtil.class放到d:lib正确的目录结构下,将Main.class在d: est正确的目录结构,尝试在命令行下运行,并截图。
    7.3 Eclipse中源代码放在哪个目录、class文件放在哪个目录。在Eclipse项目中按一下ctrl+f11就可以直接运行Main,尝试分析背后实现的原理**。

    源代码放在src目录下,class放在bin目录下的
    通过Main找到字节码文件,再将字节码文件进行运行

    • 自己在这门课的目标与计划,
      1,请描述一下你的技术基础(会什么语言,都写了多少行代码)

    会C语言,了解了一点C++,写了挺多了的,用行来计算应该计算不清楚了

    2,一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?

    各个课程合理分配,一周写多少代码和我在这一周是否有多少时间是紧密相关的,有空闲的时间都会好好练习Java,学的方式的话当然是实践和理论相结合,光看课本是远远不够的,重在自己实践。遇到困难,先自己冷静思考一下,看书,思考不出来再百度,百度不出来问询问。

    3,关于这门课的smart目标参考链接

    对于这门课程的目标,是熟练掌握,想做出很完美的图形界面,结合课外,做好科研立项。

    3. 使用码云管理Java代码

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

    4. PTA实验

    题目集:jmu-Java-02-Java基本语法 中的判断、选择、编程(8道)

    • 2.实验二:

    字符串的拼接:
    方法一:String str=0.5+"ahhh";
    方法二:用要大量使用重复性连接的话,要使用StringBuilder
    例:
    StringBuilder stringBuilder = new StringBuilder();
    for (int i = 0; i < 100_00000; i++) {
    stringBuilder.append(i);
    }
    其中还有关于字符串的截取:
    String str;
    str.substring(x,y)(从x 开始,到y 之前结束)

    • 实验三:

    其中涉及到字符串的比较问题
    若有两个字符串:
    String str1 = new String(“hi“);
    String str2 = new String(“hi“);
    str1==str2;是判断其两个对象是否是一样的
    str1.equals(“hi”);则是判断 str所指向的字符串是否等于 “hi”
    不区分大小写进行比较,用:"abc".equalsIgnoreCase(ABC);

    • 实验四:

    将整数转换成字符串: String.valueOf( int a);
    使用Arrays.deepToString 打印二维数组中的内容,可以将内嵌的数组打印出来
    String.format();的用法

     String temp=String.format("%-7s", arry[i][j-1]); 
    

    "-"表示向左对齐,输出的arry[i][j-1]总共占七位
    "+"表示向右对齐

    • 实验五

    因为浮点数的不精确性(其遵守IEEE754浮点数运算规范),使用分数与指数来表示浮点数,所以在进行浮点数运算时,引进BigDecimal方法,
    其提供
    plus(),substract(),此为课本上的(MyEclipse中的方法为:add(),subtract)
    multiplay(),divide(),
    【BigDecimal】(http://baike.so.com/doc/6988815-7211667.html)

  • 相关阅读:
    201671030116宋菲菲 实验三作业互评与改进报告
    通读《构建之法》提出问题
    201671010460-朱艺璇-实验四附加实验
    201671010460朱艺璇 词频统计软件项目报告
    201671010460朱艺璇 实验三作业互评与改进报告
    阅读《现代软件工程—构建之法》提出的问题
    手把手带你了解消息中间件(3)——RocketMQ
    字符编码的历史由来
    linux常用命令
    linux各目录及重要目录的详细介绍
  • 原文地址:https://www.cnblogs.com/wish-tree/p/6501219.html
Copyright © 2020-2023  润新知