201521123013 《Java程序设计》第2周学习总结
1. 本章学习总结
1.final声明,一旦赋值不能被改变。移位运算符的应用,负数右移高位补“1”,正数右移高位补“1”。利用移位运算,按位与运算可以方便得出整数的32位二进制表示。
2.String类的重要,被final所修饰,它的对象是不可变的,对象创建后是不再对它进行修改,可以进行字符串共享,直接从字符串池中取出使用。但是频繁修改字符串的话,则会大量字符串对象,例如对字符串的拼接虽不改变原字符串,但会产生大量字符串对象,此时应使用StringBulider。
3.理解equals与“”的区别,如果比较的是字符串内容则使用equals而“”只比较是否是同一对象,只比较是否是同一地址。
4.引用型数据和基本数据 ,基本类型可以赋值给引用型。
5.for(int element:a)等价于for(int i=0;i<a.length;i++)
2. 书面作业
Q1.使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。
分析:String其实是基于字符数组char[]实现的,用它来存放字符串,并且有一个int型的变量hash来存放计算后的哈希值。用一个空的构造器,创建空的字符序列,使用字符串类型的对象来初始化,使用字符数组来构造String(使用Arrays类复制),然后用字节数组将字节以charsetName编码格式拷贝给value,之后再解码造成String。
Q2.为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String?
因为String对象建立就是不可修改,所以使用String会产生大量的字符串对象。而使用StringBuilder类中的append()就可以对已有的对象进行修改,在进行大量字符串的修改操作上,append()的效率就高多了。
Q3.比较两个字符串的值是否相等?为什么不能用==直接进行比较?
不能,“==”在基本数据类型的时候,比较的是实际的值是否相同,而在比较引用型时候,则是堆内存的地址。如果比较内容的话要用equals()比较好,它比较的是字符串的序列是否相同。
Q4.尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 =“hi“, str2=“hi“;
String str3 = new String(str1);
System.out.println(str1==str2);
以上输出结果:true。“hi”存在字符串池中,str1和str2同时指向“hi”,而String str3=new String(str1);
产生的“hi”并不存在字符串池中,所以str1与str2引用值一样,与str3不一样。
Q5.Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i
Integer是包装类(引用数字类型),而int是基本数据类型,它可以直接进行赋值。Integer是对象,要用一个引用指向这个对象。这个叫做对象的自动封箱与拆箱,相当于Integer i=Integer.valueOf(100);
,在调用的时会自动拆箱,int i=intValue(100);
。
6.尝试分析下面代码输出结果
Integer i1 = 127;Integer i2 = 127;
i1 == i2;//true of false?
Integer i1 = 128;Integer i2 = 128;
i1 == i2;//true of false
一个字节(-128到127)的整型数在jvm启动时会加载入内存,第一次调用Integer.valueOf()
,发现Integercache中并没有127,所以创建一个新对象,Integer i2=127;
,Integercache中已有这个对象直接引用,所以输出结果为true。而128已经超出Integercache范围了,所以生成了新的Integer对象,i1==i2输出结果为false。
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,尝试分析背后实现的原理。
源代码放在src目录下,class文件放在bin目录下。eclipse在执行的时候直接编译,我们之前设置好了环境变量,并且eclipse环境设置为自动编译,一个class文件的组织方式是由“外部路径”和“内部路径”构成的,执行的要记住完整的类名和包名称。编译时“外部路径”默认为“output folder”的路径,“内部路径”为.java文件的包路径,按ctrl+f11运行,package中的路径和.java文件路径完全一致,所以eclipse自动根据.java文件存放路径够将完整的包路径执
行。
Q8.自己在这门课的目标与计划
◦请描述一下你的技术基础(会什么语言,都写了多少行代码)
◦一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?
◦关于这门课的smart目标参考链接
c、c++语言,但是掌握的并不扎实。一周里准备每天花一半的空闲时间学习java,做到每天打一份代码。通过问老师、百度、问同学的方式来解决做java时遇到的不懂的问题。smart目标:s(具体、量化):学好java,每天打一到两篇代码,并且上相关视频网站每天看一个视频学习java; m(可以衡量):每天可以打30行代码; a(可以达到):可以自己打出一篇较难的代码; r(相关性): 在学好java的同时,也涉及其他语言的学习; t(截止日期): 希望一个月内可以打200行代码。
Q9.选做:公交卡里应该还有多少钱?请分析原因
余额为-0.2元。浮点数计算不精确,金融计算不能用浮点数。
3. PTA实验总结及码云上代码提交记录
3.1本周Commit历史截图
3.2 实验总结
学会使用了StringBuilder、BigDecimal、Arraylist,但是还不是很熟悉。实验也只会做些简单的,很经常答案错误。
201521123013 《Java程序设计》第2周学习总结的更多相关文章
- 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程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- [INS-30060]:Check for group existence failed
--[INS-30060]:Check for group existence failed -------------------------------------------------2013 ...
- 解决Coursera视频无法观看
修改电脑的 C:\Windows\System32\drivers\etc 目录下的host文件, 在最后添加一行: 52.84.246.72 d3c33hcgiwev3.cloudfront.net
- MySQL写压力性能监控与调优
写压力调优:数据库的写.写压力性能监控.写压力调优参数 一.关于DB的写 1.数据库是一个写频繁的系统 2.后台写.写缓存 3.commit需要写入 4.写缓存失效或者写满-->写压力陡增--& ...
- [undefined,1] 和 [,1]的区别在哪里--认识js中的稀疏数组
事情是这样的 今天我想写一个能快速生成一个自然数数组的函数,就是[0,1,2,3]这样的,然后我写了下面的代码: new Array(10).map((item, index) => { ret ...
- 《高性能Mysql》翻译错误
原文中在分区表中的一句话翻译错误,如下 应该是[扫描列a上的索引就需要扫描每一个分区内对应的索引树],英文版描述如下: ''' Suppose you define an index on a and ...
- ARM处理器架构的Thumb指令集中关于IT指令的使用
在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了IT指令,进一步增强了代码的紧凑性. Thumb中有一个比较有意思的指令--IT,这条指令用于根据指定的条件来执行后面相继的四条指令 ...
- js中的访问器属性中的getter和setter函数实现数据双向绑定
嗯,之前在读js红宝书的时候,在对象那一章有介绍属性类型.第一种数据类型指的是数据属性,第二种是访问器属性.在初识vue的时候,其双向数据绑定也是基于访问器属性中的getter和setter函数原理来 ...
- 【Ubuntu 16】深入Ubuntu文件系统
Ubuntu文件系统的设计目的就是把文件有序地组织在一起,提供一个从逻辑上组织文件的文件系统.除了文件的组织外,文件安全也是文件系统的设计要点,所以文件的访问权限是文件系统不可缺少的组成部分 Ubun ...
- 最新spring官网(spring.io)下载方法
这里介绍的是用于WEB开发的spring-frame框架的下载方法. 如果想下载其他的spring产品,直接进入http://projects.spring.io,选择自己要的即可.下载方法同下. 要 ...
- python中列表 元组 字典 集合的区别
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...