欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java SE 基础精华之深入javaAPI

程序员文章站 2022-06-09 20:06:14
...

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();

	}

}