• 正则表达式+XML+反射+设计模式作业


    正则表达式+XML+反射+设计模式作业

    一、    填空题

    1. Class.forName('com.bjsxt.stumgr.entity.Student').newInstance( ); 语句的作用是___利用反射创建Student对象_ _______________________________。
    2. 在Java中使用SAX解析XML文档主要有两个部分,一个是SAX解析器,一个是     DOM        
    3. Java反射技术中,每个Method对象对应一个方法,获得Method对象后,可以调用其_invoke__________来调用对应方法。
    4. 在DTD的个数限制中常使用的符号是:   *,+,?            
    5. DOM是Document Object Model的缩写,即   文档对象模型        
    6. XML文档中语句<!DOCTYPE dlib SYSTEM “mydtd.dtd”>中SYSTEM的作用是        链接外部DTD文件         
    7. 如果希望子元素出现0或 1次,那么应该定义元素的类型为     子元素?        

     

    二、    选择题

    1)

    以下关于XML的描述正确的是(   B  )。(选择一项)

     

     

     

     

    A.

    一种标准泛用标记语言

     

    B.

    一种扩展性标识语言

     

    C.

    一种超文本标记语言

     

    D.

    一种层叠样式表单是.NET 托管程序的执行引擎

     

    2)

    以下代码片段中,哪些是数据(  CD   )。(选择二项)

     

    <Name  StudentID=”20040001”>Bill</Name>

     

     

     

     

    A.

    Name

     

    B.

    StudentID

     

    C.

    20040001

     

    D.

    Bill

     

    3)

    URI代表什么含义(  C   )。(选择一项)

     

     

     

     

    A.

    统一资源定位符

     

    B.

    统一资源命名符

     

    C.

    统一资源标识符

     

    D.

    企业资源定位符

     

    4)

    以下关于XML文档的声明,该声明采用什么编码标准(  C   )。(选择一项)

     

    <?xml  version=”1.0”?>

     

     

     

     

    A.

    GB2312

     

    B.

    ANSI

     

    C.

    Unicode UTF-8

     

    D.

    Windows-1252

     

    5)

    以下哪些方式在Class类中定义( AC    )。(选择二项)

     

     

     

     

    A.

    getConstructors()

     

    B.

    getPrivateMethods()

     

    C.

    getDeclaredFields()

     

    D.

    getImports()

     

     

    6)

    以下选项中关于Java中获取Class对象的方式正确的是(   CD  )。(选择二项)

     

     

     

     

    A.

    Class c1 = String.getClass( );

     

    B.

    String str = new String(“bjsxt”);

    Class clazz = str.class;

     

    C.

    Class c1 = Integer.TYPE;

     

    D.

    Class clazz = Class.forName("java.lang.Object");

    7)

    Java的反射中关于代理说法正确的是(  BD  )。(选择两项)

     

     

     

     

    A

    动态代理类与静态代理类一样,必须由开发人员编写源代码,并进行编译

     

    B.

    代理类与被代理类具有同样的接口

     

    C.

    动态代理是public、final和abstract类型的

     

    D.

    java.lang.reflect包中的Proxy类提供了创建动态代理类的方法

    8)

    在编写XML 文件时,下列关于属性的声明说法正确的是(  AC  )。(选择两项)

     

     

     

     

    A

    标记中可以使用多个属性

     

    B.

    属性可以出现在起始标记或结束标记中

     

    C.

    属性是不区分大小写的

     

    D.

    属性值必须用引号引上

    三、    判断题

    1. Java反射技术中,对于一个private修饰的成员变量,可以再设置setAccessible(true)后进行暴力访问。( T   )
    2. 在Java中,只要给定类的名字,那么就可以通过 Java反射技术来获得类的所有信息,进而创建对象和执行方法。(  F  )
    3. Java反射机制是指:Java程序可以加载一个运行时才得知名称的类,获悉其完整结构信息(但不包括methods定义),并生成其对象实体、或对其fields设值、或调用其methods。(  T  )
    4. XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。( F   )
    5. 在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称为DOM树)。(  T  )
    6. 在XML文档中引用DTD的关键字是ENTITY。( F   )ELEMENT

    四、    简答题

    1. XML的主要特点有哪些?

        答:XML的特点主要表现在以下几个方面。

        1)   良好的可读性

        2)   方便的可扩展性

        3)   数据内容与其形式的分离

        4)   便于信息的检索

        5)   可以轻松地跨平台应用

        6)   支持不同文字不同语种间的信息交互

        7)   大大改善网页的超链接性能

        8)   能够实现数据粒状地更新

    1. 简述XML的相关技术?

        答:XML的相关技术主要包括:DTD与XML Schema技术、CSS和XSL样式技术、DOM技术、XLink和XPath链接技术等。

    1. 简述XML技术的主要应用?

        答:DTD与XML Schema技术用于规范和验证XML文档的,CSS和XSL样式表技术用于格式化显示XML文档的,DOM技术用于把XML文档作为数据对象进行显示和编程处理的,XLink和XPath链接技术在XML文档中使用。

    1. 什么是XML?为什么要用XML?

        答:可扩展标记语言(XML)是用来描述一种称为XML的文件的数据对象,同时也部分描述了处理这些数据对象的计算机程序的行为。XML实质上是一种电子文档信息的自定义语言。任何人、任何行业都可遵循这些规则,自己定义各种标记来描述信息中的所有数据元素,然后通过一种被称为解析器的小程序进行处理。

    SGML功能强大,但过于复杂:HTML功能简单,但无法处理大量的结构化信息。XML语言既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性和易用性,能够满足万维网的规则----简单性

    XML信息组织与描述方式的分离,不仅改变了HTML的固定标记集,并从根本上改变了传统网页的信息组织方式,设计了一种让所有计算机系统都能够进行“智能”交流的语言。使用得基于信息传输的互联网在信息获取、检索和交换方面发生了巨大改变,为互联网的智能化奠定了基础。XML可轻松地跨平台,充当不同格式数据进行交换的桥梁。

    1. 什么是(Reflection)反射?其它语言有这种特点吗?

        答:Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装配,无须在组件之间进行链接。反射允许在编写与执行时,使用程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这种反射成为构建灵活应用的主要工具。需注意的是,如果使用不当,反射的成本会很高。

    Java中的类反射Reflection是Java程序开发语言的特片之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。Java的这一能力在实际应用中也许用得不是很多,但是在其它的语言中根本就不存在这一特性。例如,Pascal、C或者C++中就没有办法在程序中获得与函数定义相关的信息。

    1. 6.   实现Java反射技术的主要类有哪些?其作用分别是什么?

        在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中

        1)   Class类:代表一个类

        2)   Field 类:代表类的成员变量(属性)

        3)   Method类:代表类的成员方法

        4)   Constructor 类:代表类的构造方法

        5)   Array类:提供了动态创建数组,以及访问数组的元素的静态方法

     

    五、    编码题
    1.    题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
    程序分析:利用while语句,条件为输入的字符不为'
    '
    
    import java.util.Scanner;
    
    public class Find_1 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("输入一行字符:");
            String str = sc.nextLine();
            
            String regex1 = "[u4e00-u9fa5]";//检测汉字的正则
            int count1 = 0;//汉字计数器
            String regex2 = "[a-z_A-Z]";//检测字母的正则
            int count2 =0;//字母计数器
            String regex3 = "[0-9]";//检测数字的正则
            int count3=0;//数字计数器
            int count4=0;//空格计数器
            //将str中的每个字符进行匹配所以将每个char都存入String数组中
            char[] ch = str.toCharArray();
            String[] arr = new String[ch.length];
            for(int i=0;i<ch.length;i++){
                arr[i]=String.valueOf(ch[i]);//将字符数组的数据保存到字符串数组
                if(arr[i].matches(regex1)){
                    count1++;//检测字母的正则
                }
                if(arr[i].matches(regex2)){
                    count2++;//检测数字的正则
                }
                if(arr[i].matches(regex3)){
                    count3++;//数字计数器
                }
                if(arr[i].matches(" ")){
                    count4++;//空格计数器
                }
            }
            System.out.println("输入信息是:"+str);
            System.out.println("该信息中的汉字有:"+count1+"个");
            System.out.println("该信息中的字母有:"+count2+"个");
            System.out.println("该信息中的数字有:"+count3+"个");
            System.out.println("该信息中的空格有:"+count4+"个");
        }
    }
    
    2.    使用反射机制完成学生对象的创建并输出学生信息。(7分)
    要求:
    (1)    定义一个学生类Student,其中包含姓名(String)、年龄(int)、成绩(float)的属性。
    (2)    编写带参与无参构造方法。
    (3)    重写父类的toString()方法用于输出学生的信息。
    (4)    编写测试类TestStudent,从键盘录入学生的信息格式为(姓名:年龄:成绩)一次性录入使用“:”分隔,举例(mary:20:90)。
    (5)    使用String类的split方法按照“:”进行分隔。
    (6)    调用Constructor的newInstance()方法并用分隔后的信息初始化学生对象。
    (7)    调用重写父类的toString()方法将学生信息进入输出显示。
    
    public class student_2 {
        public String name;
        public int age;
        public float grade;
    
        public student_2() {
        }
    
        public student_2(String name, int age, float grade) {
            this.name = name;
            this.age = age;
            this.grade = grade;
        }
    
        @Override
        public String toString() {
            return "student_2 [姓名=" + name + ", 年龄=" + age + ", 成绩=" + grade + "]";
        }
    }
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Method;
    import java.util.Scanner;
    
    public class TestStudent_2 {
        public static void main(String[] args) throws Exception {
            Scanner sc =new Scanner(System.in);
            System.out.println("请输入学生信息(格式为:姓名:年龄:成绩)举例(mary:20:90):");
            String info = sc.nextLine();
            String[] str = info.split(":");
            String name = str[0];
            int age =Integer.parseInt(str[1]);
            float  grade =Float.parseFloat(str[2]);
            //创建Class
            Class<?> clazz = Class.forName("作业16_1_5_XML_正则_反射.student_2");
            //获取Studen的构造器
            Constructor<?> con = clazz.getConstructor(String.class,int.class,float.class);
            //创建对象并初始化Student
            Object obj = con.newInstance(name,age,grade);
            //调用指定方法
            Method m = clazz.getDeclaredMethod("toString");
            m.invoke(obj);
        }
    }
    
    3.    将表中的数据用XML文档表示出来
    班级编号    班级人数    学号    姓名    出生日期
    08001    32    0800101    赵明    1985-12-23
    08002    28    0800201    胡广飞    1985-10-05
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT  students (student*)>
       <!ELEMENT  student (classId,number,name,data)>
       <!ATTLIST  student id CDATA #REQUIRED>
       <!ELEMENT classId (#PCDATA)>  
       <!ELEMENT number (#PCDATA)>  
       <!ELEMENT name (#PCDATA)>  
       <!ELEMENT data (#PCDATA)>  
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE students SYSTEM "student_3.dtd">
    <students>
      <student id="0800101">
      <classId>08001</classId>
      <number>32</number>
      <name>赵明</name>
      <data>1985-12-23</data>
      </student>
      
      <student id="0800201">
      <classId>08002</classId>
      <number>28</number>
      <name>胡广飞</name>
      <data>1985-10-05</data>
      </student>
    </students>
    
    import java.util.List;
    import java.util.Iterator;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class student_3 {
        /**
         * 3.将student_3.XML的数据用XML文档表示出来
         * @throws DocumentException 
         */
        public static void main(String[] args) throws DocumentException {
            //1.读取文件形成DOM树
            SAXReader sr=new SAXReader();
            Document doc = sr.read("Student_3.xml");
            //2.获取根节点students
            Element el = doc.getRootElement();
            //3.从根节点中获取所有students信息
            Iterator<Element> it = el.elementIterator();//迭代器遍历节点信息
            //4.处理所有的student信息
            while(it.hasNext()){
                //获取一个学生信息
                Element ele = it.next();
                //获取一个学生的所有属性并输出:id
                List<Attribute> list = ele.attributes();
                for (Attribute a : list) {
                    String id = a.getName();
                    String text = a.getText();
                    System.out.println(id+"-"+text);
                }
                //获取一个学生的所有子元素并输出:name age score
                Iterator<Element> it2= ele.elementIterator();
                while(it2.hasNext()){
                    //获取一个子元素 
                    Element next = it2.next();
                    //获取一个子元素名称
                    String name=next.getName();
                    //获取元素文本
                    String info = next.getText();
                    System.out.println(name+"="+info);
                }
                System.out.println("--------------------");
            }
            
        }
    }
    
    六、    可选题
    1.    根据下面内部DTD文档,完成后继的xml文档.
    <!DOCTYPE 教师资料[
        <!ELEMENT 教师资料(教师_inf)>
        <!ELEMENT 教师_inf(教师,配偶?)>
        <!ELEMENT 教师(姓名,年龄,性别,专业,电话)>
        <!ELEMENT 姓名(#PCDATA)>
        <!ELEMENT 年龄(#PCDATA)>
        <!ELEMENT 性别(#PCDATA)>
        <!ELEMENT 专业(#PCDATA)>
        <!ELEMENT 电话(#PCDATA)>
        <!ELEMENT 配偶(姓名,性别)>
        <!ELEMENT 性名(#PCDATA)>
            <!ELEMENT 性别(#PCDATA)>
    ]>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE students SYSTEM "TeachInfo_4.dtd">
    <教师_inf>
        <教师 >
            <姓名>朱元璋</姓名>
            <年龄>35</年龄>
            <性别>男</性别>
            <专业>军事</专业>
            <电话>110</电话>
        </教师>
        <配偶 >
            <姓名>马皇后</姓名>
            <性别>女</性别>
        </配偶>
    </教师_inf>
    import java.util.Iterator;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class Teach_4 {
        public static void main(String[] args) throws Exception {
           //创建事件处理器
           SAXReader sr = new SAXReader();
           Document doc = sr.read("TeachInfo_4.xml");
           //获取xml的根节点
           Element root = doc.getRootElement();
           //遍历根节点
           Iterator<Element> it = root.elementIterator();
           while(it.hasNext()){
               Element el = it.next();
               //获取根节点属性值
               Iterator<Element> it2 = el.elementIterator();
               while(it2.hasNext()){
                   Element el2 = it2.next();
                   String name = el2.getName();
                   String text = el2.getText();
                   System.out.println(name+"="+text);
               }
           }
        }
    }
  • 相关阅读:
    题解【51nod 1290 Counting Diff Pairs】
    题解【luogu3709 大爷的字符串题】
    数据库唯一索引冲突不抛出异常的两种方式
    git 查看远程分支最后一次提交时间
    Java占位符
    IntelliJ IDEA注册码
    git忽略本地文件
    ThreadPoolExecutor参数
    MyBatis是如何解决Sql注入的
    Java 泛型
  • 原文地址:https://www.cnblogs.com/topshark/p/10252008.html
Copyright © 2020-2023  润新知