(一)字符串类(String类、StringBuffer类和StringBuilder类)

一、String类

1、String类构造方法

String(byte[ ]  bytes, String  charsetName):使用指定编码集解码一个字节数组,构造一个新的字符串。

String(String  original):初始化一个新创建的String对象。

String(char[ ]  value):构造一个新的String对象,使其表示字符串数组所包含的字符序列。

2、常用方法

getBytes()使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

getBytes(Charset使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。

indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。 

lastIndexOf(String返回指定子字符串在此字符串中最右边出现处的索引。

split(String regex):指定正则表达式来拆分字符串,返回一个字符串数组。

substring(int beginIndex):从指定位置开始,截取一个新的字符串。

toLowerCase()使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

toUpperCase():使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

matches(String字符串是否匹配给定的正则表达式

String对象是不可变的。相当于字符串常量,定义分配空间赋值之后无法改变。

String  s1 = "hello";            s1=  "world";

注意:s1是String对象的引用,不是对象本身。这里的变量是String对象的引用。

char data[] = {'a', 'b', 'c'};
String str = new String(data);  //这里str才是对象本身,不是引用。注意String的构造方法,参数是一个字符数组。


注意:String类重写了equals()方法,比较的是内容不是引用的地址。与Object类区分开

1、对于String类的方法

可以思考对数组的操作,可以进行哪些操作,需要哪些方法。最基本的四个方法:增删改查,分解split(String  s),连接concat(String  s)

getBytes()方法:使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

subString(int  begin,int  end)方法:返回一个新的字符串

静态方法:valueOf(int   i)返回i的字符串形式,其他数据类型与之类似


二、StringBuffer类

StringBuffer是线程安全的可变字符序列。因此,对字符串进行修改时,需要使用StringBuffer类和StringBuilder类。

注意:与String不同,StringBuffer和StringBuilder对象能够被多次修改,并且不产生新的对象。

1、StringBuffer类的方法(其他方法与String类似)

序号

方法描述

1

public StringBuffer append(StringBuffer s)

将指定的字符串追加到此字符序列。   注意返回的也是StringBuffer类型,添加其他类型数据,系统会隐式调用String.valueOf(char[])方法或者引用类型的toString()方法转化为字符串,在添加。

2

public StringBuffer reverse()

 将此字符序列用其反转形式取代。

3

public delete(int start, int end)

移除此序列的指定的子字符串中的字符。

4

public insert(int offset, String  s )

将 字符串s插入此序列的指定位置。

5

replace(int start, int end, String str)

使用给定 String 中的字符替换此序列的指定位置的子字符串中的字符。


(三)StringBuilder类

StringBuilder 类在 Java 5 中被提出,同时,StringBuilder类不是线程安全的。StringBuilder类比StringBuffer类速度快,在单线程下,建议使用StringBuilder类。


(四)基本数据包装类

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。

Character 类在对象中包装一个基本类型 char 的值

在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。

编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。

例如:Integer  x  = 5;当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。(内部编译器调用的是Integer类的Integer.valueOf(5)方法,完成装箱,拆箱调用的是Integer.intValue()方法)


(五)Math类(在图形和游戏中会常用到Math类的方法)

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

注意:方法的参数和返回值类型一般是double类型。

其中一个方法要注意:可以用来产生随机数

public static double random()


返回带正号的 double 值,该值大于等于 0.0 且小于 1.0



(六)File类(重点)

读写一个文件:

1、首先获取这个文件,获取该文件的路径加文件名:String path = getPath()+File.separator+getName()

2、利用File类,通过File类的构造方法获得文件对象,构造方法:File(String directoryPath, String filename)或者File(File dirObj, String filename)

3、利用节点流来读写文件的内容,FileInputStream(File  file)或者FileInputStream(String  filename)

1. new File ("hello.txt");
2.   
3. new FileInputStream(file); 
4. 
5. new InputStreamReader(in,"utf-8");  
6. 
7. new BufferedReader(inReader); 
8.


1. InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt"));
2. 
3. while((ch = isr.read())!=-1)   
4.   {   
5. 
6. char)ch);   
7. 
8.   }


File类直接处理文件和文件系统,File对象用来处理或获取与磁盘文件相关的信息。

1、区分开File类和FileInputStream类

FileInputStream类关注的是文件内容,而File类关注的是文件在磁盘上的存储。

File不属于文件流,只能代表一个文件或是目录的路径名而已。


注意:如果处理文件或者目录名,就应该使用File对象,而不是字符串。例如,File类的equals方法知道一些文件系统对大小写是敏感的,目录尾的“/”字符无关紧要。


File类是文件和路径的抽象表示形式。这里可以表示一个目录路径名(文件夹的名字),也可以表示一个文件对象。

其中文件夹就是一个目录名称。

isFile()方法:测试此抽象路径名表示的文件是否是一个标准文件。

isDirectory()方法:测试此抽象路径名表示的文件是否是一个目录。

通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表,这里返回的是字符串


listFiles():返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。返回的是File[]数组

1、File类的构造方法



下面的构造函数可以用来生成File 对象:

File(String directoryPath)
 
File(String directoryPath, String filename)
 
File(File dirObj, String filename)


这里,directoryPath是文件的路径名,filename 是文件名,dirObj 一个指定目录的File 对象。下面的例子创建了三个文件:f1,f2,和f3。第一个File对象是由仅有一个目录路径参数的构造函数生成的。第二个对象有两个参数——路径和文件名。第三个File对象的参数包括指向f1文件的路径及文件名。f3和f2指向相同的文件。


File f1 = new File("/");

File f2 = new File("/","autoexec.bat");
 
File f3 = new File(f1,"autoexec.bat");


public  File(String  pathname):pathname为路径创建File对象。

注意:这里的构造方法是在内存中构造一个File对象,而不是在硬盘上创建一个指定路径的文件。

public  File(String  parent ,String child): 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

2、File类有一个静态属性:static   String  separator 存储了当前系统的路径分隔符。就是正斜杠( / ),为了跨平台使用。

注意:windows下是反斜杠     linux下是正斜杠,但是在java编程中,反斜杠表示转义字符。在编程时,windows和linux都使用正斜杠即可。若使用反斜杠,则需转义即:\\

3、时间返回类型是long类型,存储的是从1970 年 1 月 1 日 00:00:00 GMT 到现在的毫秒数,这样是为了提高存储效率。long类型占8字节,一个字节8位。

4、exists()方法:测试此抽象路径名表示的文件或目录是否存在。

getParentFile()方法:此抽象路径名指定父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null

mkdirs()方法:创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

mkdir()方法:创建此抽象路径名指定的目录。

createNewFile()方法:当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

注意:文件的创建过程:首先创建文件所在的目录:利用mkdirs()方法创建目录,然后再创建该文件:利用createNewFile()方法。其中File的构造方法:只是在内存中创建一个File对象,不是在硬盘上创建。

5、对于FileReader类和FileInputStream类区别

两个类的构造函数的形式和参数都是相同的,参数为File对象或者表示路径的String。

如果处理纯文本文件,建议使用FileReader,因为更方便,也更适合阅读;但是要注意编码问题!

其他情况(处理非纯文本文件),FileInputStream是唯一的选择;FileInputStream是在Socket通讯时会用到很多,如将文件流以Stream的方式传向服务器!

6、IO的规范用法

① 
File file = new File ("hello.txt"); 
FileInputStream in=new FileInputStream(file); 

② 
File file = new File ("hello.txt"); 
FileInputStream in=new FileInputStream(file); 
InputStreamReader inReader=new InputStreamReader(in,"utf-8"); 
BufferedReader bufReader=new BufferedReader(inReader); 

③ 
File file = new File ("hello.txt"); 
FileReader fileReader=new FileReader(file); 
BufferedReader bufReader=new BufferedReader(fileReader);

7、FileReader类

FileReader fr = new FileReader("ming.txt"); 
   char[] buffer = new char[1024]; 
   int ch = 0; 
  while((ch = fr.read())!=-1 ) 
  { 
   System.out.print((char)ch); 
  }



8、InputStreamReader类

InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt")); 
  while((ch = isr.read())!=-1) 
  { 
   System.out.print((char)ch); 
  }



9、BufferedReader类

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt"))); 
   String data = null; 
   while((data = br.readLine())!=null) 
   { 
    System.out.println(data); 
   }




实例:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		String separator = File.separator;
		String filename = "myfile.txt";
		//String directory = "dir1/dir2";      //采用这两者目录写法都可以
		String directory = "dir1"+File.separator+"dir2";
		File f = new File(directory,filename);
		if(f.exists()){                                //判断硬盘上该目录下是否存在该文件
			System.out.println("文件名:"+f.getAbsolutePath());
			System.out.println("文件大小:"+f.length());
		}else{
			f.getParentFile().mkdirs(); //创建指定目录,注意:项目加上包名,则是目录是最上层包名的父目录
			try {
				f.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

5、递归列出文件目录结构


public static void tree(File f,int level){
		String preStr = "";
		for(int i=0; i<level; i++){
			preStr +="   ";
		}
		File[] childs = f.listFiles();  //注意:这里的listFiles()方法表示的是当前目录中包含的文件名和目录名,不包含子目录。
		for(int i=0; i<childs.length; i++){
			System.out.println(preStr+childs[i].getName());
			if(childs[i].isDirectory()){
				tree(childs[i] , level + 1);
			}
		}
	}



(七)java.lang.Enum枚举类型(1.5之后才有)

1、只能够取特定值中的一个

2、使用enum关键字,定义一个枚举类型(java.lang.Enum)。这是定义的一种类型。

实例:


public class TestEnum {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Mycolor m = Mycolor.red;
		switch(m) {
		case red:
			System.out.println("red");
			break;
		case yellow:
			System.out.println("yellow");
			break;
		default:
			System.out.println("blue");
		}
	}
	public enum Mycolor { red, yellow, blue}  //定义枚举类型
}