戴建钊 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程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
随机推荐
- JS进阶 ] 分析JS中的异步操作
写在前面 JS因为是单线程的,所以在执行事务的时候,往往会因为某个事务的延迟,而导致服务器假死,这时候异步编程就显的格外重要,但是异步编程一般理解为回调函数callback,典型的就是node,回调函 ...
- 调整ORACLE用户关闭密码有效期
--调整ORACLE用户关闭密码有效期 ----------------------------------2013/11/12 在oracle中执行一下操作:1.查看用户的proifle是那个,一 ...
- 51NOD 1258 序列求和 V4 [任意模数fft 多项式求逆元 伯努利数]
1258 序列求和 V4 题意:求\(S_m(n) = \sum_{i=1}^n i^m \mod 10^9+7\),多组数据,\(T \le 500, n \le 10^{18}, k \le 50 ...
- Python 第八天
文章读写 读写文章是最常见的 IO 操作. 读 1.Python 中内置了open()函数,read()方法以及close()方法来打开文件 fi = open('test.html','r') co ...
- C语言——指针
一.什么是指针 "指针变量"是指用来存放变量地址的变量.指针变量也是一个变量,它和其他变量的区别在于它里面存的不是普通的数据,而是另一个变量的地址.访问变量有两种方式,第一种是直接 ...
- HIVE—索引、分区和分桶的区别
一.索引 简介 Hive支持索引,但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键. Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如减少MapRed ...
- JS中的函数、BOM和DOM操作
一.JS中的函数 [关于注释] /** [文档注释]:开头两个*.写在函数上方,在调用函数时可以看到文档上方的描述信息. */ // 单行注释 /* 多行注释 */ 1.函数的声明及调用 (1) ...
- c# 后台get post请求
//get请求 public static TResult Get<TResult>(string host, string url) { var httpClient = new Htt ...
- 线性代数-矩阵-【5】矩阵化简 C和C++实现
点击这里可以跳转至 [1]矩阵汇总:http://www.cnblogs.com/HongYi-Liang/p/7287369.html [2]矩阵生成:http://www.cnblogs.com/ ...
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第2讲(对象的实现及全局变量的定义)
整体展示: 一.全局变量 /*===================玩家参数==========================*/ var myPlane; //英雄对象 var leftbtn = ...