戴建钊 201521123023《Java程序设计》第2周学习总结
1. 本周学习总结
(1)String类:字符串连接“+”,以前觉得方便但不知其原理,所以在有大量修改字符串操作的时候用得不亦乐乎,既浪费内存,又减缓效率。现在知道用Stringbuilder()才是正确的选择
(2)java中类型分为基本类型和类类型(也称参考类型),java撰写程序几乎都在使用对象,对象是类的实例,所以要乘凉,先种树,定义了类,才能产生对象
(3)自动装箱/拆箱:在编译某些代码时,编译器自动调用某些方法来翻译。
例如:Integer i = 100;
实际上,执行上面那句代码的时候,系统为我们执行了:Integer i = Integer.valueOf(100);
再如:
Integer i = 10; //装箱
int t = i; //拆箱,实际上执行了 int t = i.intValue();
2. 书面作业
1.使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。


String对象的设计思路:String是一个非可变类,它的实例是不能被修改的。在java中为了效率考虑,相同的字符串(以""包括且序列,大小相同)无论在代码中出现几次,JVM都只会建立一个String实例并放在字符串池中以供使用。
2.为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String?
因为使用String频繁对字符串作修改操作会产生大量的新对象,浪费内存且效率不高
3.比较两个字符串的值是否相等?为什么不能用==直接进行比较?
当两个字符串值相等但是对应不同的对象时,用==比较会产生错误的结果。用==比较的话是比较两者对应的是否为同一对象,而不是值的比较,所以若要比较两个字符串的值要用equals()。
4.尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 =“hi“, str2=“hi“;
String str3 = new String(str1)
System.out.println(str1==str2);
输出结果:true 。
共创建两个字符串对象。str1="hi"建立了“hi”字符串,并放在了字符串池中;str2="hi",使用的是字符串池中已经建好的“hi”字符串;str3 = new String(str1)新建了一个String类,与之前建立的字符串值相等,但是是不同的对象。
5.Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i
这是java为我们提供的转换方法(自动装包/自动拆包)。
JDK1.5为Integer增加了一个全新的方法: public static Integer valueOf(int i)
对于范围在-128到127的整数,valueOf方法做了特殊处理。采用IntegerCache.cache[i + offset]这个方法。 当-128=<i<=127的时候,返回的是IntegerCache中的数组的值;当 i>127 或 i<-128 时,返回的是Integer类对象。
因此 Integer引用i中存储的是cache数组第228号元素的地址。
相关链接:java的integer与int互转
6.尝试分析下面代码输出结果
Integer i1 = 127;Integer i2 = 127;
i1 == i2;//true or false?
Integer i1 = 128;Integer i2 = 128;
i1 == i2;//true or false
前面一个问题已经说了,对于范围在-128到127的整数,Integer引用i[]中存储的是cache数组元素的地址,==比较的是引用的地址,因为cache是Integer的static数组,只有一个,所以第一个比较所得的结果为true;
而第二个则是false,因为当i>127 或 i<-128 时,返回的是Integer类对象,所以Integeri1=128;Integer i2 = 128;实际上是建立了两个新对象,因此用==比较时所得结果为false。
7.package与javac、 java、 -classpath、 -d
在 com.ibm包中编写 StringUtil类,内有一方法
public static void foo1(){
System.out.println(StringUtil.class+" method:foo1");
}
7.1 尝试用命令行进行编译并运行,截图

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

提示无法加载到类StringUtil
7.3 Eclipse中源代码放在哪个目录、class文件放在哪个目录?在Eclipse项目中按一下Ctrl+F11就可以直接运行Main,当按下Ctrl+F11时,到底在哪个目录下执行了什么样的java命令?
源代码放在src文件夹中,字节码文件在bin目录里,当按下Ctrl+F11时,在src目录中编译源文件生成.class文件放到bin目录下,然后在bin目录执行字节码文件输出结果。
8.自己在这门课的目标与计划
- 请描述一下你的技术基础(会什么语言,都写了多少行代码)
- 一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?
3. 使用码云管理Java代码
在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图

4. PTA实验
题目集:jmu-Java-02-Java基本语法 中的判断、选择、编程(8道)
实验种碰到的问题、思考、收获与解决方案
(1)PTA实验 5-1 jmu-Java-02基本语法-01:fib(int n);可用多种方法解决(递归函数、循环等);从算法的时间复杂度考虑,我选择了用循环输出的方式
public static void fib(int n){
int a=0;int b=1;
//System.out.print(a+" ");
for(int i=1;i<=n;i++){
if(i==1)System.out.print(b+" ");
else {
System.out.print(a+b+" ");
if(a>b)b=a+b;
else a=a+b;
}
}
}
(2)Arrays.sort()的用法;java中sort方法采用的多为递增方式,采用逆位输出可以得到递减序列
(3)search方法:发现PTA上的题目有些细节问题,由于在search之前先有sort 方法建立起来的数组,所以可以进行查找,若跳过sort直接search,则无法进行正确的查找。(关于search,如果数组中出现多个相同的数,是否应该有多个返回值?)
戴建钊 201521123023《Java程序设计》第2周学习总结的更多相关文章
- 2018-03-11 20165235祁瑛《Java程序设计》第二周学习总结
2018-03-11 20165235祁瑛<Java程序设计>第二周学习总结 教材学习内容总结 第二章要点: 在这一章中我学到了很多东西: (1)布尔类型boolean,布尔类型的赋值只能 ...
- # 20175227 2018-2019-2 《Java程序设计》第一周学习总结
20175227 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 1.安装VB,Ubuntu,Git,JDK,并自行配置. 2.写"Hello Wo ...
- 20155326刘美岑 2016-2017-2 《Java程序设计》第二周学习总结
20155326刘美岑 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 教材第三章主要讲解的是基础语法,主要包括认识类型与变量.学习运算符的基本使用.了解类型 ...
- 20155201 2016-2017-2 《Java程序设计》第九周学习总结
20155201 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC全名JavaDataBaseConnecticity,是Jav ...
- 20155319 2016-2017-2 《Java程序设计》第一周学习总结
20155319 2016-2007-2 <Java程序设计>第一周学习总结 考核方式 翻转课堂考核12次(5*12=60):每次考试20-30道题目,考试成绩规格化成5分(如总分20分就 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
随机推荐
- shell运算符之 关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符
shell运算符有很多,关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符 1,算术运算符 原声bash 不支持简单的算术运算,可以使用expr 工具 两点注意: 表达式和运算符之间要有 ...
- Ubuntu下OpenCV不能被某个python版本识别
Ubuntu下OpenCV不能被某个python版本识别 Solution: 可以进入相应版本的python,查看该python的path: python import sys print(sys.p ...
- redis(1)
什么是nosql 非关系型数据库 为什么要用nosql web2.0大规模动态网站的兴起 high performance ,高并发读写,动态页面展示与交互,比如微博点赞评论等操作,实时统计在线人数排 ...
- 导入import com.sun.image.codec.jpeg.JPEGCodec出错
在Eclipse中处理图片时,需要引入两个包:import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPE ...
- Android 主题theme说明 摘记
主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格.在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status B ...
- linux(九)之网络基础
一.ping命令 1.1.作用 用于检测主机.执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常. 1.2.命令说明 pi ...
- mock server 前后端分离小结(转)
1.前台开发受限于后台开发的速度 2.后台提供给前台的接口缺字段,时常需要联调 基于Mock Server开发的好处: 对于前端来讲,可以独立于后端进行开发. 对于后端来讲,根据前端定义的接口进行开发 ...
- MongoDB-python的API手记
-------------------python调用MongoDB------------------- 1.官方文档:http://api.mongodb.org/python/current/t ...
- Linux的vi常用命令详解
1.vi的基本概念 基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下: ...
- [js高手之路]node js系列课程-图解express+supervisor+ejs用法
上文通过node js自带的http模块搭建了一个简易的服务器,实际在开发中,一般用的是express框架,本文我们就来讲讲项目开发中必备不可少的几样东西: 服务器( express ) 路由( ex ...