java SE 基础精华之深入javaAPI

1     JAVA SE. 3

1.1      深入JAVA API3

1.1.1       Lang... 3

 位于java.lang包中,这个包中的类使用时不用导入。

String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。它可以使用tostring()转换成string字符串。

String x=”a”+4+”c”编译时等效于String x=new StringBuffer().append(“a”).append(4).append(“c”).toString();

字符串常量是一种特殊的匿名对象,String s1=”hello”;String s2=”hello”;s1==s2;因为他们指向同一个匿名对象。

如果String s1=new String(“hello”);String s2=new String(“hello”);s1!=s2;


/*逐行读取键盘输入,直到输入为“bye”时,结束程序
 注:对于回车换行,在windows下面,有'\r'和'\n'两个,而unix下面只有'\n',但是写程序的时候都要把他区分开*/
public class Readline {
	public static void main(String args[]) {
		String strInfo = null;
		int pos = 0;
		byte[] buf = new byte[1024];// 定义一个数组,存放换行前的各个字符
		int ch = 0; // 存放读入的字符
		System.out.println("Please input a string:");
		while (true) {
			try {
				ch = System.in.read(); // 该方法每次读入一个字节的内容到ch变量中。
			} catch (Exception e) {
			}
			switch (ch) {
			case '\r': // 回车时,不进行处理
				break;
			case '\n': // 换行时,将数组总的内容放进字符串中
				strInfo = new String(buf, 0, pos); // 该方法将数组中从第0个开始,到第pos个结束存入字符串。
				if (strInfo.equals("bye")) // 如果该字符串内容为bye,则退出程序。
				{
					return;
				} else // 如果不为bye,则输出,并且竟pos置为0,准备下次存入。
				{
					System.out.println(strInfo);
					pos = 0;
					break;
				}
			default:
				buf[pos++] = (byte) ch; // 如果不是回车,换行,则将读取的数据存入数组中。
			}
		}
	}
}

 String类的常用成员方法

1、   构造方法:

    String(byte[] byte,int offset,int length);这个在上面已经用到。

2、    equalsIgnoreCase:忽略大小写的比较,上例中如果您输入的是BYE,则不会退出,因为大小写不同,但是如果使用这个方法,则会退出。

3、   indexOf(int ch);返回字符ch在字符串中首次出现的位置

4、   substring(int benginIndex);

5、   substring(int beginIndex,int endIndex);

返回字符串的子字符串,4返回从benginindex位置开始到结束的子字符串,5返回beginindexendindex-1之间的子字符串。

    基本数据类型包装类的作用是:将基本的数据类型包装成对象。因为有些方法不可以直接处理基本数据类型,只能处理对象,例如vectoradd方法,参数就只能是对象。这时就需要使用他们的包装类将他们包装成对象。

   

/**
 * 例:在屏幕上打印出一个*组成的矩形,矩形的宽度和高度通过启动程序时传递给main()方法的参数指定。
 * 
 * @author administrator
 * 
 */
public class Rectangular {

	public static void main(String[] args) {
		int length = new Integer(args[0]).intValue();
		int width = Integer.parseInt(args[1]);
		// int width = Integer.valueOf(args[1]).intValue();
		// 以上为三种将字符串转换成整形的方法。
		System.out.println("lenght:" + length + "\nwidth:" + width);
		for (int i = 0; i < width; i++) {
			StringBuffer sb = new StringBuffer(); // 使用stringbuffer,是因为它是可追加的。
			for (int j = 0; j < length; j++) {
				sb.append('*');
			}
			System.out.println(sb.toString()); // 在打印之前,要将stringbuffer转化为string类型。
		}
	}

}

 比较下面两段代码的执行效率:

//1.
		String sb = new String();
		for (int j = 0; j < width; j++) {
			sb = sb + '*';
		}
		//2.
		StringBuffer sb = new StringBuffer();
		for (int j = 0; j < width; j++) {
			sb.append('*');
		}

 

(1)     (1和(2)在运行结果上相同,但效率相差很多。

(1) 在每一次循环中,都要先将string类型转换为stringbuffer类型,然后将‘*’追加进去,然后再调用tostring()方法,转换为string类型,效率很低。

(2)   在没次循环中,都只是调用原来的那个stringbuffer对象,没有创建新的对象,所以效率比较高。

   System类与Runtime类:

    由于java不支持全局函数和全局变量,所以java设计者将一些与系统相关的重要函数和变量放在system类中。

我们不能直接创建runtime的实例,只能通过runtime.getruntime()静态方法来获得。

 

/**
 * 在java程序中启动一个windows记事本程序的运行实例,并在该运行实例中打开该运行程序的源文件,启动的记事本程序5秒后关闭。
 * 
 * @author administrator
 * 
 */
public class Property {

	public static void main(String[] args) {

		Process p = null;
		try {
			p = Runtime.getRuntime().exec("notepad.exe Property.java");
		} catch (Exception e) {
			System.out.println(e);
		}
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		p.destroy();

	}

}

 

 

你可能感兴趣的:(java,基础,lang,jse,精华)