《Java知识总结-完整版精品资料.docx》由会员分享,可在线阅读,更多相关《Java知识总结-完整版精品资料.docx(68页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第1章 Java概述Java语言的特特点一种面向对象的语言;一种平台无关的语言;一种健壮的语言,吸收了C/C+的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)Java的两种核心机制Java虚拟机(Java Virtual Machine)垃圾回收机制(Garbage Collection)源程序(*.java文件)Java编译器字节码(*.class文件)类装载器字节码校验器解释器操作系统平台一次编译,随处运行Java是一种解释型语言JDK(Java Development Kit)软件开发工具包JRE(Java Runtime Environment)运行时环境开发需要
2、JDK;用户只需JREPATH:WINDOWS系统执行命令时要搜寻的路径(如javac.exe,java.exe)CLASSPATH:Java在编译和运行时要找的class所在路径(“.”代表当前路径)java:运行java程序javac:编译java程序java version一个源文件最多只能有一个public类,其他类数量不限,源文件名必须与public类名一致Java应用程序的执行入口时main()方法:public static void main(String args)Java语言中严格区分大小写编译后,每一个类都对应一个class文件第2章 基础语法标示符由字母、下划线”_”、
3、美元符”$”或数字组成标示符应以字母、下划线、美元符开头Java标示符对大小写敏感,长度无限制,注意“见名知意”且不能与Java语言关键字重名abstractdefaultifprivatethisbooleandoimplementsprotectedthrowbreakdoubleimportpublicthrowsbyteelseinstanceofreturntransientcaseextendsintshorttrycatchfinalinterfacestaticvoidcharfinallylongstrctfpvolatileclassfloatnativesuperwhil
4、econstfornewswitchnullcontinuegotopackagesynchronizedgoto和const虽然未使用,但也被作为Java的关键字保留程序执行过程: 内存 硬盘 heap堆new出来的东西代码操作系统代码 程序 程序stack栈局部变量data segment静态变量字符串常量code segment存放代码1.load到内存区 2.找到main方法开始执行 3.执行过程中的内存管理整数类型(byte、short、int、longJava数据类型的划分数值型浮点类型(float、double)字符型(char)基本数据类型 数组接口(interface)布尔型
5、(boolean)引用数据类型数据类型类(class)boolean类型数据只允许取值true或false,不可以使用0或非0的整数值取代true和false,这点和c语言不同Java字符采用Unicode编码,每个字符占两个字节,因而可以用十六进制编码形式表示,例:char c = u0061;Java语言的整型常量默认为int类型,声明long型常量可以后加l或L类型占用存储空间数值范围byte1字节-2727-1short2字节-215215-1int4字节-231231-1long8字节-263263-1Java浮点型常量默认为double型,声明float型需在数字后面加f或F类型占
6、用存储空间数值范围float4字节-3.403E383.403E38double8字节-1.798E3081.798E308基本数据类型转换boolean类型不可以转换为其他的数据类型整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:容量小的类型自动转换为容量大的类型:byte,short,char-int-long-float-doublebyte,short,char之间不需要相互转换,他们三者在计算时首先会转换为int类型可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超过其表数范围“+”除用于算术加法外,还可用于对字符
7、串进行连接操作,“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接,当进行打印时,无论任何类型,都自动转换为字符串进行打印break&continuebreak语句用于终止某个语句块的执行。用在循环语句中,可以强行退出循环continue语句用在循环语句体中,用于终止某次循环过程,跳过循环体中continue语句下面未执行的循环,开始下一次循环过程switch小心case穿透,推荐使用break语句多个case可以合并到一起default可以省略,但不推荐java中switch语句只能探测int类型值方法形参、实参、返回值、返回
8、值类型Java中进行函数调用中传递参数时,遵循值传递的原则:基本类型传递的是该数据值本身,引用类型传递的是对象的引用,而非对象本身递归调用递归调用指在方法执行过程中出现该方法本身的调用第3章 面向对象编程类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量和方法,对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体,是该类的一个具体实例,在Java中“一切皆为对象”继承、组合、实现、多态类 = 成员变量 + 方法成员变量系统可以对其自动初始化,局部变量不初始化会报错引用Java语言中除基本类型之外的变量类型都称之为引用类型(基本类型占一块内存,引用类型占两块
9、内存)Java中的对象时通过引用对其操作的类时静态的概念,代码区对象是new出来的,位于堆内存(动态分配内存用的),类的每个成员变量在不同的对象中都有不同的值(除了静态变量),而方法只有一份,执行的时候才占内存对象必须使用new关键字创建对象同一类的每个对象有不同的成员变量存储空间(除了静态变量)同一类的每个对象共享该类的方法非静态方法时针对每个对象进行调用的(必须创建对象)构造方法使用new+构造方法创建一个新的对象构造方法是定义在Java类中的一个用来初始化对象的函数构造方法与类同名且没有返回值当没有指定构造方法时,编译器为类自动添加形如类名() 的构造方法命名规则类名的首字母大写变量名和
10、方法名的首字母小写运用驼峰标识方法重载(overload)方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时根据不同的参数列表选择对应的方法this在类的方法定义中使用this关键字代表使用该类的对象的引用有时使用this可以处理方法中成员变量和方法参数重名的问题This可以看做是一个变量,它的值时当前对象的引用public class Leafint I = 0;Leaf(int i) this.i = i;Leaf increament() i+;return this;void print() System.out.println(“i = ” + i);publi
11、c static void main(String args) Leaf leaf = new Leaf(100);leaf.increament().increament().print();static在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员静态方法不再是针对某个对象调用,所以不能访问非静态成员可以通过对象引用或类名(不需要实例化)访问静态成员或方法pac
12、kage&import为了解决类的命名冲突问题,Java引入的包(package)机制,提供类的多重类命名空间package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包,裸体类)Java编译器把包对应于文件系统的目录管理,package语句中,用“.”来指明包(目录)的层次,例:package com.yao;则该文件中的类位于.comyao目录下如果将一个类打包,则使用该类时,必须使用该类的全名(例如:com.yao.MyClass),Java编译器才会找到该类也可以使用import在文件的开头引入要使用的类,例:import com.yao
13、.MyClass可以不需要用import语句直接使用java.lang包中的类访问位于同一个包中的类不需要引入class文件的最上层包的父目录必须位于classpath下JDK中主要的包介绍java.lang-包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能,使用时不需要引入(lang-language)java.awt-包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)java.applet-包含了applet运行所需的一些类-包含了与网络
14、相关的操作的类java.io-包含能提供多种输入/输出功能的类java.util-包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数java运行时所需的类位于jdkjrelibrt.jar打jar包,定位到需要打包的最上层的父路径jar cvf xxx.jar *.* (*.*指目录中所有文件夹打包)jar包也可设为classpath变量继承extends通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)(包括private成员,拥有私有变量的所有权,但无使用权)Java只支持单继承,不允许多继承,一个子类只能有一个基类,一个基类可以派生多个子类访问控制
15、权限修饰符public、protected、private、default(包访问权限)修饰符类内部同一个包子类任何地方privateXXXdefaultXXprotectedXpublic对于class的权限修饰符只可以用public和defaultpublic类可以在任意地方被访问default类只可以被同一个包内的类访问方法重写overwrite/override在子类中可以根据需要对从基类中继承来的方法进行重写重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型重写方法不能使用比被重写方法更严格的访问权限super在Java类中使用super来引用基类的成分继承中的构造方法子类
16、的构造过程中必须调用其基类的构造方法子类可以再自己的构造方法中使用super(argument_list)调用基类的构造方法使用this(argument_list)调用本类的另外的构造方法如果调用super,必须写在子类构造方法的第一行如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用调用基类无参数的构造方法如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错Object类Object类是所有Java类的根基类如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类public class Person 等价于:publi
17、c class Person extends Object toString()Object类中定义有public String toString()方法,其返回值时String类型,描述当前对象的有关信息,返回一个字符串,该字符串由类名(对象是该类的一个实例)+ “” +此对象哈希码的无符号十六进制表示组成,即getClass().getName() + + Integer.toHexString(hashCode()在进行String与其他类型数据的连接操作时(如:System.out.println(“info” + person)),将自动调用该对象类的toString()方法可以根据
18、需要在用户自定义类型中重写toString()方法,建议所有子类都重新此方法equals()public boolean equals(Object obj)x.equals(y)对于任何非空引用值,当且仅当x和y引用同一个对象时,此方法返回true(x=y具有值true)JDK提供了一些类,如String,Date等,重写了Object的equals()方法,调用这些类的equals()方法,x.equals(y),当x和y所引用的对象时同一类对象且属性内容相等时(并不一定时同一对象),返回true,否则返回false建议重写例子:String s1 = new String(“Hello”
19、);String s2 = new String(“Hello”);System.out.println(s1 = s2); /falseSystem.out.println(s1.equals(s2); /true对象转型(casting)一个基类的引用类型变量可以“指向”其子类的对象一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)可以使用 引用变量 + instanceof + 类名,来判断该引用变量所“指向”的对象是否属于该类或该类的子类子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为乡下转型(downcasting),需强制转换动态绑定和多态动
20、态绑定是指在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用其相应的方法1.要有继承2.要有重写3.父类引用指向子类对象抽象类用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写抽象类不能被实例化抽象方法只需声明,而不需实现finalfinal的变量的值不能被改变final的方法不能被重写final的类不能被继承接口interface实现implements接口是抽象方法和常量值得定义的集合从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含
21、了常量和方法的定义,而没有变量和方法的实现多个无关的类可以实现同一个接口一个类可以实现多个无关的接口与继承关系类似,接口与实现类之间存在多态性接口中声明属性默认为public static final的,也只能是public static final的接口中只能定义抽象方法,而且这些方法默认为public的,也只能是public的接口可以继承其他的接口,并添加新的属性和抽象方法第4章 异常处理异常指运行期出现的错误所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出、数组下标越界、所要读取的文件不存在)Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异
22、常事件的信息并将被提交给Java运行时系统,这个过程称为抛出(throw)异常 声明该方法可能抛出的异常当Java运行时系统接收到异常对象时,会寻找处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常异常的概念public void someMethod() throws someException if(someCondition() throw new someException(“错误原因”); 构造并抛出异常对象调用该方法时试图捕获异常RuntimeExceptionExceptionErrorThrowable定义处理异常的代码try someMethod
23、(); catch (SomeException e) /异常处理代码;Error:称为错误,由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,程序对其不做处理Exception:所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显式的声明或捕获RuntimeException:特殊的异常,如被0除、数组下标越界等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序可读性和运行效率影响很大,因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)Exception(in java.lang)ClassNotFoundExceptionIOExc
24、eptionInterruptedExceptionRuntimeExceptionArithmeticException(当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例)NullPointerExceptionIndexOutOfBoundsException(指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。)ArrayIndexOutOfBoundsException(用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。)StringIndexOutOfBoundsException(此异常由 String
25、 方法抛出,指示索引或者为负,或者超出字符串的大小。对诸如 charAt 的一些方法,当索引等于字符串的大小时,也会抛出该异常。)finallytry代码段后跟有一个或多个catch代码段每个catch代码段声明其能处理的一种特定类型的异常并提供处理的方法当异常发生时,程序会终止当前的流程,根据获取异常的类型去执行相应的catch代码段如果没有异常产生,所有的catch代码段都被略过不执行finally段的代码无论是否发生异常都会执行通常在finally语句中可以进行资源的清除工作,如:关闭打开的文件,删除临时文件等try /可能抛出异常的语句 catch(SomeException1 e)
26、catch(SomeException2 e) finally 捕获SomeException2时try 语句1;语句2;catch (SomeException1 e) catch (SomeException2 e) finally 后面的语句;没有捕获到异常时try 语句1;语句2;catch (SomeException1 e) catch (SomeException2 e) finally 后面的语句;getMessage()方法,用来得到有关异常事件的信息printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容在一个try语句块中,基类异常的捕获语句不可以写在
27、子类异常捕获语句的上面,否则会有编译错误,子类异常不会被捕获先逮小的,再逮大的readFile() throws IOException 抛出抛出抛出public static main(String s) try method2() catch(IOException e) method2() throws IOException method2()method1() throws IOException readFile()在一个try语句块中,基类异常的捕获语句使用自定义的异常1.通过继承java.lang.Exception类声明自己的异常类2.在方法适当的位置生成自定义异常的实例,并
28、用throw语句抛出3.在方法的声明部分用throws语句声明该方法可能抛出的异常class MyException extends Exception private int id;public MyException(String message,int id) super(message); this.id = id; public it getId() return id;注意:重写方法需要抛出与原方法所抛出异常类型一致的异常货不抛出异常第5章 数组数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变,因此数组分配空间后,每个元素也被按照成员变量的规则被隐式初
29、始化type var;或type var;Java语言中声明数组时不能指定其长度(数组中元素的个数)例:int a5;/非法Java中使用关键字new创建数组对象,格式为:数组名 = new 数组元素的类型 数组元素的个数注意:元素为引用数据类型的数组中的每一个元素都需要实例化动态初始化:数组定义与为数组元素分配空间和赋值的操作分开进行静态初始化:在定义数组的同时就为数组元素分配空间并赋值每一个数组都有一个属性length指明它的长度,例:a.length的值为数组a的长度(元素个数)Java中多维数组的声明和初始化应按从高维到低维的顺序进行例如:int a = new int3;a0 = n
30、ew int2;a1 = new int4;a2 = new int3;/int error = new int4;是错误的数组的拷贝使用java.lang.System类的静态方法public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)可以用于数组src从第srcPos项元素开始的length个元素拷贝到目标数组dest从destPos项开始的length个位置如果源数据数目超出目标数组边界会抛出IndexOutOfBoundsException异常第6章 常用类StringJ
31、ava.lang.String类代表不可变的字符序列字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:String str = abc;等效于char data = a, b, c;String str = new String(data);Java 语言提供对字符串串联符号(+)以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Ja
32、va 中的所有类继承。“xxxx”为该类的一个对象String类的常见构造方法:String(String original):创建一个String对象为original的拷贝String(char value):用一个字符数组创建一个String对象String(char value,int offset,int count):用一个字符数组从offset项开始的count个字符序列创建一个String对象public class Test public static void main(String args) String s1 = “hello”; String s2 = “hello
33、”; System.out.println(s1 = s2);/true s1 = new String(“hello”); s2 = new String(“hello”); System.out.println(s1 = s2);/false System.out.println(s1.equals(s2);/true char c = s, u, n, , j, a, v, a; String s4 = new String(c); String s5 = new String(c,4,4); System.out.println(s4);/sun java System.out.pri
34、ntln(s5);/javaString类常用方法(1)public char charAt(int index):返回字符创中的第index个字符public int length():返回字符串的长度public int indexOf(String str):返回字符串中出现str的第一个位置public int indexOf(String str,int fromIndex):返回字符串中从fromIndex开始出现str的第一个位置public boolean equalsIgnoreCase(String another):比较字符串与another是否一样(忽略大小写)publ
35、ic String replace(char oldChar,char newChar):在字符串中用newChar字符替换oldChar字符public class Test public static void main(String args) String s1 = “sun java”; s2 = “Sun Java”; System.out.println(s1.charAt(1);/u System.out.println(s2.length();/8 System.out.println(s1.indexOf(“java”);/4 System.out.println(s1.i
36、ndexOf(“Java”);/-1 System.out.println(s1.equals(s2);/false System.out.println(s1.equalsIngoreCase(s2);/true String s = “我是程序员,我在学java”; String sr = s.replace(我,你); System.out.println(sr);/你是程序员,你在学javaString类常用方法(2)public boolean startsWith(String prefix):判断字符串是否以prefix字符串开头public boolean endsWith(S
37、tring suffix):判断字符串是否以suffix字符串结尾public String toUpperCase():返回一个字符串为该字符串的大写形式public String toLowerCase():返回一个字符串为该字符串的小写形式public String substring(int beginIndex):返回该字符串从beginIndex开始到结尾的子字符串public String substring(int beginIndex,int endIndex):返回该字符串从beginIndex开始到endIndex结尾的子字符串public String trim():返
38、回将该字符串去掉开头和结尾空格后的字符串public class Test public static void main(String args) String s = “ Welcome to Java World!”; String s1 = “ sun java ”;System.out.println(s.startWith(“Welcome”);/trueSystem.out.println(s.endWith(“World”);/falseString sL = s.toLowerCase();String sU = s.toUpperCase();System.out.prin
39、tln(sL);/welcome to java worldSystem.out.println(sU);/WELCOME TO JAVA WORLDString subS = s.substring(11); System.out.println(subS);/Java WorldString sp = s1.trim(); System.out.println(sp);/sun java String类常用方法(3)静态重载方法public static String valueOf()可以将基本类型数据转换为字符串,例:public static String valueOf(doubl
40、e d)public static String valueOf(int i) public String split(String regex)可以将一个字符串按照指定的分隔符(regex)分隔,返回分隔后的字符串数组public class Test public static void main(String args) int j = 1234567; String sNum = String.valueOf(j); System.out.println(“j是” + sNum.length() + “位数”);/j是7位数 String s = “Mary,F,1988”; Stri
41、ng sPlit = s.split(“,”); for(int i=0;isPlit.length;i+) System.out.println(sPliti);/Mary/nF/n/1976StringBuffer类java.lang.StringBuffer代表可变的字符序列StringBuffer和String类似,但StringBuffer可以对其字符串进行改变String s1 = “hello”; String s2 = “world”;s2s1helloworldhelloworlds1 = s1 +s2;StringBuffer类常见的构造方法StringBuffer():创
42、建一个不包含字符序列的“空”的StringBuffer对象StringBuffer(String str):创建一个StringBuffer对象,包含与String对象相同的字符序列StringBuffer常用方法重载方法public StringBuffer append():可以为该StringBuffer对象添加字符序列,返回添加后的该StringBuffer对象引用,例如:public StringBuffer append(String str)public StringBuffer append(StringBuffer sbuf)public StringBuffer appen
43、d(char str)public StringBuffer append(char str,int offset,int len)public StringBuffer append(double d)public StringBuffer append(Object obj)重载方法public StringBuffer insert()可以为该StringBuffer对象在指定位置插入字符序列,返回修改后的该StringBuffer对象引用,例:public StringBuffer insert(int offset,String str)public StringBuffer insert(int offset,double d)方法public StringBuffer delete(int start