《Java程序设计》第2周学习总结


1. 本章学习总结

  • String

    1.String类的对象是不可变(immutable)的

    2.拼接(+号)

    "PG"+13;

    (一个字符串与一个非字符串的值进行拼接,后者被转化成字符串)

    要大量拼接字符串的话,请使用StringBuilder

    3.java中“==”比较的是对象的内存地址。
  • 输入输出-Scanner(扫描器)

    具体查看书本及Scanner类的用法.txt
  • 数组

    1.for(int element:a)

    类型 变量 集合

    例如

    for(int element:a) //a为数组

    System.out.println(element);

    2.Arrays工具类
  • 类管理机制:包(没听懂)

    包-package关键字

2. 书面作业

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

答:

1.使用Eclipse关联jdk源代码:

参考文章:

Eclipse关联JDK源码

如何在Eclipse下查看JDK源代码

"window">"Preferences">"Java">"Installed JRES".



此时"Installed JRES"右边是列表窗格,列出了系统中的JRE环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE)



Edit -->Source Attachment -->Extenal location -->Extenal File...-->src.zip -->OK-->Finish



2.查看String对象的源代码:

ctrl+鼠标左键选中某一个类,或者选中类之后按F3,源代码文件弹出



3.String对象的设计思路:

  • 选中String类之后按F3弹出源代码文件

    分析源码的能力较差仅能看出几点

    1.String是final类型的

    2.String字符串是常量,其值在实例创建后就不能被修改

    Java源码分析——String的设计

    这篇文章有更详细的设计思路,无奈现在还有很多地方看不懂,先保存在这里之后java学的更好了在回头来看看

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

答:

  • String对象是不可变的,创建后就不能被修改,改变只能开辟一个新的内存来存放新的对象
  • 如果用String频繁修改字符串,就会要占用很多的内存空间了创建新的对象。
  • 而StringBuilder是在原来的对象中进行修改不会产生新的对象,节省内存空间。

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

答:

  • java中“==”比较的是对象的内存地址,不是比较字符串的内容。
  • 当字符串开辟一个新的空间来存储相同的内容,用==不能判断内容是否相同,要用equals来判断。

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

String str1 =“hi“, str2=“hi“;
String str3 = new String(str1)
System.out.println(str1==str2);

**

答:

  • 本题结果true;
  • 第一行中str1和str2都指向了存放“hi“的内存地址;
  • 第二行创建了一个新的对象str3,字符串开了一个新的内存地址存放和str1相同内容的字符串“hi“;
  • 最后一行 == 比较的是两个字符串的地址,str1和str2指向的地址相同所以结果为true;而如果是str1和str3比较结果false。

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

答:

参考文章:

java 自动装箱与拆箱

  • 100是属于基本数据类型的,原则上它是不能直接赋值给一个对象Integer的,但jdk1.5后你就可以进行这样的声明,这就是自动装箱的魅力
  • 自动将基本数据类型转化为对应的封装类型。成为一个对象以后就可以调用对象所声明的所有的方法

    相当于:
//声明一个Integer对象
Integer num = 100;
//以上的声明就是用到了自动的装箱:解析为
Integer num = new Integer(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
  • java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象

    -而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;
  • ==:是用来判断两个对象的地址是否相同,即是否是指相同一个对象.

**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:\test下正确的目录结构,尝试在命令行下运行,并截图。

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

  • 源代码放在src文件中,class文件放在bin文件中。
  • 我们在写每个程序的时候,都会在开头package相应的包名,这就让其他程序在调用此程序中类的时候有了一个路径,而在调用其他类时import或者用完全限定名。所以我们运行程序的时候能够让其找到我们所调用的各种存在的包中的类。

Q8. 自己在这门课的目标与计划

1.请描述一下你的技术基础(会什么语言,都写了多少行代码)

答:C语言和不太系统的c++,这种东西没有统计过,一直在累积中.

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

答:

  • 今年课程比较多,我周末也要上课,所以时间相较于上学期真的比较紧,但一周花最多的时间就是在这门课程上了,其他课程上课认真听,马上消化理解,做好作业尽量花最少的时间做高效率的学习。深知java实践的重要性所以放最多的时间在这门课程上,目前学习java是一有空就学所以显得没什么规律。之后尽量保证平常有一个小时的时间在java上,周末一天三四个小时。
  • 写几行代码这种东西我真的没有一个量的概念,也没有统计过。做好pta已经私下的一些小练习这些代码有多少行一周就有多少行。
  • 主要自学比较重要,多敲代码多看文章,搞懂理论提高敲代码的能力,看视频也是可以的网上的不少java学习视频都是很不错的。
  • 百度,bing 老师,同学。

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

**

答: java已有类库能够熟练掌握,编程能力得到提高,如果之后自己能用java开发一些程序就是最好的了。

Q9. 选做:公交卡里应该还有多少钱?请分析原因(在规定时间内若未完成后面补上)

3. 使用码云管理Java代码

  • 在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
  • 因为码云和git尚未弄好所以代码不能上传,会尽快把码云弄好,尽快完善。
    ##**4. 实验总结**
    ```
    * 第一题:switch进行函数选择,然后运用Arrays.sort、Arrays.Binarysearch等函数,自己再编写getBirthDate和fib。
    参考了jdk文档的Arrays,String;其中因为不知道== 的用法,出现了错误,后来上课老师提醒了解到java中==比较的是地址而不是内容。经过此题更加了解到java这种面向对象语言的方便。
    * 第二题:使用StringBuilder,开头没有理解题意错了,后来通过同学解决了问题。
    * 第七题:计算大整数时用BigInteger。
    ```
    ##**5. 小任务(加分)**(在规定时间内若未完成后面补上)

    现有choice.txt文件,里面包含上千行,上百题选择题。先在老师要将其中的题目转化为PTA网站的选择题。然而PTA网站上的选择题对输入格式有要求。要求如下:

    • 题面第1行及选项行前不能有空格,题面其他行无此要求。
    • 题面第1行结尾要包含答案字符串,内容形式@[C](2),代表答案为C,分值为2
    • PTA出题格式需符合Markdown要求,才能有良好的显示效果。现要求每一行结尾一定要有2个或以上的空格。
    • 统计:题目数量
    • 输出:最后生成outChoice.txt,包含经过处理的所有问题。文件第1行,代表题目数量。
      注1:使用Scanner处理输入文件, 使用PrintWriter输出文件。读写文件请参考WriteReadFileTest.java
      注2:Choice.txt下载
      注3:题目很简单,大概50行左右,不要畏难。
      进阶:可以为将来的自动出题、组卷系统做准备。

    201521123002 《Java程序设计》第2周学习总结的更多相关文章

    1. 20145213《Java程序设计》第九周学习总结

      20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

    2. 20145213《Java程序设计》第二周学习总结

      20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

    3. 20145213《Java程序设计》第一周学习总结

      20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

    4. 21045308刘昊阳 《Java程序设计》第九周学习总结

      21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

    5. 20145330孙文馨 《Java程序设计》第一周学习总结

      20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

    6. 20145337 《Java程序设计》第九周学习总结

      20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

    7. 20145337 《Java程序设计》第二周学习总结

      20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

    8. 20145218《Java程序设计》第一周学习总结

      20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

    9. 《Java程序设计》第九周学习总结

      20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

    10. 《Java程序设计》第二周学习总结

      20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

    随机推荐

    1. 【NO.12-1】Jmeter - 在Linux执行性能测试的方法 [1]

      前面讲过在Windows执行性能测试的方法,就是这篇了<jmeter - 一个完整的接口测试的脚本>, 在Windows执行性能测试之前,首先要有1个性能测试脚本嘛, 但是这个性能测试脚本 ...

    2. CSS基础学习笔记

      一. CSS介绍 1. CSS概述:CSS(Cascading Style Sheets)指层叠样式表,极大提高了工作效率. 2. 基础语法: 属性大于1个之后,属性之间用分号隔开 如果大于1个单词, ...

    3. Java 编写小程序,下载指定网页上的所有图片

      使用Java编写一个小程序,可以根据指定的网页地址,下载网页中的所有图片:使用到网络编程.线程池.IO和UUID的技术.具体代码如下: import java.io.File; import java ...

    4. Spring Web MVC(二)

      [toc] 五大核心组件 Controller (处理器.控制器) 控制器的概念是MVC设计模式的一部分(确切地说,是MVC中的C).应用程序的行为通常被定义为服务接口, 而控制器使得用户可以访问应用 ...

    5. Web 学习笔记 - 网络安全

      前言 作为 前端开发者,了解一点 Web 安全方面的基本知识是有很必要的,未必就要深入理解.本文主要介绍常见的网络攻击类型,不作深入探讨. 正文 网络攻击的形式种类繁多,从简单的网站敏感文件扫描.弱口 ...

    6. fedora23安装配置记录

      一.安装fedora 1.下载fedora的镜像文件,个人比较喜欢gnome,因而直接下载工作站版本了! http://start.fedoraproject.org/这个是浏览器首页,提供了fedo ...

    7. Windbg调试关键区(CriticalSection)死锁

      一. 准备工作 这里一个有关键区锁死问题的程序,运行之后依次点击"CS锁死"按钮.右上角退出按钮,程序就会卡死.(图1) 对于眼下的这个问题,界面完全失去响应,这说明负责消息处理的 ...

    8. GHO2VMDK转换工具分享含VS2010源码

      平常经常用到虚拟机,每次从gho转换为vmdk时都要输入cmd代码,觉得麻烦,自己动手做了个gho2vmdk转换工具,集成ghost32.exe文件,可以一键转换,省时省事.运行时会将ghost32. ...

    9. 一个还算简单的微信消息SDK(基于.Net Standard 2.0)

      虽然微信公众号出现了好久,不过在SDK这件事情上感觉并没有多少人把它当成一个有技术含量的事情来做,很多SDK做的事情就是一个代码的堆叠,当然也可能写的好的并没有开源出来.所以在某个翻遍Github而无 ...

    10. python进阶学习(二)

      本节学习图形用户界面 ------------------------ 本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口.这里介绍wxPython : 下载地 ...