《面向对象程序设计(java)》第二周学习总结
实验时间2018-9-6
1,第三章知识点总结
一、基本数据类型:分为整型(4),浮点型(2),字符型,布尔型,一共8种
1.整型需要注意的:JAVA整型的范围与运行JAVA代码的机器无关的,所以很难发生整数溢出的情况,原理是JAVA的每一种数据类型的取值范围都是规定了的,不能改动。byte占1个字节,范围是-128到127;short占2个字节,范围是3W左右;int占4个字节,范围在20亿左右;long占8个字节,需要注意的是有个后缀L。JAVA没有无符号类型。
2.浮点类型:float占4个字节,后缀为F;double占8个字节;JAVA浮点型是二进制系统表示的,所以无法精确表示1/10,所以不适用于要求不能舍入误差的高精度计算系统中,如金融系统。Double类有3个常量:Double.POSITIVE_INFINITY表示无限大,Double.NEGATIVE_INFINITY表示无限小,Double.NaN表示不是一个数字,但是JAVA所有非数值都认为是不同的,所以比较NaN时要用方法:Double.isNaN(Object o);
3.字符型:在JAVA中用UTF-16编码描述一个代码单元的。代码点是指可用于编码字符集的数字,UTF-32:用4个字节既32位表示代码点,消耗资源过大;UTF-8:使用一至四个字节的序列对编码 Unicode 代码点进行编码,很好的节约资源,用于AJAX返回的XML很好。UTF-16:使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码;u表示字符转义号,还可以用于“”和‘’外。
4.布尔型:boolean:false和true,需要注意的是:java中不能非0值当true,0当false,不支持直接的转换。
二、变量:关键字final表示的是一个常量,一旦赋值后不能改变,习惯常量名用大写。
三、运算:浮点数被0除得到无穷大或NaN,而整型会产生异常;strictfp关键字可以用在域上,包括类,那么里面使用严格的浮点计算;
1.运算中的类型转换:如果两个数中有一个是double类型的,那么另一个也将转换为double类型;如果两个数中有一个是float类型的,那么另一个也将转换为float类型;如果两个数中有一个是long类型的,那么另一个也将转换为long类型;否则,两个操作数都将被转换为int类型.Math类提供了很多关于运算的静态方法
2.移位运算:<<左移操作,所有操作数向左移动,每移一位最右边用0补充;>>带符号位右移:连同符号位一起右移,每移一位最左边用符号位补充;>>>无符号右移:连同符号位一起右移,每移一位最左边用0补充。右边的参数需要进行模32位运算(long进行64位模运算)。注意1<<31得到的结果是负数:-2147483648,JAVA在32位下最高位为1其余为0的时候表示的并不是-0.而是32位下最小负整数:-2147483648
四、字符串:代码点—codePoint.
1.String常用API:
char charAt(int index)返回指定位置的代码单元。
int codePointAt(int index)返回从给定位置开始或结束的代码点。
int offsetByCodePoints(int startIndex,int cpCount)返回从startIndex代码点开始,位移cpCount后的代码点索引。
int codePointCount(int startIndex,int endInex)返回起始位置到结束位置之间代码点的数量。
int compareTo(String other)如果字符串位于other之前,返回一个负数;如果字符串位于other之后,返回一个正数;如果相等,返回0。
boolean startsWith(String startstr)如果字符串是以startstr开头,返回true。
boolean endsWith(String endstr)如果字符串是以endstr结尾,返回true。
boolean equals(Object other)2个对象相等,返回true。
boolean equalsIgnoreCase(String other)2个字符串忽略大小写相等返回true。
int indexOf(String str)||(String str,int fromIndex)||(int cp)||(int cp,int fromIndex)从fromIndex位置开始计算,返回字串或者代码点第一次出现的位置。
int lastindexOF 同上,不过是返回字串最后一次出现的位置。
int length()返回串长度,准确的说是返回代码单元数量。
String substring(int begin)||(int begin,int end)截取字符串。
String toLowerCase() ;String toUpperCase();分别是转小写,和转大写。
String trim();删除原始字符串头部和尾部空格。
String replace(String old,String new)用NEW去替换OLD,没有构造正则好用。
2.StringBuilder 常用API:和类StringBuffer的用法基本一样,只是StringBuffer支持多线程,效率稍微低。
五、输入输出:
1、Scanner类:可以用一个给定的输入流创建该对象,例如用标准输入流创建:
Scanner s=new Scanner(System.in),也可以用一个File对象构造一个Scanner对象,如:
Scanner s=new Scanner(new File(String FilePath));
作为一个读取的类,Scanner主要有以下的方法:String nextLine();String next();Int nextInt();
double nextDouble();
(java6 有Console类可以读取密码不可见:Console cons=System.console(); cons.readPassword(""))
相应的有一些检测的hasNext方法;
2、PrintWriter类:可以用一个File对象构造一个PrintWriter对象:
PrintWriter pw=new PrintWriter(new File(String FilePath));
作为一个写出的类,PrintWriter主要的方法有:write(String str),print,println,printf等。
六、控制流程:do_while语句中do语句块里的局部变量在while的()已经没有生命周期!for语句中的()里的变量可以在{}语句块中使用。
switch语句的case标签必须是整数或者枚举类型常量,如果在case分支语句的末尾没有break语句,那么会接着执行下一个case分支语句。
带标签的break语句,标签必须放在希望跳出的最外层循环之前,紧跟一个冒号。
七、大数值:BigInteger和BigDecimal分别实现了任意长度的整形和任意长度的浮点型。都可以用valueOf(long/double)方法通过一个基本的类型去构造他们,他们的运算方法一样,如下:
add:加法;subtract:减法;multiply:乘法;divide:除法;mod:求余数;这两个类都实现了Comparable这个接口,于是有compareTo比较大小的方法。
八、数组:在java 6中的Arrays类有方法Object[] copyOf(Object oldArray[],int length)该静态方法将一个数组的值复制到一个新数组中,第2个参数指定新数组的长度,并返回新数组,如果新数组有多余元素,则数值型被赋值0,boolean型被赋值false。如果长度小于原始数组长度,只拷贝最前面的数据元素。以上的方法只有JDK6.0版本以上才有。
System.arraycopy(from[],int fromIndex,to[],int toIndex,int conut)方法也是数组的拷贝,参数含义是从数组from的位置是fromIndex的元素开始拷贝总数为conut个元素到数组to从toIndex位置开始,该方法需要注意数组to必须有足够的空间存放拷贝的元素。
Math.ronud是四舍五入,Math.random是返回一个0到1(不含0,不含1)的随即浮点数,用N乘以这个浮点数,就可以得到0到N-1之间的一个随即数。
数组可以使用for(:)这个循环,Arrays有很多静态的方法提供使用:
toString(type[]a):将数组转化为字符串
copyOf在6.0以后的版本才有,并且参数可以为3个(type[]a,int start,int end),start-end表示要拷贝的长度。
sort:快速排序算法的排序。
binarySearch(type[]a,type v)||(type []a,int start,int end,type v)用二分搜索法查找一个元素,成功返回下标值,否则返回一个负数r,-r-1是为保持A的有序应插入的位置,我大概估计了下,既然是2分搜索,那么这个数组里的元素应该是通过实现了Comparable这个接口排过序的,这个方法要比自己去循环查找要快很多,不过要进行一次sort方法,不知道会不会在整体上影响效率。
fill(type[],type v)将数组的所有元素的值设置为V。
equals(type[]a,type[]b)如果a,b大小相同,并且下标相同的元素也相等,返回true。
java实际上是没有多维数组的,只有数组的数组,这让java十分的灵活可以创造任意部规则的数组。
2、实验内容和步骤
实验1:编写java 应用程序,输出以下4个表达式的值。
int i=1; double d=1.0; (1) 45+45*50%i-- (2) 1.5*3+d++ (3) (true)&&(3>4) (4) (i>0)||(i<0) |
实验2:编写包含以下代码片段的java应用程序,输出字符串类对象s3的值。
String s1=“Hello!”; String s2=“World”; String s3=s1+s2; |
实验3:更改实验2中s1、s2、s3为StringBuilder类对象,观察程序运行结果并与实验2结果进行对比,理解String类对象与StringBuilder类对象的区别。
实验4:在命令行方式下调试运行下列程序,理解java应用程序命令行参数的用法。
public class Message { public static void main(String[] args) { if (args[0].equals(“-h”)) System.out.print(“Hello”); else if(args[0].equals(“-g”); System.out.print(“goodbye,”); for(int i=1;i<args.length;i++) System.out.print(“ ”+args[i]); System.out.println(“!”); } } |
实验5:Eclipse环境下导入第3章示例程序InputTest.java步骤:
(1) 新建java project如下图:
(2) 选择File->import->File ystem->Next,打开文件导入窗口如下图,点击上方Browse选择导入源程序并选中,点击下方Browse选择源程序导入位置为新项目InputTest/src位置后,点击finish完成导入。
(3) 打开InputTest项目src文件夹的缺省包,双击InputTest.java在IDE源程序编辑区打开文件。
(4) 右键单击InputTest.java文件名打开快捷菜单,选择Run as->java application运行此程序,结合程序运行结果,理解代码中Scanner类对象用法,掌握java控制台输入方法。
实验6:按照实验5的操作步骤,导入WriteReadFileTest.java示例程序,结合程序运行结果理解程序代码,观察项目文件夹下文件myfile.txt的内容,掌握文件的输入输出操作。
实验7:按照实验5的操作步骤,导入第3章示例程序,每个示例程序从语法、算法两个角度总结学习内容。
(1)测试Retirement.java,Retirement2.java,LotteryOdds.java掌握循环控制结构;
(2)测试BigIntegerTest.java,掌握大数值类的用法;
(3)测试LotteryDrawing.java,掌握数组的用法;
(4)测试CompoundInterest.java,掌握多维数组的用法;
(5)测试LotteryArray.java,掌握不规则数组的用法。