201521123005 《java程序设计》 第二周学习总结
1. 本周学习总结
·java中的字符串及String的用法
"=="比较的是两字符串的地址,而不是内容
String类的对象是不可变的,创建之后不能进行修改
·数组Array的用法
Arrays.sort(数组名);//方便对数组进行排序
·学会如何看对象的源代码
·BigDecimal的用法,用于浮点数精准计算
import java.math.BigDecimal;
BigDecimal b1 = new BigDecimal(m1);
2. 书面作业
Q1.使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。
(1)Eclipse源代码关联的步骤:
1.点 Eclipse首页的Windows--》 preferences---》 Java ---》 Installed JREs
2.此时"Installed JRES"右边是列表窗格,列出了系统中的JRE环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE)
3.选中rt.jar文件的这一项 c:\java\jdk1.8.0_102\jre\lib\rt.jar; 点左边的">"号展开它,可以看到Source Attachment:C:\java\jdk1.80_102\src.zip,
点这一项,然后点右边的按钮Source Attachment..., 选择你的JDK目录下的 src.zip文件,完成。
截图如下:
(2) 查看String对象的源代码的方法:
按住ctl键,用鼠标点击类名,就出现该类的源代码
String 对象的设计思路:
1) String是基于字符数组char[]实现的。
2) String字符串是常量,其值在实例创建后就不能被修改
3) 使用字符串类型的对象来初始化
4) 使用字符数组来构造
Q2为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String?
答: 因为String 是不可变的对象,因此在每次对字符串进行修改操作的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,
所以经常改变内容的字符串最好不要用 String。其次StringBuilder是一个可变的字符序列,不会一直创建对象。
Q3比较两个字符串的值是否相等?为什么不能用==直接进行比较?
答:用= =比较两个对象时是比较堆内存中的地址是否一样,不能比较它们的值,所以应该用equals()方法来比较内容是否一样
**Q4尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 =“hi“, str2=“hi“;
String str3 = new String(str1)
System.out.println(str1==str2);**
答:这段代码创建了两个对象。
这段代码首先定义一个变量str1,因为用""写下的字符串为字符串常量,所以赋值的数据"hi"存在常量区。因为以包括的字符串,只要内容相同,无论在程序代码出现几
次,JVM都只会建立一个String实例,并在字符串池中维护,所以给str2赋值时先去字符串池寻找是否有相同的字符串,发现存在,则不需要创建新的对象。而str3是用
new一定建立新对象,所以创建一个新的对象在堆区中。
Q5Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i
答:jdk自己帮你完成了调用Integer.valueOf(100)*
源码:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
**Q6尝试分析下面代码输出结果
Integer i1 = 127;Integer i2 = 127;
i1 == i2;//true of false?
Integer i1 = 128;Integer i2 = 128;
i1 == i2;//true of false**
答:(1)结果为true(2)结果为false
分析:查看Integer的源代码,部分代码如下
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
// range [-128, 127] must be interned (JLS7 5.1.7)
assert IntegerCache.high >= 127;
}
private IntegerCache() {}
}
/**
* Returns an {@code Integer} instance representing the specified
* {@code int} value. If a new {@code Integer} instance is not
* required, this method should generally be used in preference to
* the constructor {@link #Integer(int)}, as this method is likely
* to yield significantly better space and time performance by
* caching frequently requested values.
*
* This method will always cache values in the range ```-128 to 127```,
* inclusive, and may cache other values outside of this range.
*
* @param i an {@code int} value.
* @return an {@code Integer} instance representing {@code i}.
* @since 1.5
*/
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
用这种方式赋值Integer会自动调用valueof()
从部分代码可以看到当Integer定义类型的值在-128~127之间才能缓存,所以当取值为128时,比较的是地址
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目录中
网上找了一下还是不清楚,大概感觉跟自己手动在CMD上运行.java的过程差不多,先编译一下.java在bin目录下生成.class,在运行Main。
Q8自己在这门课的目标与计划
·请描述一下你的技术基础(会什么语言,都写了多少行代码)
答:会C语言,和基础的C++,没有具体计算过写了多少代码,但是有在oj跟lintcode上做题。(虽然做的不多。)
·一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?
答:大概三四天吧,实际可能用得更多,有时候一天其实总共没花很多时间在学习上,时间比较零散,最近有比较多的活动要准备,时间比较紧张。
写多少行,这无法具体讲,不能保证写了多少行代码就提交正确。本来代码就要多写,不断调试,才会正确。一般老师布置的作业尽量完成。
一般遇到困难,百度查找或者咨询同学。
·关于这门课的smart目标参考链接
http://www.weixueyuan.net/view/6198.html
Q9选做:公交卡里应该还有多少钱?请分析原因**
答:可能是浮点数二进制存储出现问题,可能出现负数,然后补码溢出,或者机器出现故障。
3. 使用码云管理Java代码
在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
4. PTA实验
题目集: jmu-Java-02-Java基本语法 中的判断、选择、编程(8道)
第一题: 这道题问题比较多,要处理的事情比较多,刚开始写的时候遇到很多问题,后来老师上课进行了分析,听了以后比较会写。
主要问题,一开始不知道字符串比较的用法跟C不同,用了“==”判断字符串是否相同结果
结明显错了,后来学习了String才知道用.equals( )方法;
学习了 str=line.split(" ");方便了在每个字符串中加空格符号。后来我上网查找,发现还有很多功能
在java.lang包中有String.split()方法,返回是一个数组。“.”和“|”都是转义字符,必须得加"\\";如果用“.”作为分隔的话,必须是如下写法:
String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
如果用“|”作为分隔的话,必须是如下写法:
String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
更多方法: http://blog.csdn.net/kunlong0909/article/details/8507290
虽然想要截取,不怕麻烦的话可以运行代码,自己试试看要从第几个开始到第几个结束。了解这个函数是怎么用的话就不用这么麻烦了。
public String substring(int beginIndex,int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。
因此,该子字符串的长度为 endIndex-beginIndex
第三题:第三题的第一个要求跟第一题很相似,主要是第二个要求。一开始我是想自己写一个冒泡排序比较的字母从第六个开始,感觉应该是可以的,写起来有一些麻
烦的感觉,我就想利用第一个要求,已经得到的年月日的数组,然后用冒泡排序年月日的数组,不一样只是在要换数组是同时换Id的数组,虽然感觉效率不是很好
但是提交可以了,我就没在想,感觉应该还有更好的方法。
第五题: 这个问题本身不难,我却搞了很久,因为我一开始写时,我是输出4.0,我以为答案要输出4.00 才可以,在这绕了很多弯路。
主要还是对BigDecimal不熟悉,后来经过问同学,终于提交正确。关键问题
String m1=sc.next();
String m2=sc.next();
BigDecimal b1 = new BigDecimal(m1);
BigDecimal b2 = new BigDecimal(m2);
BigDecimal b3=b1.add(b2);
输入的应该为字符串
201521123005 《java程序设计》 第二周学习总结的更多相关文章
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- 201521123063 JAVA程序设计 第二周学习总结
1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...
- 2017面向对象程序设计(Java)第二周学习总结
2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为 ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第二周学习总结
丁宣元 <面向对象程序设计(java)>第二周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...
- 201521044152<java程序设计>第一周学习总结
本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...
- 20145304 刘钦令 Java程序设计第一周学习总结
20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...
- 201621123007 Java程序设计第一周 学习总结
第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...
- 201871010121 王方 《面向对象程序设计(java)》 第二周学习总结
这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475 ...
- 杨其菊201771010134《面向对象程序设计Java》第二周学习总结
第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...
- 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
随机推荐
- 小A点菜 洛谷 p1164
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...
- HDU 4372 Count the Buildings:第一类Stirling数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意: 有n栋高楼横着排成一排,各自的高度为1到n的一个排列. 从左边看可以看到f栋楼,从右边看 ...
- Hibernate(一)
1.1Hibernate框架概述 1.1.1什么是Hibernate? Hibernate是轻量级JavaEE应用的持久层解决方案,是一个关系数据库ORM框架. ORM就是通过将Java对象映射到数据 ...
- 用github展示前端页面
今天尝试了一下使用github展示前端页面,还是比较简单的,平时做一些小的demo时,可以用这个方法展示自己的页面,在此记录下方法. 首先打开自己的github项目仓库,比如 https://gi ...
- MySQL的left,substr,instr截取字符串函数使用实例
原表:select * from pagereferrer;如下: 如何在这张表中,查询出按 URL分类的信息 ,例如:211.95.60.43:8080算一类信息,并按百分比显示.预期结 ...
- C3P0数据库连接池使用中的问题
java.io.FileNotFoundException: D:\javaStudy\javaee\.metadata\.plugins\org.eclipse.wst.server.core\tm ...
- Maven学习 使用Nexus搭建Maven私服(转)
为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...
- spring boot 登录注册 demo (一)
Welcome to Spring Boot 代码结构 src/main/java 下 controller层,路由功能dao层,数据库的访问domain,bean的存放service,业务层appl ...
- Vim入门学习之Vim解析
Vim解析... ----------------------- 首先你要会从官网上下载你想要的Vim版本: 官网: http://www.vim.org/==================== ...
- 火币网现货API[Python3版]
火币 期货 现货 API [Python3版] 一.Util.py,基础类,包括参数配置.签名,HTTP 请求方法,发送信息到API #coding=utf-8 import hashlib impo ...