1. 本周学习总结

  • 动态数组
  • 标识控制符的意义
  • ArrayList ,BigDecimal,BigInteger 等类的使用
  • 组合,继承,多态等概念的了解

2. 书面作业

Q1.使用Eclipse关联jdk源代码,并查看String对象的源代码?分析String使用什么来存储字符串的?分析其构造函数public String(char value[])的实现原理?分析public String replace(char oldChar, char newChar)的实现原理,回答String的不可变性在该函数中如何体现?(重点)

部分String源代码







使用private final char value[];使用字符数组来保存数据

使用Arrays.copyOf(value, value.length);函数参数为(地址,目标大小),可以把指定数组变化成指定大小

public String replace(char oldChar, char newChar) {
if (oldChar != newChar) {
int len = value.length;
int i = -1;
char[] val = value; /*建立一个新字符用来保存String原来的各位元素*/ while (++i < len) { /*遍历数组找到第一次出现oldchar的位置:i*/
if (val[i] == oldChar) {
break;
}
}
if (i < len) {
char buf[] = new char[len];/*新建一个用于保存替换后结果的字符数组buf*/
for (int j = 0; j < i; j++) {
buf[j] = val[j];/*将i位置前的字符全都复制进新数组buf*/
}
while (i < len) {
char c = val[i];/*循环将i位置后的字符复制进buf*/
buf[i] = (c == oldChar) ? newChar : c;/*如果遇到oldchar就向buf中添加newchar*/
i++;
}
return new String(buf, true);
}
}
return this;
}
遍历String类对象内部实现的字符数组,然后用一个新的字符数组保存替换后的结果,并调用String的构造方法而return 一个新串
其实并不是在原来的String上替换字符,是返回了一个替换了字符的新String,原来的String并没有变 ,只是被我们抛弃了 (见注释)

Q2.为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String?

 String具有不变性而StringBuilder可变,如果用String的话每次拼接都会产生新String程序开销很大

Q3.比较两个字符串的值是否相等?为什么不能用==直接进行比较?

==比较的是是否为同一个引用
.equals()方法可以用来比较值

Q4.尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:

String str1 =“hi“, str2=“hi“;
String str3 = new String(str1)
System.out.println(str1==str2);

true

对于String类,以相同的字符串建立的String引用是同一个,因为String对象是唯一的

Q5.Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i

因为100是int类型,而int类型正式由Integer类包装而来

Q6.尝试分析下面代码输出结果

Integer i1 = 127;Integer i2 = 127;
i1 == i2;//true of false?
Integer i1 = 128;Integer i2 = 128;
i1 == i2;//true of false

分析

Integer类具有静态缓存,存储 256 个特殊Integer对象,即128 到 127 之间的每个值。

此时该语句就相当于

int i1=127;int i2=127;if(i1i2)

而在这个范围之外的值,Integer在该语句就表现为一个正常的类了,故比较的是引用,所以返回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 尝试用命令行进行编译并运行,截图

目录为:D:\TestJavaTemp

javac -d . StringUtil.java           //先编译StringUtil类
javac -d . Main.java //再编译Main类
java -cp . edu.jmu.Main //在文件目录下运行Main类

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

javac -d D:\lib StringUtil.java        //将生成的StringUtil.class放到d盘的lib目录下
javac -cp D:\lib -d D:\test.Main.java //将Main.class在d:\test目录下
java -cp .;D:\test edu.jmu.Main //在d:\test目录下运行Main类

7.3 Eclipse中源代码放在哪个目录、class文件放在哪个目录?在Eclipse项目中按一下Ctrl+F11就可以直接运行Main,当按下Ctrl+F11时,到底在哪个目录下执行了什么样的java命令?

在建立Project的时候选择的目录下的src目录会有源代码,bin目录下是class文件
运行的是.class文件

Q8.自己在这门课的目标与计划

技术基础

大一学过C语言的基础,大二上和寒假粗略地学了c++描述的数据结构。大一刚开始学习c语言的时候由于兴趣写了一些c语言+win32api的控制台小游戏,每个长度大概为300到800,加上很多奇怪的脑洞都用c写过,c代码量应该有数千吧。 大一暑假学了一点java当时也利用swing也做了个小游戏

JAVA:

现在一周大概有34天的晚上都在做PTA,一周大概会写PTA上一章的代码量和自己课后学习的一点测试代码。学习方式主要为自学,遇到困难先分析原理,并借助谷歌引擎,stackoverflow网站等学习

关于这门课的目标 :

熟练掌握基本语法,学习完之后能对OOP有更深刻的理解,能够运用学到的知识制作出较为完备的小程序,并进而学习javaee

3. PTA实验总结及码云上代码提交记录

3.1本周Commit历史截图

3.2 实验总结

问题: 3-身份证排序这题自己写了自定义类Id的快速排序算法导致程序代码很长

思考: 应该使用更为简洁的implements Comparable类就可以使用自带的sort函数了

问题: 4-动态数组和8-ArrayList入门多次无法通过

思考:应该是格式错误

解决方法:补充了多出空格后通过

问题:在 06-枚举 这题时printGradeInfoGrade.class一直返回class name=class main@Grade

解决方法:把枚举类型放在类外

最新文章

  1. 客户端实现蓝牙接收(C#)
  2. windows server 2012 FTP SMB 文件夹权限继承
  3. STC12C5A60S2笔记2(存储)
  4. java用字符写字符
  5. 《C与指针》第一章练习
  6. span标签里的内容在IE下显示,而在谷歌浏览器下不显示
  7. HDU3709 Balanced Number (数位dp)
  8. xp对opengl的支持问题
  9. Visual Studio 使用及调试必知必会
  10. Mac系统下STF的环境搭建和运行
  11. 1.1 Python是一种什么样的语言
  12. JavaScript -- 时光流逝(六):js中的正则表达式 -- RegExp 对象
  13. RFM用户分层模型简介
  14. vb.net連接Oracle数据库
  15. Tomcat启动log打印到INFO: At least one JAR was scanned for TLDs yet contained no TLD各种解决方式
  16. trmd_b1_ok
  17. 学号20155308 2016-2017-2 《Java程序设计》第5周学习总结
  18. 微信小程序 --- 拨打电话
  19. git 基础入门操作
  20. MYSQL 升序排序但值为0的排最后

热门文章

  1. 第7章 DNS &amp; bind从基础到深入
  2. Session获取不到的情况及解决办法(源码解析)
  3. 如何实现.5px的线条和.5px的圆角边框
  4. 使用proxool连接池配置教程
  5. Android上传图片到服务器,服务端利用.NET WCFRest服务读取文件的解决方案
  6. HDU 6170----Two strings(DP)
  7. 面试题1 -- Java 中,怎么在格式化的日期中显示时区?
  8. Spring集成RabbitMQ-必须知道的几个概念
  9. 使用Dev中的GridView进行数据增删操作
  10. 将指定目录中的txt文件转化成excel文件