




免费预览已结束,剩余62页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精选文库运行Java需要安装的程序要运行Java程序,必须安装JDK,JDK是整个Java的核心,其中包括了Java编译器、JVM、大量的Java工具以及Java基础API。在网址的download jdk页面上下载JDK,之后安装JDK,配置环境变量,然后在dos下执行相关的命令(Javac)就可以了。JDK的几个重要的命令: Java执行工具,是启动JVM(虚拟机)并执行class(BYTE CODE)文件的命令; Javac 编译器,由.java文件生成.class文件; jar Java压缩打包工具; Javadoc 文档生成器。 JDK Documentation是JDK的联机帮助文档,是最有用和最重要的学习参考文档,应该多看。byte在java中表示有符号的八位二进制数,它可以表示在-128+127之间的任意数JDK1.6.0环境变量的设置如果安装地址是java_home=C:Program FilesJavajdk1.6.0_07 path=%java_home%bin;.(省略号部分是原来的变量值,不要动。)classpath=.;%java_home%librt.jar;%java_home%libtools.jar(注意不要让空格、标点和格式等低级错误影响配置成功)强制类型转换比一般加减乘除的运算等级要高。要表达同一种计算可以有很多的方式,最简捷的一种和最安全带的一种一定要记下来。平时要注意不同的表达方式,当然,那些易错的方式更要分清!编程一定要细心并且集中精神。Windows快捷键的背诵!Java快捷键的背诵!Java Develop Kit,Java开发工具包。 JRE(Java Runtime Environment),即Java运行环境,通常已包含在JSDK(Java Software Develop Kit即Java的软件开发包)中了。如果我们仅仅是为了运行Java程序,而不是从事Java开发,我们可以直接下载JRE,在我们的系统上安装。Sun公司将一些Java类库和相关的开发工具以软件包的形式提供给我们使用,就是我们所说的软件开发包。Java开发工具包,按其应用环境的不同,分为:(1)JSE(Java 2 Platform, Standard Edition)Java平台标准版,主要应用于Java桌面程序和Java小程序的开发,这也是我们通常所说的Java程序。(2)JEE(Java 2 Platform, Enterprise Edition)Java平台企业版,主要应用于应用于企业级的开发。(3)JME(Java 2 Platform, Micro Edition) 主要应用于手持设备的开发,例如手机中的小游戏,和名片管理系统,具体事例如“贪吃蛇”游戏,俄罗斯方块和通讯录。下载了Java平台标准版之后还要下载相关版本的文档,这是我们从事Java开发所需要用到的帮助文件,还要下载Java指南,即Java Tutorial,它通过大量完整例子的讲解,可以帮助我们快速掌握Java程序的开发,我们遵照指南学习是很有好处的。(Java前身)Osk是基于C+而开发的。C+相对来说安全性比较差。所以其中有极多的相似甚至是相同之处。Java是简单的,面向对象的,健壮的,安全的,解释的,与平台无关的,多线程的,动态的语言。简单的1、Java的风格类似于C+,从某种意义上讲,Java语言是C及C+语言的一个变种。2、Java摒弃了C+中容易引发程序错误的一些特性,如指针、结构、枚举以及内存管理等。3、Java提供了丰富的类库,可以帮助我们很方便的开发Java程序。 面向对象的 面向对象可以说是Java最重要的特性,所以它支持继承、重载、多态等面向对象的特性。Java语言的设计是完全面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。我们所熟知的C+也是面向对象的语言,但是它不是完全面向对象的,健壮的Java致力于检查程序在编译和运行时的错误。Java也是一种强类型的语言,其类型检查比C+还要严格。类型检查帮助我们检查出许多开发早期出现的错误。Java自己负责内存管理,提供了垃圾内存回收机制,有效的避免了C+中最头疼的内存泄漏问题。 在Java当中当我们为一个对象分配内存之后,我们就不再需要考虑什么时候再为这个对象去释放内存,但是C和C+不考虑释放内存是不可以的,会造成内存泄漏的问题。所有这一切都由Java的垃圾回收机制完成,它会自动的帮助我们回收无用的内存。安全的Java的安全性可从两个方面得到保证。一方 面,在Java语言里,删除了指针和释放内存等C+功能,避免了非法内存操作。另一方面,通过Java的安全体系架构来确保Java代码的安全性。Java代码可以在网络上传输,可以由我们的浏览器解释执行,当我们从网上下载Java代码在本地执行时,Java的安全架构能确保恶意的代码不能随意访问我们本地计算机的资源,例如:删除文件,访问本地网络资源等操作都是被禁止的。 解释的Java代码是解释执行的,我们使用Java编译器将Java代码编译成字节码,这是一种中间代码,然后由Java解释器解释执行。而C+程序是编译执行的,C+程序代码被编译为本地机器指令,然后执行。 与平台无关的Java作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能执行这种中间代码。Java源程序被编译成一种与机器无关的字节码格式,在Java虚拟机上运行。Java有一种口号,叫“一次编译,处处运行”指的就是Java的平台无关的特性。多线程的Java语言的一个重要特性就是在语言级支持多线程的程序设计。多线程就好像我们做一张桌子,如果你一个人完成这张桌子就好像单线程,那么你需要先做桌面,做完桌面后,再做4个桌子腿,如果现在有5个人来做桌子在程序中开辟5个线程,其中1个人做桌面,另外4个人分别做4个桌子腿,那么这两种方式效率的高低,相信大家都能区分出来。这种编程方式就好像社会化大生产的很多行业中的分工操作一样,其实在百年前就已经在工业方面应用起来了,所以很多的思想都是可以借鉴到编程中来的。还有一个例子就是活字印刷术,也与程序的语言有很多的相似之处。所以行业之中必有共同之处,甚至可以直接借鉴应用。动态的Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是我们采用C+语言进行面向对象程序设计所无法实现的。在C+程序设计过程中,每当在类中增加一个实例变量或一个成员函数后, 引用该类的所有子类都必须重新编译,否则将导致程序崩溃。Java从以下几个方面采取措施来解决这个问题。Java编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码中保存下来,传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。一个在存储器中生成的对象不在编译过程中决定,而是延迟到运行时由解释器确定。这样,对类中的变量和方法进行更新时就不至于影响现存的代码。 解释执行字节码时,这种符号信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。Java还简化了使用一个升级的或全新协议的方法。如果你的系统运行Java程序时遇到了不知怎样处理的程序,Java能自动下载你所需要的功能程序。 Java的跨平台是通过Java虚拟机(JVM)来实现的。Java源文件的编译过程Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码字节码。这一编译过程同C/C+的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。Java在编译的时候,它所编译的字节码,里面并没有保存和特定平台相关的信息。这样就有效的保证了Java的可移植性和安全性。Java解释器的执行过程运行JVM字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由“类装载器”(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其它类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。解释器在运行的时候,动态的确定内存布局,因为我们所有的代码执行的时候都会装在道内存当中,然后运行。随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转换等多种错误。通过校验后,代码便开始执行了。Java字节码的两种执行方式1、即时编译方式(just in time):解释器先将字节码编译成机器码,然后再执行该机器码,这时候编译形成的代码是与特定的平台相关的代码,这样能加快执行的速度,和C+编译后执行的速度就大致相当了。2、解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程 序的所有操作。 这种执行方式,是通过解释执行与平台无关的Java字节码来完成的,它的执行效率与C+的只想效率相比要慢一些。通常情况下我们会采用第二种方式,只有在特定的情况下,为了加快Java代码的执行,我们会采用一种即时编译的方式。通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。JVM规格描述JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。JVM对其实现的某些方面给出了具体的定义,特别是对Java可执行代码,即字节码(Bytecode)的格式给出了明确的规格。这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及Java类文件中的Java对象、常量缓冲池在JVM的存储映象。JVM规格描述是提供给解释器开发人员的,我们通常适应Java语言开发Java应用程序,我们不了解JVM的规格没有关系,如果我们要去开发一个JVM解释器,那么我们就需要料及JVM规格详细的描述。这些定义为JVM解释器开发人员提供了所需的信息和开发环境。Java的设计者希望给开发人员以随心所欲使用Java的自由。JVM是为Java字节码定义的一种独立于具体平台的规格描述,是Java平台独立性的基础。 Java的平台独立是通过Java的虚拟机来完成的。如果要在某个系统下运行Java程序,那么我们就需要在该系统上面安装Java虚拟机,Java虚拟机不是跨平台的,Sun公司针对不同的平台分别设计一个Java虚拟机,然后将这个Java虚拟机安装在不同平台下,然后由虚拟机解释执行Java的字节码,由于Java字节码没有保存于特定平台相关的信息,以此来完成Java代码的跨平台。主要是通过Java虚拟机的不扩平台性来支持Java的字节码的跨平台。有一些借鸡下蛋、站在巨人肩膀上的意思,借助分布极为广泛的几种操作系统,仅仅开发几种相对于这些操作系统的JVM就解决了大部分操作系统的Java跨平台。Java程序执行与C/C+程序执行的对比分析如果把Java源程序想象成我们的C+源程序,Java源程序编译后生成的字节码就相当于C+源程序编译后的80x86的机器码(二进制程序文件),JVM虚拟机相当于80x86计算机系统,Java解释器相当于80x86CPU。在80x86CPU上运行的是机器码,在Java解释器上运行的是Java字节码。Java解释器相当于运行Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,而是用软件实现的。Java解释器实际上就是特定的平台下的一个应用程序。只要实现了特定平台下的解释器程序,Java字节码就能通过解释器程序在该平台下运行,这是Java跨平台的根本。当前,并不是在所有的平台下都有相应Java解释器程序,这也是Java并不能在所有的平台下都能运行的原因,它只能在已实现了Java解释器程序的平台下运行。工欲善其事,必先利其器,我们首先要有Java的类库。类库在JDK中。Java指南提供了一些帮助我们快速开发Java平台的一些信息,知道我们一步一步的开发一个Java程序。Java指南与JDK和API一样,都是需要单独下载的。下面的一些是Java安装后的一些文件夹:bin的意思是binary,二进制的意思。bin文件夹中装的都是可执行文件,以后我们如果开发一个项目,也可以将可执行文件全都放在一个bin文件夹之中。在dos中,我们通常输入的Javac和Java,其中Javac就是Java编译器,Java就是Java解释器。demo文件夹中装的是一些Sun公司给我们提供的一些例子程序,我们遇到问题的时候也可以参照一下这些例子程序。Java文件的源文件是以.java,而C+的源文件是以.CPP结尾的,C语言的源文件是以.C结尾的。我们可以用任何一种文本文件的编辑器来作为Java文件的编辑器。UltraEdit不仅可以对文本文件进行编辑,还可以对二进制文件进行编辑,它可以针对你编辑的不同的源文件,对关键字进行着色功能。在不同的操作系统之下,换行是由不同的操作系统组成的,在linnux,与Unix下它的换行是由一个字符来组成的,用ASCII码来表示就是10,在Windows平台下,换行是由两个平台组成的,实际上是回车加换行,用ASCII码来表示就是13和10,来表示一个回车,因此不同操作系统中的文件是有不同的,有时候需要转换才能正常显示。在Java中,所有的功能的完成都是通过类的方式来完成的,编写Java程序的第一步就是编写一个类,当然在此之前我们是需要进行抽象和计划、计算的。命令提示符是模拟dos的一个窗口,输入cmd在“运行”中就可以启动命令提示符,cmd就是命令提示符的文件名。获得一个文件的全路径的方法:三种:要使地址栏中现实全路径名,要在“文件夹”“查看”选中“显示全路径名”,全路径可以用来复制。在命令提示符中的粘贴就是点击右键。dos中的上下键可以快速查找输入应输入过的内容。一定要学会这种原始的Java编译运行方式,真很重要!要运行什么可执行程序,就可以将该程序拖动到“运行”中,在其中的“打开”文本框中,就可以显示它的全路径名了。我们还可以直接将该可执行程序用鼠标左键拖动到命令提示符中,它的路径也会出现在其中。在命令提示符中,但我们执行一个程序的时候,它首先在当前路径下查找,如果当前路径下没有该可执行程序,那它聚会顺着环境变量中的可执行路劲去查找,从其中的第一条路径开始查找,直到查找到,如果查找不到就会出现错误信息。如果环境变量的路径中有一个以上的符合文件时就不会继续向下搜索了,所以环境变量中的路径设置的顺序是很有讲究的,前面的同名文件会覆盖后面的同名文件,所以,对重要程序的路径名,我们在设置环境变量的时候我们应该将其放在原有路径最前面。而不是放在中间或最后。在命令提示符中用set path方式可以查找环境变量中的路径设置。通过将文件拖到“运行”中可以知道文件的全名,包括扩展名。还有在“文件夹”的查看中,可以选择其中的“隐藏已知文件的扩展名”,就可以现实扩展名了。如果关键字没有着色,可能是文件名没有以.Java结尾,文件扩展名错误。中间代码,字节码格式。在一个Java当中,我们可以在一个源文件中可以编辑多个类,但是每一个类都会生成一个字节码文件。这时候如果类很多,就很麻烦,我们可以将其这些类打包成一个压缩文档,Java中就提供了这样一种方式,这个压缩文件,我们称其为.jar文件,jar.exe就能够帮助我们将多个类打包成一个jar包,然后发布给其他的程序员使用,Sun公司提供给我们的类库,也是通过jar包的形式提供给我们使用的,我们可以用常用的压缩和解压缩文件,如zip文件和rar文件来压缩和解压缩jar文件,因为它们是兼容的,在命令提示符中输入jar的时候就会为我们列出jar的用法,可以把一个目录先所有的文件都保存到jar包中。我们要学会看Java的错误信息。当我们在一个源文件中定义了一个public类,那么我们就需要将源文件名取名为这个public类的名称,两者要相一致。如果源文件中所有的类都不是共有的,是不是将源文件中的名称可以修改为其中的任意一个?一个源文件之中可以没有public类,但是只要有了的话,却只能有一个public类。否则命名就会有问题。编译Java代码,没有main函数是可以的,但是当我们要用Java解释器去解释运行字节码的时候,我们就必须要提供一个main函数(方法)。解释器加载的是类,而不是一个文件。类名的大小写是相关的。在编译的时候文件名大小写是不敏感的,但是在我们执行的时候,因为我们加载的是一个类名,而在我们程序当中,Java当中,大小写是敏感的,所以我们执行的时候加载的类名,其大小写也是敏感的,Java会根据我们JavaDoc的这种诸事方式来自动生成一个注释文档,在当前还不清楚原理,但还需要去应用的情况下,就把它背下来,以后慢慢积累解决!编译的时候编译的是一个源文件,如命令javac Hello0.java,执行的时候执行的是一个类,如命令java Hello。System(打印时候的System.out.println( );)与String都是Java中给我们提供的一个类,System.out.println( );中。我们调用System类中的一个成员变量,这个成员变量是类的一个对象out,它有一个方法println(),这个方法是向屏幕上打印输出一段话,println()是打印完一个字符串之后再打印一个换行,而print()是只打印这个字符串,这两者与转义字符n的关系要弄清楚!在Java中用n来表示换行。我们可以通过定义一个环境变量classpath,当我们定义了这个环境变量的时候,Java解释器再加在这个类的时候,就会根据我们多定义的classpath所定义的类的路径去搜寻我们想要加载的这个类,我们可以用set classpath变量来观察classpath变量有没有定义,如果没有定义,我们就可以定义一个类的路径,命令是set classpath=类的路径,在命令提示符中选中要复制的区域后在该区域点击右键就已经复制好了该区域 ,在光标处再点击右键就粘贴好了复制的内容,这时候该路径就成了一个默认路径,用set classpath=路径名更改,就可以更改该变量了。当我们定义了一个classpath变量的时候Java解释器,在加载我们要执行的类的时候,它就会去定义的路径之中去查找,就不会在当前目录下查找了。我们在编译Java程序的时候,我们都是在当前目录下进行操作,但是有时候我们又确实需要去定义一个classpath,我们通常可以用一个“.”来表示当前路径,表示上一层目录用两个“.”来表示,我们在设置一个classpath得时候我们可以set classpath= d: :. ,我们所在的当下路径变化则“.”所代表的意义也会变化.如果我们已经设置了一个classpath,当我们新启动一个命令提示符的时候,我们会发现该命令提示符提示没有定义classpath,说明新启动的一个命令提示符集成的是当前Windows系统的环境变量。先前我们在设置的环境变量只是对先前的命令提示符有效,对于我们新启动的命令提示符,它是不生效的,但是有一种方式设置命令提示符可以让它继承先前所设置的环境变量,方法就是在需要被继承的命令提示符窗口中输入一个start命令,来启动一个新的命令提示符,那么在这个新的命令提示符中,它的环境变量是与原来输入start命令的命令提示符窗口是一致的,但是如果我们关闭这两个命令提示符下一次在启动的时候,我们就会发现还要重新设置,所以我们需要在我的电脑中的属性-高级中设置环境变量,选择下面的系统变量,系统变量是不管我们以什么样的身份登录都会有这样的变量,而上面的用户变量,当登录的用户不同时,用户变量就会不同,后面的就不会赘述,都是关于环境变量的设置。设置环境变量的时候,一定要将自己的Jdk路径的环境变量放在整个众多路径的最前面!我们在用户变量中设置的path路径与在系统变量中设置的path路径会进行叠加,所以我们在系统变量中设置环境变量。Java中提供了八种基本数据类型,这里只记不常见的,byte(字节类型),它表示有符号的整数,八位二进制,范围谁-128+127,如果我们定义了一个数,却查过了它的表示范围,就会溢出,比如将10000赋值给byte型变量。打印方法System.out.println( );括号内的类型如数值类型可以不一样,即该方法会根据你输入的想要打出的类型的不同,做一个打印,这其中包含了方法的重载。pecision表示精度。byte b;b=3;b=b*3;System.out.println(b);上面一个程序当中,划线部分的右边是整形,左边是byte型,会丢失精度,应修改如下!byte b;b=3;b=(byte)(b*3);System.out.println(b);强制类型转换比乘法的优先级要高,所以要将b和3用括号括起来。short是有符号的16为的整数,范围是-62768+32767表达范围小的类型可以直接赋值给表达范围大的类型int是四个字节的整数,是一个有符号的整数,long型是一个八个字节的整数,是一个有符号的整数。char是一个无符号的两个字节的字符数值,范围是065535在Java中为了能表示各种字符,它将字符定义为两个字节。而在C语言中,字符类型是一个字节,它最多表示255中字符,算上0的话,可以有256中字符。在Java中有可以表示065535中字符。Java中的字符所采用的表示方式是用的Unicode的表示编码,这是一种字符的编码格式。我们还可以对字符类型用整数来赋值,例如char ch =97;这时候打印ch会打印出小写字母a,在这里,存储的时候,存储的并不是a这些个字符,存储的时候它们都会相应的转化为整数,对于我们常用的字符,也就是我们键盘上的这些字符,字符的表示,在内存中,都是以整数来表示的,所以我们可以用整数来对一个字符的变量用整数进行赋值。(可以用于字符赋值的整数的范围是什么呢?)AscII码所表示的字符有哪些?对应的整数是什么?它与Unicode码的表示范围有什么不同?在Java中小数如1.2,如果没有加上后缀,是默认成double类型的,有下面的例子,float f; f=1.3;是错误的,要修改成float f; f=1.3f;在Java中是以4个字节来表示单精度浮点数的,而double是以双精度来表示的,float与double都表示有符号数。boolean只有两种取值,别的类型的值赋值给它会报错。如果boolean isWorkHard=true; 如果System.out.println(isWorkHard);打印结果是true。incompatible type,不兼容的数据类型,在Java中。if条件语句和while等循环语句中的()之内的表达式,要么本身就是true或者false,要么等价于true或者false,如果a和b都被定义成了boolean值,判断a和b是否相等,要直接用=(这里有疑问!)。Java中的数组,要定义之后才能分配空间,int 数组名;定义一个数组,数组名称为.,这种声明方式比int数组名。更合乎逻辑。Java中的二维数组定义也有两种方式,int 数组名;或者是int 数组名 ;Java建议前一种,更合乎逻辑。int num;num=new int34;/三行四列num01=12;/给一个元素赋初值Java可以定义一个数组,但是其列数可以不相等,int num;num=new int3;num0=new int5;num1=new int3;num2=new int2; num04=45;num12=34;num21=21;System.out.println(num04);System.out.println(num12);没有赋值的数组元素的默认值是0。下面是一些二维数组的例子:与一位数组的赋值进行对比:int num=new int1,2,3,4,5,5;/errorint num=new int1,2,3,4,5,5;/okint num=new int21,2,3,4,5,5;/errorint num=1,2,3,4,5,6;/okint num=1,2,3,4,5,6;/ok在Java中的+操作:下面的结果和运算方式只限于Java中,不同的编译器运行的结果是不同的,不要死记!int i=3;System.out.println(i+);/结果为3System.out.println(+i);/结果为4int i=3;int count=(i+)+(i+)+(i+); System.out.println(i); System.out.println(count);/结果为6和12算法 第一个括号中先取出当下i的值3作为第一个加数参与运算,之后i自加1变成4,之后运行到第二个括号,先取出当下i的值4作为第二个加数参与运算,之后i自加1变成5,之后运行到第三个括号,先取出当下i的值5作为第三个加数参与运算,之后i自加最后变成6,最后三数相加得道count的值12.。心得:每次遇到运算数,要先看紧挨着i的左边的符号是什么,如果是括号,就取出当下i的值先进行对括号所代表的操作,该操作被看成是相对于i的最高优先级运算,该操作可以是打印,也可以是相加,该操作完毕后才是相对于i的第二优先级的操作,在本题中是自加1,在这一“运算段”运算结束之后,整个表达式按照从左到右的顺序进行运算,每次遇到“运算段”的时候都是按照这一原则,直到整个程序结束得出结果,所有和自加自减相关的操作都可以按照这个原则进行运算。不知道掺入自乘和自除的操作之后是什么样子,自乘和自加的优先级是什么样子的,着还要看例子吧!下面的例子也是同理int i=3;int count=(+i)+(+i)+(+i); System.out.println(i); System.out.println(count);/结果为6和15for(int i=0;i10;i+) 在这里,i的作用范围仅仅是在圆括号和花括号之内,别的范围不可访问。Winows、Eclipse的所有常用快捷键,dos操作的所有常用命令,基本的网络知识,基本的电脑硬件知识!Java的path配置和classpath配置,没有足够细致的了解,看是否需要,如果需要在深入了解,只大概即可。计算机中数据的表示方法计算机是一种电子设备,由复杂的电子元器件组合而成,一个电子元器件有带电和不带电两种状态,通常我们将带电状态表示为数值1,不带电状态表示为数值0,多个这样的元器件的组合可以表示更多状态,也就是可以表示更多的数据,如000表示0,001表示1,010表示2,011表示3,依此类推,111表示7,一个元器件可表示一位(bit)数据,这种表示数据的方式就叫二进制。在实际的电子设备中,我们将8个这样的元器件形成一个单元,这样的单元叫一个字节(byte),一个字节能表示多少个数呢?表示数值的范围是0-255。一个n位的二进制数可以表示2的n次方个数据,能够表示的数据范围是0到2的n次方减1.四个字节有4*8=32位,可以表示2的32次方个数据,能够表示的数据范围是0到2的32次方减1.一个字节由8个二进位组成,其中最右边的一位称为“最低有效位”或“最低位”,最左边的一位称为“最高有效位”或“最高位”。每一个二进位的值是0或1。计算机中数据的表示方法二进制计数的缺点:书写太长,容易出错,一般计算机的数据位数都是4的整数倍,所以,在计算机里通常采用16进制计数法。用数字可以表示各种信息,计算机里只有数值,当你在内存中看到一个数值时,这个数值可能代表各种意义,生活中的数值也可以代表其他意义,如1234可以代表密码,存款额,电报信息,根据上下线索,我们就能够知道这数值代表的意义。在计算机中为了表示数,我们可以采取多种方式,一般有原码、反码和补码。原码:将最高位作为符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值(以二进制表示)。 为了简单起见,我们用1个字节来表示一个整数。+7的原码为:00000111 -7的原码为:10000111问题: +0的原码为: 00000000 -0的原码为: 10000000 在原码中,0的表示不唯一,所以在计算机中没有采取原码这种表示形式。反码:一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为1,其余各位是对原码取反。 为了简单起见,我们用1个字节来表示一个整数。 +7的反码为:00000111 -7的反码为:11111000问题:+0的反码为: 00000000 -0的反码为: 11111111在反码中,0的表示也不唯一,所以在计算机中没有采取原码这种表示形式。补码 利用溢出,我们可以将减法变成加法。对于十进制数,如果从9得到结果5,可以用减法:9-4=5,因为4+6=10,我们将6作为4的补数,将上式的减法改写为加法:9+6=15,去掉高位1(也就是减去10),得到结果5。对于16进制数,如果从C得到结果5,可以用减法:C-7=5,因为7+9=16,我们将9作为7的补数,将上式的减法改写为加法:C+9=15,去掉高位1(也就是减去16),得到结果5。在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为:1 00000000进位1被丢弃。一个数如果为正,则它的原码、反码、补码相同;一个数如果为负,则符号位为1,其余各位是对原码取反,然后整个数加1。为了简单起见,我们用1个字节来表示一个整数。+7的补码为:00000111,-7的补码为:第1步按位取反11111000,第2步再加111111001。0的补码表示:+0的补码:00000000,-0的补码:第1步按位取反得到11111111,第2步再加1,进位1,并且进位的这个1被丢弃,原来的八位成为0,即00000000,这和+0的补码相同,两者一致,所以计算机采用的是补码的表示形式。已知一个负数的补码,将其转换为十进制数,步骤:1、先对各位取反; 2、将其转换为十进制数; 3、加上负号,再减去1。 11111010,最高位为1,是负数,先对各位取反得00000101,转换为十进制数得5,加上负号得-5,再减1得-6。十进制数98=9*(10的一次方)+8*(10的0次方) 2、8、16进制数与此类似!某个m进制数有n位,它的各位数都是m-1,那么它表示的数字的范围是0(m的n次方)-1比如999=(10的3次方)-1,0XFFF=(16的3次方)-1,表达范围一目了然!位运算符 为了方便对二进制位进行操作,Java给我们提供了四个二进制位操作符:& 按位与,按位或|,按位异或,按位取反。这四个操作符是对二进制的位进行操作,而非对数进行操作!这两个数是等长度等位数!按位与:一个房间里有两个开关控制房间的灯的明暗。当两个开关同时处于打开状态时,灯才能亮。按位与:01101101& 00110111=00100101 结论:按位与,只有壹(1)壹(1)为1。按位或:一个房间里有两个开关控制房间的灯的明暗。当任何一个开关处于打开状态时,灯就能亮。按位或:01101101|00110111=01111111 结论:按位或,只有零(0)零(0)为0。按位异或:一个房间里有两个开关控制房间的灯的明暗。当两个开关处于不同状态时,灯就能亮。按位异或:0110110100110111=01011010结论:按位异或,只有零(0)壹(1)或壹(1)零(0)为1。按位取反:01101101 10010010 结论:对二进制数按位取反,即0变成1,1变成0。Java中有三个移位运算符:左移:,无符号右移:数 x x2 x217 00010001 00 01000100 00000100 01 00000100 01-17 11101111 11 10111100 11111011 11 00111011 11int i=0xffffffff(这是-1的补码,计算机中用补码表示数字);等价于int i=-1;Windows的“程序”-“附件”-中有“计算器”,我们可以借助它来进行进制转化。该计算器有标准型和科学型两种。Java API的使用(重点):将2进制数用十六进制数的方式表达出来!这时候需要查找API,利用其中的方法:我们要查找一个方法的时候首先要知道这个方法所在的包名,我们上面需要查找的方法在Java.lang包中Integer这个类当中,Sun公司所取的包都是按照一定的用途来分类的!做网络开发的类会放在做网络开发的包中,做图形开发的类会放在做图像开发的包中,虽然类和个数有几千个没有办法完全记下来,但是包名和该包的大致用途是需要记下来的!API中左上窗口中,是所有包的列表,点击一下包名就会在左下窗口中看见这个包中的所有类,点击一下这个类名就会在右边的主窗体中出现这个类的说明信息类中方法的说明信息!在Java当中,所有的基本数据类型,都有相对应的一个类,整型所对应的类就是Integer类,long型所对应的类就是Long,double所对应的类是Double,字符所对应的类就是Charcater(类名都是大写的),还有Short类,还有boolean类,还有引用数据类型的String类,这些都在Java.long包中,这个包是Java启动后所默认运行的一个包。本题中,我们找到Integer类中的toHexString( int i)方法,它需要一个整型的参数,这个方法会将一个10进制的数转换成一个16进制的数,然后作为String返回,这个方式是(static)静态的,静态的方法可以直接调用,其用法是System.out.println(Integer.toHexString(c);练习:将一个整数110从右端开始的47位变为0。要多做几个这样的练习!做练习的时候要将位运算与移位运算结合起来,灵活运用!注意:移位运算在向左一位之后相当于乘了一个2!向右移动了一位的时候相当于除以了一个2,反过来我们在计算一个数乘以2的结果的时候,向左移动一位就可以了,除以2的时候向右移动一位就可以了。在计算机中移位运算要比乘除运算要快一些。在一些讲究速度的算法程序当中,我们就可以用移位运算来代替乘除运算,已获得较高的运行速度!面向对象编程概述:简单的说,面向对象编程(Object Oriented Programming,简称OOP)描述的对象之间的相互作用。面向对象编程与面向过程编程的区别:过程化程序设计先确定算法,再确定数据结构;面向对象编程先确定数据结构,再确定运算。面向过程编程的程序员,习惯于建立数据结构存放数据并定义方法(函数)来操作数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。我们可以把现实世界的事物抽象成对象。对象一般都有两个特征:状态(state)和行为(behavior)。软件的对象概念是由现实世界对象抽象而来 。把现实世界对象的状态保存在软件对象的变量中;现实世界对象的行为通过软件对象的方法(函数)来实现。类和对象把相似的对象划归成一个类。在软件中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的状态(变量)和行为(方法)。类是创建对象的模板,对象是类的实例。通过建立一个类的对象而调用它的方法,执行它的行为。只有创建了对象,才能产生现实中实际存在属性和方法。属性和方法,属性就是你作为一个旁观者来观察这个对象,这个对象是什么样子的,它的属性就是什么,而方法就是你把自己当做这个对象,想想自己都会什么本领。实例就是对象。从程序设计的角度看,类是面向对象程序中最基本的程序单元。类实质上定义的是一种数据类型,这种数据类型就是对象类型 。所以我们可以使用类名称来声明对象变量。声明对象变量之后,还不能使用对象。必须用运算符new创建对象实体之后,才能使用对象。掌握面向对象的困难之处在于思路的转换。我们通常习惯于考虑解决问题的方法,而不是考虑将问题抽象成对象再去解决它。编写一个驾驶汽车的方法面向过程的程序设计:编写一个方法,void drivecar();面向对象的程序设计:将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来,设计一个类Car,类中有一个方法void drive(),用Car这个类实例化一个具体的对象car,调用:car.drive()。可以为本类创建对象,也可以为别的类创建对象。我们希望对象产生之后,要用到的成员变量就能产生一个初始值,这可以通过Java当中的一个特殊的方法,构造方法来实现,它的名称与Java的类名一样,该方法没有返回值。如Point类的构造方法Point() x=5;y=10; 这个时候当我们用new创建一个对象的时候,它就会自动调用构造函数,然后执行构造函数当中的赋值操作!在构造函数中我们可以指定成员变量的值,即x和y的值。调用哪一个类的带参数的方法,调用的时候就要一同把值传过去。Point(int a,int b) x=a;y=b; 则Point pt=new Point(3,5);调用的时候要传参,于是a=3,b=5。类的构造方法:构造方法的名字和类名相同,并且没有返回值。构造方法主要用于为类的对象定义初始化状态。我们不能直接调用构造方法,必须通过new关键字来自动调用,从而创建类的实例。Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法。我们可以用Sun公司为我们提供的一个工具来反编译字节码,它会将类定义的成员变量和类的成员方法的信息打印出来,这个反编译工具在JDK开发包当中bin目录下,叫做javap.exe,javap加载的是类而不是字节码文件,和java命令执行的时候是一样的,命令如javap Point,当我们执行这一命令的时候,如果我们没有在类中定义带参数的构造方法,就会在屏幕中发现一个Point(),这就是我们在编译的时候java编译器为我们提供的缺省的构造函数,也就是不带参数的构造函数,当类中有带参数的构造函数的时候,java编译器还会不会给我们提供一个不带参数的构造函数呢?只要类中有一个手动创建的构造函数,无论是带参数的还是不带参数的,java编译器都不会在再给我们提供缺省的构造函数了。new关键字的作用1.为对象分配内存空间。2.引起对象构造方法的调用。3.为对象返回一个引用。这就是我们创建对象实体的时候new关键字进行的三个操作。缺省构造方法当我们用缺省的构造方法初始化对象时,系统用默认值初始化对象的成员变量。各种数据类型的默认值为:数值型0,booleanfalse,charu0000 ,对象null有时候我们在有了一个不带参数的构造方法之后还想要一个带参数的构造方法,也是允许的。两个方法名称完全一样,一个有参数,一个没参数,当我们创建对象的时候,如果赋了参数,那就调用带参数的构造方法,如果参数类型有不同,那么调用的构造函数也会不同,用你给赋值的参数的类型不同,而确定你调用的构造函数,这就叫函数的重载。如果没有给构造方法赋值,那么就会调用不带参数的构造方法。(可以有一个不带参数的构造函数,和多个类型不同、参数个数不同、顺序不同的构造函数?)方法重载(overload)重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。 如果两个构造函数的参数的个数和类型以及参数顺序完全以一样,那么这两个构造方法是完全一样的,是不可以同时出现在一个类中的,哪怕是Point(int a,int b) 与Point(int a,int b) 也不行!但是如果两者 中进行的操作不一样,而我们又确实需要进行两个整型数据的不同操作的时候怎么办?如果不带参
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025农业用地流转合同范本(乙方与村委会签订)示例
- 2025年综合消防维护保养合同终稿
- 2025撤销购房合同模板
- 2025商务合同范本短期劳动合同书
- 小学三年级演讲稿15篇
- 小学二年级音乐说课稿
- 城市智慧交通与BIM技术的结合
- 高级钢琴调律师考试试题及答案
- 林蛙养殖合同转让协议书
- 寻找小绿人试题及答案
- 粮食熏蒸作业管理制度
- 医院医保奖惩管理制度
- Python数据科学与机器学习结合试题及答案
- 2025-2030中国EHS管理软件行业市场现状供需分析及投资评估规划分析研究报告
- 高考数学基本技能试题及答案
- 建筑工程项目的整体策划与实施试题及答案
- 托育转让合同协议书
- 【遵义】2025年第十三届贵州人才博览会遵义市事业单位引进人才47人笔试历年典型考题及考点剖析附带答案详解
- 山洪灾害防御培训
- 地理西亚测试题及答案
- 购犬协议书范本
评论
0/150
提交评论