收藏 分销(赏)

java基础学习心得.docx

上传人:紫*** 文档编号:5748599 上传时间:2024-11-19 格式:DOCX 页数:28 大小:41.31KB
下载 相关 举报
java基础学习心得.docx_第1页
第1页 / 共28页
java基础学习心得.docx_第2页
第2页 / 共28页
java基础学习心得.docx_第3页
第3页 / 共28页
java基础学习心得.docx_第4页
第4页 / 共28页
java基础学习心得.docx_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、java基础学习心得第一篇:java学习需要什么基础java学习需要什么基础随着java这种语言的广泛运用,越来越多从事开发的人员开始学习接触这门课程,那么,java学习需要什么基础?java刚刚入门应该接触哪些知识呢?java入门应该学习什么内容呢?首先要说明的,java有三个大的方向(j2se,j2me,j2ee),走不同的方向可能学的技术和要花费的时间可能有所不同。我是搞opublic static void main(string args)int x= 7;/逻辑运算符用于连接boolean类型的表达式。/x3 & x;session可以不赋值,默认为true,如果session=”

2、false”,则在jsp页面中,隐含的变量session就不能使用。3. 请求控制器结构(request controller)也被称之为jsp model 2 architecture这种途径涉及到使用一个servlet或一个jsp作为一个应用程序或一组页面的入口点。为创建可维护的jsp系统,request controller是最有用的方式之一。不是jsp,而是java类才是放置控制逻辑的正确的地方。请求控制器的命名模式为: xxxcontroller.jsp请求控制器类的命名模式为: xxxrequestcontroller2jsp中的javabeanjsp三种bean的类型1) 页面b

3、ean2) 会话bean3) 应用bean大多数的系统会使用一个会话bean来保持状态,而对每一个页面使用一个页面bean 来对复杂的数据进行表示。页面bean是一个模型,而jsp是一个视图。3custom tagbean是信息的携带者,而tag更适用于处理信息。标记库包含一个标记库描述符(tld)和用于实现custom tag的java类在翻译阶段,jsp容器将使用tld来验证页面中的所有的tag是否都被正确的使用。标记处理程序只是一个简单的适配器,而真正的逻辑是在另一个类中实现的,标记处理程序只是提供了一个供其他的可复用的类的jsp接口servlet1servletconfig᠊

4、8; 一个servletconfig对象是servlet container在servlet initialization的时候传递给servlet的。servletconfig包涵 servletcontext 和 一些 name/value pair (来自于deployment descriptor) servletcontext接口封装了l就是l1xml基础知识1. 一个xml文档可以分成两个基本部分:首部( header )内容( content )2. xml名字空间规范中指定:xml文档中的每一个元素都处在一个名字空间中;如果没有指定的名字空间,缺省的名字空间就是

5、和该元素相关联的名字空间。3. a document that is l.sax.reader/|org.xm.l.sax.xmlreader/|org.apche.xerces.parsers.saxparser2lns:xsd1=xmlns:soap=http:/schemas.xmlsoap.org/lschema;soap:operationsoapaction=;my first service;soap:address location=;它包含了以下的关键信息:消息的描述和格式定义可以通过xml文档中的;和; 标记来传送。; 标记中表示了消息传送机制。 (e.g. request

6、-only, request-response, response-only) 。; 标记指定了编码的规范 。; 标记中表示服务所处的位置 (url)。i客户并且可以和容器所管理的环境外面的代码进行通讯。6.使用映象api查询ejb组件由于安全规则所不能访问的类。这个约束加强了java平台的安全性。7.欲创建或获得一个类的加载器,设置或创建一个新的安全管理器,停止java虚拟机,改变输入、输出和出错流。这个约束加强了安全性同时保留了ejb容器管理运行环境的能力。8.设置socket工厂被urls serversocket,socket和stream handler使用。避免这个特点,可以加强安

7、全性同时保留了ejb容器管理运行环境的能力。9.使用任何方法启动、停止和管理线程。这个约束消除了与ejb容器管理死锁、线程和并发问题的责任相冲突的可能性。通过限制使用1016几个特点,你的目标是堵上一个潜在的安全漏洞:10.直接读写文件描述符。11.为一段特定的代码获得安全策略信息。12.加载原始的类库。13.访问java一般角色所不能访问的包和类。14.在包中定义一个类。15.访问或修改安全配置对象(策略、安全、提供者、签名者和实体)。16.使用java序列化特点中的细分类和对象替代。17.传递this引用指针作为一个参数或者作为返回值返回this引用指针。你必须使用sessionconte

8、xt或entitycontext中的getejbobject()的结果。java2平台的安全策略以上所列的特点事实上正是java编程语言和java2标准版中的标准的、强有力的特色。ejb容器允许从j2se中使用一些或全部的受限制的特色,尽管对于ejb组件是不可用的,但需通过j2se的安全机制来使用而不是通过直接使用j2se的api。java2平台为ejb1.1规范中的ejb容器所制定的安全策略定义了安全许可集,这些许可在ejb组件的编程限制中出现。通过这个策略,定义了一些许可诸如:java.io.filepermission,permission,java.io.reflect.reflect

9、permission,java.lang.security.securitypermission,以便加强先前所列出的编程限制。许多ejb容器没有加强这些限制,他们希望ejb组件开发者能遵守这些编程限制或者是带有冒险想法违背了这些限制。违背这些限制的ejb组件,比标准方法依赖过多或过少的安全许可,都将很少能在多个ejb容器间移植。另外,代码中都将隐藏着一些不确定的、难以预测的问题。所有这些都足以使ejb组件开发者应该知道这些编程限制,同时也应该认真地遵守它们。任何违背了这些编程限制的ejb组件的实现代码在编译时都不能检查出来,因为这些特点都是java语言和j2se中不可缺少的部分。对于ejb组

10、件的这些限制同样适用于ejb组件所使用的帮助/访问(helper/access)类,j2ee应用程序使用java文档(jar)文件格式打包到一个带.ear(代表enterprise archive)扩展名的文件中,这个ear文件对于发送给文件部署器来说是标准的格式。ear文件中包括在一个或多个ejbjar文件中的ejb组件,还可能有ejbjar所依赖的库文件。所有ear文件中的代码都是经过深思熟虑开发的应用程序并且都遵守编程限制和访问许可集。未来版本的规范可能会指定通过部署工具来定制安全许可的能力,通过这种方法指定了一个合法的组件应授予的许可权限,也指定了一个标准方法的需求:如从文件系统中读文

11、件应有哪些要求。一些ejb容器/服务器目前在它们的部署工具中都提供了比标准权限或多或少的许可权限,这些并不是ejb1.1规范中所需要的。理解这些约束ejb容器是ejb组件生存和执行的运行期环境,ejb容器为ejb组件实例提供了一些服务如:事务管理、安全持久化、资源访问、客户端连接。ejb容器也负责ejb组件实例整个生命期的管理、扩展问题以及并发处理。所以,ejb组件就这样寄居在一个被管理的执行环境中即ejb容器。因为ejb容器完全负责ejb组件的生命期、并发处理、资源访问、安全等等,所以与容器本身的锁定和并发管理相冲突的可能性就需要消除,许多限制都需要使用来填上潜在的安全漏洞。除了与ejb容器

12、责任与安全冲突的问题,ejb组件还意味着仅仅聚焦于商务逻辑,它依赖于ejb容器所提供的服务而不是自己来直接解决底层的系统层的问题。可能的问题通常,ejb组件在容器之间的移植不可避免地与如下问题相关:1.它需要依靠的受限制的特点在特定ejb容器中没有得到加强。2.它需要依靠的非标准的服务从容器中可获得。为了保证ejb组件的可移植性和一致的行为,你应该使用一个具有与java2平台安全策略集相一致的策略集的容器来测试ejb组件,并且其加强了前述的编程限制。总结ejb组件开发者应该知道这些推荐的关于ejb组件的编程限制,明白它们的重要性,并且从组件的稳定性和可移植性利益方面考虑来遵循它们。因为这些编程

13、限制能阻止你使用标准的java语言的特点,违背了这些编程限制在编译时不会知道,并且加强这些限制也不是ejb容器的责任。所有这些原因都使你应很小心地遵守这些编程限制,这些限制在组件的合同中已经成为了一个条款,并且它们对于建造可靠的、可移植的组件是非常重要的。2. 优化ejbentity bean为在应用程序和设计中描述持久化商业对象(persistent business objec ts)提供了一个清晰的模型。在java对象模型中,简单对象通常都是以一种简单的方式进行处理但是,很多商业对象所需要的事务化的持久性管理没有得到实现。entity bean将持久化机制封装在容器提供的服务里,并且隐藏

14、了所有的复杂性。entity bean允许应用程序操纵他们就像处理一个一般的java对象应用。除了从调用代码中隐藏持久化的形式和机制外,entity bean还允许ejb容器对对象的持久化进行优化,保证数据存储具有开放性,灵活性,以及可部署性。在一些基于ejb技术的项目中,广泛的使用oo技术导致了对entity bean的大量使用,sun的工程师们已经积累了很多使用entity bean的经验,这篇文章就详细阐述的这些卡发经验:*探索各种优化方法*提供性能优化和提高适用性的法则和建议*讨论如何避免一些教训。法则1:只要可以,尽量使用cmpcmp方式不仅减少了编码的工作量,而且在containe

15、r中以及container产生的数据库访问代码中包括了许多优化的可能。container可以访问内存缓冲中的bean,这就允许它可以监视缓冲中的任何变化。这样的话就在事物没有提交之前,如果缓存的数据没有变化就不用写到数据库中。就可以避免许多不必要的数据库写操作。另外一个优化是在调用find方法的时候。通常情况下find方法需要进行以下数据库操作:查找数据库中的纪录并且获得主键将纪录数据装入缓存cmp允许将这两步操作优化为一步就可以搞定。具体怎么做我也没弄明白,原文没有具体阐述法则2:写代码时尽量保证对bmp和cmp都支持许多情况下,ejb的开发者可能无法控制他们写的bean怎么样被部署,以及使

16、用的container是不是支持cmp.一个有效的解决方案是,将商业逻辑的编码完全和持久化机制分离。再cmp类中实现商业逻辑,然后再编写一个bmp类,用该类继承cmp类。这样的话,所有的商业逻辑都在cmp类中,而持久化机制在bmp中实现。我觉得这种情况在实际工作中很少遇到,但是作者解决问题的思路值得学习法则3:把ejbstore中的数据库访问减小到最少。如果使用bmp,设置一个缓存数据改变标志dirty非常有用。所有改变数据库中底层数据的操作,都要设置dirty,而在ejbstore()中,首先检测dirty的值,如果dirty的值没有改变,表明目前数据库中的数据与缓存的一致,就不必进行数据库

17、操作了,反之,就要把缓存数据写入数据库。法则4:总是将从lookup和find中获得的引用进行缓存。(cache)引用缓存对session bean和entity bean 都是适用的。通过jndi lookup获得ejb资源。比如datasource,bean的引用等等都要付出相当大的代价。因此应该避免多余的lookup.可以这样做:将这些引用定义为实例变量。从setentitycontext(session bean使用setsessioncontext)方法查找他们。setentitycontext方法对于一个bean实例只执行一次,所有的相关引用都在这一次中进行查找,这样查找的代价就不

18、是那么昂贵了。应该避免在其他方法中查找引用。尤其是访问数据库的方法:ejbload()和ejbstore(),如果在这些频繁调用的方法中进行datasource的查找,势必造成时间的浪费。调用其他entity bean的finder方法也是一种重量级的调用。多次调用finder()方法的代价非常高。如果这种引用不适合放在setentitycontext这样的初始化时执行的方法中执行,就应该在适当的时候缓存finder的执行结果。只是要注意的是,如果这个引用只对当前的entity有效,你就需要在bean从缓冲池中取出来代表另外一个实体时清除掉这些引用。,这些操作应该在ejbactivate()中

19、进行。法则5:总是使用prepare statements这条优化法则适用于所有访问关系数据库的操作。数据库在处理每一个sql statement的时候,执行前都要对statement进行编译。一些数据库具有缓存statement和statement的编译后形式的功能。数据库可以把新的statement和缓存中的进行匹配。然而,如果要使用这一优化特性,新的statement要必须和缓存中的statement完全匹配。对于non-prepared statement,数据和statement本身作为一个字符串传递,这样由于前后调用的数据不同而不能匹配,就导致无法使用这种优化。而对于prepare

20、d statement,数据和statement是分开传递给数据库的,这样statement就可以和cache中已编译的statement进行匹配。statement就不必每次都进行编译操作。从而使用该优化属性。这项技术在一些小型的数据库访问中能够减少statement将近90%的执行时间。法则6:完全关闭所有的statement在编写bmp的数据库访问代码时,记住一定要在数据库访问调用之后关闭statement,因为每个打开的statement对应于数据库中的一个打开的游标。security1加密对称加密(1)分组密码(2)流密码常用的对称加密算法:des和tripledesdash;ssl

21、(se cure socketslayer),并且已经几乎成为了目前anager,并且 logincontext 已经认证了一个带有名为“admin”的 com.ibm.resource.security.auth.principalexample 主体的 subject。清单 4. 一个简单的授权请求public class jaasexample public static void main(string args) ./ pleaction 类中。还要注意,调用类不要求为 jaasexampleaction 类代码源授予许可权,因为它实现了一个 privilegedaction。扩展

22、jaas大多数应用程序都有定制逻辑,它授权用户不仅仅在类上执行操作,而且还在该类的实例上执行操作。这种授权通常建立在用户和实例之间的关系上。这是 jaas 的一个小缺点。然而,幸运的是,这样设计 jaas 使得 jaas 可以扩展。只要做一点工作,我们将可以扩展 jaas,使其包含一个通用的、类实例级的授权框架。在文章开头处我已经说明了,抽象类 javax.security.auth.policy 被用于代表 jaas 安全性策略。它的缺省实现是由 com.sun.security.auth.policyfile 类提供。policyfile 类从 jaas 格式的文件(象清单 3 中显示的那

23、个一样)中读取策略。我们需要向这个文件添加一个东西为类实例级授权扩展策略定义:一个与许可权语句相关的可选关系参数。缺省 jaas 许可权语句的格式如下:permission ; name, actions;我们在这个许可权语句的末尾添加一个可选的关系参数来完成策略定义。下面是新许可权语句的格式:permission ;name, actions, relationship;在为类实例级授权扩展 jaas 时要注意的最重要的一点是:许可权实现类必须有一个带三个参数的构造函数。第一个参数是名称参数,第二个是行为参数,最后一个是关系参数。解析新文件格式既然文件格式已经改变,就需要一个新的 javax

24、.security.auth.policy 子类来解析文件。为简单起见,我们的示例使用了一个新的 javax.security.auth.policy 子类 com.ibm.resource.security.auth.xmlpolicyfile,来从 xml 文件读取策略。在实际的企业应用程序中,关系数据库更适合执行这个任务。使用 xmlpolicyfile 类代替缺省的 jaas 访问控制策略实现的最容易的方法是向 java.security 属性文件添加 auth.policy.provider=com.ibm.resource.security.auth.xmlpolicyfile 条

25、目。java.security 属性文件位于 java 2 平台运行时的 lib/security 目录下。清单 5 是与 xmlpolicyfile 类一起使用的样本 xml 策略文件:清单 5. 一个 xml 策略文件;permission classname=com.ibm.resource.security.auth.resourcepermissionname=com.ibm.security.sample.auctionactions=issionname=com.ibm.security.sample.bidactions=acceptrelationship=ple.aucti

26、on, create);accesscontroller.checkpermission(permission);所有者关系resourcepermission 类的 implies(permission p) 方法是这个框架的关键。implies() 方法就等同性比较名称和行为属性。如果定义了一个关系,那么必须把受保护的类实例(resource)传递到 resourcepermission 构造函数中。resourcepermission 类理解所有者关系。它将类实例的所有者与执行代码的 subject(用户)进行比较。特定关系被委托给受保护类的 fulfills() 方法。例如,在清单 5

27、 中所示的 xml 策略文件中,只有 auction 类实例的所有者可以更新(写)文件。该类的 setter 方法使用清单 6 中显示的保护代码:清单 6. 运行中的 implies(permission) 方法public void setname(string e = e().equals(ple.jarexampleactions.jarresourcesecurity.jar 文件包含允许实例级访问控制的 jaas 扩展框架。它还包含一个 loginmoduleexample 类,这个类从 xml 文件读取用户认证信息。用户标识和密码存储在 users.xml 文件中。用户组存储在 g

28、roups.xml 文件中。关于 loginmoduleexample 的更多信息,请参阅参考资料部分。该示例包含四个附加的文件:login.confpolicyresourcepolicy.xmlrun.bat在试图运行这个示例程序之前,请确保更新了 run.bat、policy 和 resourcepolicy.xml 文件中的路径。缺省情况下,所有的密码都是“anager)每个java application都可以有自己地security manager,但是默认地java application没有一个security manager可以通过下面地代码得到一个security mana

29、gertrysystem.setsecuritymanager(e%/jre/lib/ext/*.jar如果光copy不ren为.jar是没有用的。4. 事务处理本地事务java.sql.connection接口可以控制事务边界(即开始和结束)。在事务开始的时候调用setautocommit( false ), 而在中止事务时调用rollback或commit()方法。这类事务叫本地事务。分布式事务但是,在特定的情况下,可能有多个客户(例如两个不同的servlet或ejb组件)参与了同一个事务。或者,客户在同一个事务中可能会执行跨越多个数据库的数据库操作。jdbc2.0 optional pa

30、ckage 同jta一起来实现分布式样事务。5. 一些技巧检索自动产生的关键字为了解决对获取自动产生的或自动增加的关键字的值的需求,jdbc 3.0 api 现在将获取这种值变得很轻松。要确定任何所产生的关键字的值,只要简单地在语句的 execute() 方法中指定一个可选的标记,表示您有兴趣获取产生的值。您感兴趣的程度可以是 statement.return_generated_keys,也可以是 statement.no_generated_keys。在执行这条语句后,所产生的关键字的值就会通过从 statement 的实例方法 getgeneratedkeys() 来检索 results

31、et 而获得。resultset 包含了每个所产生的关键字的列。清单 1 中的示例创建一个新的作者并返回对应的自动产生的关键字。清单 1. 检索自动产生的关键字statement stmt = conn.createstatement();/ obtain the generated key that results from the query.stmt.executeupdate(insert into authors +(first_name, last_name) +values (george, anagers.a jts transaction manager provides t

32、ransaction services to the parties involved in distributed transactions: the application server, the resource manager, the standalone transactional application, and the communication resource manager (crm).2jta1.1 事务处理的概念jta实际上是由两部分组成的:一个高级的事务性客户接口和一个低级的 x/open xa接口。我们关心的是高级客户接口,因为bean可以访问它,而且是推荐的客户

33、应用程序的事务性接口。低级的xa接口是由ejb服务器和容器使用来自动协调事务和资源(如数据库)的1.1.1事务划分a程序划分使用usertransaction启动jta事务the usertransaction interface defines the methods that port java.util.*;import e.setvisible(true);class mouseframe extends jframepublic mouseframe()settitle(mouse test);setsize(default_ove(rectangle2d s)if(s=null)

34、return;if(s=current) current=null;squares.remove(s);repaint();private static final int side_length=20;/正方形的边长private arraylist squares;/存放所有已绘制的方块(鼠标有效绘制路径)private rectangle2d current;/当前需要绘制的方块private class mousehandler extends mouseadapter/* 当鼠标按钮被按下时,先查找当前点是否已经包含在前期图新内,* 否,则添加至数组列表*/public void m

35、ousepressed(mouseevent event)current=find(event.getpoint();if(current=null)add(event.getpoint();/* 处理鼠标点击事件,如果当前点包含于图形之中,且鼠标连续点击两次以上,则擦除该图形。*/public void mouseclicked(mouseevent event)current=find(event.getpoint();if(current!=null & event.getclickcount()=2)remove(current);private class mousemotionha

36、ndler implements mousemotionlistener/* 改变鼠标形状h);*/public void mousemoved(mouseevent event)if(find(event.getpoint()=null)setcursor(cursor.getdefaultcursor();elsesetcursor(cursor.getpredefinedcursor(cursor.crosshair_cursor);/* 拖动图形*/public void mousedragged(mouseevent event)if(current!=null)int x=even

37、t.getpoint().x;int y=event.getpoint().y;current.setframe(x-side_length/2,y-side_length/2,side_length,side_lengt repaint();第五篇:关于java学习的一点心得体会管理科学与工程学院11信管2班孙鑫201*4548关于java学习的一点心得体会我是学信管专业的,这学期除了学习了java软件开发综合实验这门选修课外,还有自己本专业要学的java面向对象的程序设计。学习了近一学期的java课程,觉得是该总结自己的心得体会了。开始学习任何一门课(包括java),兴趣最重要。一直觉得自己在学习了计算机编程语言(也就是c语言),学到了很多东西,再学习java的话,应该问题不大,但在学习了几个星期后,还是明确感到了,有点吃力,于是趁学校开设这门选修课,并且有自己院的老师讲解,还有了上机的机会,比自己自学省事多了,于是鼓足信心,开始了漫长的java征途。还记得我编

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 应用文书 > 心得体会

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服