有道云笔记 连接:
http://note.youdao.com/noteshare?id=5b60f7ffd91d654c731a19a3621d0318
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下可忽略:
《Java常用类》
日常编程中经常用到的类。遇到不常用的类,查API文档是一种能力。包括:字符串相关的类(String,StringBuffer)、基本类型的包装类(Integer)、Math类、File类、枚举类。
1. String类
表示不可变的字符串。
构造方法:无参有参的都有(见API文档)。注意的是,字符串跟charset(编码集)有关,可在初始化时候定义;可把字节流Bytes[]初始化为String。eg:一个重载构造方法为public String(Bytes[] bytes , String charSetName);即将字节流以某编码方式初始化为String字符串。
两个例子:
常用方法(第一组):
eg:
第二组:
第三组:
补:重载方法static String valueOf(Object o),使用的是该Object(具体的类,如Date等)的toString()方法。利用的是Java 动态绑定(父类引用指向子类对象)功能,实现的多态。
例子_1:给定整数,求有多少位? (不必除10取余除100取余之类)
给定日期,求具体年份? 或者,去掉年月日之间的逗号。
例子_2:给定一个长字符串,求里面大写英文字母、小写字母和非英文字母各自的数量?
方法1,charAt()方法用for循环取单个字符,ASCII码判断。
方法2,定义字符串所有引文字母,indexOf(c)返回非-1(或者>=0)。
方法3,利用包装类的static方法isUpperCase()和isLowerCse()来判断大小写。
例子_3:求某字符串"java"在给定长字符串中出现的次数?
方法: int indexOf(String s)方法可以得出出现的第一次;
然后String subString(int i)方法,截取后面的字符串,替换原长字符串;
再用第一步方法,计数器再加1,;
直到int indexOf(String s)返回-1;
2. StringBuffer类
可变字符串,与String类似。区别体现,在当一个字符串被改变(拼接、删除一个字符、另赋值)时,StringBuffer比String节省内存和cpu。这是由它们不同的存储方式决定的。
例子:String s1 = "Hello";
String s2 = "World";
s1 += s2;
上例,当s1和s2拼接时,如图,步骤是:新new一个容纳拼接后长度的空间,将s1和s2指向的内容"Hello"和"World"复制进去,然后把s1的指向改为新的内存地址。
这个操作用String需要一个new、两个copy和一个改引用。而若是StringBuffer,则直接将"World"拼接到"Hello"的后面。
常用方法(第一组):
第二组:
第三组:跟String同名同功能的方法。
eg:
3. 基础类型包装类
Integer,Long,Float,Double,Character,Boolean。
基本类型,如int的值是存于栈中的,若想把值存于堆中,就需要用相应的包装类。基本类型的包装类还有一些实用的方法和功能。
常用方法:
a) MAXVALUE ,MINVALUE ,最大最小值。
b)staic int parseInt(String str),将字符串转为int。注意到Integer的构造方法public Integer(String str) ,初始化时直接将字符串str转为相应的数字。
c)toString(),将数字转为字符串,用于打印输出。
d)Integer valueOf(int i),将int数据转为Integer型。
注意:各种valueOf和parseXxx?
将字符串转int:int Integer.parseInt(String s);
将int转字符串:String String.valueOf(int i);
在jdk1.5后,Integer和int自动拆装箱(除了作为参数时是区分的),所以:
a.原来的Integer Integer.valueOf(int i)基本没用了;
b.Integer a= Integer.parseInt("325");是成立的,可以这么用;但要注意其本质是int Integer.parseInt(String s)加自动拆装箱,而不是真的有Integer Integer.parseInt(String s)写个方法。
eg:
例子_2:主要考的是二维数组,再就是类型转换。尤其注意二维数组初始化的方式,不要落了[]。
4. Math类
平时基本不用。编程小游戏的时候用的多。
有两个静态常量:PI,E。
5. File类
java.io.File类代表系统文件名(路径和文件名)。
常用方法:a)boolean isDirectory(),判断是否是目录。
boolean isFile():是否是文件。
boolean canRead():判断是否可读。
bolean exists():判断该文件名是否存在
b)File[] listFiles(File fileName):列出路径下的子目录。
例子_1:经常用到,判断文件是否存在,不存在创建文件。里面有许多细节上的事,比如:File.separator是当前系统的分隔符,也可/,但不建议\\; f.getParentFile().mkdirs()不要忘了,先创建目录(再创建文件),这里得到的是包的上层路径(即,若bjsxt.TestFile.java,则是bjsxt的上层路径);mkdirs()而不用mkdir()是由于例子中是mydir1和mydir2两个; f.createNewFile()时不要忘了捕获IOException。
6. 枚举enum
java.lang.Enum类下的enum类型,Java1.5后新引进的类型。
特点:把能够选的值列出来,使用时只能是其中一个。
场景:小游戏中,定义一个变量存炮弹走的方向,只能是东南西北四个之一,非常适合用枚举类型。
既是一个新类型,定义、初始化、使用的方式跟平常不一样。如: