• 201621123028《Java程序设计》第二周学习总结


    Week02-Java基本语法与类库

    1.本周学习总结

    1.1 java中数据类型分为基本数据类型和引用数据类型。基本数据类型中boolean是java特有的,它的取值只有true和false,并且boolean型的默认初始化值是false。对于引用数据类型,它的变量名不直接指向数据本身,而是指向存储数据对象的地址。null是一种比较特殊的引用类型,虽然是空但不是0,它的默认值是任何引用类型的默认值。String作为最常用的引用类型之一,常常需要对两个字符串进行比较,因为变量名不是直接指向数据本身,所以不能直接用==来进行比较,这时可以使用``变量1.equals(变量2)``它会判断变量1与变量2指向的值是否相等。当我们直接让变量用双引号创建某字符串时,而不使用new来创建一个新对象时,当第一个变量创建后,就会在字符串常量值中创建该字符串的对象,之后如果第二个变量用双引号也创建了同一个字符串,此时在字符串池中不会新建一个对象,而是使用第一次已经创建好的字符对象,这样变量1==变量2就会成立,如下图。因为String的 不变性,所以使用+进行连续求和会一直创建String对象,内存占用过度。可使用StringBuilder或者StringBuffer解决问题.

    1.2学过C语言知道了for循环,即for(初始化表达式;循环条件表达式;循环后的操作表达式),在java中可以使用foreach循环,格式:for(type element:arr)比较简单操作。多维数组中的不规则数组如int a[][]=new int[4][];表示初始化数组a,a中又有4个元素,而每个元素又是一个数组。学习ArrayList的基本操作,如add添加,remove删除,get获取,size返回元素的个数,set修改等等。

    2.书面作业

    1.String-使用Eclipse关联jdk源代码

    1.1 例如:String str1 = new String("abc");这时abc存储在堆内存中,堆内存存储的是数组和对象(数组其实就是对象)凡是new都建立在堆中。此时每一个实体都有一个首地址值。而如String str2 = "abc";则存放在栈内存中,栈内存存储的都是局部变量,而且所属的作用域一结束,该变量就会被自动释放。

    1.2 public String(char value[])的功能是让字符型数组value来创建String对象。

    1.3 public String replace(char oldChar, char newChar)用一个字符代替所有现有字符。

    参数 描述
    oldChar 现有字符替换。
    newChar 用oldChar替换的字符。
    就是oldChar的所有现有字符串已被newChar所替换

    1.4 String与字符数组之间可以相互转换,如字符串转换为字符数组char[ ]ch=s.toCharArray();,字符数组转化为字符串String str=string.valueOf(c);

    2.StringBuilder

    2.1 频繁修改字符串时,当使用String时,会一直创建String对象,内存占用过度。而是用StringBuilder就不会。了解StringBuilder可先了解StringBuffer。

    Java.lang.StringBuffer 是线程安全的可变字符序列。类似于 String 的字符串缓冲区,但不能修改。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。 JDK 5.0 开始,为该类增添了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
    --引用自《我是一个包子的博客

    2.2 StringBuilder的append(char[] str)方法功能是将char数组参数的字符串表示形式追加到此序列。StringBuilder内部使用values的字符串数组来存放字符。调用StringBuilder的append(char[] str)方法时,添加这个序列的char数组参数的字符串表示形式。字符数组参数按顺序追加,该序列的内容。这个序列的长度增加该参数的长度。

    3.字符串与字符串池

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

    String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
    输出为true,创建了两个字符串对象,首先在字符串常量池中建立了“hi”,接着输入str2="hi"时,在池中寻找,发现“hi”已经存在,所以直接让str2指向“hi”。此时,str1==str2。而str3是用new新建立了字符串“hi”。

    3.2 重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?

    对于引用类型,因为变量名不是直接指向数据本身,所以不能直接用==来进行比较,这时可以使用 变量1.equals(变量2)它会判断变量1与变量2指向的值是否相等。

    4. Wrapper(包装类)

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

    Integer x=100; int y = x+1;x++; 这一串命令中包含了些什么操作?
    Integer是int的包装类,是引用类型,它在对象中包装了一个基本类型int的值,所以可以将100直接赋值给i.Integer x = 100自动装箱,将基本数据类型int型转换为Integer类型。int y = x+1自动拆箱,将Integer类型转换为基本数据类型int型。x++先拆箱后装箱。

    4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?

    我们知道Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。

    -- 引用自《一转身就是一辈子的博客

    5.实验总结

    5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。


    队友:郑玉波。和舍友郑玉波同学畅所欲言,比如那道大整数相加的题,我们讨论了好久,在软件上测试PTA的例子没有问题,但是两个人的提交都有问题,花了好久没找到问题点,后来想到输入可能不止输入两行,最终解决了问题。感想:两个人一起讨论问题能尽可能的将自己的想法说出来,这样解决问题的效率又高了一些。

    5.2PTA-1综合小测验

    这题会用到Arrays,以及如何截取和拼接字符串。有四个选项,fib,sort,search,getBirthDate,对应不同功能,比如输入sort时,要求对输入的数字进行排序,最后结果要用[]包裹,一开始我是想[]可以自己输入,但是最后报错,还影响的后面的功能,进过查询,发现使用System.out.println(Arrays.toString(y));输出的结果中就会自己写入[];并且后面的功能也全都实现了。

    5.3 PTA-3身份证排序。

    这题的还是有字符串的截取,还有比较。在进行比较时,我使用p[j].substring(6,14).compareTo(p[j+1].substring(6,14))来对输入的字符串的第6位到第14位的字符串进行比较,根据返回值来决定要不要换位置,根据返回值,也能实现降序排序,如果要按照出生月份排序,只需要修改substring(6,14),改为substring(10,14),即可。

    5.4 PTA-4动态数组

    考察的是多维数组中不规则数组的相关操作,可用for循环嵌套,主要第2点输出格式要求高点,要输出锯齿形的乘法表,可以用一个判断让他换行,即碰到如11,33等时换行。System.out.printf("%-7s",array[i][j])实现最后一行的输出,这题我碰到个问题,以前的乘法表是11=1,12=2...,而这题是11=1,21=2...,所以我的输出array[i][j]=(i+1)+"*"+(j+1)+"="+(j+1)*(i+1);之前没改前提交一直报错,还找不到问题,最后才发现了。

    5.5 PTA-8 ArrayList入门。

    考察ArrayList入门操作,add添加,remove删除,get获取,size返回元素的个数,set修改等等。ArrayList是动态数组,比一般性的数组灵活的许多,可以动态的增加或删除数组内的元素。功能多。

    5-5(浮点数计算)

    对于输入的字符串,可以使用BigDecimal函数来更精细的计算。BigDecimal b1 = new BigDecimal(i);BigDecimal b=b1.add(b2);

    5-6(枚举)

    使用switch对输入结果进行判断,枚举中是enum Grade{A,B,C,D,E},构建代码块public static Grade getGrade(int score),在main中调用。

    5-7(大整数相加)

    这题看着不难,但是提交一直出错,因为提示的错误是对'e'和'E'的报错,一直在修改,后来请教了下,原来关键点是题目的要求是不止可以输入两行大整数。

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

    机器故障了,显示就会出错,比如会出现溢出的问题,机器有可能将余额的数据显示的很大,其实真实余额是没多少的,就像a=2147483647;a=a+1;这个时候就出现溢出了,a就等于-2147483648了。

    7.选做(难):package与javac、 java、 -classpath、 -d与Eclipse

    在 com.ibm包中编写 StringUtil类,内有一方法
    public static void foo1(){ System.out.println(StringUtil.class+" method:foo1"); }
    在edu.jmu包中编写Main类,调用com.ibm.StringUtil的foo1方法。

    7.1 尝试用命令行进行编译并运行,截图

    在edu.jmu包中编写Main类,其中调用了com.ibm.StringUtil的foo1方法
    这题出现了点问题,我想就写下自己理解的那部分吧,以后懂了再修改。首先是代码,分别建两个包,一个Main类,一个StringUtil类,用软件写的话,直接运行出来了。(还是软件好啊,不像DOS命令里搞不定啊23333),用命令到达StringUtil类的ibm目录下执行javac -d . StringUtil.java这句话的意思应该是在当前路径下('.'这个是表示当前路径)打包(-d)生成StringUtil.class字节码文件。接着应该同理啊,javac -d . Main.java,可是这里出问题,如下,一直卡这里,我觉的问题应该是出在代码上。

    7.2 将生成的StringUtil.class放到d:\lib下正确的目录结构下,将Main.class放到d:\test下正确的目录结构,尝试在命令行下运行,并截图。

    因为第一问没做出来所以这一问也只能空着了。

    7.3 Eclipse中自己编写的源代码放在哪个目录、class文件放在哪个目录(给出绝对目录)?在Eclipse项目中按一下Ctrl+F11就可以直接运行Main,当按下Ctrl+F11时,到底在哪个目录下执行了什么样的java命令?

    Eclipse中自己编写的源代码放在src目录下,class文件放在bin目录下。当按下Ctrl+F11时,应该是在bin目录中执行javac编译.class的字节码文件,之后在src目录下执行java运行.java的源文件。

    3.码云及PTA

    3.1 码云代码提交记录

    3.2 截图题集“Java基本语法”PTA提交列表

    3.3 使用老师发的jar程序统计每周的代码量

  • 相关阅读:
    A1052. Linked List Sorting (25)
    A1032. Sharing (25)
    A1022. Digital Library (30)
    A1071. Speech Patterns (25)
    A1054. The Dominant Color (20)
    A1060. Are They Equal (25)
    A1063. Set Similarity (25)
    电子码表
    矩阵键盘
    对象追踪、临时对象追踪、绝对坐标与相对坐标
  • 原文地址:https://www.cnblogs.com/bbshenme/p/7576359.html
Copyright © 2020-2023  润新知