stringbuffer没有关闭,stringbuffer怎么清空
关于StringBuffer的问题
是这样的 变量a指向字符串"A" a-"A" b同理 b-"B"
1.operate方法时
a将它所指向的内存位置(其内容也就是 "A")告诉了变量x
b将它所指向的内存位置(其内容也就是 "B")告诉了变量y
这个时候 a-"A", x -"A" b-"B" y-"B"
2. x.append(y); 方法执行完以后 x所指向的位置里的内容就变成了"AB".
这个时候因为a还在指向和x一样的位置,所以他指向的内存地址里的内容就是这个被刚刚更改了的"AB".
3.System.out.println(x);
输出x的值,当然是"AB"了.
4.y=x;
将x所指向的内存位置告诉y.这个时候y就也指向和x一样的位置了:
a-"AB", x -"AB", y-"AB" b-"B"
5.然后回到主方法中
System.out.println(a+" "+b);
看上面哪个最后的内存指示,表示a应该输出的是"AB" b应该输出的是"B"
所以最后输出的是AB B
Java中请问一共创建了多少个对象?(与StringBuffer有关)
我觉得应该是3个对象。主要分成两个阶段创建,在编译期生成两个常量字符串对象,放在字符串池中,它们是abc
和
567。然后在运行期创建一个StringBuffer对象,放在堆中。所以一共创建3个对象,两个常量字符串对象,一个StringBuffer对象。
java中关闭某个程序的进程 cmd /c taskkill /pid 具体的某个pid
import?java.io.BufferedReader;
import?java.io.BufferedWriter;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.io.OutputStream;
import?java.io.OutputStreamWriter;
import?java.util.LinkedList;
public?class?Command?{
?private?java.lang.Process?p;?
?private?InputStream?is;
?private?OutputStream?os;
?private?BufferedWriter?bw;
?private?BufferedReader?br;
?private?ProcessBuilder?pb;
?private?InputStream?stdErr;
?public?Command()?{
?}
?//获取Process的输入,输出流
?public?void?setCmd(String?cmd)?{
??try?{
???p?=?Runtime.getRuntime().exec(cmd);
???os?=?p.getOutputStream();
???is?=?p.getInputStream();
???stdErr?=?p.getErrorStream();
??}?catch?(IOException?e)?{
???System.err.println(e.getMessage());
??}
?}
?//向Process输出命令
?public?void?writeCmd(String?cmd)?{
??try?{
???bw?=?new?BufferedWriter(new?OutputStreamWriter(os));
???bw.write(cmd);
???bw.newLine();
???bw.flush();
???bw.close();
??}?catch?(Exception?e)?{
???e.printStackTrace();
??}
?}
?//读出Process执行的结果
?public?String?readCmd()?{
??StringBuffer?sb?=?new?StringBuffer();
??br?=?new?BufferedReader(new?InputStreamReader(is));
??String?buffer?=?null;
??try?{
???while?((buffer?=?br.readLine())?!=?null)?{
????sb.append(buffer?+?"\n");
???}
???System.out.println(p.waitFor());
??}?catch?(Exception?e)?{
???e.printStackTrace();
??}
??return?sb.toString();
?}
?//将命令一股脑塞入list中
?public?LinkedListString?doCmd(LinkedListString?lists)?{
??LinkedListString?list?=?new?LinkedListString();
??for?(String?s?:?lists)?{
???writeCmd(s);
???list.add(readCmd());
??}
??return?list;
?}
?public?static?void?main(String[]?args)?{
??Command?cmd?=?new?Command();
??cmd.setCmd("cmd");
??cmd.writeCmd("TASKKILL?/PID?1230");
??System.out.println(cmd.readCmd());
??//LinkedListString?list?=?new?LinkedListString();
??//list.add("dir/b");
??//list?=?cmd.doCmd(list);
??//?for(String?s:list){
??//?System.out.print(s);
??//?}
?}
}
PreparedStatement如果用于多项(查询、修改或删除、插入)操作的话,是否关闭一次???
使用一次,关一次。因为每次执行的sql语句都不一样,导致PreparedStatement对象不同。
另外,一般是一个方法处理一个操作,那样更清晰

java StringBuffer.append执行失败
不会捕获不到异常的,你直接在你的代码外面加上 try .... catch,例子如下:
try{
//在这里放入你的所有代码
}catch(Throwable ex) {
ex.printStacktrace();
}
另外,大概看了下你的代码,为什么是一直在写入,一直又读出来存入 StringBuffer 中,你有没有在程序中关闭文件的 FileInputstream 与 FileOutputstream,如果有任何一个 I/O 流没有关闭,则会导致内存溢出。
但是,不管是什么,上面只是猜测,建议你还是加上 try...catch 后,直接看 ex.printStackTrace() 才是真正的原因。
注意是 catch(Throwable ex) , 不是 catch(Exception ex)
Java中有关StringBuffer类型的变量的清空方法。
StringBuffer 清空的的话,可以用delete方法,第一个参数是清除的起始位置,第二个是结束位置,举例:
StringBuffer sb = new StringBuffer("123456789");//创建一个StringBuffer 流
sb.delete(0, sb.length());//删除从0开始到sb长度的字符
System.out.print(sb.toString());//输出结果
结果为空,也就是说被清空了。
备注:可以调整“sb.length()”和0的值,之后删除StringBuffer 中的特定位置的字符串,根据实际需要修改即可。