JavaSE-6
来源:互联网 发布:玩dnf网络冲突怎么办 编辑:程序博客网 时间:2024/06/06 10:54
线程死亡的原因有三个,一个是正常运行的线程完成了它的全部工作;另一个是线程被强制性地终止,如通过stop方法来终止一个 线程【不推荐使用】;三是线程抛出未捕获的异常
返回目前执行的线程:
pulic static Thread currentThread()
返回线程的名称:
Public final String getName()
设定线程的名称:
Public final void setPriority(String name)
返回线程的优先级:
Public final int getPriority()
调用该方法的线程强制执行(插队,优先级最高):
Public final void join()
判断线程是否在活动:返回true和false
Public final Boolean isAlive()
表示黄灯
Public final void yield()
强迫线程停止执行(已过时):
Public final void stop()
等待(需唤醒,对参数时用于循环):
Public dinal void wait()
唤醒单个线程:
nofity()
唤醒全部线程:
nofityAll()
三种暂停方式:
Sleep:睡眠—>sleep(毫秒, 纳秒) 例:sleep(100, 0)
Yiald:让出,暂停
Join:插队,强制cpu执行当前线程,其他线程阻塞
Wait:等待,进入阻塞状态,需要唤醒操作
同步代码块:方法àsynchronized()à同步监视器
同步和异步的区别:一个是方法上锁,一个是对象上锁
同步的前提:
Ø 必须有两个或两个以上的线程
Ø 必须是多个线程使用同一资源
Ø 必须保证同步中只能有一个线程在运行
过多的同步将产生死锁
网络编程的三要素:
IP地址:唯一标识
端口号:计算机应用的标号,代表一个应用程序,0-1024系统使用或保留端口,有效端口是0-65536
通信协议:TCP,UDP,国际通用协议是TCP/IP协议
OSI参考模式:开放系统互连参考模型(Open System Interconnect)
TCP/IP参考模型:传输控制/网际协议 Transfer Controln Protocol/Internet Protocol IP地址 = 网络ID +主机ID网络
Ø ID:标识计算机或网络设备所在的网段
Ø 主机ID:标识特定主机或网络设备
0.0.0.0:本机
127.0.0.1:本机回环地址,用于本机测试
255.255.255.255:当前子网,一般用于向当前子网广播信息
获取主机名和IP地址:
Public static InetAddress getLocalHost()
获取IP地址:
Public String getHostAddress()
获取主机名:
Public String getHostName()
根据主机名获取IP地址:
Public static InetAddress getByName(String host)
获取百度的主机名:
InetAddress baidu=InetAddress.getByName("www.baidu.com");
System.out.println("百度的主机名:"+baidu.getHostAddress());
端口:port
端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端口,可以在一个主机上运行多个网络应用程序。
UDP:不需要建立连接, 数据报的大小限制在64k内,效率较高,不安全,容易丢包
TCP:需要建立连接, 效率相对比较低,数据传输安全,
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
Java中使用Socket完成TCP程序的开发,使用此类可以方便的建立可靠的、双向的、持续性的、点对点的通讯连接
服务器端使用ServerSocket
客户端使用一个Socket
客户端:建立连接à打开Socket关联的输入输出流à数据流中读写信息à关闭所有的数据流和Socket
服务器端:建立连接,处理发送到指定端口的数据à获取客户端对象à获取客户端对象à数据流中读写信息
Datagram(数据报):是分组交换的一种形式,就是把所传递的数据分段打成“包”,在传送出去,与传统“连接型”分组交换不同,它属于“无连接型”
DatagramSocket用于程序之间建立传递数据报的通信连接,客户端和服务器端都要建立
DatagramPacket用于表示一个数据报作为通信载体
格式良好的 XML 文档需满足:
Ø 必须有XML声明语句
Ø 必须有且仅有一个根元素
Ø 标签大小写敏感
Ø 属性值用双引号
Ø 标签成对
Ø 元素正确嵌套
XML基于文本格式,具有简单性、可扩展性、交互性和灵活性
DTD即文档类型定义--Document Type Definition
使每个XML文件可以携带一个自身格式的描述
一个DTD文档可能包含如下内容:
Ø 元素的定义规则
Ø 元素之间的关系规则
Ø 属性的定义规则
#PCDATA-可以含任何字符数据,但是不能在其中包含任何子元素。
纯元素类型-只包含子元素,并且这些子元素外没有文本
DOM基于XML树结构,比较耗资源,适合于多次访问XML
SAX基于事件,消耗资源小,适用于数据量较大的XML
JDOM比DOM快,仅使用于具体类而不使用接口
DOM4J非常优秀的Java XMLAPI,性能优异,功能强大,开放源代码
DocumentàgetElementByTagName(String name)、getDocumentElement()
NodeListà指包含了一个或者多个节点,item(int index)
Node是DOM结构中最基本的对象,代表了文档树中的一个抽象节点,getChildNodes()、getNodeName()、getNodeValue()
Element代表XML文档中的标签,getAttribute(String attributename)
使用DOM读取XML的步骤:
1. 创建解析器工厂对象
2. 由解析器工厂对象创建解析器对象
3. 由解析器对象对指定XML文件进行解析,构建相应DOM树,创建Document对象
4. 以Document对象为起点对DOM树的节点进行增删改查操作使用
在XML中添加节点数据的步骤:
1. 构造DOM树
2. 创建新节点
3. 添加到所属父节点
4. 保存XML文档
在XML中修改或删除数据的步骤
1. 构造DOM树
2. 找到符合条件的节点
3. 修改或删除节点
4. 保存XML文档
//【1】得到转换器工厂对象
TransformerFactory transfactory=TransformerFactory.newInstance();
//【2】得到转换器对象
Transformer trans=transfactory.newTransformer();
//【3】dom源对象
DOMSource source=new DOMSource(document);
//【4】设置输出格式
trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
trans.setOutputProperty(OutputKeys.INDENT,"yes");
//【5】流结果对象
StreamResult result=new StreamResult(newFileOutputStream("scores.xml"));
//【6】转换成xml文件
trans.transform(source, result);
DOM4J优点:开源、易用、应用于Java平台、使用大量接口
使用DOM4J解析XML的步骤
1. 导入dom4j的jar包,入相应的类
2. 指定要解析的XML文件
3. 把XML文件转换成Document 对象
4. 获取节点属性或文本值
ElementrootElm=document.getRootElement();//获得根节点
ElementmemberElm=root.element(“member”); //获得子节点
Stringtext=memberElm.getText();//获得节点文本
ElementageElm=newMemberElm.addElement(“age”);//添加子节点
ageElm.setText(“29”);//设置节点文本
parentElm.remove(childElm);//)删除某节点
将文档写入XML文件:
OutputFormatformat=OutputFormat.createPrettyPrint();
format.setEncoding("GBK");//指定XML编码
XMLWriter writer=newXMLWriter(new FileWriter("output.xml"),format);
writer.write(document);
writer.close();
ava反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
Java程序的运行过程:
.java文件à编译器à.class文件àJava虚拟机à运行程序
反射后Java程序的运行过程:
Java反射 .java文件à 编译器àß运行程序
Java反射:在编译时不确定哪个类被加载,而在程序运行时才加载、探知、使用
反射的作用:
1. 通过反射可以使程序代码访问装载到JVM 中的类的内部信息
2. 获取已装载类的属性信息
3. 获取已装载类的方法
4. 获取已装载类的构造方法信息
获取指定实例对象的Class
User n=new User();Class c=u.getClass;
获取当前Class的继承类Class
User n=new User();
Class c=u.getClass;
Class sc=c.getSuperclass():
.class直接获取
Class c=User.class;
用Class的静态方法,传入类的全称
Class.forName(“包名.类名”);
基本数据类型的封装类获取 Class的方式
Class c=封装类.TYPE;
在java.lang.reflect包中
Ø Class类:代表一个类
Ø Field类:代表类的成员变量(也称类的的属性)
Ø Method类:代表类的方法
Ø Constructor类:代表类的构造方法
Ø Array类:提供了动态创建数组,以及访问数组元素的静态方法。
//获得Class对象
Class c1=Class.forName("cn.bjsxt.bean.User");
全路径:c1.getName()
类名:c1.getSimpleName());
访问权限:Modifier.toString(c1.getModifiers())
是否是接口:c1.isInterface()
父亲全路径名:c1.getSuperclass().getName()
父类名:"+c1.getSuperclass().getSimpleName()
通过反射获取类的属性
Ø 获取public的属性:object.getFields()
Ø 获取所有的属性:object.getDeclaredFields()
Ø 根据属性名称获取public的属性信息: object.getField(“sex”);
Ø 根据属性名称获取属性的信息:object.getDeclaredField(“name”);
通过反射获取类的方法 :
获得公有的方法(包括父类的,接口的)等:object.getMethods();
获取全部的方法(本类定义的):object.getDeclaredMethods();
根据方法名称获得方法:object.getDeclaredMethods(“show”,null)
object.getDeclaredMethods(“show”,int.class,String.class);
获取方法参数的列表 :Class [] cm=方法对象.getParameterTypes();
通过反射获取类的构造方法
获得所有的构造方法:Constructor[]con=object.getDeclaredConstructors();
获得公有的构造方法:Constructor [] con=obj.getConstructors();
根据参数获得指定的构造方法:object.getConstructors(int.class,int.class,String.class);
object.getConstructors(null);
使用反射动态创建对象:
方法一:使用Class的newInstance()方法,仅适用于无参构造方法
Class<User>clazz=(Class<User>)Class.forName("cn.bjsxt.bean.User");
User u=clazz.newInstance();
方法二:调用Constructor的newInstance()方法,适用所有构造方法
Constructor<User> cons = clazz.getConstructor(int.class,int.class,String.class,String.class );
User u= cons.newInstance( 1001,19,"王一一","男");
反射技术优缺点:
• 反射提高了Java程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创建和控制任何类的对象,无需提前硬编码目标类
• 反射是其它一些常用语言,如C、C++、Fortran 或者Pascal等都不具备的
• Java反射技术应用领域很广,如软件测试、 EJB、JavaBean等
• 许多流行的开源框架例如Struts、Hibernate、Spring在实现过程中都采用了该技术
• 性能问题
• 使用反射会模糊程序内部逻辑
- JavaSE-6
- JavaSE 拾遗(6)——JavaSE 异常
- javase--6线程
- javase的复习-------6
- 传智播客javase总结 6
- javaSE
- javaSE
- javaSE
- JavaSE
- javase
- javase
- javaSE
- JAVASE
- JavaSE
- Javase
- javase
- javase
- JavaSE
- springMVC3和springMVC4解决ajax跨域请求的问题
- 自定义简陋版SpringMVC
- 图论题集收藏
- Java中关于String类型的10个问题
- JS日期
- JavaSE-6
- 【nyoj116】士兵杀敌二(线段树)
- 如何实现线程的同步
- Fake NP (Codeforces
- 电力系统项目学习(1)--项目介绍
- Asp.net SignalR 指定用户消息推送简单示例
- Leetcode-5: Longest Palindromic Substring
- Seal Report使用教程(二)——项目文件
- 不使用第三个值,实现两个变量的互换