java总结小知识2

可变参数

JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。

方法的可变参数的声明如下所示:

typeName ... parameterName

在方法声明中,在指定参数类型后加一个省略号(...) 。

一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

实例

package lianxi;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class testClass {
	public static void printMax(double... num) {
		if(num.length == 0)
			System.out.println("NO");
		
		double numMax = num[0];
		for(double i: num)
		{
			if(i>numMax)
				numMax = i;
		}
		System.out.println(numMax);
	}
	public static void main(String args[]) {
		printMax(30.0,50.0,100,99);
		
	
	}
}

finalize() 方法

Java 允许定义这样的方法,它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做 finalize( ),它用来清除回收对象。

例如,你可以使用 finalize() 来确保一个对象打开的文件被关闭了。

在 finalize() 方法里,你必须指定在对象销毁时候要执行的操作。

finalize() 一般格式是:

protected void finalize ( ) { // 在这里终结代码 }

关键字 protected 是一个限定符,它确保 finalize() 方法不会被该类以外的代码调用。

当然,Java 的内存回收可以由 JVM 来自动完成。如果你手动使用,则可以使用上面的方法。

实例

package lianxi;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
class Cake extends Object{
		private int id;
		public Cake(int id) {
			this.id = id;
			System.out.println("Cake Object " + id + "is created");
		}
	protected void finalize() throws java.lang.Throwable{
		super.finalize();
		System.out.println("Cake Object " + id + "is disposed");
	}
	}
public class testClass {
	
	public static void main(String args[]) {
		Cake cakeOne = new Cake(1);
		Cake cakeTwo = new Cake(2);
		Cake cakeThree = new Cake(3);
		
		cakeOne = cakeTwo = null;
		System.gc();//调用java的垃圾收集器;
	
	}
}
Cake Object 1is created
Cake Object 2is created
Cake Object 3is created
Cake Object 1is disposed
Cake Object 2is disposed

创建控制台读取字符

从 BufferedReader 对象读取一个字符要使用 read() 方法,它的语法如下:

int read ( ) throws IOException

每次调用 read() 方法,它从输入流读取一个字符并把该字符作为整数值返回。 当流结束的时候返回 -1。该方法抛出 IOException。

下面的程序示范了用 read() 方法从控制台不断读取字符直到用户输入 "q"。

package lianxi;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class testClass {
	
	public static void main(String args[]) throws IOException
	{
		char c;
		/*使用System.in创建BufferedReader*/
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		do {
			c = (char) br.read();
			System.out.println(c);
		} while(c != 'q');
	}
}

读取字符串需要用readline方法

package lianxi;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class testClass {
	
	public static void main(String args[]) throws IOException
	{
		String c;
		/*使用System.in创建BufferedReader*/
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		do {
			c = br.readLine();
			System.out.println(c);
		} while(!c.equals("end"));
	}
}

FileOutputStream

使用字符串类型的文件名来创建一个输出流对象:

OutputStream f = new FileOutputStream ( " C:/java/hello " )

也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:

File f = new File ( " C:/java/hello " ) ; OutputStream f = new FileOutputStream ( f ) ;

package lianxi;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class testClass {
	
	public static void main(String args[]) throws IOException
	{
		try {
			byte[] b = {1,22,3,5,6};
			OutputStream os = new FileOutputStream("E:/Sharing/test.text");
			for(int x=0; x < b.length; x++)
				os.write(b[x]);
			os.close();
			InputStream is = new FileInputStream("E:/Sharing/test.text");
			int size = is.available();
			
			for(int i=0; i<size; i++)
				System.out.printf((char)is.read(b) + " ");
			is.close();
		}catch(IOException e){
			System.out.println("exception");
		}
	}
}

上述代码因为是二进制输入,所以会出现乱码,下面是用utf-8格式解决这个问题

package lianxi;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class testClass {
	
	public static void main(String args[]) throws IOException
	{
		File f = new File("a.text");
		FileOutputStream fop = new FileOutputStream(f);
		//构建一个文件输出流对象,文件不会自动新建
		OutputStreamWriter write = new OutputStreamWriter(fop,"UTF-8");
		write.append("中文输入");//写入到缓冲区
		write.append("\r\n");
		write.append("English");
		write.close();
		fop.close();
		
		FileInputStream fip = new FileInputStream(f);
		InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
		
		StringBuffer sb = new StringBuffer();
		while(reader.ready()) {
			
			sb.append((char) reader.read());
			
		}
		System.out.println(sb.toString());
		reader.close();
		fip.close();
	}
	
}

创建目录:

import java.io.File;
 
public class CreateDir {
  public static void main(String args[]) {
    String dirname = "/tmp/user/java/bin";
    File d = new File(dirname);
    // 现在创建目录
    d.mkdirs();
  }
}

读取目录


package lianxi;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class testClass {
	
	public static void main(String args[]) throws IOException
	{
		String dirname = "/tmp";
		File f1 = new File(dirname);
		if(f1.isDirectory())//判断是否为目录对象
		{
			System.out.println("目录" + dirname);
			String s[] = f1.list();//提取他包含的文件和文件夹列表
			for(int i=0; i<s.length; i++)
			{
				File f = new File(dirname + '/' + s[i]);
				if(f.isDirectory()) {
					System.out.println(s[i] + " 是一个目录");
				} else {
					System.out.println(s[i] + "是一个文件");
				}
			}
		}
		else {
			System.out.println(dirname + "不是一个目录");
		}
	}
	
}

删除目录或文件

import java.io.File;
 
public class DeleteFileDemo {
  public static void main(String args[]) {
      // 这里修改为自己的测试目录
    File folder = new File("/tmp/java/");
    deleteFolder(folder);
  }
 
  //删除文件及目录
  public static void deleteFolder(File folder) {
    File[] files = folder.listFiles();
        if(files!=null) { 
            for(File f: files) {
                if(f.isDirectory()) {
                    deleteFolder(f);
                } else {
                    f.delete();
                }
            }
        }
        folder.delete();
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值