首页 > 代码库 > 2017.2.6
2017.2.6
1.是在类里面将成员变量写为new初始化,还是在方法里面再new初始化类的成员变量?
答:写在类里面,成员变量初始化new就意味着在创建当前对象时候,就一并创立了这个成员变量对象。
写在方法里面,是在有需要的时候,调用这个方法时候才初始化这个成员变量。
区别就是:生成时间不一样,恒诚时间不一样,生成时间不一样。
且,类成员变量new的话,就是有状态的类,如果多项成调用这个类的某个方法(该方法调用了这个成员变量),那就是非线程安全的了。
2.类只要不是单例类,就普通的类,是随便写成员变量的,以为内每new一个对象,各个对象都是不同的,不互相干扰的。不影响类的成员变量的赋值。
3.每个类都有特定的用途,记住。你编写的类要有专门的用途
2.Java 读写Properties配置文件
1.Properties类与Properties配置文件
Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型。
3.如何在src中创建.properties文件?
:eclipse?选中src ->new->file->填写文件名称 写上后缀就行了。
4.JAVA读取properties时路径注意问题,
5.路径读取问题:src文件夹下的类,读取config文件夹下的config.properties配置文件。
fis = this.getClass().getClassLoader().getResourceAsStream("config.properties");
String tempPathString = this.getClass().getClassLoader().getResource("//").getPath();
tempPathString = tempPathString.replaceAll("bin", "Config");
System.out.println();
System.out.println(tempPathString);
FileInputStream fip = new FileInputStream(tempPathString+"config.properties");
properties.load(fip);
Iterator<String> propertiesIterator = properties.stringPropertyNames().iterator();
while (propertiesIterator.hasNext()) {
String key = propertiesIterator.next();
System.out.println(key+"="+properties.getProperty(key));
}
fip.close();
获取当前路径:String tempPathString = this.getClass().getClassLoader().getResource("//").getPath();
properties类读取配置文件:properties.getProperty(key)); 读取键值对
6.string的replace()方法, tempPathString = tempPathString.replaceAll("bin", "Config");
7.创建线程是消耗时间的,大概2毫秒,2millsecond。
执行任何一个方法也要消耗时间的。
long beginTime = System.currentTimeMillis();
System.out.println("begin:"+beginTime);
int i = 0;
while(i<100)
{
i++;
System.out.println(i);
}
// MyThread3 myThread3 = new MyThread3();
// myThread3.start();
System.out.println("end,UseTime:"+(System.currentTimeMillis()-beginTime));
8.最近在工作上用到了一个静态方法,跟同事交流的时候,被一个问题给问倒了,只怪基础不扎实...
问题大致是这样的,“在多线程环境下,静态方法中的局部变量会不会被其它线程给污染掉?”;
我当时的想法:方法中的局部变量在运行的时候,是存在JAVA栈中的,方法运行结束,局部变量也就都弹光了,理论上单线程的话是不会有问题的,我之所以不知道,是因为不
清楚在JAVA内存模型中,一个线程对应一个栈,还是多个线程共享一个栈...
其实如果知道每个线程都有一个自己的JAVA栈的话,问题也就很清楚了,不会被其它线程给污染掉;
当然,问题并不能止于此,这个问题已经暴露出自己对这方面比较薄弱,因此打算对JAVA内存模型和多线程并发问题做个小小总结;
JAVA栈:每个线程都有一个自己的JAVA栈;存放的一般是方法的局部变量,方法出口信息等;方法调用过程中,自动压栈出栈;ps:栈空间大小是有限制的;
http://www.cnblogs.com/chenpi/p/5159558.html
9.文件输入输出的几个问题,深入理解:
bufferoutputstream输出内容时,buffer byte【】数组问题,我们都知道用buffer的输入输出时,是先把内容缓存到byte【】字节数组里,然后一并输出。
这时,如果byte[]数组设置的过大,会导致将byte【】输出到另一个文件时,另一个文件盒byte【】数组一样大。因为多余的内容被空字符填充了。
FileInputStream fips = new FileInputStream(sourcePath);
BufferedInputStream bfips = new BufferedInputStream(fips);
byte[] byteArray = new byte[1024*30];
FileOutputStream fops = new FileOutputStream(destPath);
BufferedOutputStream bfops = new BufferedOutputStream(fops);
int bufferCount = 0;
while(-1 != bfips.read(byteArray))
{
bufferCount++;
System.out.println("execute buffercount:"+bufferCount);
bfops.write(byteArray);
}
10.如果文件不存在,创建新文件
if(!destFile.exists())
{
System.out.println("dest file not exist");
destFile.createNewFile();
}
2017.2.6