java

阅读 / 问答 / 标签

Java多线程编程中lock.lock()是什么意思,在线等

就是jdk5开始的锁机制啊,Lock lock = ...;lock.lock()加锁了啊

用java写播放器 用的vlc 但是总报错

MyString(const char *cstr) { int len=strlen(cstr); m_pChars=new char[len+1]; memset(m_pChars,0,len); strcpy_s(m_pChars,len+1,cstr); } MyString(int size,const char &cstr) { m_pChars=new char[size+1]; memset(m_pChars,"",size+1); memset(m_pChars,cstr,size);

decimal在java中是什么类型

decimal在java中的用BigDecimal表示的。BigDecimal:不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。 BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。

Mysql中decimal(15,4)类型,java使用什么类型来定义?

decimal(15,4)表示的是最大可达15位(包含小数),小数四位,java用double就可以

decimal对应java什么类型

java.math.BigDecimal

decimal 在JAVA里怎么表示?

double或者float如果要控制小数点,看看格式化类哈。

decimal在java中是什么类型

decimal在java中的用BigDecimal表示的。BigDecimal:不可变的、任意精度的有符号十进制数。BigDecimal由任意精度的整数非标度值和32位的整数标度(scale)组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以10的负scale次幂。因此,BigDecimal表示的数值是(unscaledValue×10-scale)。BigDecimal类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。

java addActionListener 的错误 找不到符号

亲。listener写错了。。。多了一个r

javascript问题arguments.length

js数组默认下标从0开始,到 length-1结束,如果条件改为<=length,那么最后一个数组data["length"]不存在就会报错

关于JavaScript中argument.caller的理解问题!谢谢!

是arguments.callee,你都打错了

java,Object... arguments什么意思?和Object[]区别?

gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/MessageFormat.html你去看看吧。

在java中,arguments是什么意思

Java中arguments代表参数

java Eclipse arguments 参数的格式是怎样设置的?

参数0 参数1 参数2 中间一个空格或者,可以试试

java中long类型的取值范围到底是多少呢?

数字后面L没写

java 中 long类型转换成 long[]

自己新建long[] 然后添加数据

谁有java基础教程视频啊?菜鸟学习java..能给我发一下吗 谢谢啦!邮箱:jiujiuai_ni@163.com

没有,你去贴吧看看

javascript html 设计一个登录界面

刘明 回头来看

ABAP Proxy和JAVA Proxy的区别

Proxy分为两种,ABAPProxy和JAVAProxy。他们之间的不同不仅在于语言,ABAPProxy在应用端(R/3等)生成的,JAVAProxy是从IR中生成的.JAR文件。但是它们都是依据messageinterface中的WSDL产生的。 Proxy具有与messageinterface相同的属性:Inbound,Outbound,Synchronous,&n... Proxy分为两种,ABAP Proxy和JAVA Proxy。他们之间的不同不仅在于语言,ABAP Proxy在应用端(R/3等)生成的,JAVAProxy是从IR中生成的.JAR文件。但是它们都是依据message interface中的WSDL产生的。 Proxy具有与message interface相同的属性:Inbound, Outbound, Synchronous, Asynchronous做ABAP Proxy之前,要用 RZ70去建立R/3与PI的连接。这里还可能需要用SM59去定义相应的RFC Destination。用SMGW可以在PI的端找到相应的Service。(S-y$l4A%v" ^+c#U Table:SPROXSET,是用来设置SPROXY权限的,可以查找在这张表里查找自己是不是有权限。4 S8{5w:U9KT-CODE:SPROXY就是在Application端生成PROXY的主要工具,在这之前,你需要在PI端设置好相应的Message Interface,SAP端才能根据Message Interface的WSDL生成ABAP ProxyJAVAProxy相对简单,只要在Message Interface中右击相应的Message Interface,会有Java Proxy Generation选项,就可以自动生成JAVAProxy,.JAR文件,开发人员可以对其进行部署。

javascript怎样学习才能精通呀,没思路这么办?

首先可以考虑看视频进行学习,然后可以根据菜鸟教程等进行练习

JavaScript正则表达式中 ?: 是什么意思?

1.什么 是正则表达式正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。正则表达式并不是属于某种语言的,它是一门独立的语言,几乎在所有的编程语言中都提供了相关支持(Javascript、PHP、Java、C++)以SQL语言为例:搜索功能精准匹配:$sql = “select * from goods where title="Nokia N95"”; //返回某个固定的结果模糊匹配:$sql = “select * from goods where title like ‘%Nokia N95%"”; //返回某种满足条件的结果所以由此可知,正则表达式也是一种模糊匹配。2.正则 表达式应用场景① 数据隐藏 李先生 一等奖 139****635② 数据验证 手机验证、邮箱验证、IP地址验证③ 数据采集 网站后台都可以集成一个按钮(数据采集)④ 数据检索3.快速入门1)查找一个字符串中是否具有数字“8”运行结果:2)查找一个字符串中是否具有数字运行结果:3)查找一个字符串中是否具有非数字运行结果:

Java设计模式之Proxy模式

   为什么要使用Proxy?    授权机制 不同级别的用户对同一对象拥有不同的访问权利 如Jive 论坛系统中 就使用Proxy 进行授权机制控制 访问论坛有两种人:注册用户和游客(未注册用户) Jive 中就通过类似ForumProxy 这样的代理来控制这两种用户对论坛的访问权限    某个客户端不能直接操作到某个对象 但又必须和那个对象有所互动   举例两个具体情况:   ( )如果那个对象是一个是很大的图片 需要花费很长时间才能显示出来 那么当这个图片包含在文档中时 使用编辑器或浏览器打开这个文档 打开文档必须很迅速 不能等待大图片处理完成 这时需要做个图片Proxy 来代替真正的图片   ( )如果那个对象在Internet 的某个远端服务器上 直接操作这个对象因为网络速度原因可能比较慢 那我们可以先用Proxy 来代替那个对象   总之原则是 对于开销很大的对象 只有在使用它时才创建 这个原则可以为我们节省很多宝贵的Java 内存 所以 有些人认为Java 耗费资源内存 我以为这和程序编制思路也有一定的关系    如何使用Proxy?   以Jive 论坛系统为例 访问论坛系统的用户有多种类型:注册普通用户 论坛管理者 系统管理者 游客 注册普通用户才能发言;论坛管理者可以管理他被授权的论坛;系统管理者可以管理所有事务等 这些权限划分和管理是使用Proxy 完成的   Forum 是Jive 的核心接口 在Forum 中陈列了有关论坛操作的主要行为 如论坛名称 论坛描述的获取和修改 帖子发表删除编辑等   在ForumPermissions 中定义了各种级别权限的用户:   public class ForumPermissions implements Cacheable {   /*** Permission to read object */   public static final int READ = ;   /*** Permission to administer the entire sytem */   public static final int SYSTEM_ADMIN = ;   /*** Permission to administer a particular forum */   public static final int FORUM_ADMIN = ;   /*** Permission to administer a particular user */   public static final int USER_ADMIN = ;   /*** Permission to administer a particular group */   public static final int GROUP_ADMIN = ;   /*** Permission to moderate threads */   public static final int MODERATE_THREADS = ;   /*** Permission to create a new thread */   public static final int CREATE_THREAD = ;   /*** Permission to create a new message */   public static final int CREATE_MESSAGE = ;   /*** Permission to moderate messages */   public static final int MODERATE_MESSAGES = ;      public boolean isSystemOrForumAdmin() {   return (values[FORUM_ADMIN] || values[SYSTEM_ADMIN]);   }      }   因此 Forum 中各种操作权限是和ForumPermissions 定义的用户级别有关系的 作为接口Forum 的实现:ForumProxy 正是将这种对应关系联系起来 比如 修改Forum 的名称 只有论坛管理者或系统管理者可以修改 代码如下:   public class ForumProxy implements Forum {   private ForumPermissions permissions;   private Forum forum;   this authorization = authorization;   public ForumProxy(Forum forum Authorization authorization   ForumPermissions permissions)   {   this forum = forum;   this authorization = authorization;   this permissions = permissions;   }      public void setName(String name) throws UnauthorizedException   ForumAlreadyExistsException   {   //只有是系统或论坛管理者才可以修改名称   if (permissions isSystemOrForumAdmin()) {   forum setName(name);   }   else {   throw new UnauthorizedException();   }   }      }   而DbForum 才是接口Forum 的真正实现 以修改论坛名称为例:   public class DbForum implements Forum Cacheable {      public void setName(String name) throws   ForumAlreadyExistsException {      this name = name;   //这里真正将新名称保存到数据库中   saveToDb();      }      }   凡是涉及到对论坛名称修改这一事件 其他程序都首先得和ForumProxy 打交道 由ForumProxy 决定是否有权限做某一样事情 ForumProxy 是个名副其实的 网关 安全代理系统   我们已经知道 使用Forum 需要通过ForumProxy Jive 中创建一个Forum 是使用Factory 模式 有一个总的抽象类ForumFactory 在这个抽象类中 调用ForumFactory 是通过getInstance()方法实现 这里使用了Singleton getInstance()返回的是ForumFactoryProxy   为什么不返回ForumFactory 而返回ForumFactory 的实现ForumFactoryProxy?   原因是明显的 需要通过代理确定是否有权限创建forum   在ForumFactoryProxy 中我们看到代码如下:   public class ForumFactoryProxy extends ForumFactory {   protected ForumFactory factory;   protected Authorization authorization;   protected ForumPermissions permissions;   public ForumFactoryProxy(Authorization authorization ForumFactory factory   ForumPermissions permissions)   {   this factory = factory;   this authorization = authorization;   this permissions = permissions;   }   public Forum createForum(String name String description)   throws UnauthorizedException ForumAlreadyExistsException   {   //只有系统管理者才可以创建forum   if (permissions get(ForumPermissions SYSTEM_ADMIN)) {   Forum newForum = factory createForum(name description);   return new ForumProxy(newForum authorization permissions);   }   else {   throw new UnauthorizedException();   }   }   方法createForum 返回的也是ForumProxy Proxy 就象一道墙 其他程序只能和Proxy 交互操作   注意到这里有两个Proxy:ForumProxy 和ForumFactoryProxy 代表两个不同的职责:使用Forum 和创建Forum;   至于为什么将使用对象和创建对象分开 这也是为什么使用Factory 模式的原因所在:是为了 封装 分派 ;换句话说 尽可能功能单一化 方便维护修改   以上我们讨论了如何使用Proxy 进行授权机制的访问 Proxy 还可以对用户隐藏另外一种称为copy on write 的优化方式 拷贝一个庞大而复杂的对象是一个开销很大的操作 如果拷贝过程中 没有对原来的对象有所修改 那么这样的拷贝开销就没有必要 用代理延迟这一拷贝过程   比如:我们有一个很大的Collection 具体如hashtable 有很多客户端会并发同时访问它   其中一个特别的客户端要进行连续的数据获取 此时要求其他客户端不能再向hashtable 中增加或删除 东东   最直接的解决方案是:使用collection 的lock 让这特别的客户端获得这个lock 进行连续的数据获取 然后再释放lock   public void foFetches(Hashtable ht){   synchronized(ht){   //具体的连续数据获取动作   }   }   但是这一办法可能锁住Collection 会很长时间 这段时间 其他客户端就不能访问该Collection 了   第二个解决方案是clone 这个Collection 然后让连续的数据获取针对clone 出来的那个Collection 操作 这个方案前提是 这个Collection 是可clone 的 而且必须有提供深度clone 的方法 Hashtable 就提供了对自己的clone 方法 但不是Key 和value 对象的clone 关于Clone 含义可以参考专门文章   public void foFetches(Hashtable ht){   Hashttable newht=(Hashtable)ht clone();   }   问题又来了 由于是针对clone 出来的对象操作 如果原来的母体被其他客户端操作修改了 那么对clone 出来的对象操作就没有意义了   最后解决方案:我们可以等其他客户端修改完成后再进行clone 也就是说 这个特别的客户端先通过调用一个叫clone 的方法来进行一系列数据获取操作 但实际上没有真正的进行对象拷贝 直至有其他客户端修改了这个对象Collection lishixinzhi/Article/program/Java/gj/201311/27422

java中+号的作用是?

在Java中,加号“+”的作用有以下几种:1】数学加法运算符:用于对两个数值进行相加操作,如a + b表示将变量a和b的值相加。2】字符串连接运算符:用于将两个字符串拼接成一个新的字符串,如str1 + str2表示将字符串str1和str2连接起来形成一个新的字符串。3】自增自减运算符:用于对变量进行自增或自减操作,如i++表示将变量i的值自增1。4】类型转换运算符:在某些情况下,可以使用加号将不同类型的数据进行类型转换,如int x = (int) 3.14 + 2。

自学Java看菜鸟教程好还是看书好?我不想看视频,因为不能控制学习进度

看书,书总结比较全面。也方便做笔记什么的。

有哪些学习Java的网站?

1、Stack overflowStack overflow可能是编程界中非常流行的网站了 , 是一个与程序相关的 IT 技术问答网站,用户可以在网站免费提交问题,浏览问题,索引相关内容,在创建主页的时候使用简单的 HTML 。一部分的程序员学习 API 或者编程语言 , 通常依赖于代码示例 ,stackoverflow 就可以提供大量的代码片段。2、CSDN国内非常大的技术交流平台,很多大牛的博客都有一定的参考价值,可以在上面找一些自己需要的技术文档。3、Github你也许知道可以免费的将你的项目托管在哪 , 但你不一定知道它还是一个学习当今流行的 Java库和框架的优秀资源。比如 , 你想学 Spring MVC Framework, 你可以搜索并且找到一些开源的项目。遵循“照葫芦画瓢”的原则 , 你能够通过实例快速的学习框架 , 尤其是你已经具有使用类似框架的经验。4、LeetCode如果有 Java 方面的面试问题 , 例如“在 Java 中 , 内存中的数组是什么样的” , 你可以从很多 Java 教程中找到答案。这个网站还有一个好的地方就是 , 它可以通过大小不同的数据在线检查你的代码是否正确。很多人认为 , 面试成功的关键在于重复这三个重要步骤 : 编码 -> 阅读 -> 讨论。5、简书也是一个技术交流网站,很多人都会在上面发表自己的技术文章,还有一些书籍推荐等等,平时没事的时候,可以自己浏览一下。6、Java SE 技术文档这个网站包含了在使用 Java SE API 时会用到的所有文档 , 即使你是 Java 开发牛人 , 我敢肯定在这里你仍能发现一些有用的东西。比如 , 你可以阅读一些像“ Java 类的本质”、“部署”这样的教程。

java中几种常见的设计模式(java设计模式菜鸟教程)

1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。2、建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。3、工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。4、原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。5、单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。6、适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。7、桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。8、合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。9、装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。10、门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。11、享元模式:FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态,它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类中区分开来,将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象,而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数量。12、代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。13、责任链模式:在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。14、命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。15、解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。16、迭代子模式:迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中,从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象,每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。17、调停者模式:调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。18、备忘录模式:备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。19、观察者模式:观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。20、状态模式:状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。21、策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。22、模板方法模式:模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。23、访问者模式:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易,就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。当使用访问者模式时,要将尽可能多的对象浏览逻辑放在访问者类中,而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。

我的手机有JAVA,是pulid,怎么 下载java游戏啊?

换一款新手机吧 !! 一定要买带JAVA程序的!!!

Java声明Student类的对象stu的语句为( )?

Student stu=new Student();

请问JAVA中,例如:类Student stu=null;和Student stu=new Student();有什么区别,详细点,谢谢啊

前者只是声明了一个空对象,java中有堆栈的定义,就是指向。这个空对象并没有指向一个可用的内存区域。它并不占空间。说白了就是一个等待人来用它的容器。后者是new出来的对象,它真事的存在,stu已经在内存中开辟了一块空间。你随时都可以对stu来操作。也就是stu里有的元素你都可以用,但前者却不可以,因为它只是有一个名头,但并不真实存在。

java问题:有个类Student Student stu=null 与Student stu= new Student()有和区别

前面的是赋值。后面的是new一个新的类。

java web跟web有什么关系

人们平常说的Java一般指JavaSE,也就是Java Standard Edition,Java的标准版,一般用来开发桌面应用程序,但是在开发桌面应用程序上相对VB,Delphi,VC++并没有什么优势。而JavaWeb则到了JavaEE领域了,也就是Java Enterprise Edition,Java的企业版,看那个web就应该想到是与Internet有关的,其实开发JavaWeb应用程序,初级的一般是用JSP(Java Server Pages)+servlet+Javabean来开发的,对大型的网站一般是使用框架来开发的,例如struts,hibernate,spring,例如校内,你在登陆的时候会在地址栏看见Login.do,登陆以后会看见Home.do这样的请求,典型的struts框架结构。Java还有一个版本是JavaME,Java Micro Edition,Java的微型版,诺基亚手机上运行的Java程序就是指用这个版本开发的程序。

JAVA是什么?收费吗?

java是个软件平台,是不收费的

java有三大体系,se ee me,是不是学java的都要从se 开始学起

对 必须先学seee是指面向企业的java开发 必须有se基础才能学me是手机的java程序开发 没啥用 对于找工作 自己学着玩还行 也得有se基础都可以用myeclipse开发 你可以下载myeclipse9.0功能很强大贴心小提示:se里重点要掌握: 容器类 多线程的同步(并发) io流要向进入java行业除了java本身 数据结构 操作系统 网页设计等课程也需要你来慢慢掌握

android开发和javaEE开发的区别?

安卓开发主要是指开发安卓AppJAVAEE是指java enterprise edition,java企业版,多用于企业级开发,包括web开发等等很多组建

javaEE是什么

Java EE是 J2EE的一个新的名称,之所以改名,目的还是让大家清楚J2EE只是Java企业应用。随着WEB和EJB容器概念诞生,使得软件应用业开始担心SUN的伙伴们是否还在Java平台上不断推出翻新的标准框架,致使软件应用业的业务核心组件架构无所适从,从一直以来是否需要EJB的讨论声中说明了这种彷徨。在2004年底中国软件技术大会Ioc微容器(也就是Jdon框架的实现原理)演讲中指出:我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。此次J2EE改名为Java EE,实际也反映出业界这种共同心声。Java EE的核心是EJB3.0, 其提供了更兼便捷的企业级的应用框架。J2EE容易让初学者误解是独立于一套Java的技术方案。从更深层次来看,Java诞生十年,多年前的业务组件还可以使用,软件应用不再由于语言的更迭革命带来毁灭的打击了。

JAVA有哪些版本

java SEjava MEjava EE

关于java EE SDK和JDK的区别

开始学java 下的jdk 全称其实 是 java se sdk 简称jdk 要学习j2ee 必须先装java EE SDK 要不然根本就不能创建servlet 你的情况.应该早就下载了java EE SDK了myEclipse netbeans里都自己都这java EE SDK

java和java EE有什么区别

java EE属于Java的一部分;Java分为三个体系,分别为Java SE(J2SE,Java2 Platform Standard Edition,标准版),JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企业版),Java ME(J2ME,Java 2 Platform Micro Edition,微型版)。Java EE(Java Platform,Enterprise Edition)是sun公司(2009年4月20日甲骨文将其收购)推出的企业级应用程序版本。这个版本以前称为 J2EE。能够帮助我们开发和部署可移植、健壮、可伸缩且安全的服务器端 Java应用程序。Java EE 是在 Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0应用程序。Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。

什么是JavaEE

JavaEE是指JavaEnterpriseEdition,Java企业版,多用于企业级开发,包括web开发等等。也叫J2EE。JavaSE通常是指JavaStandardEdition,Java标准版,就是一般Java程序的开发就可以(如桌面程序),可以看作是JavaEE的子集。JavaSE(JavaPlatform,StandardEdition)。JavaSE以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。JavaSE包含了支持JavaWeb服务开发的类,并为JavaPlatform,EnterpriseEdition(JavaEE)提供基础。JavaEE(JavaPlatform,EnterpriseEdition)。这个版本以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。JavaEE是在JavaSE的基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented,SOA)和Web2.0应用程序。

一道java题

我建议你还是先好好学习java的基础,让后再看代码,protected FlyBehavior (3); 是创建一个名字为(3)的对象。我想告诉你这个以后,别的都不用说了吧。因为4更3一样。5和6就是对象调用自己的方法了。

java的lts是什么意思

LTS = Long Term Support   Long Term Support:长时间支持版本(三年) ,一般的版本支持为18个月 Ubuntu定期并有计划的不断发布其新版本,Ubuntu 一直坚持每6个月发布一个新的版本。并致力于在该发行版的支持期内持续的发布安全和关键补丁。

新手学JAVA,提示:不兼容的类型,需要javax.swing.JTextField

这要是你导别人的代码。得把jdk改一下

java怎么查看oracle sequences生成的当前id

se.currval

Oracle中的sequences在java中怎么用

做序列使用,或者是表中的唯一标识位

我想问一下关于java类的加载顺序问题,最好不要深到什么根加载器,怕听不懂

严格来说,你那个不叫单例,单例一个比较明显的特点就是构造函数私有化。这种机制说起来话长,你把public static int b = 0;理解成public static int b; public int b = 0;就好了,静态变量在类加载时已经为其分配了内存空间,但是并没有立即为其赋值,只有执行到赋值语句时才赋值的,你的构造函数先执行的执行完之后b = 1但是最后又执行b = 0的操作,于是结果便是0了,a就不一样了,你并没有赋值,所以它相当于就被改变了一次于是就是1了

如何控制JAVA中一个类只能生成一个对象

去掉public的构造函数。可以去搜索一下单例模式,就是解决你这个需求的

能具体回答一下“java中如何把一个类实例定义为一个全局对象 ”吗??

你可以使用单例模式public class Singleton{ private static Singleton instance = new Singleton(); private Singleton(){}//私有化构造方法 public static Singleton getInstance() { return instance; }}

JAVA,什么是对象, Intent it = new Intent( ); 哪个是对象? 麻烦举

it是对象,new就是实例化一个类,并返回它的指针给it

JAVA面试题---设计一个类,该类只能生成一个实例

单例模式

java 23种设计模式

那个男人,她认出来岂的确体质

JAVA 什么是设计模式,请举例说明其中一个。

面向对象,区别于c的面向过程

JAVA的单例模式到底有几种变现形式?请列举?

2种public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return instance; } }和public class Singleton { private static Singleton instance = null; private Singleton(){ } public static Singleton getInstance(){ if(instance==null){ instance = new Singleton(); } return instance; } }

如何在java中实现singleton模式

私有化默认构造方法,声明一个静态方法对外提供此类的实例对象。

用myeclipse,在jsp中写java代码,需要导包时不提示,必须手动导包,怎样才能让它提示并且自动导包

MyEclipse 提示设置JSP自动提示1、快捷键提示代码window-->Preferences的General-->Keys下修改Content Assist的快捷键为Alt+/,这样就可以通过快捷键得到提示代码一般,快捷键默认就是Alt+/2、自动提示window-->preferences的java->Editor->Code Assist,选上Enable auto activation选择框3、增强自动提示如果在上面2中的Auto activation triggers for Java中只有.就是说只有在输入.之后才会自动提示,可以修改一下这个配置,方法:* 打开MyEclipse,进入window-->Preferences,选择java-->Editor-->Content Assist* 在Auto Activation triggers for java这个选项的.后随便加几个字母,例如aaa方便后面的查找修改,点击OK按钮* 在File-->Export弹出的窗口中选择Perferences,点击下一步,选择导出文件路径* 用记事本打开刚刚保存的*.epf文件* ctrl + F快捷键查找刚输入的.aaa* 把.aaa改成.abcdefghijklmnopqrstuvwxyz(,保存,关闭记事本*回到MyEclipse界面,File-->Import,在弹出的窗口中选择Perferences,下一步,选择刚修改的*.epf文件,点击“打开”,点击“Finish”PS:如果1和2都不行的话,那就是配置文件的事了,在安装目录找到eclipse.ini文件,用记事本打开,将"-Duser.language=en"修改为"-Duser.language=zh",修改完后记着重启MyEclipse哦2.xml自动提示:用eclipse,在导入相应的包后(有人说不导包也有提示,因为默认的eclipse导入了jdk的包),eclipse会有代码提示功能。那么XML文件能不能也这样呢?其实也是可以的,只不过导包的地方不一样。下面以spring为例(虽然Myeclipse6.5中已经集成了,这里只是示范说明)。进入:window -> Preference... -> MyEclipse -> Editors -> XML ->XML Catalog选择:选中“User Specified Entries”,点击“Add...”按钮填入:URI: 请选择本地文件系统上SPRING_HOMEdist esourcesspring-beans-2.0.xsd 文件Key Type: 选择Schema LocationKey:http://www.springframework.org/schema/beans/spring-beans-2.0.xsd点击确定将spring配置文件关闭再重新打开即可。可以使用MyEclipse XML Editor打开这些xml文件。3.myeclipse的自动提示:1、window---preferences---Java---Editor---Contenet Assist接着在右下角“Auto activation triggers for Java:”这句话右边文本框值改成".abc",点击“OK”2、File---Export---General---preferences“To preference file:”右边选上配置文件的路径,你可选择路径为myEclipse的安装目录下,在随便给文件取个名字,比如“set.epf”3、以文件“set.epf”为例,打开“set.epf”,ctrl+f 找到“.abc”,然后改成“.abcdefghijklmnopqrstuvwxyz”,保存。(以前我初次操作的时候,以为在步骤一里直接在那文本框里写上".abc……z"不更省事,可一试,里面只能写上4个字符,所以,就不得不有这个步骤三)4、File---import---General---preferences“from preference file:”右边选上刚配置文件的路径,finish 步骤4与2相似4.让MyEclipse能够智能感应提示jQuery的函数myeclipse本身对jquery没有提供支持,你可以去尝试下aptana.跟myeclipse一样,aptana也是一个庞大的eclipse插件。aptana主要的作用就是js的支持,集成了jquery,ext,prototype等常见的各种js框架,智能感知更是最基本的功能了。aptana对js的支持不是myeclipse能比的了的,这是写js的圣器。所以你用惯了myeclipse再用aptana不会有很大习惯的改变。当然你可以把两个插件都装上。最好弄个干净的eclipse,用link的方式装,否则安装起来可能会有点麻烦。5.myelipse智能提示打开 Eclipse -> Window -> Perferences,会打开个Perferences 的设置界面。会看到只有一个"."存在。表示:只有输入"."之后才会有代码提示,我们要修改的地方就是这里,可是Eclipse默认只允许输入4个自定义字符。不过我们可以把当前的设置导出,保存为一个文件,然后在文件中修改,再导入设置,这样就可以突破Eclipse的限制。先把上图中"."的地方输入几个随便的字符,例如"asdf",点最下面的"OK"来保存设置。然 后打开 Eclipse的 File -> Export,在窗口中展开 General -> Perferences-->Exportall然后点击 NEXT。然后点击"Browse"选择任意的一个路径,保存配置文件,然后点击"Finish"。用记事本打开刚才保存的那个配置文件(扩展文件名:*.epf),按"ctrl +F",输入刚才设置的"asdf",找到刚才字符串。把"asdf"修改为"abcdefghijklmnopqrstuvwxyz.",然后保存,退出记事本。打 开Eclipse的 File -> Import 然后在打开的窗口里展开 General ->Perferences,点击NEXT,选中刚才修改过的配置文件,Finish。现在,再打开Window ->Perferences,并依次展开 Java -> Editor -> ContentAssist,会发现已经超过了4个字符,也就是说我们输入任何字母和"."都会有代码提示了。

在java中,singleton是什么啊?如果让写一个singleton,该怎么写呢?

packagetest;publicclasssingleton{privatesingletons;privatesingleton(){}publicstaticsingletongetsigleton(){if(s==null)s=newsingleton();returns;}}这就是一个单例模式,我想应该不用注释了,原理就是这个类的构造方法private了,所有在外边不能调用,也就不能newsingleton();得到实例,那么想得到实例就得调用它的静态方法getsigleton();即singleton.getsigleton();就会返回一个singleton的实例,注意此方法中的语句,即如果你是第一次调用这个方法那么它会给你new一个实例,以后再调用得到的都是这个实例,也就是说从始至终就只有一个singleton的实例,这就是单例模式。

javabean、jsp、serverlet是什么关系?

JSPJSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。JSP的1.0规范的最后版本是1999年9月推出的,12月又推出了1.1规范。目前较新的是JSP1.2规范,JSP2.0规范的征求意见稿也已出台。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。serverlet是用java语言编写的小程序。servlet可以被认为是服务器端的applet。servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样。相对于applet而言。applet - servlet 对应的。要写servlet,你先安装一个jdk1.3吧,再装一个服务器,如Tomcat,比较好,简单实用写serlvet够了。如果你想写EJB等东西 ,可能要装一个weblogic了。beans可以被其他的java程序调用完成特定功能或者信息存储。JavaBean 最初,JavaBean的目的是为了将可以重复使用的软件代码打包标准。特别是用与帮助厂家开发在综合开发环境(IDE)下使用的java软件部件。这些包括如Grid控件,用户可以将该部件拖放到开发环境中。从此,JavaBean就可以扩展为一个java web 应用的标准部件,并且JavaBean部件框架已经扩展为企业版的 Bean(EJB)。 JavaBean 和 Server Bean(通常称为 Enterprise JavaBean (EJB))有一些基本相同之处。它们都是用一组特性创建,以执行其特定任务的对象或组件。它们还有从当前所驻留服务器上的容器获得其它特性的能力。这使得 bean 的行为根据特定任务和所在环境的不同而有所不同。 Enterprise Bean 与 JavaBean 不同。JavaBean 是使用 java.beans 包开发的,它是 Java 2 标准版的一部分。JavaBean 是一台机器上同一个地址空间中运行的组件。JavaBean 是进程内组件。Enterprise Bean 是使用 javax.ejb 包开发的,它是标准 JDK 的扩展,是 Java 2 Enterprise Edition 的一部分。Enterprise Bean 是在多台机器上跨几个地址空间运行的组件。因此 Enterprise Bean 是进程间组件。JavaBean 通常用作 GUI 窗口小部件,而 Enterprise Bean 则用作分布式商业对象. JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBeans 通过提供符合一致性设计模式的公共方法将内部域暴露称为属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 属性。 用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。 JavaBean是Sun微系统的一个面向对象的编程接口,它可以让你建可重用应用程序或能在网络中任何主流操作系统平台上配置的程序块,称作组件。像Java applet一样,JavaBeans组件(或“Beans”)能够给予万维网页面交互的能力,例如:计算感兴趣的比率或是根据用户或浏览器的特性改变页面内容。 从用户的观点来看,一个组件可以是一个与你交互的按钮或是一个当你按下按钮它便开始的小计算程序。从一个开发者的观点来看,那个按钮组件和计算器组件是分别被创建的,并且他们可以一起使用或是在不同的应用程序或情况下和不同的组件产生不同的组合来使用。 当组件或Beans在使用过程中,Bean的性质(比如,一个窗口的背景色)对于其他Bean来说是可见的,并且,之前没“碰到”过的Bean也可以动态地获悉彼此的特性并从而进行交互。  Bean是随Sun的Bean开发包(BDK)开发出来的,并且能在任何主流操作系统平台的许多应用程序环境(人们所说的“容器”,container)中运行,包括浏览器,文字处理软件,以及一些其他应用。  要想用JavaBeans建一个组件,你必须用Sun的Java编程语言来写程序,并且在程序中包括描述组件特性的JavaBeans语句,这些组件特性例如:用户接口的特性,以及触发一个bean和在同一个容器中或网络其他地方的其他的bean交流的事件。 JavaBeans给Java应用程序提供了OpenDoc和ActiveX接口已提供的这种复合文档的能力。 JavaBean的任务就是: “Write once, run anywhere, reuse everywhere”,即“一次性编写,任何地方执行,任何地方重用”。这个任何实际上就是要解决困扰软件工业的日益增加的复杂性,提供一个简单的、紧凑的和优秀的问题解决方案。1. 一个开发良好的软件组件应该是一次性地编写,而不需要再重新编写代码以增强或完善功能。因此,JavaBean应该提供一个实际的方法来增强现有代码的利用率,而不再需要在原有代码上重新进行编程。除了在节约开发资源方面的意义外,一次性地编写JavaBean组件也可以在版本控制方面起到非常好的作用。开发者可以不断地对组件进行改进,而不必从头开始编写代码。这样就可以在原有基础上不断提高组件功能,而不会犯相同的错误。2. JavaBean组件在任意地方运行是指组件可以在任何环境和平台上使用,这可以满足各种交互式平台的需求。由于JavaBean是基于Java的,所以它可以很容易地得到交互式平台的支持。JavaBean组件在任意地方执行不仅是指组件可以在不同的操作平台上运行,还包括在分布式网络环境中运行。3.JavaBean组件在任意地方的重用说的是它能够在包括应用程序、其他组件、文档、Web站点和应用程序构造器工具的多种方案中再利用。这也许是JavaBean组件的最为重要的任务了,因为它正是JavaBean组件区别于Java程序的特点之一。Java程序的任务就是JavaBean组件所具有的前两个任务,而这第3个任务却是JavaBean组件独有的。 JavaBean是可复用的平台独立的软件组件,开发者可以在软件构造器工具中其直接进行可视化操作。 软件构造器工具可以是Web页面构造器、可视化应用程序构造器、CUI设计构造器或服务器应用程序构造器。有时,构造器工具也可以是一个包含子一些bean的复合文档的文档编辑器。 JavaBean可以是简单的CUI要素,如按钮或滚动条;也可以是复杂的可视化软件组件,如数据库视图,有些JavaBean是没有GUI表现形式的,但这些JavaBean仍然可以使用应用程序构造器可视化地进行组合。 一个JavaBean和一个Javaapplet相似,是一个非常简单的遵循某种严格协议的Java类。每个JavaBean的功能都可能不一样,但它们都必须支持以下特征。 一个bean没有必须继承的特定的基类或接口。可视化的bean必须继承的类是java.awt.Component,这样它们才能添加到可视化容器中去,非可视化bean则不需要继承这个类。有许多bean,无论是在应用程序构造器工具中,还是在最后创建好的应用程序中,都具有很强的可视化特征,但这并非每个bean必须的特征。 在使用Java编程时,并不是所有软件模块都需要转换成bean。Bean比较适合于那些具有可视化操作和定制特性的软件组件。 从基本上说,JavaBean可以看成是一个黑盒子,即只需要知道其功能而不必管其内部结构的软件设备。黑盒子只介绍和定义其外部特征和与其他部分的接口,如按钮、窗口、颜色、形状、句柄等。 通过将系统看成使用黑盒子关联起来的通讯网络,我们可以忽略黑盒子内部的系统细节,从而有效地控制系统的整体性能。作为一个黑盒子的模型,JavaBean有3个接口面,可以独立进行开发。 1. JavaBean可以调用的方法。 2. JavaBean提供的可读写的属性。 3. JavaBean向外部发送的或从外部接收的事件。JavaBean设计注意事项 1.不要试图在JavaBean返回的HTML中放置任何字体尺寸。 并不是所有的浏览器都相同。很多浏览器无法处理完整的字体尺寸。 2.不要试图在JavaBean返回的HTML中放置任何脚本或者DHTML。 向页面直接输出脚本或者DHTML相当于自我毁灭,因为某些浏览器版本在处理不正确的脚本时会崩溃(非常少但是有)。如果用户的JavaBean在运行时是动态的推出复杂的HTML语言,用户将陷入调试的噩梦。另外,复杂的HTML将限制JavaBean的寿命和灵活性。 3.不要提供任何的选择。

什么是jsp?它是属于JAVA中吗?

JSP(Java Server Pages)是由Sun Microsystems公司为主创建的一种动态网页技术标准,是一种在服务器端运行的网页脚本语言.

jsp和javaEE有什么区别

jsp 我们写的就是 java代码和页面展示代码但是javaee 又被叫做mvc模式是分层来写 java代码和 页面展示代码 分开 了

html和javascript的区别?

html是用来在浏览器上面显示文字 图片 等信息的javascript 主要是控制一些动态的 比如鼠标放在上边绿条码上 鼠标箭头变成了小手

jsp是不是javascript的简写?

你们能不能答点有难度的问题啊?

java jsp页面怎么写java类?怎么调用java代码?

导入java<%@page import="java.util.List"%>写java代码<% java代码%>

javascript与jsp,java有什么区别?

javascript是种脚本语言,是在客户端运行的,比如你看到的在网页上的时钟,或者一些特效,一般就是用的这种语言。jap是动态网页,和html页面不一样,不过显示的时候都是一样的Java能简单了,是们语言,和c语言,c++,vb,等一样,开发语言,不过语法和编程思想不一样罢了。

javascript、JSP、JS有什么区别和联系?

js是javascript的缩写。以下是JSP与JS的区别和联系:名字:JS:JavaScriptJSP:JavaServerPages执行过程:JSP先翻译,翻译成Servlet执行如:test.jsp要变成test_jsp.java然后编译成test_jsp.class而test_jsp.java本身就是一个servlet.所以jsp只是servlet的一个变种,方便书写html内容才出现的。servlet是根本,所有jsp能做的,servlet全能做。JS:是一种基于对象的客户端脚本语言。目的是解决服务器端语言。如:Perl,遗留的速度问题,为客户提供更流畅的浏览效果。JS可以直接嵌入到html代码中进行解析执行,非常简单易学,可以产生很多动态的效果。形象比较:JS是在客户端执行的,需要浏览器支持JavaScript。JSP是在服务器端执行的,需要服务器上部署支持Servlet的服务器程序。JS代码能够直接从服务器上download得到,对外是可见的,jsp(和翻译后的Servlet代码)是对外不可见的。JS和JSP相比较:虽然JS可以再客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务。如:访问数据库和图像处理等等。JSP在HTML中用<%%>里面实现。JS在HTML中用实现。执行过程:JSP:1、JSP文件在用户第一次请求时,会被编译成Servlet,然后由这个Servlet处理用户的请求,所以Servlet可以看成是运行时的Servlet。2、JSP容器也就是Servlet容器管理JSP页面生命周期分为两个阶段,即转换阶段和执行阶段。3、转换阶段:当有一个对JSP页面的请求到来时,JSP容器检查JSP页面的语法是否正确,将JSP页面转换为Servlet源文件,然后调用javac命令编译Servlet源文件生成字节码文件。4、执行阶段:Servlet容器加载转换后的Servlet类。JS:JavaScript通常是运行在前台,即运行于用户浏览器的,通常不需要服务器的后台支持(AJAX交互例外),混合在HTML中的JavaScript脚本程序直接被浏览器解释执行,以提高页面的美观性和UI操作响应速度为基本目标。运行位置不同:JSP运行在后台服务器上,混合在HTML中的java程序段用于控制HTML的动态生成,并且通常负责调用后台数据库中的数据,形成能够根据使用情况的变化的,具有丰富数据交互效果的页面。扩展资料:JSP全名为JavaServerPages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

jsp跟java是一个东西吗

Java" 不是由几个单字的首字所组成, 而是从许多程序设计师钟爱的热腾腾、香浓咖啡中 产生灵感的。JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

javascript是jsp吗

不是,

html和javascript有什么区别?

jsp是将动态的代码嵌入到静态的html中。从而产生动态的输出最简单的jsp文件是直接将一个html文件另存为.jsp文件,然后将它放在web应用服务的目录下即可。jsp的作用。jsp技术的出现,大大提高了基于java技术的web应用开发的效率.他将内容的生成和显示分离,使得网页设计人员和java程序员的工作关系不再那么紧密,网页设计人员只需要专注于网页的设计即可,而java程序员也可以不再关心html的编写。通过将商业逻辑封装在JavaBean或者EnterpJavaBean中,页面设计人员可以在仅知道相关的输出接口的基础上来设计网页。jsp比asp或者php比较起来的优势是:jsp采用的是java语言,它拥有java所有的优势,比如面向对象、“一次编写、到处运行”的跨平台特性等。怎么理解JavaScript?JavaScript虽然它里面有个“java”,但其实和java并没有多大关系。java是一种面向对象的语言,而javas是基于对象(以及事件)的。JavaScript的主要作用是用在浏览器端,用于产生一些动态效果或者用于对html表单进行客户端的验证等。在html中,使用<Script>和</Script>引入JavaScript。在JavaScript中,所有内置对象名称和内建函数名都是小写的。jsp和JavaScript的区别。JSP,Java服务页.全称为Java server Pages.JSP作为动态网页的设计语言,在传统的网页HTML中加如JAVA程序片段(scriptlet)和JSP标记(tag),构成JSP网页(*.jsp).它与Javascript完全是两个不同的东西.JSP由SUN公司推出,基于java技术,用于创建可支持跨平台及跨Web服务器的动态网页.Javascript是NetScape公司的产品,比JSP简单得多,主要运用于客户端,实现基于浏览器上的一些动态功能,能够在客户端动态生成HTML.

javascript和jsp有什么区别,都是什么意思

javascript 是用来做客户端的。网页上的效果,表单验证等。JSP是服务器端脚本语言。就是后台的逻辑,数据存储。等。

JAVA

声明准确的来说是在JSP页面内来声明

javascript、JSP、JS有什么区别和联系?

js是javascript的缩写。以下是JSP与JS的区别和联系:名字:JS:JavaScriptJSP:JavaServerPages执行过程:JSP先翻译,翻译成Servlet执行如:test.jsp要变成test_jsp.java然后编译成test_jsp.class而test_jsp.java本身就是一个servlet.所以jsp只是servlet的一个变种,方便书写html内容才出现的。servlet是根本,所有jsp能做的,servlet全能做。JS:是一种基于对象的客户端脚本语言。目的是解决服务器端语言。如:Perl,遗留的速度问题,为客户提供更流畅的浏览效果。JS可以直接嵌入到html代码中进行解析执行,非常简单易学,可以产生很多动态的效果。形象比较:JS是在客户端执行的,需要浏览器支持JavaScript。JSP是在服务器端执行的,需要服务器上部署支持Servlet的服务器程序。JS代码能够直接从服务器上download得到,对外是可见的,jsp(和翻译后的Servlet代码)是对外不可见的。JS和JSP相比较:虽然JS可以再客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务。如:访问数据库和图像处理等等。JSP在HTML中用<%%>里面实现。JS在HTML中用实现。执行过程:JSP:1、JSP文件在用户第一次请求时,会被编译成Servlet,然后由这个Servlet处理用户的请求,所以Servlet可以看成是运行时的Servlet。2、JSP容器也就是Servlet容器管理JSP页面生命周期分为两个阶段,即转换阶段和执行阶段。3、转换阶段:当有一个对JSP页面的请求到来时,JSP容器检查JSP页面的语法是否正确,将JSP页面转换为Servlet源文件,然后调用javac命令编译Servlet源文件生成字节码文件。4、执行阶段:Servlet容器加载转换后的Servlet类。JS:JavaScript通常是运行在前台,即运行于用户浏览器的,通常不需要服务器的后台支持(AJAX交互例外),混合在HTML中的JavaScript脚本程序直接被浏览器解释执行,以提高页面的美观性和UI操作响应速度为基本目标。运行位置不同:JSP运行在后台服务器上,混合在HTML中的java程序段用于控制HTML的动态生成,并且通常负责调用后台数据库中的数据,形成能够根据使用情况的变化的,具有丰富数据交互效果的页面。扩展资料:JSP全名为JavaServerPages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

Jsp页面中java表达式语法格式是什么

<% =表达式 %>

求JAVA编程。

留个邮箱,写好了打包发给你

java编程。定义一个教师类,有姓名职称工资和工龄,工资的初始值是1000.

public class Teacher { private String name; private String title; private double money; private double seniority; public Teacher() { this.money = 1000; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public double getSeniority() { return seniority; } public void setSeniority(double seniority) { this.seniority = seniority; } public double wages() { if (this.title.equals("助教")) { return (this.money + (this.seniority * 10)) * 1.3; } return this.money; } public void info() { System.out.println("姓名: " + this.name); System.out.println("职称: " + this.title); System.out.println("工资: " + wages()); System.out.println("工龄: " + this.seniority); } public static void main(String[] args) { Teacher t1 = new Teacher(); t1.setName("张三"); t1.setTitle("教师"); t1.setMoney(5000); t1.setSeniority(5); t1.info(); Teacher t2 = new Teacher(); t2.setName("李四"); t2.setTitle("助教"); t2.setMoney(1500); t2.setSeniority(1); t2.info(); }}

Java类的构造方法,怎么调用构造方法 我写的有错误

你关系弄反了,应该是sonextendsfather。。。你子类里面没有写构造函数是不是。。。。系统会默认调用父类的无参构造函数,但是你写了一个带参的构造函数,而且把无参的构造函数删掉了,当然会报编译错误啊目测你的代码是;publicclassparent{publicparent(stringname){}}publicclasssonextendsparent{//如果这里不显示调用父类的无参构造函数,编译报错....publicson(stringname){super(name);//这样才是正确地}}

sonarqube怎么自定义Java代码规则

如何导入Sonar代码扫描规则和设置默认代码扫描规则。工具/原料SonarQube方法/步骤1进入配置页面点击“质量管理”菜单 ,在质量管理页面点击右上角“恢复设置”。2导入代码扫描规则在“恢复设置”对话框中点击“选择文件”按钮,选择代码扫描规则XML文件,再点击“恢复按钮”。3设置默认代码扫描规则点击刚导入的代码扫描规则右边的“设为默认”链接,可将此规则设置为默认的Java代码扫描规则。

JAVA里Flie类的creatnewfile与creattempfile有什么不同

后者的文件建立在默认的临时文件目录中 不在当前目录createNewFilepublic boolean createNewFile()throws IOException当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。检查文件是否存在,若不存在则创建该文件,这是单个操作,对于其他所有可能影响该文件的文件系统活动来说,该操作是不可分的。 createTempFilepublic static File createTempFile(String prefix,String suffix)throws IOException在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。调用此方法等同于调用 createTempFile(prefix, suffix, null)。 参数:prefix - 用于生成文件名的前缀字符串;必须至少是三字符长suffix - 用于生成文件名的后缀字符串;可以为 null,在这种情况下,将使用后缀 ".tmp" 返回:表示新建空文件的抽象路径名

bean在java中是什么意思,为什么要叫这个名字?

干了这么多年 开发,还真不知道为什么叫bean这个名字,其实也就是个名字而已,谁是定义者,爱怎么叫就怎么叫。网上查了确实没有什么资料,看了一篇java当时选名字的文章,感觉跟楼上的人说的感觉差不多,javabean不就是"咖啡豆"的意思吗。。。文章链接: https://blog.51cto.com/yqgao/157060 ========================================================2000年度的JavaOne国际会议大厅热闹非凡,一阵阵浓郁的咖啡味儿香气扑鼻。从世界各地汇集到旧金山参加会议的Java精英们兴奋异常,排着长队,等待得到一杯由Java语言控制的咖啡机煮制的免费咖啡。这是一个特殊设计的全透明咖啡机。当您按下按钮时,咖啡豆从玻璃管输送到研磨器。磨制后的咖啡粉由另一个玻璃管送到煮制机。沸腾的水滴入咖啡粉中,一杯醇香四溢的咖啡传送到您的手中….。Java语言确实与咖啡有着不解之缘。这还得从它的命名说起。关于Java的命名来由,在美国硅谷地区有许多不同版本的故事。升阳公司(Sun Microsystems)的创建者和前CEO 简姆斯 古斯林(James Gosling)本人也加入了讲述这个故事的行列。最初这个为TV机顶盒所设计的语言在公司内部一直称为Green项目。“我们的新语言需要一个名字。” 简姆斯.古斯林一直在考虑这个问题。 有一天,简姆斯 古斯林注意到自己办公室外一棵茂密的橡树Oak,这是一种在硅谷很常见的树。所以他将这个新语言命名为Oak。但Oak是另外一个注册公司的名字。这个名字不可能再用了。 如果通过正式程序来注册产品的名称将即费时又费钱。简姆斯 古斯林决定通过市场部门,请来了一个命名顾问,召开命名征集会。当时,因为没有一个合适的名字,他们不得不延后这个语言的面世。在命名征集会上,大家提出了很多名字。最后按大家的评选次序,将十几个名字排列成表,上报给商标律师。排在第一位的是Silk(丝绸)。尽管大家都喜欢这个名字,但遭到简姆斯 古斯林的坚决反对而作罢。排在第二和第三的都没有通过律师这一关。简姆斯 古斯林最喜欢的就是排在第三位的Lyric(抒情诗)。只有排在第四位的名字、得到了所有人的认可和律师的通过。这个名字就是Java。是谁在命名征集会上提议Java的呢? 简姆斯 古斯林回忆道,“市场部组织了命名会,命名顾问主持了会议,我们喊叫着列出了一大堆名字。我记得第一个提议名字Java的是马克 奥颇门(Mark Opperman)。”马克 奥颇门是在一家咖啡店与同事品尝咖啡时得到灵感的。Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。国外的许多咖啡店用Java来命名或宣传,以彰显其咖啡的品质。Java语言中的许多库类名称,多与咖啡有关,如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans (对象豆)等等。从此一个即好听又好记、具有强大的生命力的编程语言Java诞生了。

为什么Java类只能继承一个父类

多重继承是一件很复杂、很容易产生问题的功能。它跟Goto语句一样,利弊交织。以下分两部分叙述,第一部分是Python多重继承遇到的麻烦,第二部分是Java和Ruby如何折中多重继承需求。============================================第一部分:Python是支持多重继承的,但为了解决多重继承的方法查找顺序问题(被称为MRO),有一场苦难史:1. 传统模式直接使用深度优先算法(并且,从左向右),每个类选择其第一次出现的位置。比如class A:def save(self): passclass B(A): passclass C:def save(self): passclass D(B, C): pass作为D类的一个实例,它的成员寻找顺序是:D、B、A、C。但当碰到如下这样一个“菱形继承”就麻烦了:class A:def save(self): passclass B(A): passclass C(A):def save(self): passclass D(B, C): pass作为D类的一个实例,寻找顺序也是D、B、A、C,但调用其save方法时,到底是调用A中的呢?还是C中的呢?直观上看,应该是C。这里有产生矛盾了。2. Python2.2的new-style class模式Python2.2中引进了new-style class,说白了就像java一样,所有类都继承自最根本的object类。这就让“菱形继承”变成十分普遍,于是只能改变MRO策略。仍然使用深度优先搜索、从左向右,但是每个类选择其最后一次出现的位置。这样一来,对上面的“菱形继承”就处理比较完美了,形成的顺序是:D、B、C、A,越是公用基础类,越放在后面。但是,碰到交叉继承,就又懵了。<img src="https://pic4.zhimg.com/d067bccb353065c3276a96f6aab93a77_b.jpg" data-rawwidth="113" data-rawheight="179" class="content_image" width="113">这里,X和Y都继承自O,A继承(X,Y)(注意,有先后顺序),B继承(Y,X),再有个最下面的类继承(A,B)。这里,X和Y都继承自O,A继承(X,Y)(注意,有先后顺序),B继承(Y,X),再有个最下面的类继承(A,B)。按照上述算法出来的结果是:?、A、B、Y、X、O。这就有些奇怪了,明明A在B前,A继承的X在Y前,可为啥X的优先级比Y要低呢?3. C3算法1996年,一帮牛人写了一篇文章A monotonic superclass linearization for Dylan,提供了一个基于层级计算的线性MRO算法,被称为C3,整体上比较合理了。(算法不详说了)在2012年被加入了Dylan语言,2007年加入了Python2.3,此外还有Perl 6、Parrot等语言之中。这样虽说基本解决了计算问题,但多重继承本身就有很多让人疑惑的地方,比如:<img src="https://pic4.zhimg.com/c1e6e9a3a1df789b9686582a9367326b_b.jpg" data-rawwidth="251" data-rawheight="171" class="content_image" width="251">参考文献:参考文献:http://python-history.blogspot.jp/2010/06/method-resolution-order.htmlThe Python 2.3 Method Resolution Order============================================第二部分:多重继承那么复杂,可单一继承又那么拘束,咋办呢?1. 接口继承Java就是那么做的,只允许单一继承类(方法的实现),但可以继承多个接口(方法的定义)。Java的接口继承功能,既实现了静态语言的多重继承性,又避免了多重继承的数据构造的冲突和类层次的复杂性。但是,我们并不能说接口是解决问题的完美方案。接口也有不能共享实现的缺点。本来只是为了跨越继承层次来共享代码,现在却需要另外生成一个独立对象,而且每次方法调用都要委派给这个对象,这实在是不太合理,而且执行的效率也不高。——《松本行弘的程序世界》2. Mix-in这是Ruby所推崇的,最初在Lisp中开始使用。规则如下:通常的继承都是单一继承。第二个以及两个以上的父类必须是Mix-in的抽象类(即不能单独生成实例,不能继承普通类)。这种规则下,既能够保持单一继承的结构,又能用Mix-in来共享方法的实现。

在centos6中部署tomcat项目,但是总报java.net.ConnectException: Connection refused,请大神解惑

你项目中使用ftp下载文件,但是ftp服务拒绝了。ftp服务器的防火墙不让你链接ftp服务器如果是阿里云什么的,有安全组什么的。

java 生产者消费者 线程优先级问题

你判断的时候只要有就可以取出来,不要判断是max5的时候才能取,你再改改判断条件呗只要大于0就可以取,写写看吧。

RxJava怎么实现多个线程同时执行,怎么实现retryWhen

在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题,Java实现线程同步的方法很多,具体如下。(1)synchronized关键字 在Java中内置了语言级的同步原语synchronized关键字,其在多线程条件下实现了对共享资源的同步访问。根据synchronized关键字修饰的对象不同可以分为以下几种情况。 *synchronized关键字同步方法 public synchronized void method(){ //do something } 注意: 如果使用synchronized关键字同步方法,很容易误认为同步关键字锁住了它所包围的代码。但是实际情况却不是这样,同步加锁的是对象而并非代码。因此。如果在一个类中有一个同步方法,该方法是可以被两个不同的线程同时执行的,只要每个线程自己创建一个该类的实例即可。 示例代码:package newthread;public class TestSync { public static void main(String[] args) { MyThread1 my1=new MyThread1(1); MyThread1 my2=new MyThread1(3); my1.start(); my2.start(); }}class MyThread1 extends Thread{ private int val; public MyThread1(int v){ val=v; } public synchronized void printVal(int v){ for(int i=0;i<100;i++){ System.out.print(v); } } public void run(){ printVal(val); }} 执行代码结果是1和3交叉输出的,即1和3两个线程在并发执行printVal方法,并没有实现同步功能。原因在于synchronized关键字锁定的是对象而并非代码块,如果需要实现真正的同步,必须同步一个全局对象或者对类进行同步。synchronized关键字同步类的格式如下:synchronized(MyThread.class){}改进代码package newthread;public class TestSync_2 { public static void main(String[] args) { MyThread_2 my1=new MyThread_2(1); my1.start(); MyThread_2 my2=new MyThread_2(2); my2.start(); }} class MyThread_2 extends Thread{ private int val; public MyThread_2(int v){ val=v; } public void printVal(int v){ synchronized(MyThread_2.class){ for(int i=0;i<100;i++){ System.out.print(v); } } } public void run(){ printVal(val); } }在上面的实例中,printVal()方法的功能不再对个别的类实行同步,而是对当前类进行同步。对于MyThread而言,它只有惟一的类定义,两个线程在相同的锁上同步,因此在同一时刻只有一个线程可以执行printVal()方法。至于输出结果的两种可能,则是由于Java线程调度的抢占实现模式所决定的。 *synchronized关键字同步公共的静态成员变量 在上面的示例中,通过对当前类进行加锁,达到了线程同步的效果,但是基于线程同步的一般原理是应该尽量减小同步的粒度以达到更高的性能。其实针对上文中的示例,也可以通过对公共对象加锁,即添加一个静态成员变量来实现,两种方法都通过同步该对象而达到线程安全。示例代码如下:package newthread;public class TestSync_3 { public static void main(String[] args) { MyThread_3 my1=new MyThread_3(2); my1.start(); MyThread_3 my2=new MyThread_3(5); my2.start(); }}class MyThread_3 extends Thread{ private int val; private static Object lock=new Object(); public MyThread_3(int v){ val=v; } public void printVal(int v){ synchronized(lock){ for(int i=0;i<100;i++){ System.out.print(v); } } } public void run(){ printVal(val); }}注意:为了能够提高程序的性能,针对示例代码中对于对象的选取做一个简单的介绍:基于JVM的优化机制,由于String类型的对象是不可变的,因此当用户使用“”的形式引用字符串时,如果JVM发现内存已经有一个这样的对象,那么它就使用该对象而不再生成一个新的String对象,这样是为了减小内存的使用;而零长度的byte数组对象创建起来将比任何对象要实用,生成零长度的byte[]对象只需要3条操作码,而Object lock=new Object()则需要7行操作码。 *synchronized关键字同步游离块 synchronized{ //do something } synchronized关键字同步代码块和上文中所提到的synchronized关键字同步公共的静态成员变量类似,都是为了降低同步粒度避免对整个类进行同步而极大降低了程序的性能 *synchronized关键字同步静态方法 public synchronized static void methodAAA(){ //do something } public void methodBBB(){ synchronized(Test.class){ //do something } } synchronized关键字同步静态方法与synchronized关键字同步类实现的效果相同,唯一不同的是获得的锁对象不同,当同一个object对象访问methodAAA()和methodBBB()时,同步静态方法获得的锁就是该object类,而同步类方法获得的对象锁则是object对象所属的那个类(2)Metux互斥体的设计和使用 Metux称为互斥体,同样广泛应用于多线程编程中。。其中以Doug Lea教授编写的concurrent工具包中实现的Mutex最为典型,本文将以此为例,对多线程编程中互斥体的设计和使用做简单介绍。在Doug Lea的concurrent工具包中,Mutex实现了Sync借口,该接口是concurrent工具包中所有锁(lock)、门(gate)、和条件变量(condition)的公共接口,SyncD的实现类主要有Metux、Semaphore及其子类、Latch、CountDown和ReentrantLock等。这也体现了面向对象抽象编程的思想,使开发者可以在不改变代码或者改变少量代码的情况下,选择使用Sync的不同实现。Sync接口的定义如下:package newthread;public interface Sync { //获取许可 public void acquire() throws InterruptedException; //尝试获取许可 public boolean attempt(long msecs)throws InterruptedException; //释放许可 public void realse();}通过使用Sync接口可以替代synchronized关键字,并提供更加灵活的同步控制,但是并不是说concurrent工具包是独立于synchronized的技术,其实concurrent工具包也是在synchronized的基础上搭建的。区别在于synchronized关键字仅在方法内或者代码块内有效,而使用Sync却可以跨越方法甚至通过在对象之间传递,跨越对象进行同步。这是Sync及concurrent工具包比直接使用synchronized更加强大的地方。 需要注意的是Sync中的acquire()和attempt()方法都会抛出InterruptedException异常,因此在使用Sync及其子类时,调用这些方法一定要捕获InterruptedException。而release()方法并不会抛出InterruptedException异常,这是因为在acquire()和attemp()方法中都有可能会调用wait()方法等待其他线程释放锁。因此,如果对一个并没有acquire()方法的线程调用release()方法不会存在什么问题。而由于release()方法不会抛出InterruptedException,因此必须在catch或finally子句中调用release()方法以保证获得的锁能够被正确释放。示例代码如下:package newthread;public class TestSync_4 { Sync gate; public void test(){ try { gate.acquire(); try{ //do something }finally{ gate.realse(); } } catch (InterruptedException ex) { } }}Mutex是一个非重入的互斥锁。广泛应用于需要跨越方法的before or after类型的同步环境中。下面是一个Doug Lea的concurrent工具包中的Mutex的实现,代码如下:package newthread;import com.sun.corba.se.impl.orbutil.concurrent.Sync;public class TestMutex implements Sync{ protected boolean flg=false; public void acquire() throws InterruptedException { if(Thread.interrupted()) throw new InterruptedException; synchronized(this){ try{ while(flg) wait(); flg=true; }catch(InterruptedException ex){ notify(); throw ex; } } } public boolean attempt(long msecs) throws InterruptedException { if(Thread.interrupted()) throw new InterruptedException; synchronized(this){ if(!flg){ flg=true; return true; }else if(msecs<=0){ return false; }else{ long waitTime=msecs; long start=System.currentTimeMillis(); try{ for(;;){ wait(waitTime); if(!flg){ flg=true; return true; }else{ waitTime=msecs-(System.currentTimeMillis()-start); if(waitTime<=0) return false; } } }catch(InterruptedException ex){ notify(); throw ex; } } } } public void release() { flg=false; notify(); } }

Java多线程之阻塞I/O如何中断

阻塞的I/O线程在关闭线程时并不会被打断,需要关闭资源才能打断。1.执行socketInput.close();阻塞可中断。2.执行System.in.close();阻塞没有中断。复制代码package Thread.Interrupting;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class CloseResource {public static void main(String[] args) throws Exception {//堵塞的I/O线程不会被打断,需要关闭资源才能打断ExecutorService exec = Executors.newCachedThreadPool();ServerSocket server = new ServerSocket(8080);InputStream socketInput = new Socket("localhost", 8080).getInputStream();exec.execute(new IOBlocked(socketInput));exec.execute(new IOBlocked(System.in));TimeUnit.MILLISECONDS.sleep(100);System.out.println("Shutting down all threads");exec.shutdownNow();TimeUnit.SECONDS.sleep(1);System.out.println("Closing " + socketInput.getClass().getName());socketInput.close();TimeUnit.SECONDS.sleep(1);System.out.println("Close " + System.in.getClass().getName());System.in.close();}}复制代码被阻塞的nio通道在关闭线程后会自动响应中断阻塞,不需要关闭底层资源。复制代码package Thread.Interrupting;import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.nio.ByteBuffer;import java.nio.channels.AsynchronousCloseException;import java.nio.channels.ClosedByInterruptException;import java.nio.channels.SocketChannel;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.TimeUnit;class NIOBlocked implements Runnable {private final SocketChannel sc;public NIOBlocked(SocketChannel sc) {this.sc = sc;}@Overridepublic void run() {try {System.out.println("Waiting for read() in " + this);sc.read(ByteBuffer.allocate(1));} catch (ClosedByInterruptException e) {System.out.println("ClosedByInterruptException");} catch (AsynchronousCloseException e) {System.out.println("AsynchronousCloseException");} catch (IOException e) {throw new RuntimeException(e);}System.out.println("Exiting NIOBlocked.run() " + this);}}public class NIOInterruption {public static void main(String[] args) throws Exception {//被阻塞的nio通道会自动地响应中断ExecutorService exec = Executors.newCachedThreadPool();ServerSocket server = new ServerSocket(8080);InetSocketAddress isa = new InetSocketAddress("localhost", 8080);SocketChannel sc1 = SocketChannel.open(isa);SocketChannel sc2 = SocketChannel.open(isa);Future<?> f = exec.submit(new NIOBlocked(sc1));exec.execute(new NIOBlocked(sc2));exec.shutdown();TimeUnit.SECONDS.sleep(1);f.cancel(true);TimeUnit.SECONDS.sleep(1);sc2.close();}}
 首页 上一页  40 41 42 43 44 45 46 47 48 49 50  下一页  尾页