今天星期五,参加培训的第二十二天,一如往常,早上吃了饭就到教室开始看书,然后就没有什么了,今天好像终于把第一本书看完了。
然后上课,老师继续讲昨天的反射,好像是反射方法了:代码如下:
package am;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class ReflectMethodMain {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class<?> o = Class.forName("am.ReflectMethod");
Constructor<?>[] cons = o.getDeclaredConstructors();
for(int i=0;i<cons.length;i++) {
int k= 0;
String str ="";
int j= cons[i].getParameterCount();
if(j==0) {
}else {
for( ;k<j-1;k++) {
str+=cons[i].getParameters()[k]+",";
}
str+=cons[i].getParameters()[k];
}
System.out.println(cons[i].getName()+"("+str+")");
}
Object reflectMethod = o.newInstance();
Method method1 = o.getMethod("exeMethod",Class.forName("java.lang.String"));
method1.invoke(reflectMethod, "哈哈");
}
}
对,昨天把那本书年完了,又看了一下课本,反正好多东西,比如,窗口布局有好多种,嗯,别的什么网络什么玩意的一点都没看懂,行吧,算是眼熟一下,然后就是正则表达式了,代码如下:
package pm;
public class ZhengZe {
//[abc]:表示可能是a,或b或c
//[^abc]:不是其中一个
//[a-zA-Z]英文字母
//[0-9]:数字
//.:匹配任意字符
//\d:表示数字
//\D:非数字
//\s:表示空字符组成[\t\n\r\x\f]
//\S:表示非空字符[^\s]
//\w:表示字母数字下划线
//?:出现0、1次
//+:出现1、多次
//*:表示出现0、1、多次
//{n}出现n次
//{n,m}n-m次
//{n,}n n以上
//XY XY都是表达式
//X|Y:表示X或Y
public static void main(String[] args) {
String s0 = "23:59:59";
String r0="^([0-1]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)$";
System.out.println(s0.matches(r0));
String l0="11112233445";
// String o0="\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d";
String o1="^1\\d{10}$";
System.out.println(l0.matches(o1));
String s1 = "foof";
String r1="food|f";
System.out.println(s1.matches(r1));//false
}
}
然后实现一个不需要优先级的+-*/代码如下:
package pm;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
import java.util.Scanner;
public class ReflectArithmetic {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
System.out.println("请输入要计算的表达式:");
Scanner input = new Scanner(System.in);
String arithmeticExpression = input.nextLine();
String[] number;
number = arithmeticExpression.split("[+/*-]");
double firstNumber = Double.parseDouble(number[0]);
String s=arithmeticExpression.replaceAll("[0-9]", "");
char[] operator = s.toCharArray();
URL url = new URL("file:///G:/eclipse_workspace/180330/bin/");
URL[] urls = new URL[]{url};
URLClassLoader load = new URLClassLoader(urls);
Class<?> ReflectTest = load.loadClass("pm.Arithmetic");
Object reflectClass = ReflectTest.newInstance();
for(int i=0;i<operator.length;i++) {
if(operator[i]=='+') {
Method add = ReflectTest.getMethod("add",double.class,double.class);
firstNumber=(double) add.invoke(reflectClass,firstNumber,Double.parseDouble(number[i+1]));
} else if(operator[i]=='-') {
Method add = ReflectTest.getMethod("subtract",double.class,double.class);
firstNumber=(double) add.invoke(reflectClass,firstNumber,Double.parseDouble(number[i+1]));
} else if(operator[i]=='*') {
Method add = ReflectTest.getMethod("multiply",double.class,double.class);
firstNumber=(double) add.invoke(reflectClass,firstNumber,Double.parseDouble(number[i+1]));
} else if(operator[i]=='/') {
Method add = ReflectTest.getMethod("divide",double.class,double.class);
firstNumber=(double) add.invoke(reflectClass,firstNumber,Double.parseDouble(number[i+1]));
}
}
System.out.println(firstNumber);
// System.out.println(Arrays.toString(number));
// System.out.println(s);
}
}
好了吧,今天还看了一下范型,还有集合框架,又叫数据结构,嗯,总结如下:
set :不重复,list可重复vector安全的arraylist,queue队列先进先出map键值对hashtable安全的hashmap用ConcurrentHashMap代替。
tree排好序的重写comparable自定义排序 linked按插入顺序或修改顺序 排序。
好了,就这样吧,没有什么好说的了,结束 。