Java系统总结大全.doc_第1页
Java系统总结大全.doc_第2页
Java系统总结大全.doc_第3页
Java系统总结大全.doc_第4页
Java系统总结大全.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

Java总结第一节 JDK的使用首先先配置一下环境,path和class路径,将其安装的jdk文件路径中的.exe和.class文件的路径复制到path和class路径下。第二节 Java语言基础Author by zhw类Java编程语言中的抽象数据类型概念被认为是class.类给对象的特殊类型提供定义,它规定对象内部型数据,创建该对象的特性,以及对象在其数据上运行的功能,因此类就是一个模板。面对对象的基本语法关键字 含义说明 Public 公共访问修饰符 Private 私有访问控制符 Protected 保护访问控制符abstract 抽象修饰符final 最终修饰符Extends 继承修饰符Implements 接口修饰符Static 静态修饰符Clone 对象copy运算符Super 父类引用符号this 本身引用符访问控制常用概念表类 类是对象的抽象,是数据和操作的封装体对象 对象是对现实世界中事物的抽象抽象类 一个没有包含足够的信息来描绘一个具体的对象的类,叫做抽象类构造函数 一个构造函数是对象被创建时初始对象的成员函数继承 继承使得程序员可以在一个较一般的类的基础上很快的建立一个新类,而不必从零开始设计每一个类方法重载 定义和父类一样名字返回值但是参数不同的方法动态绑定 在运行的同时自动选择正确的方法进行调用称作动态绑定多态 不同的对象接受到相同的消息名(或者说当不同的对象调用相同的名称的成员函数)时,可能引起不同的行为(执行不同的代码),这种现象称为多态。Or 声明一个父类的引用,指向一个子类的对象,通过父类的引用,调用被子类复写的方法接口 Java中的接口是一系列方法的声明,是一些方法的特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)包 包是类的容器,用于分隔类名空间构造方法定义方法声明方法采用这种格式( throwsPublic void addDays(int days)段能承载许多不同的修饰符,包括公共的、受保护的,以及私有的,公共访问修饰符表示方法可以从任何其他代码调用,私有表示方法只可以由该类中的其他方法来调用。表示方法返回值的类型。如果方法不返回任何值,它必须声明为void(空)。允许将参数值传递到方法中。列举的元素由逗号分开,而每一个元素包含一个类型和一个标识符。throws子句导致一个运行时错误(异常)被报告到调用的方法中,以便核实的方法处理它。非正常的 情况在中有规定父类对象和子类对象的转化需要注意如下规则1、 子类对象可以被视为是其父类的一个对象;2、 父类兑现更不能当成是其某一个子类的对象;3、 若果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为形式参数;4、 如果父类对象引用指向的实际是一个子类对象,那么这个父类对象的引用可以用强制类型转换转化成子类对象的引用This的调用对于this的任何调用,如果出现,在任何构造函数必须是第一个语句第三节1 数据类型String类与基本类型的区别:基本类型放在栈存储空间中,而类的申请空间是放在堆中的。2 运算符和表达式其中运算符主要的+,-,*,/注意的是位运算和逻辑运算的区别,其中区别与或即|,&与|,&区别换句话说逻辑运算结果是boolean型。3 语句If.else.用法.一般if嵌套不会超过三个以上,Scanner sc =new Scanner(System.in);System.out.println(请输入一个数字:);int i=sc.nextInt();if(i%2=0)System.out.println(i+是2的倍数!); if(i%3=0)System.out.println(i+是3的倍数!);if(i%5=0)System.out.println(i+是5的倍数!);elseSystem.out.println(i+不是2,3,5的倍数!);While,do.whileWhile与do.while.区别是do.while判断次数与执行次数相同,而while判断次数比执行次数多一次int i=0;int m=0;while(i1)i+;m+;System.out.println(i+ +m);int j=0;int n=0;doj+;n+;while(j0);System.out.println(j+ +n);Switch用法switch只能是整数,其他类型都会被自动转换成整型,包括case后面的标号Scanner sc = new Scanner(System.in);System.out.println(请输入一个数字:);int i = sc.nextInt();switch (i) case 1:System.out.println(This is first : + i);break;case 2:System.out.println(This is second: + i);break;default:System.out.println(The + i + over area.);System.out.println(请输入一个数字:);int j = sc.nextInt();switch (j) case 1:System.out.println(This is first : + i);break;case 2:System.out.println(This is second: + i);break;default:System.out.println(The + i + over area.);For循环的应用增强了功能是for(类型 值:数组名)int a = new int5;for (int i = 0; i 5; i+) ai = i;System.out.println(ai);for (int i : a) System.out.println(ai);Continue 和 break 用法Continue 是中断本次操作,break结束整个循环。4 String类String中的重点是:equals()方法与=区别如果不是通过new 直接赋值的两者都是相同的,如果是通过new的只是不同的String str1 = wangwanli;String str2 = wangwanli;boolean flag = str1.equals(str2);if (flag) System.out.println(The same!); else System.out.println(different!);if (str1 = str2) System.out.println(The same!); else System.out.println(different!);The same!The same!String str1 = wangwanli;String str2 = new String(wangwanli);boolean flag = str1.equals(str2);if (flag) System.out.println(The same!); else System.out.println(different!);if (str1 = str2) System.out.println(The same!); else System.out.println(different!);The same!different!String 与BufferString的区别没定义一个String变量将会拥有自己的空间,而字符串连接时,将这些连在一起,而BufferString是一个整块的,一般sql文拼接时用BufferString第三节:数组主要是数组的引用public static void main(String args) int array = 5,4,3,2,1;for (int i = 0; i array.length; i+) System.out.print( + arrayi + );System.out.println(n);sort(array);System.out.println(n);for (int i = 0; i array.length; i+) System.out.print( + arrayi + );public static void sort(int array) int temp = 0;for (int i = 0; i array.length; i+) for (int j = i; j arrayj) temp = arrayi;arrayi = arrayj;arrayj = temp;结果:5 4 3 2 11 2 3 4 5数组和链表的区别:数组时顺序存储内存分配空间连续,而链表是链式存储内存一般是不连续的,除此之外,一般数组用于读取数据操作,即数据一般不发生改变的情况,而链表一般用于可以频繁的插入和删除情况。多维数组自己看一下。数组的拷贝的方法:如果长度不够将会被覆盖掉原来的数据。所以数组拷贝可以找一个第三个数组申请为两个数组长度之和的空间来存放,这样数据不会丢失。int array = 5,4,3,2,1;int array2=45,67,8,54,33,90;int array3=new intarray.length+array2.length;System.arraycopy(array2, 0, array3, 0, array2.length);System.arraycopy(array,0, array3, array2.length, array.length);for (int i = 0; i array3.length; i+) System.out.print( + array3i + );结果:45 67 8 54 33 90 5 4 3 2 1第四节:面向对象面向过程与面向对象:两者的本质区别在于复用的层次上不同面向过程:在方法的层次上复用面向对象:隐藏了方法和这个类的细节,在对象的层次上复用类与对象的概念:类: 类是抽象出的一部分共有的属性和方法的集合,如Person、Animal等都是类。 Person类有属性name、sex,有方法say、write等等对象:对象是对类的实例化,是类的具体化,它继承了类的属性和方法,也可以有自己的属性和方法。如Person类的对象可以是Doctor、Teacher,它们都可以添加一个capital属性,另外Doctor可以添加treat方法,Teacher可以添加teach方法成员变量与局部变量:成员变量:成员变量是在类中声明的变量,定义时可以初始化,不对其初始化,JAVA使用默认值对其初始化局部变量:局部变量是在方法中声明的变量,必须对其初始化后才能使用例: 输出a为0(int的默认值),但输出b会出错引用:可以形象的理解为指向对象的指针,访问对象能过访问引用变量来访问如:Person p; /声明一个Person类的引用变量,但没有使它指向一个对象Person p=new Person(“zhangli”,”f”);/使用new语句创建了一个Person类对象并用p来引用它内存分析: StackHeapP:*Name:zhangliSex:f*对象位于堆内存的原因:堆是用来动态分配内存的,只有在运行的过程中才会new一个对象放堆内存中,因为事先不知道这个对象多大,所以不能提前分配它的内存,只能在运行期间分配它的内存构造方法:1、 构造方法与类名相同,无返回值,也不需加void2、 不定义构造方法,默认的是Person();一但定义了构造方法,Person()无效3、 构造方法与new一起使用来构造对象*继承中的构造方法:1、 构造函数不能被继承,也就不能被重写2、 构造函数在当前类中可以重载,不能在子类中重载3、子类的构造函数必须要调用父类的构造函数,用super来调用,且必须写在第一行4、若不写则默认为super(),即调用的是父类中无参数的构造函数,若父类中没有无参数的构造函数,则会出错5、构造函数之间的调用用“this”来实现例:输出:6、static block VS 构造函数 VS 非静态块例:结果:/由此可见,对于一个类而言,首先先执行静态块,再执行非静态块,最后执行构造函数;对于继承来说,先执行父类的再执行子类的方法的重载:指一个类可以定义有相同的名字,但参数不同的多个方法,构造函数也能重载注:参数不同指的是参数的类型、个数、顺序其中一个不同符合 返回值可以不同,但这不是必须条件,也就是说,仅仅改变返回值类型不构成重载例:This关键字:1、在类的方法定义中使用权用的this关键字代表使用该方法的对象的作用2、当必须指出当前使用方法的对象是谁时要使用this3、有时使用this可以处理方法中成员变量和参数重名的情况4、this可以看作是一个变量,它的值是当前对象的引用例:Static关键字:1、在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化2、对于该类的所有对象来说,static成员变量只有一份3、用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员静态方法不再是针对某个对象调用,所以不能访问非静态成员*关于static:1、static方法只能调用其他static方法,只能访问static数据2、static方法不能以任何形式引用this和super3、声明一个对象时并不产生static变量的拷贝4、被static修饰的变量和方法独立于该类的任何对象5、JAVA虚拟机只为static变量和方法分配一次内存6、父类的类名、对象可以调用父类static方法7、子类的类名、对旬可以调用父类static方法例:例:结果:/因为sid变量是static,它在内存中只有一份,当它赋值为100时,所有对象看到的sid值都是100,当new了一个c1后sid自加1,c1调用时拿到的sid就是101;此时new出来的c2对象看到的sid就是101,自加1后,c2拿到的sid为102当去掉“static”后,输出结果为:/此时的sid在每个对象中都有一份,都是从0开始计,就没有计数的作用了*static方法的重写与重载问题(暂时没有肯定的结论)从形式上看static方法可以被重写与重载,但static块不属性某个对象,是独立的内存块,所以从本质上看,static方法不能重写与重载类的继承与权限控制:1、使用extends关键字实现类的继承机制2、通过继承,子类自动拥有了基类的所有成员变量和方法(构造函数除外)3、JAVA只支持单继承,不允许多继承例:抽象类:1、用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法2、含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写;当子类也为抽象类时,可不重写父类抽象方法3、抽象方法只需声明,而不需实现4、抽象类中可以声明非抽象的成员变量和方法5、static 不能修饰abstract方法,abstract方法只能用public和protected修饰6、抽象类不能被实例化,但可以创建一个具体子类的对象。如:动物 obj = new 男人();可以理解为抽象类是在类的基础上抽象的,类可以创建对象,所以要想创建对象就必须先实例化类 比如说:一个模型:动物 extends Object 动物 extends Object人 extends 动物 狗 extends 动物男人 extends 人 母狗 extends 狗女人 extends 人 1、一个对象是 “男人” 类型,则他必然是一个“人”类型的对象,同时也是 “动物” 类型的一个对象。也就是前面说的“子类的一个对象必然是其父类的一个对象” 2、如果有一个 “动物” 类型的对象,则它有可能是一条“狗”,也可能是一个条“母狗”,也可能是一个“人”,也可能是一个“男人”。也就是说,父类的一个对象,有可能是其某个子类或子孙类的一个对象,但是不是很确定,要在运行时用 instanceof 来判断对象的具体类型例:例: 一个抽象父类AbsClass,另一个抽象类AbsImp1继承AbsClass,还有一个普通类AbsImp2继承AbsImp1,当AbsImp1中实现了AbsClass中的抽象方法,在AbsImp2中再实现一次,AbsImp2中的实现是重写吗?如果是重写,它是重写的哪个抽象类的?/当用AbsClass的引用指向子类AbsImp2的对象时,如果输出子类的方法,则为重写(这也是多态),而且是重写了两个抽象类的输出:例:怎样调用父类中的非抽象非静态方法输出:toString方法:1、Object类中定义有public String toString()方法,其返回值是String类型,描述当前对象的有关信息2、在进行String与其他类型数据的连接操作时(如:System.out.println(“info” + Person )),将自动转换成String类型3、可以根据需要在用户自定义类型中重写toString()方法;默认的定义义是类名+哈希编码(根据哈希编码找到内存中的对象),所以通常情况下要重写toString方法例:结果:/在Object类中默认有toString方法,Object类也是所有类的根类,所以所有的类默认地继承了toString()方法equals方法:1、public boolean equals(Object obj)方法,提供定义对象是否相等的逻辑2、Object的equals方法定义为:x.equals(y),当x和y是同一个对象的应用时返回true,否则返回false3、两个比较的对象的值不能为空4、在Object类中的equals方法默认的实现是比较两个引用是否指向同一个对象,即(x=y)例:结果:/所以一般要重写equals方法例:equals VS = =结果:final关键字:1、final的变量的值不能够被改变2、final的方法不能被重写,但可以重载3、final的类不能被继承4、在类中定义了一个final变量,可以先不赋初值,在构造函数中传一个参数,通过new对象来对这个变量赋不同的值例:多态:1、多态也称动态绑定2、多态将JAVA的扩展性达到了极致3、多态是指在执行期间判断所引用对象的实现类型,根据其实际上的类型调用其相应的方法。也就是说,多态是通过子类继承父类的方法并重写,不同的子类对方法的实现是不同的,当父类的引用指向子类时,会根据具体的对象实现具体的方法4、多态存在的必要条件: 要有继承; 要有重写; 父类引用指向子类对象例: 结果:接口:1、接口(interface)是抽象方法和常量值的定义的集合2、从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现3、接口的成员变量默认为public static final4、接口中的成员变量必须初始化,因为是static final,些时不初始化更待何时5、接口的特性: 接口可以多重实现; 接口中声明的属性默认为public static final的,也只能是public static final的;接口中只能定义抽象方法,而且这些方法默认为public的,也只能是public的;接口可以继承其它的接口,并添加新的属性和抽象方法*抽象类 VS 接口1、抽象类中可以定义抽象方法,也可以定义普通方法,接口中必须定义抽象方法2、可以在抽象类中定义类的公共方法,在接口中定义附加方法3、抽象类比接口更广泛一些,抽象类可以实现接口中部分方法,但非抽象类必须全部实现接口中所有方法例:这是一个接口第五节 log4j-Junit-DJunit的使用1. log4j的定义:Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。设置级别和名称log4j.rootLogger=debug,appender1输出到控制台log4j.appender.appender1=org.apache.log4j.ConsoleAppender输出格式log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout/ SimpleLayout输出到文件og4j.appender.appender2=org.apache.log4j.FileAppender输出路径log4j.appender.appender2.File=c:/Log4JDemo03.html输出的格式log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout输出的格式可以有其他的log4j.appender.appender1.layout.ConversionPattern=%r %t %p - %c -%l -%m%n这种是输出的格式要求%r 时间 0%t 方法名 main%p 优先级 DEBUG/INFO/ERROR%c 所属类的全名(包括包名)%l 发生的位置,在某个类的某行%m 输出代码中指定的讯息,如log(message)中的message%n 输出一个换行以文本文件输出log4j.appender.appender2.File=c:/Log4JDemo06.loglog4j在xml的用法Log4j在程序中的用法导入log4j.jar包然后可以在你要测试或要输出信息的类中写入下面的代码。Private static Logger logger=new Logger();之后在方法中可以调用其方法如:logger.debug(“”);还有info,error,off,fatal,warn,all 他们的优先级是:AlldebugInfowarnerrorfataloff2Junit的定义JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了简单的说就是将原来的main测试代替,main函数测试时只能是一个一个的来,并且每个类都需要做一个main函数,而Junit可以进行多个方法的一起测试。但是Junit对于返回值为集合的时候,要靠自己二次封装。junit特性JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性: 1、用于测试期望结果的断言(Assertion) 2、用于共享共同测试数据的测试工具 3、用于方便的组织和运行测试的测试套件 4、图形和文本的测试运行器注:Junit中的测试方法名必须以test开头。实例:package com.ibm.etp.java1;public class T public int add(int x,int y)return x+y;package com.ibm.etp.java1.test;import junit.framework.Assert;import junit.framework.TestCase;import com.ibm.etp.java1.*;public class TTest extends TestCasepublic void testT001()T t=new T();int z=t.add(3,5);Assert.assertEquals(8,z);绿的就表明成功测试,红的表明测试失败。3Djunit的简介Djunit是基于Junit的基础上二次开发其功能更强,在原有的基础上可以进行对还回值的修改,以及还回值的优先级,以及对数据中间的测试,更可以说是可以对有值的数据每一步进行测试下面是例子package com.ibm.etp.java1;public class TestFor public static void main(String args)int sum=0,i=0;TestFor tf=new TestFor();for(i=0;i= 0 & Integer.parseInt(str) = 9; catch (NumberFormatException e) System.out.println(类型转换错误! + e.getMessage();if (flag) System.out.println(str + 是数字); else throw new MyException(str + 不是数字); catch (MyException e) System.out.println(e.getMessage(); finally System.out.println(输入的是 + str);System.out.println(IOException.test();public static int compare(String var1, String var2) return pareTo(var2);public static int test() Scanner sc = new Scanner(System.in);System.out.print(请输入数据:);int str=0;try str=sc.nextInt();return str; catch (InputMismatchException e) System.out.println(输入不匹配异常!);return str; finally System.out.println(Nothing is impossible!);class MyException extends Exception private static final long serialVersionUID =

温馨提示

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

评论

0/150

提交评论