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在实现过程中都采用了该技术

   性能问题

   使用反射会模糊程序内部逻辑

 

 

原创粉丝点击