From d9e8de8d52c3db03ebf3109cb020f92ae4d3e49b Mon Sep 17 00:00:00 2001 From: liangduoduo666666 <798277403@qq.com> Date: Thu, 13 Apr 2017 00:33:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=AC=AC=E4=BA=94=E5=91=A8?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=EF=BC=8C=E5=B9=B6=E8=B0=83=E6=95=B4=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhouliang/week2/litestruts/struts.xml | 11 - .../src/{week1 => basic}/ArrayList.java | 2 +- .../src/{week1 => basic}/ArrayListTest.java | 2 +- .../src/{week1 => basic}/BinaryTree.java | 2 +- .../src/{week1 => basic}/BinaryTreeNode.java | 2 +- .../src/{week1 => basic}/Iterator.java | 2 +- .../{week4 => basic}/LRU/LRUPageFrame.java | 2 +- .../LRU/LRUPageFrameTest.java | 2 +- .../{week4 => basic}/LRU/MyLRUPageFrame.java | 2 +- .../src/{week1 => basic}/LinkedList.java | 4 +- .../src/{week1 => basic}/LinkedListTest.java | 2 +- .../798277403/src/{week1 => basic}/List.java | 2 +- .../798277403/src/{week1 => basic}/Queue.java | 2 +- .../src/{week1 => basic}/QueueTest.java | 2 +- .../798277403/src/{week1 => basic}/Stack.java | 2 +- .../src/{week1 => basic}/StackTest.java | 2 +- .../src/{week2 => basic}/array/ArrayUtil.java | 2 +- .../{week2 => basic}/array/ArrayUtilTest.java | 2 +- .../linkedlist/LinkedList.java | 2 +- .../linkedlist/LinkedListTest.java | 4 +- .../src/{week3 => basic}/linkedlist/List.java | 2 +- .../798277403/src/basic/stack/StackUtil.java | 116 +++++++++++ .../src/basic/stack/StackUtilTest.java | 77 +++++++ .../{week3 => download}/DownloadThread.java | 6 +- .../{week3 => download}/FileDownloader.java | 8 +- .../{week3 => download}/api/Connection.java | 4 +- .../api/ConnectionException.java | 2 +- .../api/ConnectionManager.java | 2 +- .../api/DownloadListener.java | 2 +- .../impl/ConnectionImpl.java | 8 +- .../impl/ConnectionManagerImpl.java | 8 +- .../test/ConnectionTest.java | 9 +- .../test/FileDownloaderTest.java | 11 +- .../{week2 => }/litestruts/LoginAction.java | 2 +- .../src/{week2 => }/litestruts/Struts.java | 4 +- .../{week2 => }/litestruts/StrutsTest.java | 13 +- .../src/{week2 => }/litestruts/View.java | 2 +- .../src/mini_jvm/clz/AccessFlag.java | 25 +++ .../798277403/src/mini_jvm/clz/ClassFile.java | 65 ++++++ .../src/mini_jvm/clz/ClassIndex.java | 19 ++ .../src/mini_jvm/constant/ClassInfo.java | 24 +++ .../src/mini_jvm/constant/ConstantInfo.java | 29 +++ .../src/mini_jvm/constant/ConstantPool.java | 27 +++ .../src/mini_jvm/constant/FieldRefInfo.java | 54 +++++ .../src/mini_jvm/constant/MethodRefInfo.java | 55 +++++ .../mini_jvm/constant/NameAndTypeInfo.java | 45 +++++ .../mini_jvm/constant/NullConstantInfo.java | 13 ++ .../src/mini_jvm/constant/StringInfo.java | 26 +++ .../src/mini_jvm/constant/UTF8Info.java | 32 +++ .../src/mini_jvm/loader/ByteCodeIterator.java | 55 +++++ .../src/mini_jvm/loader/ClassFileLoader.java | 94 +++++++++ .../src/mini_jvm/loader/ClassFileParser.java | 130 ++++++++++++ .../mini_jvm/test/ClassFileloaderTest.java | 189 ++++++++++++++++++ .../src/mini_jvm/test/EmployeeV1.java | 28 +++ group24/798277403/src/mini_jvm/util/Util.java | 22 ++ .../798277403/src/week2/litestruts/struts.xml | 11 - .../src/week4/loader/ClassFileLoader.java | 67 ------- .../src/week4/test/ClassFileloaderTest.java | 84 -------- .../798277403/src/week4/test/EmployeeV1.java | 29 --- 59 files changed, 1187 insertions(+), 265 deletions(-) delete mode 100644 group24/798277403/out/production/zhouliang/week2/litestruts/struts.xml rename group24/798277403/src/{week1 => basic}/ArrayList.java (99%) rename group24/798277403/src/{week1 => basic}/ArrayListTest.java (98%) rename group24/798277403/src/{week1 => basic}/BinaryTree.java (99%) rename group24/798277403/src/{week1 => basic}/BinaryTreeNode.java (99%) rename group24/798277403/src/{week1 => basic}/Iterator.java (90%) rename group24/798277403/src/{week4 => basic}/LRU/LRUPageFrame.java (99%) rename group24/798277403/src/{week4 => basic}/LRU/LRUPageFrameTest.java (98%) rename group24/798277403/src/{week4 => basic}/LRU/MyLRUPageFrame.java (99%) rename group24/798277403/src/{week1 => basic}/LinkedList.java (98%) rename group24/798277403/src/{week1 => basic}/LinkedListTest.java (98%) rename group24/798277403/src/{week1 => basic}/List.java (93%) rename group24/798277403/src/{week1 => basic}/Queue.java (97%) rename group24/798277403/src/{week1 => basic}/QueueTest.java (97%) rename group24/798277403/src/{week1 => basic}/Stack.java (97%) rename group24/798277403/src/{week1 => basic}/StackTest.java (97%) rename group24/798277403/src/{week2 => basic}/array/ArrayUtil.java (99%) rename group24/798277403/src/{week2 => basic}/array/ArrayUtilTest.java (99%) rename group24/798277403/src/{week3 => basic}/linkedlist/LinkedList.java (99%) rename group24/798277403/src/{week3 => basic}/linkedlist/LinkedListTest.java (95%) rename group24/798277403/src/{week3 => basic}/linkedlist/List.java (89%) create mode 100644 group24/798277403/src/basic/stack/StackUtil.java create mode 100644 group24/798277403/src/basic/stack/StackUtilTest.java rename group24/798277403/src/{week3 => download}/DownloadThread.java (83%) rename group24/798277403/src/{week3 => download}/FileDownloader.java (96%) rename group24/798277403/src/{week3 => download}/api/Connection.java (80%) rename group24/798277403/src/{week3 => download}/api/ConnectionException.java (85%) rename group24/798277403/src/{week3 => download}/api/ConnectionManager.java (89%) rename group24/798277403/src/{week3 => download}/api/DownloadListener.java (76%) rename group24/798277403/src/{week3 => download}/impl/ConnectionImpl.java (91%) rename group24/798277403/src/{week3 => download}/impl/ConnectionManagerImpl.java (57%) rename group24/798277403/src/{week3 => download}/test/ConnectionTest.java (88%) rename group24/798277403/src/{week3 => download}/test/FileDownloaderTest.java (86%) rename group24/798277403/src/{week2 => }/litestruts/LoginAction.java (97%) rename group24/798277403/src/{week2 => }/litestruts/Struts.java (98%) rename group24/798277403/src/{week2 => }/litestruts/StrutsTest.java (84%) rename group24/798277403/src/{week2 => }/litestruts/View.java (93%) create mode 100644 group24/798277403/src/mini_jvm/clz/AccessFlag.java create mode 100644 group24/798277403/src/mini_jvm/clz/ClassFile.java create mode 100644 group24/798277403/src/mini_jvm/clz/ClassIndex.java create mode 100644 group24/798277403/src/mini_jvm/constant/ClassInfo.java create mode 100644 group24/798277403/src/mini_jvm/constant/ConstantInfo.java create mode 100644 group24/798277403/src/mini_jvm/constant/ConstantPool.java create mode 100644 group24/798277403/src/mini_jvm/constant/FieldRefInfo.java create mode 100644 group24/798277403/src/mini_jvm/constant/MethodRefInfo.java create mode 100644 group24/798277403/src/mini_jvm/constant/NameAndTypeInfo.java create mode 100644 group24/798277403/src/mini_jvm/constant/NullConstantInfo.java create mode 100644 group24/798277403/src/mini_jvm/constant/StringInfo.java create mode 100644 group24/798277403/src/mini_jvm/constant/UTF8Info.java create mode 100644 group24/798277403/src/mini_jvm/loader/ByteCodeIterator.java create mode 100644 group24/798277403/src/mini_jvm/loader/ClassFileLoader.java create mode 100644 group24/798277403/src/mini_jvm/loader/ClassFileParser.java create mode 100644 group24/798277403/src/mini_jvm/test/ClassFileloaderTest.java create mode 100644 group24/798277403/src/mini_jvm/test/EmployeeV1.java create mode 100644 group24/798277403/src/mini_jvm/util/Util.java delete mode 100644 group24/798277403/src/week2/litestruts/struts.xml delete mode 100644 group24/798277403/src/week4/loader/ClassFileLoader.java delete mode 100644 group24/798277403/src/week4/test/ClassFileloaderTest.java delete mode 100644 group24/798277403/src/week4/test/EmployeeV1.java diff --git a/group24/798277403/out/production/zhouliang/week2/litestruts/struts.xml b/group24/798277403/out/production/zhouliang/week2/litestruts/struts.xml deleted file mode 100644 index 54550a4174..0000000000 --- a/group24/798277403/out/production/zhouliang/week2/litestruts/struts.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - /jsp/homepage.jsp - /jsp/showLogin.jsp - - - /jsp/welcome.jsp - /jsp/error.jsp - - diff --git a/group24/798277403/src/week1/ArrayList.java b/group24/798277403/src/basic/ArrayList.java similarity index 99% rename from group24/798277403/src/week1/ArrayList.java rename to group24/798277403/src/basic/ArrayList.java index 03257803df..436ca1f9f2 100644 --- a/group24/798277403/src/week1/ArrayList.java +++ b/group24/798277403/src/basic/ArrayList.java @@ -1,4 +1,4 @@ -package week1; +package basic; import java.util.Arrays; diff --git a/group24/798277403/src/week1/ArrayListTest.java b/group24/798277403/src/basic/ArrayListTest.java similarity index 98% rename from group24/798277403/src/week1/ArrayListTest.java rename to group24/798277403/src/basic/ArrayListTest.java index 98e30a222a..c50af7befa 100644 --- a/group24/798277403/src/week1/ArrayListTest.java +++ b/group24/798277403/src/basic/ArrayListTest.java @@ -1,4 +1,4 @@ -package week1; +package basic; import org.junit.Assert; import org.junit.Before; diff --git a/group24/798277403/src/week1/BinaryTree.java b/group24/798277403/src/basic/BinaryTree.java similarity index 99% rename from group24/798277403/src/week1/BinaryTree.java rename to group24/798277403/src/basic/BinaryTree.java index 3c480dc012..c2d5bb2c24 100644 --- a/group24/798277403/src/week1/BinaryTree.java +++ b/group24/798277403/src/basic/BinaryTree.java @@ -1,4 +1,4 @@ -package week1; +package basic; /** * Created by zhouliang on 2017-03-11. diff --git a/group24/798277403/src/week1/BinaryTreeNode.java b/group24/798277403/src/basic/BinaryTreeNode.java similarity index 99% rename from group24/798277403/src/week1/BinaryTreeNode.java rename to group24/798277403/src/basic/BinaryTreeNode.java index e680d5ed15..599b2b1ca8 100644 --- a/group24/798277403/src/week1/BinaryTreeNode.java +++ b/group24/798277403/src/basic/BinaryTreeNode.java @@ -1,4 +1,4 @@ -package week1; +package basic; /** * 自己实现的BinaryTreeNode diff --git a/group24/798277403/src/week1/Iterator.java b/group24/798277403/src/basic/Iterator.java similarity index 90% rename from group24/798277403/src/week1/Iterator.java rename to group24/798277403/src/basic/Iterator.java index 73ba87c125..4c0fedf988 100644 --- a/group24/798277403/src/week1/Iterator.java +++ b/group24/798277403/src/basic/Iterator.java @@ -1,4 +1,4 @@ -package week1; +package basic; /** * 自己实现的Iterator diff --git a/group24/798277403/src/week4/LRU/LRUPageFrame.java b/group24/798277403/src/basic/LRU/LRUPageFrame.java similarity index 99% rename from group24/798277403/src/week4/LRU/LRUPageFrame.java rename to group24/798277403/src/basic/LRU/LRUPageFrame.java index cbbb26fc7f..e69e051321 100644 --- a/group24/798277403/src/week4/LRU/LRUPageFrame.java +++ b/group24/798277403/src/basic/LRU/LRUPageFrame.java @@ -1,4 +1,4 @@ -package week4.LRU; +package basic.LRU; /** * Created by zhouliang on 2017-04-04. diff --git a/group24/798277403/src/week4/LRU/LRUPageFrameTest.java b/group24/798277403/src/basic/LRU/LRUPageFrameTest.java similarity index 98% rename from group24/798277403/src/week4/LRU/LRUPageFrameTest.java rename to group24/798277403/src/basic/LRU/LRUPageFrameTest.java index 0b6bdf2c25..4993f42e75 100644 --- a/group24/798277403/src/week4/LRU/LRUPageFrameTest.java +++ b/group24/798277403/src/basic/LRU/LRUPageFrameTest.java @@ -1,4 +1,4 @@ -package week4.LRU; +package basic.LRU; import org.junit.Assert; import org.junit.Test; diff --git a/group24/798277403/src/week4/LRU/MyLRUPageFrame.java b/group24/798277403/src/basic/LRU/MyLRUPageFrame.java similarity index 99% rename from group24/798277403/src/week4/LRU/MyLRUPageFrame.java rename to group24/798277403/src/basic/LRU/MyLRUPageFrame.java index 9e720d8589..b2387dbd81 100644 --- a/group24/798277403/src/week4/LRU/MyLRUPageFrame.java +++ b/group24/798277403/src/basic/LRU/MyLRUPageFrame.java @@ -1,4 +1,4 @@ -package week4.LRU; +package basic.LRU; /** * Created by zhouliang on 2017-04-04. diff --git a/group24/798277403/src/week1/LinkedList.java b/group24/798277403/src/basic/LinkedList.java similarity index 98% rename from group24/798277403/src/week1/LinkedList.java rename to group24/798277403/src/basic/LinkedList.java index e0160d0e5f..30d0b4a099 100644 --- a/group24/798277403/src/week1/LinkedList.java +++ b/group24/798277403/src/basic/LinkedList.java @@ -1,4 +1,4 @@ -package week1; +package basic; /** * 自己实现的LinkedList @@ -228,7 +228,7 @@ public void removeRange(int min, int max){ * 现要求生成新链表C,其元素为当前链表和list中元素的交集,且表C中的元素有依值递增有序排列 * @param list */ - public LinkedList intersection( LinkedList list){ + public LinkedList intersection(LinkedList list){ return null; } } diff --git a/group24/798277403/src/week1/LinkedListTest.java b/group24/798277403/src/basic/LinkedListTest.java similarity index 98% rename from group24/798277403/src/week1/LinkedListTest.java rename to group24/798277403/src/basic/LinkedListTest.java index 9a8a9d936d..0611a1ddb7 100644 --- a/group24/798277403/src/week1/LinkedListTest.java +++ b/group24/798277403/src/basic/LinkedListTest.java @@ -1,4 +1,4 @@ -package week1; +package basic; import org.junit.Before; import org.junit.Test; diff --git a/group24/798277403/src/week1/List.java b/group24/798277403/src/basic/List.java similarity index 93% rename from group24/798277403/src/week1/List.java rename to group24/798277403/src/basic/List.java index 982885508f..c46d81d175 100644 --- a/group24/798277403/src/week1/List.java +++ b/group24/798277403/src/basic/List.java @@ -1,4 +1,4 @@ -package week1; +package basic; /** * 自己定义的List接口 diff --git a/group24/798277403/src/week1/Queue.java b/group24/798277403/src/basic/Queue.java similarity index 97% rename from group24/798277403/src/week1/Queue.java rename to group24/798277403/src/basic/Queue.java index 184f3a5336..371f2f9340 100644 --- a/group24/798277403/src/week1/Queue.java +++ b/group24/798277403/src/basic/Queue.java @@ -1,4 +1,4 @@ -package week1; +package basic; /** * 自己实现的Queue,用自己的LinkedList实现 diff --git a/group24/798277403/src/week1/QueueTest.java b/group24/798277403/src/basic/QueueTest.java similarity index 97% rename from group24/798277403/src/week1/QueueTest.java rename to group24/798277403/src/basic/QueueTest.java index b5a333f64d..8af2de5ada 100644 --- a/group24/798277403/src/week1/QueueTest.java +++ b/group24/798277403/src/basic/QueueTest.java @@ -1,4 +1,4 @@ -package week1; +package basic; import org.junit.Before; import org.junit.Test; diff --git a/group24/798277403/src/week1/Stack.java b/group24/798277403/src/basic/Stack.java similarity index 97% rename from group24/798277403/src/week1/Stack.java rename to group24/798277403/src/basic/Stack.java index f85aa2ada5..e6351da277 100644 --- a/group24/798277403/src/week1/Stack.java +++ b/group24/798277403/src/basic/Stack.java @@ -1,4 +1,4 @@ -package week1; +package basic; /** * 自己实现的Stack diff --git a/group24/798277403/src/week1/StackTest.java b/group24/798277403/src/basic/StackTest.java similarity index 97% rename from group24/798277403/src/week1/StackTest.java rename to group24/798277403/src/basic/StackTest.java index f4213d66d3..921560a0f0 100644 --- a/group24/798277403/src/week1/StackTest.java +++ b/group24/798277403/src/basic/StackTest.java @@ -1,4 +1,4 @@ -package week1; +package basic; import org.junit.Before; import org.junit.Test; diff --git a/group24/798277403/src/week2/array/ArrayUtil.java b/group24/798277403/src/basic/array/ArrayUtil.java similarity index 99% rename from group24/798277403/src/week2/array/ArrayUtil.java rename to group24/798277403/src/basic/array/ArrayUtil.java index 04c03f95e0..e29a4845bf 100644 --- a/group24/798277403/src/week2/array/ArrayUtil.java +++ b/group24/798277403/src/basic/array/ArrayUtil.java @@ -1,4 +1,4 @@ -package week2.array; +package basic.array; import java.util.Arrays; diff --git a/group24/798277403/src/week2/array/ArrayUtilTest.java b/group24/798277403/src/basic/array/ArrayUtilTest.java similarity index 99% rename from group24/798277403/src/week2/array/ArrayUtilTest.java rename to group24/798277403/src/basic/array/ArrayUtilTest.java index 77c99242fa..792c778e75 100644 --- a/group24/798277403/src/week2/array/ArrayUtilTest.java +++ b/group24/798277403/src/basic/array/ArrayUtilTest.java @@ -1,4 +1,4 @@ -package week2.array; +package basic.array; import org.junit.Assert; import org.junit.Before; diff --git a/group24/798277403/src/week3/linkedlist/LinkedList.java b/group24/798277403/src/basic/linkedlist/LinkedList.java similarity index 99% rename from group24/798277403/src/week3/linkedlist/LinkedList.java rename to group24/798277403/src/basic/linkedlist/LinkedList.java index ad4560ad7d..53c9200412 100644 --- a/group24/798277403/src/week3/linkedlist/LinkedList.java +++ b/group24/798277403/src/basic/linkedlist/LinkedList.java @@ -1,4 +1,4 @@ -package week3.linkedlist; +package basic.linkedlist; /** diff --git a/group24/798277403/src/week3/linkedlist/LinkedListTest.java b/group24/798277403/src/basic/linkedlist/LinkedListTest.java similarity index 95% rename from group24/798277403/src/week3/linkedlist/LinkedListTest.java rename to group24/798277403/src/basic/linkedlist/LinkedListTest.java index fa648edfc6..4f74499501 100644 --- a/group24/798277403/src/week3/linkedlist/LinkedListTest.java +++ b/group24/798277403/src/basic/linkedlist/LinkedListTest.java @@ -1,4 +1,4 @@ -package week3.linkedlist; +package basic.linkedlist; import org.junit.Before; import org.junit.Test; @@ -8,7 +8,7 @@ */ public class LinkedListTest { - private week3.linkedlist.LinkedList myLinkedList = new week3.linkedlist.LinkedList<>(); + private LinkedList myLinkedList = new LinkedList<>(); private java.util.LinkedList systemLinkedList = new java.util.LinkedList<>(); diff --git a/group24/798277403/src/week3/linkedlist/List.java b/group24/798277403/src/basic/linkedlist/List.java similarity index 89% rename from group24/798277403/src/week3/linkedlist/List.java rename to group24/798277403/src/basic/linkedlist/List.java index a3245a5eb9..3b9dfb132a 100644 --- a/group24/798277403/src/week3/linkedlist/List.java +++ b/group24/798277403/src/basic/linkedlist/List.java @@ -1,4 +1,4 @@ -package week3.linkedlist; +package basic.linkedlist; /** * 自己定义的List接口 diff --git a/group24/798277403/src/basic/stack/StackUtil.java b/group24/798277403/src/basic/stack/StackUtil.java new file mode 100644 index 0000000000..7e5c157306 --- /dev/null +++ b/group24/798277403/src/basic/stack/StackUtil.java @@ -0,0 +1,116 @@ +package basic.stack; + +import java.util.Stack; + +/** + * Created by zhouliang on 2017-04-08. + */ +class StackUtil { + /** + * 假设栈中的元素是Integer, 从栈顶到栈底是 : 5,4,3,2,1 调用该方法后, 元素次序变为: 1,2,3,4,5 + * 注意:只能使用Stack的基本操作,即push,pop,peek,isEmpty, 可以使用另外一个栈来辅助 + */ + public static void reverse(Stack s) { + if(s.empty()){ + return; + } + int i = getAndRemoveBottom(s); // 依次返回1、2、3 + reverse(s); + s.push(i); + } + + //移除并返回当前的栈底元素 + private static int getAndRemoveBottom(Stack s){ + int result = s.pop(); + if(s.empty()){ + return result; + }else{ + int bottom = getAndRemoveBottom(s); + s.push(result); + return bottom; + } + } + + + + /** + * 删除栈中的某个元素 注意:只能使用Stack的基本操作,即push,pop,peek,isEmpty, 可以使用另外一个栈来辅助 + * @param o + */ + public static void remove(Stack s,Object o) { + if(s.empty()){ + return; + } + Object temp = s.pop(); + if(temp == o){ + return; + } + remove(s,o); + s.push(temp); + } + + /** + * 从栈顶取得len个元素, 原来的栈中元素保持不变 + * 注意:只能使用Stack的基本操作,即push,pop,peek,isEmpty, 可以使用另外一个栈来辅助 + * @param len + * @return + */ + public static Object[] getTop(Stack s,int len) { + Object[] result = new Object[len]; + int index = 0; + while(index s, int index){ + Object temp = s.pop(); + index--; + if(0 == index){ + s.push(temp); + return temp; + } + Object result = getIndex(s,index); + s.push(temp); + return result; + } + + + /** + * 字符串s 可能包含这些字符: ( ) [ ] { }, a,b,c... x,yz + * 使用堆栈检查字符串s中的括号是不是成对出现的。 + * 例如s = "([e{d}f])" , 则该字符串中的括号是成对出现, 该方法返回true + * 如果 s = "([b{x]y})", 则该字符串中的括号不是成对出现的, 该方法返回false; + * @param s + * @return + */ + public static boolean isValidPairs(String s){ + char[] chars = s.toCharArray(); + Stack stack = new Stack(); + for(char c : chars){ + if(c=='(' || c=='[' || c=='{'){ + stack.push(c); + }else if(c==')'){ + char top = stack.peek(); + if(top == '('){ + stack.pop(); + } + }else if(c==']'){ + char top = stack.peek(); + if(top == '['){ + stack.pop(); + } + }else if(c=='}'){ + char top = stack.peek(); + if(top == '{'){ + stack.pop(); + } + } + } + + return stack.empty(); + } +} diff --git a/group24/798277403/src/basic/stack/StackUtilTest.java b/group24/798277403/src/basic/stack/StackUtilTest.java new file mode 100644 index 0000000000..c5ecd1fcbe --- /dev/null +++ b/group24/798277403/src/basic/stack/StackUtilTest.java @@ -0,0 +1,77 @@ +package basic.stack; + +import org.junit.Test; + +import java.util.Stack; + +/** + * Created by zhouliang on 2017-04-08. + */ +public class StackUtilTest { + + @Test + public void testReverse(){ + Stack s = new Stack(); + s.push(1); + s.push(2); + s.push(3); + s.push(4); + s.push(5); + while(!s.isEmpty()){ + System.out.println(s.pop()); + } + s.push(1); + s.push(2); + s.push(3); + s.push(4); + s.push(5); + StackUtil.reverse(s); + while(!s.isEmpty()){ + System.out.println(s.pop()); + } + } + + @Test + public void remove(){ + Stack s = new Stack(); + s.push(1); + s.push(2); + s.push(3); + s.push(4); + s.push(5); + + StackUtil.remove(s,3); + while(!s.isEmpty()){ + System.out.println(s.pop()); + } + } + + @Test + public void getTop(){ + Stack s = new Stack(); + s.push(1); + s.push(2); + s.push(3); + s.push(4); + s.push(5); + + Object[] result = StackUtil.getTop(s,2); + while(!s.isEmpty()){ + System.out.println(s.pop()); + } + + for(Object o : result){ + System.out.println(o); + } + } + + @Test + public void isValidPairs(){ + String s = "([e{d}f])"; + String s1 = "([b{x]y})"; + boolean result = StackUtil.isValidPairs(s); + System.out.println(result); + boolean result1 = StackUtil.isValidPairs(s1); + System.out.println(result1); + } +} diff --git a/group24/798277403/src/week3/DownloadThread.java b/group24/798277403/src/download/DownloadThread.java similarity index 83% rename from group24/798277403/src/week3/DownloadThread.java rename to group24/798277403/src/download/DownloadThread.java index 6361f6b394..df55a6fee1 100644 --- a/group24/798277403/src/week3/DownloadThread.java +++ b/group24/798277403/src/download/DownloadThread.java @@ -1,7 +1,7 @@ -package week3; +package download; -import week3.api.Connection; +import download.api.Connection; import java.io.RandomAccessFile; import java.util.concurrent.CyclicBarrier; @@ -13,7 +13,7 @@ class DownloadThread extends Thread{ private int endPos; private CyclicBarrier barrier; private String localFile; - public DownloadThread( Connection conn, int startPos, int endPos, String localFile, CyclicBarrier barrier){ + public DownloadThread(Connection conn, int startPos, int endPos, String localFile, CyclicBarrier barrier){ this.conn = conn; this.startPos = startPos; diff --git a/group24/798277403/src/week3/FileDownloader.java b/group24/798277403/src/download/FileDownloader.java similarity index 96% rename from group24/798277403/src/week3/FileDownloader.java rename to group24/798277403/src/download/FileDownloader.java index 912fc47df3..928c1cf2e5 100644 --- a/group24/798277403/src/week3/FileDownloader.java +++ b/group24/798277403/src/download/FileDownloader.java @@ -1,9 +1,9 @@ -package week3; +package download; -import week3.api.Connection; -import week3.api.ConnectionManager; -import week3.api.DownloadListener; +import download.api.Connection; +import download.api.ConnectionManager; +import download.api.DownloadListener; import java.io.IOException; import java.io.RandomAccessFile; diff --git a/group24/798277403/src/week3/api/Connection.java b/group24/798277403/src/download/api/Connection.java similarity index 80% rename from group24/798277403/src/week3/api/Connection.java rename to group24/798277403/src/download/api/Connection.java index 9c67704364..49ee91a647 100644 --- a/group24/798277403/src/week3/api/Connection.java +++ b/group24/798277403/src/download/api/Connection.java @@ -1,4 +1,4 @@ -package week3.api; +package download.api; import java.io.IOException; @@ -9,7 +9,7 @@ public interface Connection { * @param endPos 结束位置 * @return */ - public byte[] read(int startPos,int endPos) throws IOException; + public byte[] read(int startPos, int endPos) throws IOException; /** * 得到数据内容的长度 * @return diff --git a/group24/798277403/src/week3/api/ConnectionException.java b/group24/798277403/src/download/api/ConnectionException.java similarity index 85% rename from group24/798277403/src/week3/api/ConnectionException.java rename to group24/798277403/src/download/api/ConnectionException.java index a92938a3aa..aa642f6adf 100644 --- a/group24/798277403/src/week3/api/ConnectionException.java +++ b/group24/798277403/src/download/api/ConnectionException.java @@ -1,4 +1,4 @@ -package week3.api; +package download.api; public class ConnectionException extends Exception { public ConnectionException(Exception e){ diff --git a/group24/798277403/src/week3/api/ConnectionManager.java b/group24/798277403/src/download/api/ConnectionManager.java similarity index 89% rename from group24/798277403/src/week3/api/ConnectionManager.java rename to group24/798277403/src/download/api/ConnectionManager.java index 4af7a12be1..de6df6d7c6 100644 --- a/group24/798277403/src/week3/api/ConnectionManager.java +++ b/group24/798277403/src/download/api/ConnectionManager.java @@ -1,4 +1,4 @@ -package week3.api; +package download.api; public interface ConnectionManager { /** diff --git a/group24/798277403/src/week3/api/DownloadListener.java b/group24/798277403/src/download/api/DownloadListener.java similarity index 76% rename from group24/798277403/src/week3/api/DownloadListener.java rename to group24/798277403/src/download/api/DownloadListener.java index da4eb7abc3..4119e46144 100644 --- a/group24/798277403/src/week3/api/DownloadListener.java +++ b/group24/798277403/src/download/api/DownloadListener.java @@ -1,4 +1,4 @@ -package week3.api; +package download.api; public interface DownloadListener { public void notifyFinished(); diff --git a/group24/798277403/src/week3/impl/ConnectionImpl.java b/group24/798277403/src/download/impl/ConnectionImpl.java similarity index 91% rename from group24/798277403/src/week3/impl/ConnectionImpl.java rename to group24/798277403/src/download/impl/ConnectionImpl.java index ca5c79c503..675d042a93 100644 --- a/group24/798277403/src/week3/impl/ConnectionImpl.java +++ b/group24/798277403/src/download/impl/ConnectionImpl.java @@ -1,7 +1,7 @@ -package week3.impl; +package download.impl; -import week3.api.Connection; -import week3.api.ConnectionException; +import download.api.Connection; +import download.api.ConnectionException; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -12,7 +12,7 @@ import java.net.URLConnection; import java.util.Arrays; -class ConnectionImpl implements Connection{ +class ConnectionImpl implements Connection { private URL url; diff --git a/group24/798277403/src/week3/impl/ConnectionManagerImpl.java b/group24/798277403/src/download/impl/ConnectionManagerImpl.java similarity index 57% rename from group24/798277403/src/week3/impl/ConnectionManagerImpl.java rename to group24/798277403/src/download/impl/ConnectionManagerImpl.java index 130d7e5aaa..e721d46194 100644 --- a/group24/798277403/src/week3/impl/ConnectionManagerImpl.java +++ b/group24/798277403/src/download/impl/ConnectionManagerImpl.java @@ -1,8 +1,8 @@ -package week3.impl; +package download.impl; -import week3.api.Connection; -import week3.api.ConnectionException; -import week3.api.ConnectionManager; +import download.api.Connection; +import download.api.ConnectionException; +import download.api.ConnectionManager; public class ConnectionManagerImpl implements ConnectionManager { diff --git a/group24/798277403/src/week3/test/ConnectionTest.java b/group24/798277403/src/download/test/ConnectionTest.java similarity index 88% rename from group24/798277403/src/week3/test/ConnectionTest.java rename to group24/798277403/src/download/test/ConnectionTest.java index 918f4d0707..cd8c9ca04d 100644 --- a/group24/798277403/src/week3/test/ConnectionTest.java +++ b/group24/798277403/src/download/test/ConnectionTest.java @@ -1,12 +1,13 @@ -package week3.test; +package download.test; +import download.api.Connection; +import download.api.ConnectionManager; +import download.impl.ConnectionManagerImpl; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import week3.api.Connection; -import week3.api.ConnectionManager; -import week3.impl.ConnectionManagerImpl; + public class ConnectionTest { diff --git a/group24/798277403/src/week3/test/FileDownloaderTest.java b/group24/798277403/src/download/test/FileDownloaderTest.java similarity index 86% rename from group24/798277403/src/week3/test/FileDownloaderTest.java rename to group24/798277403/src/download/test/FileDownloaderTest.java index 959796399b..f0337f6bc1 100644 --- a/group24/798277403/src/week3/test/FileDownloaderTest.java +++ b/group24/798277403/src/download/test/FileDownloaderTest.java @@ -1,12 +1,13 @@ -package week3.test; +package download.test; +import download.FileDownloader; +import download.api.ConnectionManager; +import download.api.DownloadListener; +import download.impl.ConnectionManagerImpl; import org.junit.After; import org.junit.Before; import org.junit.Test; -import week3.FileDownloader; -import week3.api.ConnectionManager; -import week3.api.DownloadListener; -import week3.impl.ConnectionManagerImpl; + public class FileDownloaderTest { diff --git a/group24/798277403/src/week2/litestruts/LoginAction.java b/group24/798277403/src/litestruts/LoginAction.java similarity index 97% rename from group24/798277403/src/week2/litestruts/LoginAction.java rename to group24/798277403/src/litestruts/LoginAction.java index f819fd3aa3..8c448e3630 100644 --- a/group24/798277403/src/week2/litestruts/LoginAction.java +++ b/group24/798277403/src/litestruts/LoginAction.java @@ -1,4 +1,4 @@ -package week2.litestruts; +package litestruts; /** * 这是一个用来展示登录的业务类, 其中的用户名和密码都是硬编码的。 diff --git a/group24/798277403/src/week2/litestruts/Struts.java b/group24/798277403/src/litestruts/Struts.java similarity index 98% rename from group24/798277403/src/week2/litestruts/Struts.java rename to group24/798277403/src/litestruts/Struts.java index 4063dcda68..2139dd8551 100644 --- a/group24/798277403/src/week2/litestruts/Struts.java +++ b/group24/798277403/src/litestruts/Struts.java @@ -1,4 +1,4 @@ -package week2.litestruts; +package litestruts; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; @@ -44,7 +44,7 @@ public static View runAction(String actionName, Map parameters) View view = new View(); try { db = documentBuilderFactory.newDocumentBuilder(); - Document document = db.parse("src/week2/litestruts/struts.xml"); + Document document = db.parse("src/litestruts/struts.xml"); NodeList nodeList = document.getElementsByTagName("action"); //遍历每一个action节点 diff --git a/group24/798277403/src/week2/litestruts/StrutsTest.java b/group24/798277403/src/litestruts/StrutsTest.java similarity index 84% rename from group24/798277403/src/week2/litestruts/StrutsTest.java rename to group24/798277403/src/litestruts/StrutsTest.java index 5c4379d912..868a78cdba 100644 --- a/group24/798277403/src/week2/litestruts/StrutsTest.java +++ b/group24/798277403/src/litestruts/StrutsTest.java @@ -1,4 +1,4 @@ -package week2.litestruts; +package litestruts; import org.junit.Assert; import org.junit.Test; @@ -7,9 +7,6 @@ import java.util.Map; - - - public class StrutsTest { @Test @@ -22,8 +19,8 @@ public void testLoginActionSuccess() { params.put("password","1234"); - View view = Struts.runAction(actionName,params); - + View view = Struts.runAction(actionName,params); + Assert.assertEquals("/jsp/homepage.jsp", view.getJsp()); Assert.assertEquals("login successful", view.getParameters().get("message")); } @@ -34,8 +31,8 @@ public void testLoginActionFailed() { Map params = new HashMap(); params.put("name","test"); params.put("password","123456"); //密码和预设的不一致 - - View view = Struts.runAction(actionName,params); + + View view = Struts.runAction(actionName,params); Assert.assertEquals("/jsp/showLogin.jsp", view.getJsp()); Assert.assertEquals("login failed,please check your user/pwd", view.getParameters().get("message")); diff --git a/group24/798277403/src/week2/litestruts/View.java b/group24/798277403/src/litestruts/View.java similarity index 93% rename from group24/798277403/src/week2/litestruts/View.java rename to group24/798277403/src/litestruts/View.java index 01a422a808..1eed614744 100644 --- a/group24/798277403/src/week2/litestruts/View.java +++ b/group24/798277403/src/litestruts/View.java @@ -1,4 +1,4 @@ -package week2.litestruts; +package litestruts; import java.util.Map; diff --git a/group24/798277403/src/mini_jvm/clz/AccessFlag.java b/group24/798277403/src/mini_jvm/clz/AccessFlag.java new file mode 100644 index 0000000000..b6717402da --- /dev/null +++ b/group24/798277403/src/mini_jvm/clz/AccessFlag.java @@ -0,0 +1,25 @@ +package mini_jvm.clz; + +public class AccessFlag { + private int flagValue; + + public AccessFlag(int value) { + this.flagValue = value; + } + + public int getFlagValue() { + return flagValue; + } + + public void setFlagValue(int flag) { + this.flagValue = flag; + } + + public boolean isPublicClass(){ + return (this.flagValue & 0x0001) != 0; + } + public boolean isFinalClass(){ + return (this.flagValue & 0x0010) != 0; + } + +} \ No newline at end of file diff --git a/group24/798277403/src/mini_jvm/clz/ClassFile.java b/group24/798277403/src/mini_jvm/clz/ClassFile.java new file mode 100644 index 0000000000..4cf756c090 --- /dev/null +++ b/group24/798277403/src/mini_jvm/clz/ClassFile.java @@ -0,0 +1,65 @@ +package mini_jvm.clz; + + +import mini_jvm.constant.ClassInfo; +import mini_jvm.constant.ConstantPool; + +public class ClassFile { + + private int minorVersion; + private int majorVersion; + private AccessFlag accessFlag; + private ClassIndex clzIndex; + private ConstantPool pool; + + public ClassIndex getClzIndex() { + return clzIndex; + } + public AccessFlag getAccessFlag() { + return accessFlag; + } + public void setAccessFlag(AccessFlag accessFlag) { + this.accessFlag = accessFlag; + } + public ConstantPool getConstantPool() { + return pool; + } + public int getMinorVersion() { + return minorVersion; + } + public void setMinorVersion(int minorVersion) { + this.minorVersion = minorVersion; + } + public int getMajorVersion() { + return majorVersion; + } + public void setMajorVersion(int majorVersion) { + this.majorVersion = majorVersion; + } + public void setConstPool(ConstantPool pool) { + this.pool = pool; + + } + public void setClassIndex(ClassIndex clzIndex) { + this.clzIndex = clzIndex; + } + + + public void print(){ + if(this.accessFlag.isPublicClass()){ + System.out.println("Access flag : public "); + } + System.out.println("Class Name:"+ getClassName()); + System.out.println("Super Class Name:"+ getSuperClassName()); + } + + private String getClassName(){ + int thisClassIndex = this.clzIndex.getThisClassIndex(); + ClassInfo thisClass = (ClassInfo)this.getConstantPool().getConstantInfo(thisClassIndex); + return thisClass.getClassName(); + } + private String getSuperClassName(){ + ClassInfo superClass = (ClassInfo)this.getConstantPool().getConstantInfo(this.clzIndex.getSuperClassIndex()); + return superClass.getClassName(); + } +} diff --git a/group24/798277403/src/mini_jvm/clz/ClassIndex.java b/group24/798277403/src/mini_jvm/clz/ClassIndex.java new file mode 100644 index 0000000000..dcc59908f0 --- /dev/null +++ b/group24/798277403/src/mini_jvm/clz/ClassIndex.java @@ -0,0 +1,19 @@ +package mini_jvm.clz; + +public class ClassIndex { + private int thisClassIndex; + private int superClassIndex; + + public int getThisClassIndex() { + return thisClassIndex; + } + public void setThisClassIndex(int thisClassIndex) { + this.thisClassIndex = thisClassIndex; + } + public int getSuperClassIndex() { + return superClassIndex; + } + public void setSuperClassIndex(int superClassIndex) { + this.superClassIndex = superClassIndex; + } +} \ No newline at end of file diff --git a/group24/798277403/src/mini_jvm/constant/ClassInfo.java b/group24/798277403/src/mini_jvm/constant/ClassInfo.java new file mode 100644 index 0000000000..ed39387440 --- /dev/null +++ b/group24/798277403/src/mini_jvm/constant/ClassInfo.java @@ -0,0 +1,24 @@ +package mini_jvm.constant; + +public class ClassInfo extends ConstantInfo { + private int type = ConstantInfo.CLASS_INFO; + private int utf8Index ; + public ClassInfo(ConstantPool pool) { + super(pool); + } + public int getUtf8Index() { + return utf8Index; + } + public void setUtf8Index(int utf8Index) { + this.utf8Index = utf8Index; + } + public int getType() { + return type; + } + + public String getClassName() { + int index = getUtf8Index(); + UTF8Info utf8Info = (UTF8Info)constantPool.getConstantInfo(index); + return utf8Info.getValue(); + } +} diff --git a/group24/798277403/src/mini_jvm/constant/ConstantInfo.java b/group24/798277403/src/mini_jvm/constant/ConstantInfo.java new file mode 100644 index 0000000000..d488321043 --- /dev/null +++ b/group24/798277403/src/mini_jvm/constant/ConstantInfo.java @@ -0,0 +1,29 @@ +package mini_jvm.constant; + +public abstract class ConstantInfo { + public static final int UTF8_INFO = 1; + public static final int FLOAT_INFO = 4; + public static final int CLASS_INFO = 7; + public static final int STRING_INFO = 8; + public static final int FIELD_INFO = 9; + public static final int METHOD_INFO = 10; + public static final int NAME_AND_TYPE_INFO = 12; + protected ConstantPool constantPool; + + public ConstantInfo(){ + + } + + public ConstantInfo(ConstantPool pool) { + this.constantPool = pool; + } + public abstract int getType(); + + public ConstantPool getConstantPool() { + return constantPool; + } + public ConstantInfo getConstantInfo(int index){ + return this.constantPool.getConstantInfo(index); + } + +} diff --git a/group24/798277403/src/mini_jvm/constant/ConstantPool.java b/group24/798277403/src/mini_jvm/constant/ConstantPool.java new file mode 100644 index 0000000000..c8d30c78db --- /dev/null +++ b/group24/798277403/src/mini_jvm/constant/ConstantPool.java @@ -0,0 +1,27 @@ +package mini_jvm.constant; + +import java.util.ArrayList; +import java.util.List; + +public class ConstantPool { + + private List constantInfos = new ArrayList(); + + + public ConstantPool(){ + + } + public void addConstantInfo(ConstantInfo info){ + this.constantInfos.add(info); + } + + public ConstantInfo getConstantInfo(int index){ + return this.constantInfos.get(index); + } + public String getUTF8String(int index){ + return ((UTF8Info)this.constantInfos.get(index)).getValue(); + } + public Object getSize() { + return this.constantInfos.size() -1; + } +} diff --git a/group24/798277403/src/mini_jvm/constant/FieldRefInfo.java b/group24/798277403/src/mini_jvm/constant/FieldRefInfo.java new file mode 100644 index 0000000000..3d74c4244f --- /dev/null +++ b/group24/798277403/src/mini_jvm/constant/FieldRefInfo.java @@ -0,0 +1,54 @@ +package mini_jvm.constant; + +public class FieldRefInfo extends ConstantInfo{ + private int type = ConstantInfo.FIELD_INFO; + private int classInfoIndex; + private int nameAndTypeIndex; + + public FieldRefInfo(ConstantPool pool) { + super(pool); + } + public int getType() { + return type; + } + + public int getClassInfoIndex() { + return classInfoIndex; + } + public void setClassInfoIndex(int classInfoIndex) { + this.classInfoIndex = classInfoIndex; + } + public int getNameAndTypeIndex() { + return nameAndTypeIndex; + } + public void setNameAndTypeIndex(int nameAndTypeIndex) { + this.nameAndTypeIndex = nameAndTypeIndex; + } + + public String toString(){ + + NameAndTypeInfo typeInfo = (NameAndTypeInfo)this.getConstantInfo(this.getNameAndTypeIndex()); + + return getClassName() +" : "+ typeInfo.getName() + ":" + typeInfo.getTypeInfo() +"]"; + } + + public String getClassName(){ + + ClassInfo classInfo = (ClassInfo) this.getConstantInfo(this.getClassInfoIndex()); + + UTF8Info utf8Info = (UTF8Info)this.getConstantInfo(classInfo.getUtf8Index()); + + return utf8Info.getValue(); + + } + + public String getFieldName(){ + NameAndTypeInfo typeInfo = (NameAndTypeInfo)this.getConstantInfo(this.getNameAndTypeIndex()); + return typeInfo.getName(); + } + + public String getFieldType(){ + NameAndTypeInfo typeInfo = (NameAndTypeInfo)this.getConstantInfo(this.getNameAndTypeIndex()); + return typeInfo.getTypeInfo(); + } +} diff --git a/group24/798277403/src/mini_jvm/constant/MethodRefInfo.java b/group24/798277403/src/mini_jvm/constant/MethodRefInfo.java new file mode 100644 index 0000000000..4037881ad8 --- /dev/null +++ b/group24/798277403/src/mini_jvm/constant/MethodRefInfo.java @@ -0,0 +1,55 @@ +package mini_jvm.constant; + +public class MethodRefInfo extends ConstantInfo { + + private int type = ConstantInfo.METHOD_INFO; + + private int classInfoIndex; + private int nameAndTypeIndex; + + public MethodRefInfo(ConstantPool pool) { + super(pool); + } + + public int getType() { + return type; + } + + public int getClassInfoIndex() { + return classInfoIndex; + } + public void setClassInfoIndex(int classInfoIndex) { + this.classInfoIndex = classInfoIndex; + } + public int getNameAndTypeIndex() { + return nameAndTypeIndex; + } + public void setNameAndTypeIndex(int nameAndTypeIndex) { + this.nameAndTypeIndex = nameAndTypeIndex; + } + + public String toString(){ + + return getClassName() +" : "+ this.getMethodName() + " : " + this.getParamAndReturnType() ; + } + public String getClassName(){ + ConstantPool pool = this.getConstantPool(); + ClassInfo clzInfo = (ClassInfo)pool.getConstantInfo(this.getClassInfoIndex()); + return clzInfo.getClassName(); + } + + public String getMethodName(){ + ConstantPool pool = this.getConstantPool(); + NameAndTypeInfo typeInfo = (NameAndTypeInfo)pool.getConstantInfo(this.getNameAndTypeIndex()); + return typeInfo.getName(); + } + + public String getParamAndReturnType(){ + ConstantPool pool = this.getConstantPool(); + NameAndTypeInfo typeInfo = (NameAndTypeInfo)pool.getConstantInfo(this.getNameAndTypeIndex()); + return typeInfo.getTypeInfo(); + } + + + +} diff --git a/group24/798277403/src/mini_jvm/constant/NameAndTypeInfo.java b/group24/798277403/src/mini_jvm/constant/NameAndTypeInfo.java new file mode 100644 index 0000000000..badba119df --- /dev/null +++ b/group24/798277403/src/mini_jvm/constant/NameAndTypeInfo.java @@ -0,0 +1,45 @@ +package mini_jvm.constant; + +public class NameAndTypeInfo extends ConstantInfo{ + public int type = ConstantInfo.NAME_AND_TYPE_INFO; + + private int index1; + private int index2; + + public NameAndTypeInfo(ConstantPool pool) { + super(pool); + } + + public int getIndex1() { + return index1; + } + public void setIndex1(int index1) { + this.index1 = index1; + } + public int getIndex2() { + return index2; + } + public void setIndex2(int index2) { + this.index2 = index2; + } + public int getType() { + return type; + } + + + public String getName(){ + ConstantPool pool = this.getConstantPool(); + UTF8Info utf8Info1 = (UTF8Info)pool.getConstantInfo(index1); + return utf8Info1.getValue(); + } + + public String getTypeInfo(){ + ConstantPool pool = this.getConstantPool(); + UTF8Info utf8Info2 = (UTF8Info)pool.getConstantInfo(index2); + return utf8Info2.getValue(); + } + + public String toString(){ + return "(" + getName() + "," + getTypeInfo()+")"; + } +} diff --git a/group24/798277403/src/mini_jvm/constant/NullConstantInfo.java b/group24/798277403/src/mini_jvm/constant/NullConstantInfo.java new file mode 100644 index 0000000000..28d102c997 --- /dev/null +++ b/group24/798277403/src/mini_jvm/constant/NullConstantInfo.java @@ -0,0 +1,13 @@ +package mini_jvm.constant; + +public class NullConstantInfo extends ConstantInfo { + + public NullConstantInfo(){ + + } + @Override + public int getType() { + return -1; + } + +} diff --git a/group24/798277403/src/mini_jvm/constant/StringInfo.java b/group24/798277403/src/mini_jvm/constant/StringInfo.java new file mode 100644 index 0000000000..2a9387d247 --- /dev/null +++ b/group24/798277403/src/mini_jvm/constant/StringInfo.java @@ -0,0 +1,26 @@ +package mini_jvm.constant; + +public class StringInfo extends ConstantInfo{ + private int type = ConstantInfo.STRING_INFO; + private int index; + public StringInfo(ConstantPool pool) { + super(pool); + } + + public int getType() { + return type; + } + + public int getIndex() { + return index; + } + public void setIndex(int index) { + this.index = index; + } + + + public String toString(){ + return this.getConstantPool().getUTF8String(index); + } + +} diff --git a/group24/798277403/src/mini_jvm/constant/UTF8Info.java b/group24/798277403/src/mini_jvm/constant/UTF8Info.java new file mode 100644 index 0000000000..6fc44f5355 --- /dev/null +++ b/group24/798277403/src/mini_jvm/constant/UTF8Info.java @@ -0,0 +1,32 @@ +package mini_jvm.constant; + +public class UTF8Info extends ConstantInfo{ + private int type = ConstantInfo.UTF8_INFO; + private int length ; + private String value; + public UTF8Info(ConstantPool pool) { + super(pool); + } + public int getLength() { + return length; + } + public void setLength(int length) { + this.length = length; + } + public int getType() { + return type; + } + @Override + public String toString() { + return "UTF8Info [type=" + type + ", length=" + length + ", value=" + value +")]"; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } + + + +} diff --git a/group24/798277403/src/mini_jvm/loader/ByteCodeIterator.java b/group24/798277403/src/mini_jvm/loader/ByteCodeIterator.java new file mode 100644 index 0000000000..35ca6420b6 --- /dev/null +++ b/group24/798277403/src/mini_jvm/loader/ByteCodeIterator.java @@ -0,0 +1,55 @@ +package mini_jvm.loader; + +import mini_jvm.util.Util; + +import java.util.Arrays; + +public class ByteCodeIterator { + private byte[] codes; + private int pos; + + public ByteCodeIterator(byte[] codes){ + this.codes = codes; + } + + public byte[] getBytes(int len) { + if (pos + len >= codes.length) { + throw new ArrayIndexOutOfBoundsException(); + } + + byte[] data = Arrays.copyOfRange(codes, pos, pos + len); + pos += len; + return data; + } + + public int nextU1toInt() { + return Util.byteToInt(new byte[] { codes[pos++] }); + } + + public int nextU2ToInt() { + return Util.byteToInt(new byte[] { codes[pos++], codes[pos++] }); + } + + public int nextU4ToInt() { + return Util.byteToInt(new byte[] { codes[pos++], codes[pos++], codes[pos++], codes[pos++] }); + } + + public String nextU4ToHexString() { + return Util.byteToHexString((new byte[] { codes[pos++], codes[pos++], codes[pos++], codes[pos++] })); + } + + public String nextUxToHexString(int len) { + byte[] tmp = new byte[len]; + + for (int i = 0; i < len; i++) { + tmp[i] = codes[pos++]; + } + return Util.byteToHexString(tmp).toLowerCase(); + + } + + public void back(int n) { + this.pos -= n; + } + +} diff --git a/group24/798277403/src/mini_jvm/loader/ClassFileLoader.java b/group24/798277403/src/mini_jvm/loader/ClassFileLoader.java new file mode 100644 index 0000000000..db3402aeb6 --- /dev/null +++ b/group24/798277403/src/mini_jvm/loader/ClassFileLoader.java @@ -0,0 +1,94 @@ +package mini_jvm.loader; + +import mini_jvm.clz.ClassFile; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + + +public class ClassFileLoader { + + private List clzPaths = new ArrayList(); + + public byte[] readBinaryCode(String className) { + className = className.replace('.', File.separatorChar) +".class"; + for(String path : this.clzPaths){ + String clzFileName = path + File.separatorChar + className; + byte[] codes = loadClassFile(clzFileName); + if(codes != null){ + return codes; + } + } + return null; + } + + private byte[] loadClassFile(String clzFileName) { + File f = new File(clzFileName); + try { + return IOUtils.toByteArray(new FileInputStream(f)); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + public void addClassPath(String path) { + if(this.clzPaths.contains(path)){ + return; + } + this.clzPaths.add(path); + } + + public String getClassPath(){ + return StringUtils.join(this.clzPaths,";"); + } + + public ClassFile loadClass(String className) { + byte[] codes = this.readBinaryCode(className); + ClassFileParser parser = new ClassFileParser(); + return parser.parse(codes); + } + + // ------------------------------backup------------------------ + public String getClassPath_V1(){ + StringBuffer buffer = new StringBuffer(); + for(int i=0;i", utf8Info.getValue()); + + utf8Info = (UTF8Info) pool.getConstantInfo(10); + Assert.assertEquals("(Ljava/lang/String;I)V", utf8Info.getValue()); + + utf8Info = (UTF8Info) pool.getConstantInfo(11); + Assert.assertEquals("Code", utf8Info.getValue()); + } + + { + MethodRefInfo methodRef = (MethodRefInfo)pool.getConstantInfo(12); + Assert.assertEquals(3, methodRef.getClassInfoIndex()); + Assert.assertEquals(13, methodRef.getNameAndTypeIndex()); + } + + { + NameAndTypeInfo nameAndType = (NameAndTypeInfo) pool.getConstantInfo(13); + Assert.assertEquals(9, nameAndType.getIndex1()); + Assert.assertEquals(14, nameAndType.getIndex2()); + } + //抽查几个吧 + { + MethodRefInfo methodRef = (MethodRefInfo)pool.getConstantInfo(45); + Assert.assertEquals(1, methodRef.getClassInfoIndex()); + Assert.assertEquals(46, methodRef.getNameAndTypeIndex()); + } + + { + UTF8Info utf8Info = (UTF8Info) pool.getConstantInfo(53); + Assert.assertEquals("EmployeeV1.java", utf8Info.getValue()); + } + } + @Test + public void testClassIndex(){ + + ClassIndex clzIndex = clzFile.getClzIndex(); + ClassInfo thisClassInfo = (ClassInfo)clzFile.getConstantPool().getConstantInfo(clzIndex.getThisClassIndex()); + ClassInfo superClassInfo = (ClassInfo)clzFile.getConstantPool().getConstantInfo(clzIndex.getSuperClassIndex()); + + + Assert.assertEquals(FULL_QUALIFIED_CLASS_NAME, thisClassInfo.getClassName()); + Assert.assertEquals("java/lang/Object", superClassInfo.getClassName()); + } + +} diff --git a/group24/798277403/src/mini_jvm/test/EmployeeV1.java b/group24/798277403/src/mini_jvm/test/EmployeeV1.java new file mode 100644 index 0000000000..aed78de928 --- /dev/null +++ b/group24/798277403/src/mini_jvm/test/EmployeeV1.java @@ -0,0 +1,28 @@ +package mini_jvm.test; + +public class EmployeeV1 { + + + private String name; + private int age; + + public EmployeeV1(String name, int age) { + this.name = name; + this.age = age; + } + + public void setName(String name) { + this.name = name; + } + public void setAge(int age){ + this.age = age; + } + public void sayHello() { + System.out.println("Hello , this is class Employee "); + } + public static void main(String[] args){ + EmployeeV1 p = new EmployeeV1("Andy",29); + p.sayHello(); + + } +} \ No newline at end of file diff --git a/group24/798277403/src/mini_jvm/util/Util.java b/group24/798277403/src/mini_jvm/util/Util.java new file mode 100644 index 0000000000..bc2e724f03 --- /dev/null +++ b/group24/798277403/src/mini_jvm/util/Util.java @@ -0,0 +1,22 @@ +package mini_jvm.util; + +public class Util { + public static int byteToInt(byte[] codes){ + String s1 = byteToHexString(codes); + return Integer.valueOf(s1, 16).intValue(); + } + + public static String byteToHexString(byte[] codes ){ + StringBuffer buffer = new StringBuffer(); + for(int i=0;i - - - /jsp/homepage.jsp - /jsp/showLogin.jsp - - - /jsp/welcome.jsp - /jsp/error.jsp - - diff --git a/group24/798277403/src/week4/loader/ClassFileLoader.java b/group24/798277403/src/week4/loader/ClassFileLoader.java deleted file mode 100644 index 90bce86e77..0000000000 --- a/group24/798277403/src/week4/loader/ClassFileLoader.java +++ /dev/null @@ -1,67 +0,0 @@ -package week4.loader; - -import java.io.*; -import java.util.ArrayList; -import java.util.List; - -/** - * Created by zhouliang on 2017-04-04. - */ -public class ClassFileLoader { - private List clzPaths = new ArrayList(); - - public byte[] readBinaryCode(String className) { - className = className.replace(".","\\"); - if(!className.endsWith(".class")){ - className=className+".class"; - } - File file = null; - for(String path : clzPaths){ - file = new File(path+"\\"+className); - if(file.exists()){ - break; - } - } - - if(file==null){ - try { - throw new FileNotFoundException(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - return null; - }else{ - byte[] buffer = new byte[1024]; - BufferedInputStream bufferedInputStream = null; - ByteArrayOutputStream byteArrayOutputStream = null; - try { - bufferedInputStream = new BufferedInputStream(new FileInputStream(file)); - byteArrayOutputStream = new ByteArrayOutputStream(); - int length = 0; - while((length = bufferedInputStream.read(buffer))!= -1){ - byteArrayOutputStream.write(buffer,0,length); - } - } catch (IOException e) { - e.printStackTrace(); - } - return byteArrayOutputStream.toByteArray(); - } - } - - - public void addClassPath(String path) { - clzPaths.add(path); - } - - public String getClassPath(){ - StringBuilder stringBuilder = new StringBuilder(); - for(int i=0; i