XML
常用于配置文件、传输数据。
<?xml version="1.0" encoding="UTF-8"?><persons>    <person id="p001">        <name>张三</name>    </person></persons>xml文档必须以<?xml 开头 以?>结束;version 指定xml文档版本,encoding指定当前文档的编码,默认是utf-8;元素:元素区分大小写,不能使用空格,不能使用冒号:,必须只有一个根元素 <persons>属性:属性是元素的一部分,一个元素可以有N个属性,不可以同名,不能使用空格冒号等特殊字符,以字母开头。 id="p001"注释:<!--xml注释 -->

转义字符
&lt;小于 &gt;大于 &quot; 等
CDATA区
<![CDATA[
任意内容 代码之类的
]]>
<![CDATA[if(a>b && b<c){if....}]]>

DTD约束文档
文档类型定义,用来约束XML文档,规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。
DTD语法
<!ELEMENT web-app (servlet*,servlet-mapping*,welcome-file-list?) >
web-app 包括3个元素,且必须顺序出现。
servlet 子标签个数任意
servlet-mapping 子标签个数任意
welcome-file-list 子标签最多只能出现一次
? 表示该对象可以出现,但只能出现一次
* 表示该对象允许出现任意多次,也可以是零次
+ 表示该对象最少出现一次,可以出现多次
() 用来分组
| 出现的对象中选择一个 (man | women)
, 表式对象必须按指定的顺序出现 (a,b,b)
DTD约束
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
<web-app>    <context-param>        <param-name></param-name>        <param-value></param-value>    </context-param></web-app>

引入约束后 按照 约束格式书写xml
Schema约束
Schema是新的xml文档约束,要比DTD强大很多,是DTD替代者。
Schema扩展名是xsd,而不是xml. 支持名称空间。
XML解析
https://dom4j.github.io/
使用dom4j 可以创建、修改、读取XML文件。
SAXReader reader = new SAXReader();Document document = reader.read("src/hh.xml");// 根节点Element root = document.getRootElement();//获取属性的值String version = root.attributeValue("version");System.out.println("Version:"+version);

List<Element> allChildElement = root.elements();for(Element child : allChildElement){    String childName = child.getName();    System.out.println(childName);

    if("head".equals(childName)){        Element title = child.element("title");        String titleTxt = title.getText();        System.out.println(titleTxt);    }}

网络通信协议
有两种TCP/IP 协议和UDP 协议,常用的是TCP/IP协议。
UDP协议:无连接通信协议,数据发送端和接受端不需要建立网络连接。如果接受端不在收不到,无法保证数据完整性。如:发短信不用考虑对方在不在线。数据限制在64kb以内。
TCP协议:面向连接的通信协议,数据发送端和接受端需要建立网络连接。在TCP连接中必须要明确客户端与服务器端,由客户端向服务器端发出连接请求,每次连接的出啊过年就爱你都需要经过三次握手,cs->bs请求 bs->cs回应 cs->bs再次请求 确认连接。如:打电话 需要双方在线。数据完整,适合大数据传输。
IP地址
每台电脑的地址, 192.168 局域网 127.0.0.1 本机
端口号 一个地址多个端口 对应不同程序
InetAddress类
InetAddress.getLocalHost() //本地主机地址 192.168.20.104
UDP发送
public static void UDPSend() throws IOException {
//要发送的数据
byte [] data = "你好UDP".getBytes();
//发送的目标
InetAddress inet = InetAddress.getByName("127.0.0.1");
//6000是端口号
DatagramPacket dp = new DatagramPacket(data,data.length,inet,6000);
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
ds.close();
}
UDP接收
public static void UDPReceive() throws IOException{
DatagramSocket ds = new DatagramSocket(6000);
byte [] bytes = new byte [1024];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
ds.receive(dp);
System.out.println(new String(bytes));
ds.close();
}
TCP 在JDK中 两个类用于实现TCP程序,一个是ServerSocket服务端 ,另一个是 Socket客户端。 服务器端不会主动连接客户端。
服务器端
ServerSocket ss = new ServerSocket(8888);
//监听
Socket socket = ss.accept();
InputStream in = socket.getInputStream();
byte[] data = new byte[1024];
int len = in.read(data);
System.out.println(new String(data,0,len));
//服务器向客户端发送
OutputStream ot = socket.getOutputStream();
ot.write("服务器收到了".getBytes());
ot.close();
socket.close();
ss.close();
客户端
//创建socket对象 连接服务器
Socket socket = new Socket("127.0.0.1",8888);
OutputStream out = socket.getOutputStream();
out.write("TCP发送".getBytes());
out.close();
//获取服务器响应
InputStream in = socket.getInputStream();
byte[] bytes = new byte[1024];
int len = in.read(bytes);
System.out.println(new String(bytes,0,len));
类加载器
当程序要使用某个类时,如果该类还没加载到内存中,要经过加载,连接,初始化三步来对这个类进行初始化。
加载:将class文件读入内存中,创建一个class对象。
连接:检验是否有正确的内部结构,将静态成员分配内存,并设置初始化值。
初始化:初始化对象 new对象
通俗的讲就是把.class文件加载到内存里,并把这个.class文件封装成一个Class类型的对象。
Bootstrap ClassLoader 根类加载器
也被称为引导类加载器,负责Java核心类的加载 比如System、String等,在JDK中JRE的lib目录下rt.jar文件中
Extension ClassLoader 扩展类加载器
负责JRE的扩展目录中jar包的加载,JDK中JRe的lib目录下ext目录
System ClassLoader 系统类加载器
负责在JVM启动时加载来自Java命令的class文件,以及classpath环境变量所指定的jar包和类路径。
反射
Java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法。对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Class类
Class类没有构造方法,Class对象实在加载类时由Java虚拟机以及通过调用类加载器中的defineclass方法自动构造的。
得到class对象
方法一:通过对象获取
Person p = new Person();
Class cls = p.getClass();
方法二:通过类名获取
Class cls = Person.class;
方法三:Class方法获取
Class cls = Class.forName("Person") //CLassNotFOundException
通过反射获取无参构造方法并使用
Class cls = Main.class;
//返回无参构造函数
Constructor con = cls.getConstructor();
//运行获取到的构造方法
Object obj = con.newInstance();
通过反射获取有参构造方法并使用
Class cls = Person.class;
//传入相应的参数列表
Constructor con = cls.getConstructor(String.class,Integer.class)
//运行获取到的有参构造方法
Object obj = con.newInstance("zhangsan",18);
通过反射获取又遭方法并运行的快速方式
Class cls = Person.class;
Object obj = cls.newInstrance(); //无参构造方法
反射获取私有构造方法并使用
Class cls = Person.class;
//返回包含私有的构造方法
Constructor con = cls.getDeclaredConstructor(Integer.class);
//获取私有的
con.setAccessible(true);
Object obj = con.newInstance(18);
反射获取成员变量并改值
Class cls = Person.class;
//获取成员变量
Field filed = cls.getField("name");
Object obj = cls.newInstrance();
//赋值
filed.set(obj,"libai");
反射获取成员方法 无参并运行
Class cls = Main.class;
Object obj = cls.newInstance();
Method m = cls.getMethod("sayHi");
//运行获取到的方法
m.invoke(obj);
反射获取成员方法 有参并执行
Class cls = Main.class;
Object obj = cls.newInstance();
Method m = cls.getMethod("sayHi",String.class);
m.invoke(obj,"david")
反射泛型擦除
在String泛型中加integer类型的数据
ArrayList<String> array = new ArrayList<String>();
array.add("a");
//编译器会报错
//array.add(1);
//反射方式,添加int类型
Class c = array.getClass();
Method method = c.getMethod("add", Object.class);
method.invoke(100);
System.out.println(array);
反射通过配置文件来决定运行的步骤
FileReader r = new FileReader("config.properties");
Properties pro = new Properties();
pro.load(r);
r.close();
String className = Pro.getProperty("className");
String methodName = pro.getProperty("methodName");
Class c = Class.forName(className);
Object obj = c.newInstance();
Method method = c.getMethod(methodName);
method.invoke(obj):
className=Person
methodName=sayHi

转载于:https://www.cnblogs.com/baidawei/p/8875752.html

xml、网络编程、 反射相关推荐

  1. qn模块java脚本_Qn271 对于网络编程 反射 IO 线程的一些一本入门程序 多多联系会加快 速度 WinSock-NDIS 269万源代码下载- www.pudn.com...

    文件名称: Qn271下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 673 KB 上传时间: 2015-05-13 下载次数: 0 提 供 者: 褚晓旦 详细 ...

  2. week_06_动态代理,工厂方法,单例,File,IO,网络编程,反射,数据库语句

    动态代理 动态代理核心思想: 再程序执行过程中通过一些特殊的方式产生代理 jdk动态代理: 前提必须有一个接口 java.lang.reflect.Proxy:提供了创建动态代理类和实例的静态方法 p ...

  3. Properties类,InetAddress类,网络编程,反射,Mysql数据库

    文章目录 properties类 InetAddress类 网络编程 三要素: 反射 获取Person类字节码文件对象 获取指定的构造方法 创建该类实例 获取成员变量 获取成员方法 设计模式: Mys ...

  4. (006)网络编程,反射及其应用,MySQL数据库

    摘要 : 本周感觉学的好多,网络编程UDP/TCP网络协议,通信读取传输文件,反射的思想,相关方法,JDK动态代理,数据库DDL数据库定义语句,DML数据库操作语句,DQL数据库查询语句,以及6种约束 ...

  5. android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术

    本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...

  6. 5_异常_多线程_设计模式_IO流_网络编程_反射

    JavaSE_第五周 异常 异常的概念 什么是异常 概念 概念:程序在运行过程中出现的特殊情况异常-----通过Jvm将异常的信息打印在控制台---告诉开发者(当前程序在某个环节出现了哪些问题!) 异 ...

  7. 网络编程和反射的基本知识点的总结

    1.网络编程 1.网络: 就是不同地域,不同型号,不同ip等多态计算机相互连接沟通形成的通信系统 2.元素: 看的见的元素: 网线.交换机.计算机.内存条等一系列的硬件设备 看不见的元素: 传输协议. ...

  8. :Android网络编程--XML之解析方式:SAX

    任何放置在资源(res)目录下的内容可以通过应用程序的R类访问,这是被Android编译过的,而任何放置在资产(assets)目录下的内容会保持它的原始文件格式,为了读取它们,必须使用AssetMan ...

  9. jAVA EE NZ2001 java EE学习总结 第七周(包含思维导图) 主要内容I/O框架、网络编程、反射

    第七周 Day31.Day32 I/O框架 流的概念 内存与存储设备之间传输数据的通道 流的分类 按方向[重点] 输入流 将存储设备中的内容读入到内存中 输出流 将,<内存>中的内容写入到 ...

  10. Java:多线程、网络编程(UDPTCP)、XML、枚举、注解、单元测试、日志

    20 线程:生产者消费者 等待和唤醒的方法 为了体现生产和消费过程中的等待和唤醒,Java就提供了几个方法供我们使用,这几个方法在Object类中 Object类的等待和唤醒方法: 方法名 说明 vo ...

最新文章

  1. 【IDEA】干掉注释自动在行首
  2. 悟空分词与mysql结合_Mysql联合查询UNION和UNION ALL的使用介绍
  3. cJSON_译(C中的超轻量级JSON解析器)
  4. [矩阵乘法/快速幂专题]Arc of Dream,Recursive sequence,233 Matrix,Training little cats
  5. iphone控制电脑_这可能是首款能在电脑上控制iPhone的工具
  6. 中国甲腈行业市场供需与战略研究报告
  7. 每天干攻防,都不会写驱动了
  8. 秋招已过,各大厂的面试题分享一波 附C++实现
  9. ruby 调用java_利用RJB在Ruby on Rails中使用Java代码的教程
  10. 爬取国家统计局数据正式篇
  11. matlab中怎么计算信噪比,如何计算通信中的信噪比SNR
  12. 数据与广告系列三:合约广告与与衍生的第三方广告数据监控
  13. 智能推荐--协同过滤
  14. 【学术写作规范】论文写作注意事项
  15. 英语语言标准C1,【CEFR】国际通用的学生英语能力水平评测标准
  16. 搞透并发编程---可见性
  17. 极简使用︱Glove-python词向量训练与使用
  18. 美股 基础知识2-常见问答
  19. OpenCV边界外推和边界处理
  20. 我和妹妹的“大富翁计划”

热门文章

  1. time函数python_python time模块函数
  2. python 输出颜色的设置
  3. js 正则或_Web前端工程师要知道的JS 常用正则表达式
  4. github ssh 配置_搭建自己的技术博客系列 2:把 Hexo 博客部署到 GitHub 上
  5. 台风怎么看内存颗粒_【无趣】使用300多元的D4 16G内存是种什么体验
  6. 网游源码完整服务端_【每日源码】微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。...
  7. 使用Java FXGL构建太空游侠游戏
  8. python初学者教程下载_初学者Python教程
  9. java jvm内存模型_Java(JVM)内存模型– Java中的内存管理
  10. 编程 单引号 双引号_我的25个最喜欢的编程引号也很有趣