戴建钊 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程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
随机推荐
- 学习笔记TF041:分布式并行
TensorFlow分布式并行基于gRPC通信框架,一个master负责创建Session,多个worker负责执行计算图任务. 先创建TensorFlow Cluster对象,包含一组task(每个 ...
- Vue多元素过渡
前面的话 前面分别介绍了单元素过渡的CSS过渡和JS过渡,本文将详细介绍Vue多元素过渡 常见示例 最常见的多标签过渡是一个列表和描述这个列表为空消息的元素: <transition> & ...
- Nginx也应用场景小结
Nginx简介 Nginx一是一款轻量级的.高性能的HTTP和反向代理服务器, 具有很高的稳定性和支持热部署.模块扩展也很容易.当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器 ...
- Fatal error: Class 'LearningPHP1\mysqli' not found
在php文件的头部使用了namespace 结果报错mysqli不在LearningPHP1中, 结论:如果定义了命名空间,在使用mysqli做连接的时候就要指明mysqli所在的命名空间. < ...
- STL之关联容器---set, mutilset, map, mutilmap
STL的容器分为序列容器和关联容器.它们所表达的数据结构各有不同: 序列容器:vector(变长数组), list(链表), queue(队列), heap(堆算法)等 关联容器:set/mutils ...
- asp.net mvc 接入阿里大于 短信验证码发送
项目前端页面实例 第1步:登录阿里大于控制台 https://www.alidayu.com/center/user/account?spm=0.0.0.0.P1K1jG 第2步:创建应用 第3步:配 ...
- Java数组笔记
# 数组--------内存 # 2017/8/31 15:29:19 ## 数组(容器) ## - 为了存储同种数据类型的多个值 - 概念 - 数组是可以存储同一种数据类型多个元素的集合, ...
- vue.js路由参数简单实例讲解------简单易懂
vue中,我们构建单页面应用时候,一定必不可少用到vue-router vue-router 就是我们的路由,这个由vue官方提供的插件 首先在我们项目中安装vue-router路由依赖 第一种,我们 ...
- selenium 对chrome浏览器操作
参照http://www.testwo.com/blog/6931博客内容 1.下载ChromeDriver驱动包(下载地址: http://chromedriver.storage.googleap ...
- Flask01 路由控制(转换器)、反转、请求方法控制
1 提出问题 如何实现前端传过去的路径时动态的(即:多个url对应一个url视图函数) 例如: 浏览器中输入 http://127.0.0.1:5000/test/good/ 或者 http://12 ...