ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:1.68MB ,
资源ID:11445922      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11445922.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA学习.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA学习.docx

1、JAVA学习JAVA的编译、执行过程上图中基本上完整的描述了JAVA的编译执行过程,上图左边的JAVA编译器指的是JAVA源码级编译器,一般是在eclipse等开发环境中的。具体如下图JAVA程序员所做的就是使用开发环境伪编译出字节码文件,供JAVA虚拟机执行。JAVA虚拟机JVM是一个假想的计算机,也具有内存、寄存器和堆栈等概念,他是运行在真实的计算机操作系统上的程序。JAVA虚拟机由即使编译器和解释器组成,虚拟机是实现JAVA代码一次编译,到处执行的关键。虚拟机是连接java源代码和操作系统的桥梁。以前的C等程序是根据操作系统的不同,编译生成不同的可执行代码。而JAVA在他们中间插入了虚拟

2、机这一层,将问题分布解决了。JVM通过规范的设计,使得源代码编译成一套统一的字节码,屏蔽了操作系统的区别。至于字节码怎么转换成不同机器可以执行的程序,那是第二步的问题,也就是解释器要做的事情。因此,解释器是根据不同的机器和操作系统而不同的。解释器连接了虚拟机和可执行的机器码。解释器是可变的接口,JVM为两者搭建了一个利于解释的平台。实际上,很多问题都是这样分层解决的。应用程序直接面对硬件,几乎是不能实现的难度,于是对硬件抽象出了驱动程序、操作系统,屏蔽硬件的差别。而为了屏蔽操作系统的差别,出现虚拟机也是顺理成章的,关键在于,JVM设计的巧妙性,使他非常适合JAVA的字节码的运行。它是根据jav

3、a的特点设计的虚拟机规范。上图右侧分为即使编译和解释器两个箭头实际上有一些问题,就如同下图其中的JVM字节码分为两个方向, 1.即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。2.解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程 序的所有操作。通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,使用第一种方法。JIT可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。Java的public类JAVA类和变量默认friendly变量

4、访问权限:(默认的为friendly)public 公共:private 私有:只允许本类内部访问protect 受保护:同一个包的类,及其子类可以访问friendly 友好(默认的):此时只允许同一个包内的类访问Java文档注释 就是写成/*的注释,当然这个注释也是在源代码中的,会自动生成javadoc解释文档。Java主方法mainJAVA常量默认int条件运算符函数static属性For循环先声明和赋值tem变量类的多态类名规范封装性构造函数定义:使用: 注意:内存位置第一个,是新开辟内存空间,后一个,是字符串有内存空间,然后定义无论STR2还是str3=“java”,都是指向这个内存空

5、间。创建string不要轻易改变String是不可变的类型,即创建一个String对象后,就不能修改这个String,平常使用的aa+bb生成aabb这个过程中,实际是创建了三个String对象:aa, bb, aabbStringBuffer是相对于String的一个可变的类型,StringBuffer可以在原对象上进行加长或缩短等修改操作。适用于需要大量连接字串或拼接处理字串的情况,相应的情况下就不宜使用String对象了。对于Stringstr=helloworld;相当于str是一个常量,当对str进行操作的时候,比如str+=test;它不是简单的在helloworld后面加上tes

6、t,而是在内存中重新开一个空间,先拷贝helloworld再接着拷贝test组成新的字符串helloworldtest,并把这个字符串的引用重新赋值给str,也就是说,对于一个String对象引用,你最好就只是取用它,一旦你对它进行任何操作都将导致引用本身改变,而且还有很高的代价。再看下面代码:建议自己跑下,Stringtest1=test;Stringtest2=test;System.out.println(test1.equals(test2);System.out.println(test1=test2);Stringtest3=newString(test);System.out.p

7、rintln(test1.equals(test3);System.out.println(test1=test3);它的输出是:truetruetruefalse很显然,虽然test1和test2是分别赋值的,但是都是赋值test,以:,表示的字符串在内存中会是唯一的,所以test1和test2不但使用equals比较是相等的使用=比较引用也是相等的。而对于test3我使用了newString,这样会使分配一块新的内存并把test拷贝一份存入,这样test3的引用指向的是新地址,而不是test1和test2所指向的地址,所以使用equals虽然相等,但是使用=比较引用就会返回false,所以

8、,对于STRING对象,你应该把它看成常量(当然,它的引用可以被重新赋值,这和FINAL定义的常量有本质区别),如果你把helloworld这个东西直接就看成是一个引用,也许就好理解些,显然这个引用不可能被你改变。因此对于STRING的修改操作,应该尽量避免,频繁的操作应该使用StringBuffer并在完成操作以后再根据需要转换成STRING对象使用。更具体的可以看下THINKINJAVA关于String的详细说明。类变量Static声明的属性是公用的,各个对象都可以改变同一个类属性需要无参构造方法因为声明对象时候,调用构造方法,而语句中,没有传递参数。所以,需要调用无参数构造方法。但如果用

9、户定义了自己的有参数的构造方法,那么系统就不会自动生成无参构造方法,所以构建会出错。Super关键字 调用父类的构造方法、父类中的方法和属性抽象类Object类-所有类的超类Final关键字不能被继承Interface多继承的关键方法内变量不能privateRunnable的实现与Thread子类方式实现多线程区别:前者实现了资源共享;当一个类Class_a是某一个类的子类的时候,如果它Class_a要实现多线程,采用Thread的方法,他需要作为Thread的子类,但是它已经是别的类的子类了,所以不能再作为Thread的子类,因为不允许子类Class_a有多个父类。在类内定义该类的对象上面的

10、代码中,在主方法内定义了公有类的对象t1,程序可以正常运行;在其他类内也可以定义,比如run方法中,也可以定义最外层类的对象,有点类似递归调用。但是需要注意,这种方法很容易出现死循环。仿佛主方法是在所有定义的类外一样。线程生命周期控制JAVA Socket使用TCP协议,面向连接的情况:不太理解的时间里了亮哥socker对象,这是因为一个是用于监听,另一个是管理监听到之后的客户端连接。之后服务器端发送数据,都用到后来的这个clientsocket。前面的依然用于服务器端监听。下面是另外一个类似的过程说明:客户端不需要监听对象,但是需要buffer对象,用于接收。Java工程中的main方法1.

11、 一个类中只有一个main主方法2. 工程中可以有多个main方法,但是在编译执行的时候,IDE会提示设置从哪个主方法作为应用的入口;3. 每个类中的main方法供测试需要4. 每个类都可以有main方法,但每个类只能有一个完全相同的main方法。程序运行时,执行的是哪个main方法,在IDE中可以设置。如果是jar包,就在META-INFmanifest.mf中指定。5. 可以有多个,比如在类A,B,C中都存在main方法,那么,你在测试的时候,可以选择,A,B,C任意一个作为程序的入口运行.如果你要把这些程序打包,那么毕竟在配置文件中,添加一个main-class:参数,那么这个main-

12、class是你自己指定的,是A,是B,还是C,完全在于你怎么设置,明白了吗,祝你成功.6. 可以,只要参数不是一个类型或是数量不能就可以,那样的话就实现了函数重载!具体会运行哪个方法就看你传入的参数了。7. 我们知道我们编写每个类的时候,要测试类是否有错误,通过在每个类都写一个main()方法来测试,这样子做有一个缺点,那就是必须带着那些已经编译过的额外代码,如果这对你是个麻烦,就可以使用嵌套类来放置测试代码8. 一个类里面这是不可能的哦亲但是一篇代码里面 可以有多个类 每个类都可以有主方法 但是 只能有一个主类使用eclipse启动程序 会让你选择主方法硬编码硬编码(英语:Hard Code

13、或Hard Coding)指的是在软件实现上,把输出或输入的相关参数(例如:路径、输出的形式或格式)直接以常量的方式书写在源代码中,而非在运行时期由外界指定的设置、资源、数据或格式做出适当回应。一般被认定是种反模式或不完美的实现,因为软件受到输入数据或输出的格式改变就必需修改源代码,对客户而言,改变源代码之外的小设置也许还比较容易。但硬编码的状况也并非完全只有缺陷,因某些封装需要或软件本身的保护措施,有时是必要的手段。除此之外,有时候因应某些特殊的需求,制作出简单的应用程序,应用程序可能只会运行一次,或者永远只应付一种需求,利用硬编码来缩短开发的时间也是一种不错的决策。应避免硬编码,就是用变量

14、或者常量符号的时候,使用不可变的常数,可以定义一个类,存储常量值解决在计算机程序或文本编辑中,硬编码是指将可变变量用一个固定值来代替的方法。用这种方法编译后,如果以后需要更改此变量就非常困难了。大部分程序语言里,可以将一个固定数值定义为一个标记,然后用这个特殊标记来取代变量名称。当标记名称改变时,变量名不变,这样,当重新编译整个程序时,所有变量都不再是固定值,这样就更容易的实现了改变变量的目的。尽管通过编辑器的查找替换功能也能实现整个变量名称的替换,但也很有可能出现多换或者少换的情况,而在计算机程序中,任何小错误的出现都是不可饶恕的。最好的方法是单独为变量名划分空间,来实现这种变化,就如同前面

15、说的那样,将需要改变的变量名暂时用一个定义好的标记名称来代替就是一种很好的方法。通常情况下,都应该避免使用硬编码方法。java小例子: int a=2,b=2;硬编码:if(a=2) return false;不是硬编码 if(a=b) return true;一个简单的版本:顾名思义, 就是把数值写成常数而不是变量如求圆的面积 的问题 PI(3.14)3.14*r*r (这个3.14就是hardcode)PI*r*r (这里的PI用的是变量形式,就不是hardcode)C+例子:int user120;如果突然在程序中出现下面一段代码for (int i=0; i120; i+).120是什

16、么,为什么是120?这里的120就属于数字式“硬编码”,这不仅让程序很难读,而且不易维护。如果要修改120,就的修改程序中所有与此有关的120。应将数字式“硬编码”声明成一个宏,这样程序不仅易读,而且还可以一改全改。#define MAX_USER_CNT 120for (int i=0; iMAX_USER_CNT; i+).1JSP(JSTL)中如何使用常量防止硬编码?js|编码-一般来说,程序中写入硬编码是一个很不好的习惯,比如:this.state=01;通常的做法是写一个类(接口)来存放常量public interface SystemConstant String STATE_WTJ = 01;然后在程序中这样写就可以了this.state=SystemConstant.STATE_WTJ;在Java程序中这样就可以避免硬编码了。可是JSP中呢?当然,如果JSP中允许使用Scriplet的话当然也可以直接使用常量了,不过现在JSP中一般不允许出现这样的代码,比如在JSTL中怎么办呢?这样又出现了01这样的硬编码了。刚才看了AppFuse的解决方案,觉得挺不错。先写一个JspTag,详细见org.appfuse.webapp.taglib.ConstantsTag类。然后在Jsp里使用这个Tag这样,JSTL中就可以这样写了:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1