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. 跨平台移动APP开发进阶(四)AngularJS简介

    AngularJS 是一个为动态WEB应用设计的结构框架.它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚.简洁地构建你的应用组件. 它的创新点在于,利用 数据绑定 和 依赖注入 ...

  2. Android开发艺术探索——新的征程,程序人生路漫漫!

    Android开发艺术探索--新的征程,程序人生路漫漫! 偶尔写点东西分享,但是我还是比较喜欢写笔记,看书,群英传看完了,是学到了点东西,开始看这本更加深入Android的书籍了,不知道适不适合自己, ...

  3. 如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析

    转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/51159419 如何优化你的布局层级结构之RelativeLayout和LinearLa ...

  4. 单向循环链表C语言实现

    我们都知道,单向链表最后指向为NULL,也就是为空,那单向循环链表就是不指向为NULL了,指向头节点,所以下面这个程序运行结果就是,你将会看到遍历链表的时候就是一个死循环,因为它不指向为NULL,也是 ...

  5. 我所理解的Android 启动模式

    首先,这是从 一个开源网站转载的,觉得写得不错,对我们之前理解的activity的启动模式是一个新的理解方式,并给出实际的应用场景. 任务栈是什么 任务栈Task,是一种用来放置Activity实例的 ...

  6. 【LaTeX排版】LaTeX使用--入门基础<一>

    经过两个多星期,毕业论文终于写完了.由于自己对Word软件并不是很熟悉,再加上在数模时见识过LaTex的强大之处,于是就决定用LaTex进行论文的排版.使用LaTex可以避免像Word那样换台机器而出 ...

  7. OAF实现下拉菜单联动

    当需要输入多个下拉菜单选项时,可能某些下拉菜单是有级联关系的.这时候就需要使用级联的下拉菜单来解决.下面的教程将介绍如何使用ppr制作级联下拉菜单 一.新建AM 在test.oracle.apps.c ...

  8. “《编程珠玑》(第2版)第2章”:A题(二分搜索)

    A题是这样子的: 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数(在文件中至少缺失一个这样的数据——为什么?).在具有足够内存的情况下,如何解决该问题?如果有几 ...

  9. ruby轻松自删除代码

    因为windows的文件删除机制和unix like的不一样,so不保证如下代码能在windows中使用,哪位童鞋帮我在windows中测试一下也好啊! #!/usr/bin/ruby 5.times ...

  10. 使用XStream是实现XML与Java对象的转换(6)--持久化

    九.持久化 在第八节的示例中,当我们操作一组对象时,我们可以指定Writer.OutputStream来写出序列化后的XML数据,我们还可以指定Reader.InputStream来读取序列化后的XM ...