1. 本周学习总结
(1)类Scanner 一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
-例如以下代码使用户能够从System.in 中读取一个数:
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
(2)学习了使用Arrays对数组的处理。
- binarySearch可以使用二分搜索法来搜索指定的数组,以获得指定的值。
- sort对指定数组的指定范围按数字升序进行排序。
(3)在Java中浮点数默认为double型,字符串比较要用equals方法。
(4)在控制台中,编译.java文件时要用-cp(在指定路径中寻找.java文件),若使用了完全限定类名,编译时要在文件前加上类的路径。
2. 书面作业
(1)使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。##
按Ctrl+左键点击类名则可查看String对象的源代码
答:在Java中,被final类型修饰的类不允许被其他类继承,被final修饰的变量赋值后不允许被修改,String的内容一旦被初始化后,其不能被修改的。
(2)为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String?##
答:string每次修改字符串都是新建,然后删除旧的串会很影响效率,用来存储字符串,并对其做了追加和插入操作。这些操作修改了 str 对象的值,而没有创建新的对象,这就是 StringBuilder 和 String 最大的区别。在需要频繁对字符串进行修改操作时使用 StringBuilder 的效率比 String 要高。
参考链接:String详细说明
(3)比较两个字符串的值是否相等?为什么不能用==直接进行比较?##
答:用new String的字符串对象时,即使内容完全一样,使用==比较也是false,因为==比较的是堆内存中的地址,所以只能是用equals()方法比较内容。
(4)尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:##
String str1 =“hi“, str2=“hi“;
String str3 = new String(str1)
System.out.println(str1==str2);
答:不强制使用 new 运算符而是直接给值的话,如果内容相同,那么两者是同一个对象。所以str3是强制使用了new String(); 强制要求系统生成一个新的对象,而不是获取己有对象的别名。所以这段代码生成了两个对象。
(5)Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i##
答:在目前的JDK版本中,能够采用自动装箱和自动拆箱,装箱就是将java中的基本类型(如int)转换成对象类型(如Integer),而拆箱就是将对象类型的值取出来赋值给java中的基本类型。所以题目中的Integer i=100则可以理解成:int i=100;Integer i = new Integer(100);所以可以将100赋值给i。
(6)尝试分析下面代码输出结果##
Integer i1 = 127;Integer i2 = 127;
i1 == i2;//true of false?
Integer i1 = 128;Integer i2 = 128;
i1 == i2;//true of false
答:java中Integer类型对于-128-127之间的数是从缓冲区取的,所以用“==”比较是一致的。而128超过了数值范围,新建了一个对象,所以为false。
(7)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方法##
1. 尝试用命令行进行编译并运行,截图###
2. 将生成的StringUtil.class放到d:\lib下正确的目录结构下,将Main.class放到d:\test下正确的目录结构,尝试在命令行下运行,并截图。###
3. Eclipse中源代码放在哪个目录、class文件放在哪个目录?在Eclipse项目中按一下Ctrl+F11就可以直接运行Main,当按下Ctrl+F11时,到底在哪个目录下执行了什么样的java命令?###
在src里面存放源代码,在bin文件夹中存放class。
8. 自己在这门课的目标与计划##
- 请描述一下你的技术基础(会什么语言,都写了多少行代码)
- 学了C语言,C++,代码量有上万行了。
- 一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?
- 一周准备把空闲时间的3分之二用在Java上,写多少行代码不清楚,尽力而为,把老师布置的任务做好,做完PTA上的题目,看看论坛,遇到困难问一问同学老师。
- 关于这门课的smart目标
- Specific:具体的,无二义性的,能描述 “成功” 是什么样的。
- 我个人认为,学好一门语言,能做到必需要对实际项目的开发流程有所了解,至少要有两个有实际应用价值的项目。
- Motivating: 目标能激发对目标的兴趣么?实现目标对学生来说说意味着什么?他们会为之自豪么?
- 可以激发兴趣,但每个人对目标的高度不同,实现目标对学生来说意味着小有成就,但也不能为之自豪。
- Achievable: 能做到么?是挟泰山以超北海?还是把墙角一堆砖头搬走?
- 相信自己,一步一步慢慢来,总能做到。
- Relevant: 和学生来到大学的大方向、目标吻合
- 没什么大方向。
- Trackable: 能衡量进度的,和有些资料提到的 Measurable 相似。
9. 选做:公交卡里应该还有多少钱?请分析原因##
可能是因为浮点数溢出。
3. 使用码云管理Java代码#
4. PTA实验#
- 实验一,简单的函数调用,枚举类型不太会使用。
- 实验二,StringBuilder类的基本使用。
- 实验三,对于sort的应用
- 实验四,需要使用二维字符串数组存储乘法口诀表的每一项
- 实验五,使用BigDecimal类来实现浮点数的精准计算。
- 实验六,枚举的基本使用
- 实验七,可以用BigInteger。
- 实验八,ArrayList的基本使用,相当于数据结构中提到的链表。