ࡱ> ` Dbjbjss 8~<2ZZZZZZZn4448 5dn5|nlh55(666666rltltltltltltl7nhptlZ66666tlZZ66lFFF6<Z6Z6rlF6rlFFRhZZnk65 P~]4Z=i>l4l0liWqDVWq<nkWqZnk66F66666tltl\Fd666l6666nnnd04nnn4nnnZZZZZZ Android Part 1 Java Language Topics Current 01/26/2012 The language of Android is mostly Java and XML XML can be learned mostly by example The Java language is based on C++ with simplifications and some differences The Java class libraries for Android are significantly different from traditional Java. For example, Swing is not used. The actual Java VM has been customized for Android it is called Dalvik. Some Differences between the Java Language and C++ 1. Everything in Java is coded inside a class. No global variables or functions. 2. All data is A primitive type: int, double, char, boolean, etc. [Note: ints do not have logical (i.e. true/false) values] An object 3. The keywords final and static for instance variables and methods. static variable: 1 copy is shared by all instances of its class. static method: callable by className.methodName() with no instance of the class [vs. objRef.methodName() for non-static (normal) methods] final variable: a constant, really: final double STAMP_PRICE = 44; final method: cannot be subclassed 4. Creating Objects. ClassName objRef = new ClassName(args); Object creation is always dynamic (done at run time, not compile time). Note that objRef is a reference to an object not the object itself. 5. The this reference. this is the name of a reference to the object in which the this occurs. this has various uses. 6. The import Statement. This lets us use shortcut names and allows the program to unambiguously refer to different classes that may share the same shortcut name. For example, in Swing, there is a JButton class. Its real name is javax.swing.JButton but if we import that class, we can use just JButton in the rest of the program. import javax.swing.JButton; JButton b = new JButton(label); However, if the programmer wanted to make a new custom class called JButton and use it in the same program, using the full name of each would allow the desired one to be referenced with no confusion. javax.swing.JButton b = new javax.swing.JButton(label); Note that import does not copy in source code for compilation like C++ include does. 7. Passing Arguments to Methods Both primitives and objects are passed by value (that is, a copy is passed). Always. There is no call-by-address or reference mechanism in Java So the passed-in argument cannot be directly altered by the method. Methods can return a value (primitive, array, object) Methods can alter values in an object they get as an argument (if there are setter methods available or public instance variables) Methods cannot alter the value of a primitive or an object reference declared in the caller if it is passed as an argument. 8. Comparing Objects (objRef1 = = objRef2) compares the references, not the objects themselves. In Java, we write/use the equals() method when we want to compare the contents of two objects of the same class. Most Java classes will have an equals() method. When you write a new class, you should consider whether you should write an equals() method for it. For example, to compare two Strings: if (s1.equals(s2)) An equals() method for a class Point_2D could look like this (assuming instance variables x and y and getter methods for them. Note that the method signature is expected of anyone who writes an equals() method. Argument type is the class type being compared/tested for equality. public boolean equals(Point_2D pt) { if (this.x == pt.getX() && this.y == pt.getY()) return true; else return false; } 9. Missing Punctuation, etc. No * (dereference operator) No & (address-of operator) No pointer arithmetic (ptr = ptr + 1) No delete, dealloc, free, etc. [Java is garbage collected when there is no reference to an object, its memory is returned to the system.] 10. Simple Arrays Arrays in Java are objects with a special C-like syntax. Array dimension(s) are set at run-time (not compile time) unlike C or C++. Once dimensions are set, they cannot be changed (however, other Java classes implement the idea of a dynamically growing/shrinking array). We will briefly cover one-dimensional arrays here. A. Declaration Data-type name[]; or Data-type[] name; Examples: int intAr[]; or int[] inAr; Line lineAr[]; or Line[] lineAr; So far, what you have is a piece of named memory that can point to an array. But that pointer is null and no array actually exists yet. B. Create and dimension it intAr = new int[10]; //10 can be a variable or any integer expression Arrays of primitives are initialized to 0s or other type-specific value. In this case you have an array of 10 ints, each of which has value 0. lineAr = new Line[n]; In this case you have an array that can hold n references to Line objects but you have no Line objects yet! All the references are null. C. To fill an array for (int i = 0; i < 10; i++) intAr[i] = i * 2; Arrays have a public data member whose value is the number of elements in the array. The name of it is length. So: for (int i = 0; i < lineAr.length; i++) lineAr[i] = new Line( the reqd args ); Now C-like array expressions can be used, for example: partialAvg = (intAr[0] + intAr[1] + intAr[2]) / 3; intAr[num] = 25; top = lineAr[n].getY1(); lineAr[3].draw(); and to display all values in the int array: for (int i = 0; i < intAr.length; i++) System.out.println(value of element + i + is + intAr[i]); Note: you can combine steps A and B above: int intAr[] = new int[10]; Line lineAr[] = new Line[n]; 11. Access Modifiers for data and methods These must be specified on each declaration line: private int x, y, z; public int x1, y1; public num1, num2, num3; Note that private is not the default; the default is nothing: int num; // default access Here are the Java access modifiers: Default (no keyword used before declaration): code in other objects can access these if the other objects are in the same package (see below) Public: can be accessed by code in other objects (in this package or not) Private: cannot be accessed by other object types (but can be accessed by other objects of the same type). Protected: equivalent to private except to subclasses (in this or other packages) where it is accessible/inherited and equivalent to public. 12. Packages Android uses packages. A package is a named group or library of classes. The name of the package is really the first part of the name of the class. You declare the name of the package as the first line of your source code module, for example: package edu.niu.cs.jim.financial; The convention used in Java is to use the reverse domain name of your organization as the first part of the package name and then some other words to make the package name unique both universally and within your organization. You are not required to use this convention but it is strongly encouraged. The Java (and therefore Android) compile/build tools expect a certain directory structure that corresponds to the chosen name. Eclipse and the Android tools will create and manage this for you. For example, an Android project will create the following directory trees in your projects workspace: YourProject src edu niu cs jim financial YourProject.java And a similar one under bin for the compiled class files. (Not visible in Eclipse; visible in Windows Explorer.) This will be done automatically and you need not be aware of it unless something goes wrong! 13. Naming conventions in Java. Use these! The format of the first 3 lines below is known as camel notation Data names: studentCount num interestRate Method names: calcAverage() equals() setText(String s) Class Names: UnitConv Student SavingsAccount Constants: STAMP_PRICE PI NUM_QUIZZES Note that data and method names start with a lowercase letter; each addition word in the name starts with a capital letter. Underscores are not used except for constants (final). Class names are the same as data and method names except that the first letter is capitalized. 14. Compiling Eclipse takes care of the details of compiling a project (Java and other pieces) and bundling them into an Android executable (.apk file in the Projects bin folder). Still, you should know the following for normal Java program development. The java tools (compiler, etc.) are in the bin folder of your Java install. The compiler is named javac.exe To compile a program you invoke path\javac YourPgm.java *The name YourProgram must also be exactly the name of the class file where execution begins. This is case-sensitive. *The compiler will output YourProgram.class (and possibly more .class files) To run the compiled Java program (not Android) you will invoke path\java\YourProgram [Note: no .class extention] or * True for all Java programs/compilers. This is for a Java application. For more, and for applets, find a good Java book. Head First Java (OReilly publication) is great for learning and understanding Java. The Android Dialect of Java Android apps are written in Java; however, the version of Java used is not completely standard. In order to make the Java VM small enough and fast enough to run well on a mobile device, some things were left out, other things were added, and some things were changed. The following list shows some examples of these changes that you might run into soon in your programming. 1. The Java VM for Android is named Dalvik. Not that it matters 2. Android does not use the normal Java GUI libraries like awt or Swing. Instead, you get to learn a whole new set of classes to represent the various UI components. Some have the expected names (Button); some dont (EditText instead of TextField and TextArea). You will need a number of import statements to use the shortcut names for these new classes. Eclipses Ctrl-Shift-o can automatically fill these in and can remove unreferenced imports as well. 3. User interface components may be defined in .xml or in executable Java code. Preferred practice is to do this in .xml and then get references to the components in the Java program via the findViewById() method. 4. Android does not use layout managers to control the size and arrangement of components. Instead, Android generally uses .xml files to supply this information (as well as other information such as font, color, etc.) 5. Some elements have been added to the language. One you will see soon is the @Override directive which is placed in front of an overriding method inherited from a superclass. If the superclass does not include this method, the compiler will warn you. 6. Android apps do not extend JFrame (like Java applications) or JApplet (like applets). Rather, they extend the Activity (or other) class. 7. Android apps do not begin execution in main() (like Java applications) or in init() (like applets). Rather, they usually begin in a method called onCreate() the first step in an Activitys life cycle. Exceptions Overview Exceptions provide a pattern for signaling and handing various run-time error conditions that may occur in calls to methods that can fail. The exception mechanism helps separate normal or successful processing from error handling code. There are checked exceptions that you must handle and unchecked exceptions that you can handle or ignore. The compiler will tell you if you have ignored a checked exception and force you to put any calls to such methods (that throw checked exceptions) into a try/catch block. (See below.) If you ignore an unchecked exception in your code (i.e. you do not provide a try/catch block) but the exception does occur, you will still get an error message on the Java console, but your program will likely continue execution. (Example: ArrayIndexOutOfBoundsException) (However, in the Eclipse environment, you might get no notification at all except a dead app. The Java console under Eclipse appears to be the nul device. Messages can be directed to the LogCat console, however.) Basic Idea Code in any method that detects an error condition (and does not know how to handle it) can create and throw an Exception to its caller to signal the error/failure. The calling code can (or must, if it is a checked exception) catch the Exception and can then decide how to handle the error, or the caller can re-throw the Exception (i.e. pass it along up to its caller). This is sometimes known as ducking the Exception. You must decide the appropriate place to handle the exception: a) handle it in the method that discovers the problem. Dont create and throw an Exception. The method itself can handle or fix or ignore the problem. b) in the caller by catching the exception thrown by the method. c) in a caller higher in the method call chain, via re-throwing or ducking the exception. Exceptions are objects that contain methods to display specifics of the error that occurred. The catching code can then use these methods to display error messages or take other action. Examples of errors: Illegal chars in input File didnt open TCP/IP Socket connection lost Argument to method out-of-bounds Examples of ways to handle errors: Print error info and terminate Set a default value Reprompt and have user re-enter data Do nothing (rare, but allowed) There are many kinds of Exception classes in the Java libraries. For example: ArrayIndexOutOfBounds Exception IOException NumberFormatException IllegalArgumentException And you can make your own custom exception classes. Every Exception class contains methods that can be called to provide information about the nature of the exception: getMessage() toString() printStackTrace() Handling or Catching Exceptions Caused by Methods You Call Typical calling sequence: try { Code that calls methods that might fail, but written as if all will succeed. If a method call fails, control will pass immediately to the catch block and will not return to the try block. } catch (ExceptionClassName e) { Code to handle error, normally using methods of the exception e. } Example 1: Suppose meth1(), which takes two int arguments, can fail if either or both of the arguments is negative. If this is the case, meth1() will create and throw an Exception object. try { ans = meth1(arg1, arg2); aTextBox.setText(Answer is + ans); } catch (Exception e) { Log.d(TAG, Error: + e.getMessage() + ans set to 10 ); ans = 10; } The meth1() method could look like this: public int meth1(int n1, int n2) throws Exception { if (n1 < 0 && n2 < 0) throw new Exception(both args are neg); else if (n1 < 0) throw new Exception(first arg is neg); else if (n2 < 0) throw new Exception(second arg is neg); else return n1 + n2; } Notes: 0. aTextBox.setText() just displays a String in a text box; Log.d displays a message on the Eclipse LogCat console. It can be used in place of System.out.println() for messages. 1. If meth1() succeeds, the setText() will execute, and control will pass to the line following the end of the catch block. 2. If meth1() does not succeed, the setText() will not execute, but control will pass to the catch block, where the Exception object e is available. 3. In either case, control will not go back to the try block unless you embed the whole structure in some kind of loop. 4. Re-throwing looks like this: try { meth1(a, b)); } catch (Exception e) {throw e}     Page  PAGE 1 of  NUMPAGES 11 '()156;< * + @ ` V l  + , - A C m h&h&CJOJQJaJh'\h&h&hsD6]hsD hhKhW4hhKh8XhW4hW4>*hFhW4hW46] h[z6] hhK6] h$PF6]hW4hW4h5CJ\aJhW4hW45CJ\aJ2()<=nX ) * + : ;  +  & FgdsD & FgdW4 & FgdW4$a$gdW4DD+ , - B C m n  ,-pqgd& qIM !+1yzGIJMpqy|+5;r{}yyhhKh~hhKh'\>* hhK6]h'\h'\6]h'\h&h&6]h8Xh&6]hhKCJOJQJaJhsDh8XCJOJQJaJh&CJOJQJaJh8Xh&CJOJQJaJh&h&CJOJQJaJh8Xh&/ !xyzq-  ;<QRklgd'\ & Fgd'\gd&'/S[<QU]jlfĵīħĵąĵvvh`hGCJOJQJaJh~hGCJOJQJaJhhKhhK6]hhKhhK>*hhKhhKhG6]hGhGCJOJQJaJhGhGhG6]hGh'\6]hhKh'\6]hhKh'\>*h'\h'\6]h8Xh'\-.IoK!"UVef} & FgdGgdG & FgdGgd'\gh]^tu2FGgdkSgdGf^tFGISTX针ymmfyWh:r"hkSCJOJQJaJ hkShkShkSCJOJQJaJh0_hkSCJOJQJaJh0_hkS6]hkSh0_hGCJOJQJaJ hPjMhG hG5\hPjMhG5\h0_hG6]hPjMhGCJOJQJaJhhKh`hGCJOJQJaJhGCJOJQJaJhG h`hG"HI|}STgdkSgdGXY[w}89DEnojqL S !!!!!!ǻǯ֊֊֊ֆ֊sdhA hzeCJOJQJaJhA hA CJOJQJaJhA h8Xhzehze6]hzeh~CJOJQJaJh~CJOJQJaJhzeCJOJQJaJh8XCJOJQJaJhzehzeCJOJQJaJhze hkShkShhKht+h0_hGCJOJQJaJhkShG'1ESaop~3 !!!!##D$F$ & FgdzegdG!!!#$E$G$R$S$$$$$$$%%%%%%%%%%&&&&&H&I&''''''M(R(Y(c(v(((()()b)c))޸޴ެިޤޤޤޤޤޤڤh+C hjS6]h8XhjShjS6]h$PFhjS56\]hjShhKhA hA >*h$PFhA hA 6]hhKCJOJQJaJhA CJOJQJaJh~hA hA hzeCJOJQJaJhA hA CJOJQJaJ1F$G$T$Y$_$f$m$v$$$$%%r%s%%%%%&I&x&&&W'X'''''gdG''( )))I)b))&*e*****++o+s+t+++ - -N-O-W. & Fgd$PF & Fgd+C  & FgdjSh^hgdjSgdG))))))){********+++)+n+o+r+s+t+u+++++,,--..W.X...///A/H/////////Ʒ󙑍h~h!t#hdihqh=ZhlB hlBhlB hlB>* hgu>* h+c>*hzehA hA CJOJQJaJhA CJOJQJaJ hA h$PFh$PFh$PF6]h$PFhhKh+C hjShLhLhL>*3W.X.////00 1!1+1,111_2`2/3031323>3?3H3I333:4;44gd+cgdG*gdG///0000!1+1-1?1S1_1q111111111122D2L2^2_2`2a2b2c22222233.3/303132333=3>3?3ɿɿɿɸɮɮɮɕِ|hfhfhkS>*hfhf>* hgu>* hG*hG* h~hG*h~ h~6]hG*hG*6] hlBhG*h=ZhG*6]hG*h~hL>*hL hlBhlBh!t#hlB6]h=ZhlBh!t#h!t#h!t#6]0?3H33333E4L4a4e4f4l4q4z4444444 5!5&5'5C5R5T5`5a5s5|555555555U6s6667M7P7\777778?8@8E88hLh=Zh+c6]h~h~h+c>* h+ch+c h+c6]h+ch+c6]h=Zh+c56\]h h+c56\]h~h+c6>*]hfh=Zh+chh+c6]744a5b5w6x6O7P7\7]7D9E99 :~:::;;;P;g;x;;;;;;<3< & F gd+c & F gd+cgd+c88888888899:::::::::#;8;9;:;;;<;=== >'>(>m>p>y>z>>>>>b?c?d?ǹǹǬǨǡrrrrrk h~6]h"h+cCJOJQJaJh+cCJOJQJaJh+ch+c6]hLh+c6] hh+chLh=Zh=Z56\]h=Zh=Z6]h~h=Zh+c56\]h h+c56\]hh+c56\]h+chhWch+c56\]*3<R<S<<<<<<<<1=2====== > >'>(>,>0>n>>>> & F gd+c & F gd+cgd+c & F gd+c>>??^?b?c?p?q?#@$@(@,@G@o@s@@@@@@@AA8AA?AAA"B#B*B+B/BABhBmBBBBBBBBϷ򳩳yyyukh6xh+c6]h}ih}ihgu6]hgu hh+chl|CJOJQJaJh}ih=ZCJOJQJaJh"h=Z6]h=Zh}iCJOJQJaJhguCJOJQJaJh"h+cCJOJQJaJh#v[h+c6]hhWch+c6]h+chh+c6]&AAB BB"B#B*B+BBB\C]CCCmDnDDDDDDDDDDDDDgdGgd+cBCcCjCCCCCmD}D~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDǻǻǷhmHnHujhUhhEAjhEAU hkSh+chguh~CJOJQJaJh~h~CJOJQJaJh[zh~h}ih+c6]h6xh+c6]h+chguhgu6])DDDDDDDgdG6&P1h:p7]/ =!"#$% @@@ NormalCJ_HaJmH sH tH DAD Default Paragraph FontRiR  Table Normal4 l4a (k@(No List4@4 kHeader  !4 @4 kFooter  !H@H F Balloon TextCJOJQJ^JaJ<~()<=nX)*+:;+,-BCmn,-pq !xyzq -   ; < Q R k l .IoK!"UVef}gh]^tu2FGHI|}ST1ESaop~3DFGTY_fmvrsIxWX !)!I!b!!&"e"""""##o#s#t### % %N%O%W&X&''''(( )!)+),)))_*`*/+0+1+2+>+?+H+I+++:,;,,,a-b-w.x.O/P/\/]/D1E11 2~22:3;3P3g3x333333434R4S44444444152555555 6 6'6(6,606n6666677^7b7c7p7q7#8$8(8,8G8o8s88888889989<9T99999: ::":#:*:+:::\;];;;m<n<<<<<<<<<<<<<<<<<<00000 0 0 0 00000000 0 0000 0 0 0 0000000000000000000000000000000000000 0 0 0000000000000000000000000 0 0 0 00000 0 0 0000000000000000000000000000000000000000000000000000000000000000000000000000 0 0 0 00000000000000000000000000000000000000000000 0 0 0 0)! 0 0 0 0&"0000000000000000000000000000000000000000000000000000000000000 0 0 0 000 0 0 0 000 0 0 0 0 00000 0 0 000000000000000000000000000000000000000000000000000000000000000h009h00h009h00h009h00h009h00@0h00h00 1114 X!)/?38d?BD#'),.03568;=+ F$'W.43<>ADD$&(*+-/12479:<>D% +.4!1;LO_ftxVj *CLMSZceiOVq ahs z `cfiz<@^d%&-.49:;?@ ISW\bgmr}   $;<HMNO$'9<GRUX[^bejlru*7>W_iwI L O!T!U!a!l!w!!"p"{"""0%6%%%*&2&>&G&L&T&''x))))))****U.s./ /5/;/44444444445555557777.818I8Y8i8l888888888 99999"9r9v9{9~999999999/:?:h:m::::::;;;<<<<<<<<<<<<<<);k~-AZdgk _c- / ' .  < > U \   M \ l r pu,/#^d}4:.9IS}%#1<EQ3UX[^bejlru|$s+,8""##Z$g$'%/%%%#&(&:'H'''((,)5)****,,../-/00H1N1}111111#2%245^5k5(6+6p6s666667]7y7777$8'8.818I8Z8s8x88888889 9>9@9X9]999999999: :::/:@:::::c;i;<<<<<<<<<<<<<<<<<<33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333();+:-Cf_pz < P 1DEpGRUZ[ajqr{|sIw W9%N%!)+)3+?+/P/^33344455 62689;9<9X9:+:<<<<<<<<<<<<<<<<<<<<1;<<<<<<<<<<<<<< +F+ "R>N%H&t/^ p{}G6z<BL d> ItX6efe N )uvMjj|T+\}|~h^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hH +\}">N%jj|eB+6e )u&t/> I{}G6                                                                                                             .-"+C A 7]B!!t#s4EAsD$PF JhKzOjSkS8X=Z+czefdi}ikZ^~lNW4t+G*'\l|&~guLlB[zWqF-!.IG`v<<<<<<<@<0@UnknownG: Times New Roman5Symbol3& : Arial?5 : Courier New5& zaTahoma;Wingdings"1hBA! 3n 3n!x4<<2Q HX ?W42'Android  Part 1  Java Language TopicsComputer ScienceComputer Science<         Oh+'0$ @L l x  (Android Part 1 Java Language TopicsComputer Science Normal.dotComputer Science19Microsoft Office Word@r_(@>\@?ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxz{|}~Root Entry F &]1Table@qWordDocument8~SummaryInformation(yDocumentSummaryInformation8CompObjq  FMicrosoft Office Word Document MSWordDocWord.Document.89q