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

xml、网络编程、 反射的更多相关文章

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

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

  2. iOS:网络编程中三个数据解析协议HTTP、XML、JSON的详细介绍

    网络编程:HTTP协议.XML数据协议.JSON数据协议: HTTP: 1.HTTP传输数据有四种方式:Get方式.Post方式.同步请求方式.异步请求方式. 说明:同步和异步请求方式在创建链接对象和 ...

  3. 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V2 -- 本地方法调用 整合 Spring

    网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2——RPC -- 本地方法调用 + Spring 1. 配置applicationContext.xml文件 注入 bean 及 管理 bean ...

  4. 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V3 -- 远程方法调用 整合 Spring

    网络编程 -- RPC实现原理 -- 目录 啦啦啦 V3——RPC -- 远程方法调用 及 null的传输 + Spring 服务提供商: 1. 配置 rpc03_server.xml 注入 服务提供 ...

  5. 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V4 -- 远程方法调用 整合 Spring 自动注册

    网络编程 -- RPC实现原理 -- 目录 啦啦啦 V4——RPC -- 远程方法调用 + Spring 自动注册 服务提供商: 1. 配置 rpc04_server.xml 注入 服务提供商 rpc ...

  6. 猫哥网络编程系列:详解 BAT 面试题

    从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...

  7. HTTP请求 GET POST 网络编程实现

      HTTP请求 GET POST 网络编程实现(转) 原文地址 http://bbs.neworigin.net/forum.php?mod=viewthread&tid=488 在开发网络 ...

  8. ios网络编程学习

    //网络访问获取数据//定义一个UIWebView属性,用来展示数据 @property (strong, nonatomic) IBOutlet UIWebView *myWebView; //.. ...

  9. [转]C#网络编程(订立协议和发送文件) - Part.4

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx 源码下载:http://www.trac ...

  10. Python开发【第八篇】:网络编程 Socket

    Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

随机推荐

  1. Optimizing Item Import Performance in Oracle Product Hub/Inventory

    APPLIES TO: Oracle Product Hub - Version 12.1.1 to 12.1.1 [Release 12.1] Oracle Inventory Management ...

  2. 【一天一道LeetCode】#54. Spiral Matrix

    一天一道LeetCode系列 (一)题目 Given a matrix of m x n elements (m rows, n columns), return all elements of th ...

  3. STL(标准模板库)理论基础,容器,迭代器,算法

    基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.   ...

  4. EventBus 最简易的使用方式

    呃,要跟上时代的步伐,所以来学习一下EventBus(话说好像现在学也已经算是跟不上了..嘛..不管了,一步一步往前追,应该还来得及吧). 转载请注明出处:http://blog.csdn.net/w ...

  5. (二十八)QQ好友列表的展开收缩

    要通过监听HeaderView上面的Button来进行操作: 通过addTarget方法即可,应该将按钮的点击方法封装在HearView控制器内部. 列表收起来的原理: tableView: numb ...

  6. 对C语言中递归算法的分析

    C通过运行时堆栈支持递归函数的实现.递归函数就是直接或间接调用自身的函数.     许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的<C语言程序设计> ...

  7. 断言(Assertion)需要注意的一个地方

    因为断言只在debug构建中有效,所以它是中关重要的去避免运行任何代码或调用任何方法在断言条件中,而这些代码或方法会影响程序的状态. 否则程序的行为将在debug和release构建中变得不一致,这显 ...

  8. Myeclipse Db Browser使用

    1.打开Myeclipse,选择菜单栏Window-->Show View-->Other,展开MyEclipse Database,选择DB Browser,打开数据库浏览视图 2. 空 ...

  9. Linux 获得机器的IP和网卡信息

    Linux 获得机器的IP和网卡信息 代码来自于网络, 我改写了, 有美不敢自专, 特分享之.用法很简单,就3个函数. 头文件getmac.h: /** * getmac.h * * 2014-07- ...

  10. C语言在linux内核中do while(0)妙用之法

    为什么说do while(0) 妙?因为它的确就是妙,而且在linux内核中实现是相当的妙,我们来看看内核中的相关代码: #define db_error(fmt, ...) \ do { \ fpr ...