201521123072《Java程序》第二周总结

201521123072《Java程序》第二周总结

标签(空格分隔): Java学习


1,本周小结

1,字符串的使用,

(字符串变量作为对象来处理),所以字符串相等就要用到equals()方法,

学会了字符串的拼接(两种方法),截取,

字符串池的理解

Java运行环境有一个字符串池,由String类维护。执行语句String str="abc"时,首先查看字符串池中是否存在字符串"abc",如果存在则直接将"abc"赋给str,如果不存在则先在字符串池中新建一个字符串"abc",然后再将其赋给str。执行语句String str=new String("abc")时,不管字符串池中是否存在字符串"abc",直接新建一个字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然后将其付给str。前一语句的效率高,后一语句的效率低,因为新建字符串占用内存空间。

【对于字符串中堆,栈的理解】http://jingyan.baidu.com/article/546ae18566c6ce1149f28c36.html

2,枚举类型

3.一些常用的数学函数

4,Scanner扫描器的用法,对文件的读写

5,图形界面的构造

2. 书面作业

  • 使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。

    201521123072《Java程序》第二周总结

    201521123072《Java程序》第二周总结

201521123072《Java程序》第二周总结

String类的源代码

201521123072《Java程序》第二周总结

将string转换成动态数组进行操作

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

因为String 对象是不可改变的。每次使用String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间,所以在需要对字符串执行重复修改的情况下,创建新的String对象相关的系统开销会很大。所以如果要修改字符串而不创建新的对象,则使用StringBuilder 类

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

因为字符串变量是作为对象来处理的,只能用equals()来比较字符串中的内容是否相等,用来比较对象是否相等

例如有如下定义:

String a="student";

String b="student";

执行a时会首先检查字符串池中是否存在“student”,如果有则直接赋给a,如果没有则在字符串池中创建一个"student",然后再赋给a,当执行到b时,检查字符串池已经存在了"student",因此直接赋给b,此时a与b指向同一个对象,直接用其实是在比较两个对象是否相等

又例:

String a=new String("student");

String b=new String("student");

而执行String a=new String("student")时,不管字符串池中有没有"student",都会在堆中新建一个字符串对象然后将其赋给a引用,所以其上a,b的值虽然相同,但是却是指向不同的对象

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

    String str1 =“hi“, str2=“hi“;

    String str3 = new String(str1)

    System.out.println(str1==str2);

输出为true ,创建了两个对象,

解释:执行String str1时因为在字符串池中没有hi, 所以字符串池中创建一个"hi",然后再赋给str,执行str2时,因为字符串池中已经有了“hi”,所以直接将“hi”赋值给str2,此时只创建了一个对象,所以str==str2,结果输出为ture,而在执行String str3 = new String(str1)时,不管字符串池中有没有"hi",都会在堆中新建一个字符串对象然后将其赋给str3引用, 所以总共创建了两个对象

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

Integer类是打包器,将基本类型打包在对象之中,这样就可以操作这个对象,就像是将基本类型当做对象操作

其上为自动装箱功能,自动装箱后可自动拆箱,int会参考至integer,若被指定给int的变量i,则会自动取的打包的int类型再指定给i,

在JDK上, 编译程序时会自动将程序代码展开为:

Integer localInteger=Integer.valueof(100);

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

    Integer i1 = 127;Integer i2 = 127;

    i1 == i2;//true of false?

    Integer i1 = 128;Integer i2 = 128;

    i1 == i2;//true of false

第一次为ture,第二为flase

在Integer.valuof()建立Integer实例时,valueof()的操作内容如下:

IntegerCache.low的默认值为-128,IntegerCache.high的默认值为127,所以Integer.valueof()就会针对-128~127的范围中建立打包器进行快速存取,执行Integer i1 = 127时,因为其值在-128~127的范围中,所以会从缓存中传回Integer实例,当执行Integer i2 = 127时,要打包的同样是127,也是从缓存中传回Integer实例,所以会参考到同一个Integer实例,,使用比较就会是true

因为128没有在范围内,所以直接建立Integer实例,第二次执行Integer i2 = 128也是直接建立Integer实例,使用比较就会是flase

  • 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 尝试用命令行进行编译并运行,截图

    201521123072《Java程序》第二周总结

    201521123072《Java程序》第二周总结

    201521123072《Java程序》第二周总结

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

7.3 Eclipse中源代码放在哪个目录、class文件放在哪个目录。在Eclipse项目中按一下ctrl+f11就可以直接运行Main,尝试分析背后实现的原理**。

源代码放在src目录下,class放在bin目录下的

通过Main找到字节码文件,再将字节码文件进行运行

  • 自己在这门课的目标与计划,

    1,请描述一下你的技术基础(会什么语言,都写了多少行代码)

会C语言,了解了一点C++,写了挺多了的,用行来计算应该计算不清楚了

2,一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?

各个课程合理分配,一周写多少代码和我在这一周是否有多少时间是紧密相关的,有空闲的时间都会好好练习Java,学的方式的话当然是实践和理论相结合,光看课本是远远不够的,重在自己实践。遇到困难,先自己冷静思考一下,看书,思考不出来再百度,百度不出来问询问。

3,关于这门课的smart目标参考链接

对于这门课程的目标,是熟练掌握,想做出很完美的图形界面,结合课外,做好科研立项。

3. 使用码云管理Java代码

在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图

201521123072《Java程序》第二周总结

4. PTA实验

题目集:jmu-Java-02-Java基本语法 中的判断、选择、编程(8道)

  • 2.实验二:

字符串的拼接:

方法一:String str=0.5+"ahhh";

方法二:用要大量使用重复性连接的话,要使用StringBuilder

例:

StringBuilder stringBuilder = new StringBuilder();

for (int i = 0; i < 100_00000; i++) {

stringBuilder.append(i);

}

其中还有关于字符串的截取:

String str;

str.substring(x,y)(从x 开始,到y 之前结束)

  • 实验三:

其中涉及到字符串的比较问题

若有两个字符串:

String str1 = new String(“hi“);

String str2 = new String(“hi“);

str1==str2;是判断其两个对象是否是一样的

str1.equals(“hi”);则是判断 str所指向的字符串是否等于 “hi”

不区分大小写进行比较,用:"abc".equalsIgnoreCase(ABC);

  • 实验四:

将整数转换成字符串: String.valueOf( int a);

使用Arrays.deepToString 打印二维数组中的内容,可以将内嵌的数组打印出来

String.format();的用法

 String temp=String.format("%-7s", arry[i][j-1]);

"-"表示向左对齐,输出的arry[i][j-1]总共占七位

"+"表示向右对齐

  • 实验五

因为浮点数的不精确性(其遵守IEEE754浮点数运算规范),使用分数与指数来表示浮点数,所以在进行浮点数运算时,引进BigDecimal方法,

其提供

plus(),substract(),此为课本上的(MyEclipse中的方法为:add(),subtract)

multiplay(),divide(),

【BigDecimal】(http://baike.so.com/doc/6988815-7211667.html)

上一篇:帆软报表(finereport) 折叠树


下一篇:CSS中box-sizing属性的理解与部分用法