[计算机软件及应用]jaa笔记.doc_第1页
[计算机软件及应用]jaa笔记.doc_第2页
[计算机软件及应用]jaa笔记.doc_第3页
[计算机软件及应用]jaa笔记.doc_第4页
[计算机软件及应用]jaa笔记.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一:java语言是解释执行,java源码是通过编译生成一种特殊的.class的中间字解码文件,然后再有JVM进行解释执行。java语言对指针进行了上层的封装,它保证能够通过这个指针(引用),来访问有效的内存单元。java语言不允许多继承,使继承关系成树装图,每个类都只能由一个父类。java语言的开发效率高,但执行效率低。(相当于c+的55%)java的垃圾回收机制,在java中new的对象不需要向c+一样进行delete操作,JVM会根据情况回收垃圾对象。(懒汉机制,等待资源没有的时候才回收)我们只能够建议JVM进行垃圾回收,例如(System.gc() RunTime.gc()这两个方法就是建议JVM进行垃圾回收的方法)JDK,java开发工具包(类库和运行命令),JRE,java运行环境,JVM,java虚拟机(解释执行的核心,对字节码进行翻译成运行环境的机器码,它可以屏蔽平台差异。JVM是不跨平台的。)JAVA_HOME,指明JDK安装的位置,CLASSPATH,指明类文件的位置,PATH,指明命令的可执行文件的位置。java源文件的文件名必须和文件中定义public class的类名(大小写页要相同)相同。java源代码中的main方法的定义写法。main方法是程序的入口。public static void main(String args) System.out.println(Hello world); java源文件也要先编译,使用javac xxx.java格式的命令得来编译,使用java xxx来运行。定义包结构要放在有效代码的第一行,package xxx.xxx,包的定义在一个程序中只能由一个,在加上包定义之后编译可以使用javac -d 路径 xxxx.java,这个-d这个命令行的参数可以指定包结构的位置“.”代表当前目录。在运行时要使用类的全名java xxx.xxx.xxxx用包名以点分隔。运行时要在包结构的上一层目录来运行。java中的注释,单行注释 /. 多行注释 /* .*/ 文档注释/* .(换行标签)*/,用javadoc命令可以根据原码中的文档注释生成注释文档(html格式)。文档注释中可以使用html标签。javadoc -d 路径 (指定注释文档的保存路径)文档注释一般写在类定义之前,方法之前,属性之前。在文档注释中可以用 author 表示程序的作者,version 表示程序的版本,前两个注释符号要写在类定义之前,用于方法的注释param 对参数进行注释,return 对返回值进行注释 throws对抛出异常的注释。jar命令用于打一个xxx.jar文件用法:jar ctxuvfm0Mi jar-文件 manifest-文件 -C 目录 文件名 .选项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的(或所有的文件 -u 更新已存在的存档 -v 生成详细输出到标准输出上 -f 指定存档文件名 -m 包含来自标明文件的标明信息 -0 只存储方式;未用ZIP压缩格式 -M 不产生所有项的清单(manifest文件 -i 为指定的jar文件产生索引信息 -C 改变到指定的目录,并且包含下列文件:如果一个文件名是一个目录,它将被递归处理。清单(manifest文件名和存档文件名都需要被指定,按m 和 f标志指定的相同顺序示例1:将两个class文件存档到一个名为 classes.jar 的存档文件中: jar cvf classes.jar Foo.class Bar.class示例2:用一个存在的清单(manifest)文件 mymanifest 将 foo/ 目录下的所有 文件存档到一个名为 classes.jar 的存档文件中: jar cvfm classes.jar mymanifest -C foo/ .一般在使用使用jar cvf 文件名.jar 文件所在路径(xxx/xxx/xxx.class)也可以压缩一个目录,只要在制定路径是指定为文件夹,jar命令的命令行参数在使用时可以以“-”开头,也可以不用。java程序的运行过程,首先是启动java虚拟机,然后就是去找.class文件,先是从系统的类库中找(系统之会在跟目录下查找,所以需要完整类名),如果找不到的话会去CLASSPATH所设置的目录去找。然后加载到java虚拟机中。系统会在每个java程序中隐含导入了java.lang这个包,import 包名,导入包中的类文件。java.lang包,这是一个基础包。java.util包,这个包是工具类的包。java.io包,这个包是用于输入输出操作的包,这个包是用于网络编程。java.awt,java.swing,javax.swing java.event包,这些包用于java的图形编程用的包。applaction java的应用程序,java应用程序中必须有一个main()方法。标识符和关键字Java代码中的“;”、“”、“ ” Java语句以分号分隔,Java代码块包含在大括号内,忽略空格。标识符 1) 用以命名类、方法和变量、以及包遵守JAVA的命名规范类以每个单词都以大写字母开头。方法和变量第一个字母不大写,其他照旧。2) 只能以字符、“_”或“$”开头; 3) 无长度限制。java中的关键字goto和const在java中虽然不再使用但是还作为关键字存在java中没有sizeof这个关键字了,java中的boolean类型的值只能用true和false,且这两值也是关键字。java语言中没有无符号这个关键字(unsigned)java中的数据类型 1) 整型 byte 1字节 8位 -128到127 short 2字节16位 -215到215-1 int 4字节32位 -231到231-1 long 8字节64位 -263到263-1 2) 浮点类型 float 4字节32位 double 8字节64位 3) 字符类型 char 2字节16位 4) 布尔型 boolean false/true 注:1) char是无符号的16位整数,字面值必须用单引号括起来; 2) String 是类,非原始数据类型; 3) 长整型数字有一个后缀为“L”或“l”,八进制前缀为“0”,十六进制前缀为“0x”; 4) 黙认浮点类型为double; 5) float数据类型有一个后缀为“f”或“F”,Double数据类型后可跟后缀“D”或“d“ 6)char类型也可以用通用转译字符,但是不能用ASCII码。可以用“u0000”这种格式,因为char型中使用的是unicode编码方式。 注:整型值存放,正数存放原码(二进制码),负数则存放补码(原码按位取反末位加一)。 注:实型值在存储时会损失精度,所以不要直接比较两个实型值。系统默认的实型都是double型,要使用时要在数据后加个f,或者强行转换。强转(占字节数大的类型转到占字节数小的类型)时会放弃高位值只取低位值。java中的数字数据类型减灾由占字节数小的类型到占字节数大的类型的可以有自动转换,反之则需要强行转换,char型和int型之间可以相互转换。char和short不能像户转换。注意:隐式类型转换;a 运算符 b ,如果a,b中有任意一个是double型,前面运算的结果就是double型,如果a,b中有任意一个是float型,前面运算的结果就是float型,如果a,b中有任意一个是long型,前面运算的结果就是long型,如果a,b中没有double、float、long型,那么其结果就为int型。所有基本数据类型在使用时会事先分配空间,只本身就存在空间中,在传递时,就是值传递,不是引用传递。二:在类中定义的方法在返回值前加上static修饰符就可以在main方法中调用了。如果不用static那就需要在main方法中创建对象,使用对象来调用对象的方法。public class Testpublic static void main(String args)Test t=new Test();int b=1;int c=2; int a=new int10;t.sqort(a);add(b,c)public int sqort(int a).static int add(b,c).java中的运算符(java的运算符的优先级和结合性和c+相同)System.out.println(3/2) 按整型计算 得11) = 前面是零补零,前面是一补一; 2) = 无符号右移(强制右移都会移进一),=和=对于负数不一样 正数:右移n位等于除以2的n次方 负数:变成正数。3) & 短路与,前面为假,表达式为假,后面的操作不会进行,& 会对所有条件进行判断。 4) | 短路或,前面为真,表达式为真,后面的操作不会进行,| 会对所有条件进行判断。 例: if(a3&(b=a)=0) b赋值 if(a3&(b=a)=0) b不赋值5)instanceof,是用于判断一个对象是否属于某个类型6)java中的求余运算符“%”可以对两个实型变量求余注:按位与是为了让某些位置一,按位或是令某些位置零,按位异或是令某些位取反。注:使用左右位移和无符号右移运算符的使用方法是 变量名=位移位数 (前两个运算符是不会忽略整形符号位,也称逻辑位移),变量名=位移位数注意:左右位移和无符号右移运算符只能用于整形及其兼容类型(byte,int,short,long)注意:java程序的运行过程,首先是启动java虚拟机,然后就是去找.class文件,先是从系统的类库中找(系统之会在跟目录下查找,所以需要完整类名),如果找不到的话会去CLASSPATH所设置的目录去找。然后加载到java虚拟机中。如果要使用到其他的在JAVA_HOME中没有的类或者是其他公司提供的第三方的.jar(jar包)文件时,要把它的路径及文件名加到CLASSPATH中。java的流程控制控制流if()if().elseif().else if().else注意:else只是和其上面的同层的最近的if()来配对。switch()case a:.case 1:break;default:注解:switch()内数据类型为byte short char int类型,只有以上四种类型的才可以在switch()中使用。case块中不加break时顺序执行下面的语句。循环语句for(int i=0;in;i+)while()do while();-注意加分号例子:loop:for(int i=0;in;i+)for(int j=0;jDoubleString -(Integer.valueOf() )-IntegerInteger-(x.toString() )-Stringint-(100+”)-StringString-(Integer.parseInt() )-intInteger-(IValue() )-int学会查看javadoc的帮助文档。要先关注要使用方法的返回值类型,也就是要获得内容的类型,然后看方法名,JDK中的方法名基本上是见名知义,参数表,就是看需要什么才可以获得的需要的那些内容,也要看自己能够提供什么。注意:“=”在任何时候都是比较地址,这种比较永远不会被覆盖。程序员自己编写的类和JDK类是一种合作关系。(因为多态的存在,可能存在我们调用JDK类的情况,也可能存在JDK自动调用我们的类的情况。)注意:类型转换中doubleintergerstring之间的转换最多。(注:所有使用内部类的地方都可以不用内部类,但使用内部类可以使程序更加的简洁,便于命名规范和划分层次结构)。内部类是指在一个外部类的内部再定义一个类。*内部类可为静态,可用PROTECTED和PRIVATE修饰。(而外部类不可以:顶级类只能使用PUBLIC和DEFAULT)。*JAVA文件中没有publie class 可以类名和文件不同名。内部类内部类也就是定义在类内部的类。内部类的分类成员内部类、局部内部类、静态内部类、匿名内部类(图形是要用到,必须掌握)。成员内部类四个访问权限修饰符都可以修饰成员内部类。内部类和外部类在编译时时不同的两个类,内部类对外部类没有任何依赖。内部类是一种编译时语法,在编译时生成的各自的字节码文件,内部类和外部类没有关系。内部类中可以访问外部类的私有成员。作为外部类的一个成员存在,与外部类的属性、方法并列。内部类和外部类的实例变量可以共存。在内部类中访问实例变量:this.属性在内部类访问外部类的实例变量:外部类名.this.属性。在外部类的外部访问内部类,使用out.inner.成员内部类的特点:1内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为private,但是对于处于其内部的内部类还是可见的。)2用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。3成员内部类不能含有静态成员。建立内部类对象时应注意:在外部类的内部可以直接使用inner s=new inner();(因为外部类知道inner是哪个类,所以可以生成对象。)而在外部类的外部,要生成(new)一个内部类对象,需要首先建立一个外部类对象(外部类可用),然后在生成一个内部类对象。内部类的类名是外部类类名.内部类类名。Outer o=new Outer();Outer.Inner in=o.new.Inner()。静态内部类(注意:前三种内部类与变量类似,所以可以对照参考变量)静态内部类定义在类中,任何方法外,用static class定义。静态内部类只能访问外部类的静态成员。生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。静态内部类不可用private来进行定义。注意:当类与接口(或者是接口与接口)发生方法命名冲突的时候,此时必须使用内部类来实现。用接口不能完全地实现多继承,用接口配合内部类才能实现真正的多继承。例子:对于两个类,拥有相同的方法:class People run();interface Machine run();此时有一个robot类:class Robot extends People implement Machine.此时run()不可直接实现。interface Machine void run();class Person void run()System.out.println(run);class Robot extends Personprivate class MachineHeart implements Machinepublic void run()System.out.println(heart run);public void run()System.out.println(Robot run);Machine getMachine()return new MachineHeart();class Testpublic static void main(String args)Robot robot=new Robot();Machine m=robot.getMachine();m.run();robot.run();局部内部类在方法中定义的内部类称为局部内部类。与局部变量类似,在局部内部类前不加修饰符public和private,其范围为定义它的代码块。注意:局部内部类不仅可以访问外部类私有实例变量,但可以访问外部类的局部常量(也就是局部变量必须为final的)在类外不可直接访问局部内部类(保证局部内部类对外是不可见的)。在方法中才能调用其局部内部类。通过内部类和接口达到一个强制的弱耦合,用局部内部类来实现接口,并在方法中返回接口类型,使局部内部类不可见,屏蔽实现类的可见性。局部内部类写法public class TestLocalInnerClasspublic static void main(String args)Outer o=new Outer();final int a=9;o.print(a);class Outerprivate int index=100;public void print(final int a)final int b=10;System.out.println(a);class Innerpublic void print()System.out.println(index);System.out.println(a);System.out.println(b); Inner i=new Inner();i.print();匿名内部类匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口。匿名内部类的特点:1,一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。2,只是为了获得一个对象实例,不许要知道其实际类型。3,类名没有意义,也就是不需要使用到。注:一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。因其为局部内部类,那么局部内部类的所有限制都对其生效。匿名内部类是唯一一种无构造方法类。大部分匿名内部类是用于接口回调用的。匿名内部类在编译的时候由系统自动起名Out$1.class。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。因匿名内部类无构造方法,所以其使用范围非常的有限。当需要多个对象时使用局部内部类,因此局部内部类的应用相对比较多。匿名内部类中不能定义构造方法。匿名内部类的写法:interface Avoid ia();class Bpublic A bc()return new Avoid ia(); 使用匿名内部类:B b=new B();A a=b.bc();a.ia();Exception(例外/异常)对于程序可能出现的错误应该做出预案。例外是程序中所有出乎意料的结果。(关系到系统的健壮性)JAVA会将所有的异常封装成为一个对象,其根本父类为Throwable。异常的分类Throwable有两个子类:Error和Exception。一个Error对象表示一个程序错误,指的是底层的、低级的、不可恢复的严重错误。此时程序一定会退出,因为已经失去了运行所必须的物理环境。对于Error错误我们无法进行处理,因为我们是通过程序来应对错误,可是程序已经退出了。我们可以处理的Throwable类中只有Exception类的对象(例外/异常)。Exception有两个子类:Runtime exception(未检查异常)可以在编程时避免,可处理可不处理,非Runtime exception(已检查异常)必须进行处理。注意:无论是未检查异常还是已检查异常在编译的时候都不会被发现,在编译的过程中检查的是程序的语法错误,而异常是一个运行时程序出错的概念。在Exception中,所有的非未检查异常都是已检查异常,没有另外的异常!未检查异常是因为程序员没有进行必要的检查,因为他的疏忽和错误而引起的异常。一定是属于虚拟机内部的异常(比如空指针)。应对未检查异常就是养成良好的检查习惯。已检查异常是不可避免的,对于已检查异常必须实现定义好应对的方法。已检查异常肯定跨越出了虚拟机的范围。(比如“未找到文件”)异常的传递如何处理已检查异常(对于所有的已检查异常都要进行处理):首先了解异常形成的机制:当一个方法中有一条语句出现了异常,它就会throw(抛出)一个例外对象(throw 异常对象),然后后面的语句不会执行返回上一级方法,其上一级方法接受到了例外对象之后,有可能对这个异常进行处理,也可能将这个异常转到它的上一级。注意:当一个方法中出现了异常,没有进行异常处理,方法就会把异常对象作为返回值返回。如果有异常进入虚拟机,那么虚拟机就会立刻中止程序的执行。异常的处理方式非RuntimeException (已检查异常)这种异常必须处理。如果不处理编译出错。对于接收到的已检查异常有两种处理方式:throws和try.catch(.)方法。注意:出错的方法有可能是JDK,也可能是程序员写的程序,无论谁写的,抛出一定用throw。在方法的定义中声明方法可能抛出的异常,用(throws 异常类名,异常类名) ,声明这个方法将不处理异常,并把异常交给上一级方法处理。可以抛出的是实际产生异常的父类的异常对象。例:public void print() throws Exception.对于方法a,如果它定义了throws Exception。那么当它调用的方法b返回异常对象时,方法a并不处理,而将这个异常对象向上一级返回,如果所有的方法均不进行处理,返回到主方法,程序中止。(要避免所有的方法都返回的使用方法,因为这样出现一个很小的异常就会令程序中止)。如果在方法的程序中有一行throw new Exception(),返回错误,那么其后的程序不执行。因为错误返回后,后面的程序肯定没有机会执行,那么JAVA认为以后的程序没有存在的必要。try.catch捕获异常对于trycatch格式:try 可能出现错误的代码块 catch(exception e)进行处理的代码 ; 对象变量的声明用这种方法,如果代码正确,那么程序不经过catch语句直接向下运行;如果代码不正确,则将返回的异常对象和e进行匹配,如果匹配成功,则处理其后面的异常处理代码。(如果用exception来声明e的话,因为exception为所有exception对象的父类,所有肯定匹配成功)。处理完代码后这个例外就完全处理完毕,程序会接着从出现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论