2 sinat 33415638 sinat_33415638 于 2016.02.26 09:34 提问

程序里面有静态变量,我想执行好几遍,每次的变量值都从外面获取,我的静态变量应该怎么改

我发下主要代码吧,涉及到静态变量的。主要是想把文件路径filename和获取的source的名字改成非静态的
public class ProcessRow {
static Properties source;
static {
try {
source = new Properties();
FileInputStream fis = new FileInputStream(new File(
inputPropertieName()));
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
source.load(isr);

    fis.close();
} catch (Exception e) {
    // throw new ExceptionInInitializerError(e);
}

}

public static String filterAlphabet(String alph) {
alph = alph.replaceAll("[^(A-Z)]", "");
return alph;
}

public String Pname() {
String hai = UseProcess.fileName;
String a = filterAlphabet(hai);
String b = hai.substring(hai.indexOf(a), hai.indexOf(a) + 6);
return b;

}

public static String inputPropertieName() {
/*
* System.out.println("请输入配置文件名称:"); Scanner a = new Scanner(System.in);
* String propertieName = a.next();
*/
// a.close();
ProcessRow a = new ProcessRow();
String propertieName = a.Pname();
return propertieName;
}

// 判断方法1,2

public boolean panduan1(XSSFRow from) {
return from.getCell(8).toString().trim()
.equals(source.getProperty("I列值1"))
&& (from.getCell(2).toString().trim().equals(source
.getProperty("C列值1")));// 1 I列值为“I列值1” 且C列值为“C列值1”
}

public boolean panduan2(XSSFRow from) {
return from.getCell(8).toString().trim()
.equals(source.getProperty("I列值2"))
&& (from.getCell(2).toString().trim().equals(source
.getProperty("C列值2")));// 2 I列值为“I列值2” 且C列值为“C列值2”
}
.........

Output类
public class Output {
static Date d = new Date();
static DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
final static String fileName = df.format(d);
static String b = null;
static String c = ProcessRow.source.getProperty("输出路径")+fileName + "_main" + ".xlsx";
public static FileOutputStream init() {
FileOutputStream s = null;
try {
s = new FileOutputStream(c);
} catch (FileNotFoundException e) {
}
return s;
}
public static XSSFWorkbook getWorkbook() throws IOException{
FileInputStream fis = new FileInputStream(c);
XSSFWorkbook wb = new XSSFWorkbook( fis );
return wb;
}

}
UseProcess类
public class UseProcess {
static String fileName=UseProcess.fileName();
static XSSFSheet readsheet;
static {
try {
readsheet = readWorkbook();
} catch (Exception e) {
// TODO: handle exception
}
}
static XSSFWorkbook sc = null;
static XSSFWorkbook sr = null;
public static String fileName() {
System.out.println("请输入文件路径(将文件拖入程序):");
Scanner a = new Scanner(System.in);
String fileName = a.next();
//a.close();
return fileName;
}
ArrayList date1 = new ArrayList();
ArrayList value1 = new ArrayList();
ArrayList date2 = new ArrayList();
ArrayList value2 = new ArrayList();

int lastnum = getNum(fileName);
int i = Integer.parseInt(ProcessRow.source.getProperty("表单数据从第几行开始")) - 1;
static int j = 1;

public static int getNum(String Filename) {
try {
InputStream myxls;
myxls = new FileInputStream(Filename);
sr = new XSSFWorkbook(myxls);
XSSFSheet sheet = sr.getSheetAt(0);// 第一个工作表
return sheet.getLastRowNum();// 获取第一个工作表的行数
} catch (IOException e) {
return 0;
}
}
主函数
public class TestMain {
public static void test() throws IOException, NumberFormatException, ParseException{
UseProcess.createWorkbook();
UseProcess n = new UseProcess();
for (int i = 1; i <= Integer.parseInt(ProcessRow.source
.getProperty("condition-process的个数")); i++) {
n.UseProcess1(String.valueOf(i));
}
n.UseProcessNull();
System.out.println("输入完毕");
}
public static void main(String[] args) throws NumberFormatException, IOException, ParseException {
TestMain.test();
}

1个回答

sinat_31535993
sinat_31535993   Rxr 2016.02.26 09:44

改就改呗,最多就是每次调用的时候在内存中重新生成一下。

sinat_33415638
sinat_33415638 不知道怎么改,我写成非静态,用new一个对象调用,就会报内存溢出的错
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
通过反射获取静态变量的值
转自:点击打开链接 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
shell学习笔记(四)—— shell变量和引用
1、深入认识变量 1.1、什么是变量 变量:程序设计语言中一个可以变化的量,当然,可以变化的是变量的值。 变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。 1.2、变量的命名 shell中,变量的命名:可以有字母、数字和下划线组成,并且只能以字母和下划线开头。 shell语言中,变量名是大小写敏感的。 可以简单的认为,变量就是保存在计算机内存中
java 利用反射获取内部类静态成员变量的值
利用java反射解析内部类静态成员变量的值
利用反射获取Java类中的静态变量名及变量值
利用反射获取Java类中的静态变量名及变量值. JAVA可以通过反射获取成员变量和静态变量的名称,局部变量就不太可能拿到了
修改static中成员变量的值
 class person{     String name;     int age;     static String country;     public person(){}     public person(String name,int age){         this.name=name;         this.age=age;     }   
JNI获取并修改Java中类的变量和静态变量的值
对于JNI的基本使用请移步:Hello JNI本文主要介绍以下几个函数的使用:GetObjectClassGetFieldID,GetStaticFieldIDGet< Type>Field,GetStatic< Type>FieldSet< Type>Field,SetStatic< Type>Field案例介绍:通过JNI获取并修改Java中类的变量值本文也是基于上面的代码继续添加:JniDem
JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量
在上一章中我们学习到了如何在本地代码中访问任意Java类中的静态方法和实例方法,本章我们也通过一个示例来学习Java中的实例变量和静态变量,在本地代码中如何来访问。静态变量也称为类变量(属性),在所有实例对象中共享同一份数据,可以直接通过【类名.变量名】来访问。实例变量也称为成员变量(属性),每个实例都拥有一份实例变量数据的拷贝,它们之间修改后的数据互不影响。
Matlab中的静态变量和全局变量
1、静态变量(persistent)在函数中声明的变量,当函数调用完之后就会释放。如果想保留这个变量的值(供该函数下一次调用),可以把这个变量声明为静态变量。静态变量不能在声明的时候赋值,而且只能在function里声明,且只有这个function才能认识它(main函数也不行)。x声明后是[],就是一个空的array。声明后需初始化,注意不能直接用persistent x=2;而是用isempty
Java中静态变量和非静态变量的初始化顺序
 先看下面的程序:package c05.net;class Bowl {Bowl(int marker) {System.out.println("Bowl(" + marker + ")");}void f1() {System.out.println("Ok");}}class Cupboard {Bowl b1 = new Bowl(1);static Bowl b
Android学习(5)——静态变量传值,全局变量传值以及由A-B-A的传值
今天继续学习了Activity之间的传值方式。 接上一次的学习内容,上一次介绍的是Intent 意图对象的传值方式,下面来介绍其他的三种方式 静态变量 A类中,声明一个公共的静态成员,在合适的地方存入数据 B类中,直接访问A类的静态成员,读取相应的数据 关键代码: A中 public static Map infos=new  HashMap (); //用于Activity之间数据