《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. MySQL表空间集

      --MySQL表空间集 ----------------------2014-09-20 1. 收缩ibdata的方法,目前MySQL依然没有提供收缩ibdata的方法,只能重构,下面是5.7的步骤. ...

    2. CSS3自定义滚动条样式

      原文地址:→传送门 写在前面 滚动条是个很常见的东东,不过某些浏览器自带的滚动条确实不太好看啊,下面可以作为学习,探讨下自定义滚动条的实现,这样你的滚动条就可以美美的啦.但是,也只能玩玩,因为只针对w ...

    3. Mac OS X下安装和配置Maven

      1.下载Maven 打开Maven官网下载页面:http://maven.apache.org/download.cgi 下载:apache-maven-3.5.0-bin.tar.gz 解压下载的安 ...

    4. Mac实用操作技巧(五)

      让其他人以游客方式登录你的Mac 当有一个哥们对你说:"嘿,把你Mac借我一下,我有点事需要用."这时你肯定不希望自己Mac上保存的资料毫无保留的呈现在别人眼前,那和脱光了衣服站在 ...

    5. ACM做题过程中的一些小技巧

      1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long long或__int64型(两个下 ...

    6. Fiddler模拟重发请求

      在测试的过程中会碰到模拟请求的重发或者修改请求的参数进行请求模拟发送 一.Reissue Sequentially 模拟多次重发 1.启用后fiddler:PC端或手机端创建某条数据后,session ...

    7. 【JBoss】Linux下JBoss服务器"Too many open files"的解决方法

      linux中,每个socket连接都使用文件描述符进行标识,文件描述符属于系统资源,存在使用上的限制:缺省情况下JBoss能使用的最大描述符数是系统默认的最大文件描述符数(通过命令ulimit -H ...

    8. 使用angular的HttpClient搭配rxjs

      一.原Http使用总结 使用方法 在根模块或核心模块引入HttpModule 即在AppModule或CoreModule中引入HttpModule: import { HttpModule } fr ...

    9. poj2912 Rochambeau

      Description N children are playing Rochambeau (scissors-rock-cloth) game with you. One of them is th ...

    10. Struts配置的各种视图转发类型

      上面是struts1的视图转发2中类型:1.内部请求转发(来定向到某个视图):2.浏览器重定向(来定向到某个视图). 浏览器重定向(直接访问路径)不能访问WEB-INF的jsp文件,只有服务器内部转发 ...