stringbuffer没有关闭,stringbuffer怎么清空

http://www.itjxue.com  2023-01-06 16:05  来源:未知  点击次数: 

关于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 中的特定位置的字符串,根据实际需要修改即可。

(责任编辑:IT教学网)

更多

推荐Painter教程文章