Fork me on GitHub

张云飞 201771010143 《面对对象程序设计(java)》第三周学习总结

本周学习知识点总结

一、基本数据类型:分为整型(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));



六、控制流程:do_while语句中do语句块里的局部变量在while的()已经没有生命周期!for语句中的()里的变量可以在{}语句块中使用。
switch语句的case标签必须是整数或者枚举类型常量,如果在case分支语句的末尾没有break语句,那么会接着执行下一个case分支语句。



七、大数值: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。

 

实验部分

实验2公民身份证号码按照GB11643—1999《公民身份证号码》国家标准编制,由18位数字组成:前6位为行政区划分代码,第7位至14位为出生日期码,第15位至17位为顺序码,第18位为校验码。从键盘输入1个身份证号,将身份证号的年月日抽取出来,按年-月-日格式输出。注意:输入使用Scanner类nextLine()方法,以免出错。

输入样例:

34080019810819327X

输出样例:

1981-08-19

 

 

实验3studentfile.txt文件内容是本班同学的学号与姓名,利用此文件编制一个程序,将studentfile.txt文件的信息读入到内存,并提供两类查询功能:(1)输入姓名查询学号;(2)输入学号查询姓名。要求程序具有友好人机交互界面。

编程建议:

1)从文件中读入学生信息,可以编写如下函数:

public static void StudentsFromFile(String fileName)) 

2)输入姓名查找学生学号,可以编写如下函数:

public static String findStudent(String name)

(3)输入学号查找学生姓名,可以编写如下函数:

public static String findStudent(String ID)

 

本周学习总结:

1,带标签的break语句,标签必须放在希望跳出的最外层循环之前,紧跟一个冒号。

2,java实际上是没有多维数组的,只有数组的数组,这让java十分的灵活可以创造任意部规则的数组。

3,作为一个写出的类,PrintWriter主要的方法有:write(String str),print,println,printf等。

4,终于掌握了Mac os获取文件路径的方法,需要打开终端后拖入文件,然后就会得到文件路径。

5,在本周的实验课上,在pintia平台上运行的几个程序一开始没有成功,后来在老师的指导下发现了原因,将类的名称修改为main后成功输出了两个结果(pintia的程序运行环境较为简易,没有eclipse智能)

posted @ 2018-09-16 16:00  Fairber  阅读(246)  评论(0编辑  收藏  举报