正则表达式+XML+反射+设计模式作业
正则表达式+XML+反射+设计模式作业
一、 填空题
- Class.forName('com.bjsxt.stumgr.entity.Student').newInstance( ); 语句的作用是___利用反射创建Student对象_ _______________________________。
- 在Java中使用SAX解析XML文档主要有两个部分,一个是SAX解析器,一个是 DOM 。
- Java反射技术中,每个Method对象对应一个方法,获得Method对象后,可以调用其_invoke__________来调用对应方法。
- 在DTD的个数限制中常使用的符号是: *,+,? 。
- DOM是Document Object Model的缩写,即 文档对象模型 。
- XML文档中语句<!DOCTYPE dlib SYSTEM “mydtd.dtd”>中SYSTEM的作用是 链接外部DTD文件 。
- 如果希望子元素出现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. |
属性值必须用引号引上 |
三、 判断题
- Java反射技术中,对于一个private修饰的成员变量,可以再设置setAccessible(true)后进行暴力访问。( T )
- 在Java中,只要给定类的名字,那么就可以通过 Java反射技术来获得类的所有信息,进而创建对象和执行方法。( F )
- Java反射机制是指:Java程序可以加载一个运行时才得知名称的类,获悉其完整结构信息(但不包括methods定义),并生成其对象实体、或对其fields设值、或调用其methods。( T )
- XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。( F )
- 在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称为DOM树)。( T )
- 在XML文档中引用DTD的关键字是ENTITY。( F )(ELEMENT)
四、 简答题
- XML的主要特点有哪些?
答:XML的特点主要表现在以下几个方面。
1) 良好的可读性
2) 方便的可扩展性
3) 数据内容与其形式的分离
4) 便于信息的检索
5) 可以轻松地跨平台应用
6) 支持不同文字不同语种间的信息交互
7) 大大改善网页的超链接性能
8) 能够实现数据粒状地更新
- 简述XML的相关技术?
答:XML的相关技术主要包括:DTD与XML Schema技术、CSS和XSL样式技术、DOM技术、XLink和XPath链接技术等。
- 简述XML技术的主要应用?
答:DTD与XML Schema技术用于规范和验证XML文档的,CSS和XSL样式表技术用于格式化显示XML文档的,DOM技术用于把XML文档作为数据对象进行显示和编程处理的,XLink和XPath链接技术在XML文档中使用。
- 什么是XML?为什么要用XML?
答:可扩展标记语言(XML)是用来描述一种称为XML的文件的数据对象,同时也部分描述了处理这些数据对象的计算机程序的行为。XML实质上是一种电子文档信息的自定义语言。任何人、任何行业都可遵循这些规则,自己定义各种标记来描述信息中的所有数据元素,然后通过一种被称为解析器的小程序进行处理。
SGML功能强大,但过于复杂:HTML功能简单,但无法处理大量的结构化信息。XML语言既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性和易用性,能够满足万维网的规则----简单性
XML信息组织与描述方式的分离,不仅改变了HTML的固定标记集,并从根本上改变了传统网页的信息组织方式,设计了一种让所有计算机系统都能够进行“智能”交流的语言。使用得基于信息传输的互联网在信息获取、检索和交换方面发生了巨大改变,为互联网的智能化奠定了基础。XML可轻松地跨平台,充当不同格式数据进行交换的桥梁。
- 什么是(Reflection)反射?其它语言有这种特点吗?
答:Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装配,无须在组件之间进行链接。反射允许在编写与执行时,使用程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这种反射成为构建灵活应用的主要工具。需注意的是,如果使用不当,反射的成本会很高。
Java中的类反射Reflection是Java程序开发语言的特片之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。Java的这一能力在实际应用中也许用得不是很多,但是在其它的语言中根本就不存在这一特性。例如,Pascal、C或者C++中就没有办法在程序中获得与函数定义相关的信息。
- 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+反射+设计模式作业的更多相关文章
- Java 反射 设计模式 动态代理机制详解 [ 转载 ]
Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...
- JavaSE学习总结第27天_反射 & 设计模式 & JDK5、7、8新特性
27.01 反射_类的加载概述和加载时机 类的加载:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载:就是指将class文件读 ...
- XML&反射
本节内容: XML DTD约束 Schema约束 dom4j解析 反射 为了实现访问不同路径(/hello)执行不同的资源(HelloMyServlet),我们需要使用XML进行配置:为了限定XML内 ...
- python笔记5 接口类抽象类 封装 反射 设计模式 模块 :random随机数 josn shelve持久化存储
接口类抽象类 接口类:接口类就是制定一个规则,让其他人按照我的规则去写程序. #!/usr/bin/env python from abc import ABCMeta,abstractmethod ...
- Python——python读取xml实战,作业6(python programming)
cd_catalog.xml <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Edited ...
- 【腾讯GAD暑期训练营游戏程序班】游戏中的设计模式作业说明文档
- Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程
[.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...
- Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)
Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...
随机推荐
- first one
我说一句话你就知道我是干什么的 hello world
- 背水一战 Windows 10 (71) - 控件(控件基类): UIElement - RenderTransform(2D变换), Clip(剪裁)
[源码下载] 背水一战 Windows 10 (71) - 控件(控件基类): UIElement - RenderTransform(2D变换), Clip(剪裁) 作者:webabcd 介绍背水一 ...
- kernel解析dtb为节点
title: 解析dtb为节点 date: 2019/4/26 14:02:18 toc: true --- kernel解析dtb为节点 head.s入口传递 回顾 看以前的笔记 kernel(二) ...
- Android NDK学习(六): so文件兼容之abiFilters的使用
最近项目中遇到了要使用opencv的情况,涉及到了abi兼容的选择.因为如果全部都适配的话,包很大,这样兼容那些用户数极少的cpu就很不划算,所以我只适配了armeabi-v7a这一个.但是今天在x6 ...
- spring框架学习笔记7:事务管理及案例
Spring提供了一套管理项目中的事务的机制 以前写过一篇简单的介绍事务的随笔:http://www.cnblogs.com/xuyiqing/p/8430214.html 还有一篇Hibernate ...
- Linux学习笔记《六》
- webrtc vad小bug
当channel为5的时候offset为80,再进行下面的操作smallest_values[j + 1]将会越出数组的限界到”第97个“:应该将下图的16改为15 low_value_vector数 ...
- Ubuntu 18.0.4安装docker
第一步:如果之前安装过docker,执行下面命令删除 apt-get remove docker docker-engine docker.io 删除后执行sudo apt-get update更新软 ...
- docker学习篇(一) ----入门篇
什么是docker docker自2013年诞生以来已有5年了,最初基于Google公司的go语言实现的,项目代码在GitHub上进行维护. 项目地址:https://github.com/moby/ ...
- 课程三(Structuring Machine Learning Projects),第一周(ML strategy(1)) —— 0.Learning Goals
Learning Goals Understand why Machine Learning strategy is important Apply satisficing and optimizin ...