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

    1、本周学习总结

    • 学习了string类的一些用法,Java编写大致与c相同,但是要注意Java是面向对象的语言。例如两个字符串“==”比较,Java与c可能会有不同结果。
    • 学习了import的用法,不用麻烦输入完全限定类名。
    • 学习了java中数组的用法。

    2、问答题

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

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

    答:因为String会频繁的产生新对象,即使只对字符串进行一点点修改也会产生新对象,浪费内存空间,降低效率。
    而StringBuider可以直接在字符串上进行操作,不会产生新对象。

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

    答:java中有两种比较方法。一种是用“”,另一种是“eaquls()”。
    ”运用在基本数据类型的时候,通过比较它们实际的值来判定是否相同;而用于比较引用类型的时候,
    则是比较两个引用的地址是否相等,也就是是否指向同一个对象。
    所以,即使当值相等的情况下,若对象不同,也会返回false。
    如:
    String a = new String("abc");
    String b = new String("abc");
    a == b 将返回false,因为两个是不同的对象实例。

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

    答:输出结果:true
    解析:str1与str2都是常量对象,所以输出为true。但是如果与str3比较,因为str3是强制产生的新对象,结果就为false。

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

    答:因为java中的jdk可以实现自动装箱功能(即为将一个基础数据类型传给相应的封装类)。i为Integer类型的引用,100为基础数据类型。
    源码如下:
    public static Integer valueOf(int i){
    if(i >= -128 && i <= IntegerCache.high)
    return IntegerCache.cache[i + 128];
    else return new Integer(i); }
    原理为:jdk帮你自动调用了Integer.valueOf(100)*。

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

    答;输出结果:true、false
    解析:第一个值是127,在Integer.valueOf()范围内(-128到+127),i1和i2指向同一个对象;
    第二个值为128,超过Integer.valueOf()范围,指向两个不同的对象。

    Q7.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,尝试分析背后实现的原理。

    这样是错的!!经过大神指导,知道错在哪了。正确的如下图

    大致分析一下错误原因:因为Main.java中import了com.ibm这个包,想要执行Main.java就必须先找到包的位置。第一次出错就是没有告诉系统从哪里找import的这个包,它就从当前目录(即test目录)中寻找,自然是找不到的。所以用“-cp .”来引导系统在lib目录(即com.ibm包所在位置)下找,方可执行成功。

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

    Q8.自己在这门课的目标与计划
    请描述一下你的技术基础(会什么语言,都写了多少行代码)
    一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?
    关于这门课的smart目标

    • 技术基础:基础比较薄弱,会c/c++,代码写的没有统计过;
    • 计划:一周打算每天至少抽出一两个小时学习java,一周800行代码。学习方式:课堂听讲,没有听懂的询问他人,课后作业认真完成,辅助网上学习。
    • smart目标:
      • S:具体的。落实到每天的学习时间上吧,每天都要有新的知识融入进来。
      • M:动机。学习的动机大概是不辜负父母的期望,珍惜四年短暂的学习时光。
      • A:可实现的。这就相当于定一个小目标吧。一周七天每天至少保证一到两小时的学习时间。
      • R: 关联的。说实话呀,当初的大学目标真的不是像现在这样,但是既然选择了也只好踏实下来,一步一个脚印。终有所获。
      • T: 能衡量进度的。这些博客作业、pta编程。

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

    答:42949672.76 =(16进制的)FFFFFFFC,其实是欠0.02元。程序员处理时用了无符号整型,没考虑到负数的情况。
    闸机显示有问题,与卡本身无关。
    参考链接


    3. 使用码云管理Java代码

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


    4. PTA实验

    题目集:jmu-Java-02-Java基本语法 中的判断、选择、编程(8道)
    实验种碰到的问题、思考、收获与解决方案

    • pta上提交大概比较严谨吧,之在eclipse上结果正确的在pta上就过不了,问了大神说是可能有数据写的过不了。后面改起来换方法比较麻烦。
    • 第二题用到了StringBuilder,用String不行,因为会产生许多新对象,然后用append在该对象上直接进行操作就好。

    5. 小任务(加分)

  • 相关阅读:
    451. Sort Characters By Frequency
    424. Longest Repeating Character Replacement
    68. Text Justification
    44. Wildcard Matching
    160. Intersection of Two Linked Lists
    24. Swap Nodes in Pairs
    93. 递归实现组合型枚举
    98. 分形之城
    97. 约数之和
    96. 奇怪的汉诺塔
  • 原文地址:https://www.cnblogs.com/guzhiling/p/6485675.html
Copyright © 2011-2022 走看看