单类型导入(single-type-import),例如import java.io.File;
按需类型导入(type-import-on-demand),例如 import java.io.*;
关于这两种导入类型大家各有所爱,众说纷纭。这里分析一下这两种导入类型的大致工作原理供大家参考。
单类型导入比较好理解,仅仅导入一个public类或者接口。而对于按需类型导入,有人误解为导入一个包下的所有类,其实不然,看名字就知道,他只会按需导入,也就是说它并非导入整个包,而仅仅导入当前类需要使用的类。
既然如此是不是就可以放心的使用按需类型导入呢?非也,非也。因为单类型导入和按需类型导入对类文件的定位算法是不一样的。
java编译器会从启动目录(bootstrap),扩展目录(extension)和用户类路径下去定位需要导入的类,而这些目录仅仅是给出了类的顶层目录。编译器的类文件定位方法大致可以理解为如下公式:
顶层路径名 \ 包名 \ 文件名。class = 绝对路径
对于单类型导入很简单,因为包名和文件名都已经确定,所以可以一次性查找定位。
对于按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类文件查找定 ......
1、Timer介绍
建立任务:使用Timer调度的任务应该继承TimerTask抽象类,该类实现Runnable接口,因些具备多线程的能力,实现该接口的run方法,该方法是需要高度的任务执行体。
调度任务:调度任务通过Timer类完成,调度任务通过schedul方法完成,查一下java doc文档:
Java代码
void schedule(TimerTask task, Date time)
安排在指定的时间执行指定的任务。
void schedule(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定延迟执行。
void schedule(TimerTask task, long delay)
安排在指定延迟后执行指定的任务。
void schedule(TimerTask task, long delay, long period)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
2、Quartz介绍
作 ......
一. stream
代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型:
1 以字节为导向的stream
以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型:
Input stream
1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
2) StringBufferInputStream:把一个String对象作为InputStream
3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作
4) PipedInputStream:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream:把多个InputStream合并为一个InputStream
Out stream
1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中
2) FileOutputStream:把信息存入文件中
3) PipedOutputStream:实现了pipe的概念,主要在线程中使用
4) SequenceOutputStream:把多个OutStream合并为一个OutStream
2 以Unicode字符为导向的stream
以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导 ......
for(int i=0;i<string.length();i++)
{
char x=string.CharAt(i);
if(Character.isDigit(i)==true){
//x类型转换然后统计
}
}
如下可以将字母与数字分离出来
用正则!
String str="200Minute";
String str2="300.25Hour";
String regex="[a-zA-Z]";
String bb=str2.replaceAll(regex, "");
String cc=str2.substring(bb.length(), str2.length());
System.out.println(bb+" "+cc); ......
java中判断字符串是否为数字的三种方法
1>用JAVA自带的函数
public static boolean isNumeric(String str){
for (int i = str.length();--i>=0;){
if (!Character.isDigit(str.charAt(i))){
return false;
}
}
return true;
}
2>用正则表达式
public static boolean isNumeric(String str){
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}
3>用ascii码
public static boolean isNumeric(String str){
for(int i=str.length();--i>=0;){
int chr=str.charAt(i);
if(chr<48 || chr>57)
return false;
}
return true;
}
4>用异常
public static boolean isNumeric(String str){
try{
Integer.parseInt(str);
}
catch(NumberFormatException n ......
(1).public static String StrReplace(String rStr, String rFix, String rRep)
{
int l = 0;
String gRtnStr = rStr;
do
{
l = rStr.indexOf(rFix,l);
if(l == -1) break;
gRtnStr = rStr.substring(0,l) + rRep + rStr.substring(l + rFix.length());
l += rRep.length();
rStr = gRtnStr;
......