正则表达式+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语句,条件为输入的字符不为'\n' 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);
}
}
}
}

正则表达式+XML+反射+设计模式作业的更多相关文章

  1. Java 反射 设计模式 动态代理机制详解 [ 转载 ]

    Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...

  2. JavaSE学习总结第27天_反射 & 设计模式 & JDK5、7、8新特性

      27.01  反射_类的加载概述和加载时机 类的加载:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载:就是指将class文件读 ...

  3. XML&反射

    本节内容: XML DTD约束 Schema约束 dom4j解析 反射 为了实现访问不同路径(/hello)执行不同的资源(HelloMyServlet),我们需要使用XML进行配置:为了限定XML内 ...

  4. python笔记5 接口类抽象类 封装 反射 设计模式 模块 :random随机数 josn shelve持久化存储

    接口类抽象类 接口类:接口类就是制定一个规则,让其他人按照我的规则去写程序. #!/usr/bin/env python from abc import ABCMeta,abstractmethod ...

  5. Python——python读取xml实战,作业6(python programming)

    cd_catalog.xml <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Edited ...

  6. 【腾讯GAD暑期训练营游戏程序班】游戏中的设计模式作业说明文档

  7. Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  8. [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程

    [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...

  9. Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)

    Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...

随机推荐

  1. 使用gulp+bebal实现前端自动化es6转es5的构建

    说明:es6语法已经越来越普及,但是一些低版本的浏览器不支持es6的语法特性,所以我们在开发完前端项目后,往往需要统一把前端es6的代码编译成es5的代码.本文介绍的就是如何手动和自动的把es6转成e ...

  2. 【Selenium专题】鼠标键盘事件

    引用包来自selenium-java-2.23.1.jar 调用以下代码时,需要引入actions类,以java为例: import org.openqa.selenium.interactions. ...

  3. maya2016卸载/安装失败/如何彻底卸载清除干净maya2016注册表和文件的方法

    maya2016提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装maya2016失败提示maya2016安装未完成,某些产品无法安装,也有时候想重新安装maya ...

  4. Windows 系统 IP 和端口的相关检测命令

    查看本机IP地址 查看自己电脑的ip,使用 ipconfig 命令 ipconfig 检测指定IP是否联通 检测某个ip是否可以连通,直接使用 ping 命令 ping 219.148.111.212 ...

  5. Linux 定位网络不通问题

    [参考文章]:ping命令入门详解 1. ipconfig / ifconfig 1. 作用: 检查本地的网络配置是否正确 2. ping 1. 作用: 一个十分好用的TCP/IP工具.它主要的功能是 ...

  6. MANIFEST.MF文件详解

    1. 依赖包是否在classpath中: 2. 资源文件目录是否在classpath中: 3. 主类是否正确: 具体配置参考 maven-jar-plugin 配置 <plugin> &l ...

  7. 第二篇:服务消费者(RestTemplate+ribbon)

    第一篇讲了服务的注册,这篇来说说服务的调用,服务与服务的通讯是基于http restful,springcloud的服务调用是通过ribbon方式的,客户端的负载均衡. Talk is cheap.S ...

  8. windows phone开发-windows azure mobile service使用入门

    在使用azure之前,我一直只能做本地app,或者使用第三方提供的api,尽管大多数情况下够用,但是仍不能随心所欲操纵数据,这种感觉不是特别好.于是在azure发布后,我就尝试使用azure来做为个人 ...

  9. 本地电脑无法连接到MySQL

    问题描述: ERROR 1130 (HY000): Host 'localhost' is not allowed to connect to this MySQL server 首先网上的问题大部分 ...

  10. Unsupervised learning无监督学习

    Unsupervised learning allows us to approach problems with little or no idea what our results should ...