1、第一章 Java概述Java程序的编写、编译和执行编写代码可使用任何文本编辑软件编写,比如记事本源代码文件的扩展名为.java编译使用JDK的编译命令javac进行编译 如:javacHello.java编译后生成扩展名为.class的字节码运行使用JDK的解释器java运行 如:javaHelloapplication vs.applet不同点Javaapplicationn由Java解释器独立运行字节码n程序中包含main方法Java appletn不能独立运行,字节码必须嵌入HTML文档(有标记)n源程序必须是java.applet.Applet类或javax.swing.JApplet
2、类的子类一个简单的 application/Welcome.javapublic class Welcome public static void main(String args)System.out.println(“Hello World!”);源文件名要和该public类相同注意String和System要大写编写Java源程序的注意事项Java语言区分大小写,包括文件名源文件的名字必须和源代码中被public修饰的类相同,如果没有public类可以可以任意命名(不推荐)。源文件扩展名必须为.java第二章 基本语法标识符是用户定义的用于表示变量名、类名、接口名、方法名、方法的参数名等
3、符号。标识符的命名规则由字母、数字、下划线_、美元符号$组成首字母不能是数字不能是保留字(50个)标识符区分大小写练习下列哪些是合法的标识符:a,4abc,_test,class123abc,$test,a,Mr.wangimport,abc#d,半径,a1基本数据类型Java中共八种基本数据类型:数值型(四种整型,两种浮点型)字符型(char一种)布尔型(boolean一种)数值数据类型类型名称 位数 表示范围byte8 bit-128 127short16 bit-32768 32767int 32 bitlong64 bitfloat32 bit七位小数(单精度浮点数)double64
4、bit十五位小数(双精度浮点数)char16bit16位的Unicode编码类型转换精度由高到底排序:doublefloatlongintshortbyte数值类型转换总可以将低精度的值赋给高精度类型的变量。比如:doublei=10;但是,如果不进行强制类型转换,就不能将高精度类型的值赋给低精度类型的变量。类型转换类型转换是一种操作,它把一种数据类型的值转换成另一种数据类型。用于由高精度向低精度要进行强制类型转换;例如:floatf=10.1;(错,浮点型数默认为double型。)floatf=(float)10.1;inti=(int)f;数值类型转换Java中当两个类型不同的运算对象进行
5、二元运算时,Java自动 把精度较低的类型转换成另一个精度较高的类型。见书17页类型转换基本规则算术运算符算术运算符包括:+,-,*,/和%。整数除法的结果是整数,如5/2=2而不是2.5,1/20。运算符%得出除法的余数,如5%2=1。赋值运算符基本赋值运算符(=)复合赋值运算符(如+=)注意:赋值运算符=的左边只能是变量,不能是表达式,而右边可以是数值也可以是表达式如a=a+3(正确)a=b=2(正确)a=a+5=9(错误,=的左边不能是表达式)增量运算符和减量运算符前置增量/减量运算符:变量先加1或减1,再参与表达式中的运算。+x或者 x后置增量/减量运算符:变量先参与表达式的运算,再加
6、1或减1。x+或者 x比较运算符运算符名称例结果小于12true=小于等于1大于12false=大于等于1=2 false=等于1=2 false!=不等于1!=2true逻辑运算符运算符 名称描述!非逻辑否定,取反&,&与 逻辑与,并且|,|或逻辑或,或者异或 逻辑异或,排同if-else语句if(布尔表达式)布尔表达式为真时执行的语句(组);else 布尔表达式为假时执行的语句(组);switch语句Java提供switch语句来有效的处理多重条件。switch(表达式)case 值1:语句组1;break;case 值2:语句组2;break;case 值N:语句组N;break;def
7、alut:缺省语句组;注意:表达式结果类型:注意:表达式结果类型:byte,short,intbyte,short,int或者或者charcharwhile 循环while循环的语法如下:while(循环条件循环条件)/循环体循环体;do循环do循环是while循环的变体。do/Loopbody;while(循环条件);(注意最后的分号!)for 循环for循环的语法如下:for(循环变量初始化;循环条件;调整语句)/循环体;for循环如果循环条件省略,就意味着条件为真。下述语句也是正确的for(;)break和continue关键字语句break和语句continue,可以用在循环语句中为循
8、环提供附加控制。break:立刻终止包含它的最内层循环。continue:只结束当前迭代,将程序控制转移到循环的下一次迭代。要求会封装方法不要把所有的代码都写在main方法中,main方法一般都是进行调用方法的。比如编写方法判断一个数是否是水仙花数。(考察大家编写实现某功能的方法,并在main方法中调用该方法)第三章 面向对象思想对象对象的要素对象的属性(特征、状态、组成)对象的行为(改变状态、传递消息)对象的标识(每个对象都有个标号)对象和类型之间的关系对象是具体的,类型是抽象的创建的是类型,使用的是对象第四章 类与对象类的定义修饰符class类名属性定义构造方法定义方法定义属性定义语法:表
9、示可有可无修饰符类型 属性名=初值;类型可以是任何类型,包括8种基本数据类型或自定义的引用类型(即属性可以由一个类的对象充当)。属性有默认值。方法定义语法:修饰符返回值类型 方法名(参数列表)语句(组);return语句;构造方法用于对象的初始化构造方法名与类名一致构造方法没有返回值类型如果没有定义构造方法,系统会生成一个默认的无参的构造方法构造方法只能用new在创建对象时调用,不能通过对象名调用练习定义一个矩形类,该类有长和宽两个属性,试定义构造方法,包括:默认无参的构造方法,为长和宽指定初值的构造方法。创建对象创建对象的语法:类名 对象名/这是对象的声明对象名 new类名();/真正创建对
10、象调用对象属性和方法的语法:对象名.属性名对象名.方法名练习定义一个教师类,属性有教师的名字,性别,年龄,教师都是有头发的且默认是黑颜色的。试定义构造方法及显示教师基本信息的方法,并定义一个对象将信息显示出来。方法的重载(概念一定要理解掌握)重载:一个类中如果同时存在多个方法名相同,参数列表不同的方法,则他们之间的关系称为重载。要求重点掌握该知识点方法重载例:intmax(inta,intb)doublemax(doublea,doubleb)intmax(inta,intb,intc)要点:方法名相同、参数列表不同(包括参数数目,参数出现的顺序或参数的类型不同)。返回值类型可以相同也可以不同
11、。构造方法的重载构造方法的重载与方法的重载相同 关键字thisthis代表类的当前对象利用“this.”可以调用当前对象的成员this可以实现构造方法的调用利用this(参数)可以调用构造方法必须写在构造方法的第一条对象做方法的参数基本数据类型做方法的参数传递的是数值。对象也可做方法的参数传递的是引用(即地址)变量和属性的作用域属性是定义在类中所有方法外的变量(有默认值);而方法内定义的变量是局部变量(无默认值)。属性不管在何处声明,它的作用范围是整个类;局部变量的使用范围是从声明它的那一点到距离它最近的右大括号之间。包(包中放着好多类)声明包的方法package包名称;注意:package必
12、须写在程序的第一条引入包中的类使用其他包中的public类常用是:关键字 import包名.类名;如:importjava.applet.Applet;也可以引入整个包 例如:importjava.util.*;访问控制修饰符(要掌握)类成员的访问控制修饰符public:包内包外可访问protected:包内包外子类可访问默认:包内可访问private:类内可访问访问器方法设置方法voidset属性名(属性类型的参数)比如:对属性radiusvoidsetRadius(doubleradius)获取方法属性类型 get属性名()比如:doublegetRadius()static静态属性用st
13、atic修饰的属性,也称为类属性用于描述一类对象共享的属性比如:员工的最低工资,学生的学校名称等等static静态方法用static修饰的方法,也叫类方法写静态方法时要注意,方法中不能访问非静态成员注意:不加static修饰的属性或方法,必须用对象去调用。被static修饰的属性或方法可通过类名直接调用,也可通过对象调用比如:Teacher例子中可设学校名的属性为静态的,试考虑可以如何调用该属性。第5章 继承继承的语法修饰符class子类名 extends父类名类体;例如:classAppleextendsFruit【注注】JavaJava只支持类单重只支持类单重继承,即只有一个父类的继承,即
14、只有一个父类的继承关系继承关系要点在继承中:子类可以得到父类的属性和方法。子类可以添加新的属性和方法。子类可以重新定义父类的属性和方法。(子类中的内容比父类丰富)属性隐藏子类可以定义与父类同名的属性,称为属性隐藏。即子类可以重新定义父类的属性。调用属性的规则:先在当前类中找,如果没有再到其父类中找。如果想要调用被隐藏的父类属性,静态属性可以使用“类名.属性名”;非静态属性可以用“super.属性名”用法见课后习题P156,10题方法的覆盖在子类中可以定义与父类方法头相同的方法,称为方法的覆盖。也可以说,通过方法覆盖,子类可以重新定义父类的方法。方法覆盖要注意:子类在重新定义父类中的已有方法时,
15、应保持和父类中该方法相同的方法头,即有完全相同的方法名、返回值类型和参数列表。方法覆盖时,子类方法不能缩小父类方法的访问权限。比如:父类的方法如果是protected,子类方法只能是protected或者public继承关系中的构造方法在创建子类对象时,先调用父类构造方法,然后再调用子类构造方法默认情况下,子类调用父类无参的构造方法super在子类中调用父类的属性和方法super指当前类的父类对象,所以不能在静态方法中使用。在子类构造方法中显示调用父类的构造方法。必须写在子类构造方法的第一条。总结:this 和super的用法this代表当前类的对象;super代表当前类的父类对象。this可
16、以调用当前类当中的其他构造方法,而super可以在子类中调用其父类中的构造方法。注意:this和super都不能用在static修饰的方法内;并且this和super不能同时使用,因为都需要放在第一条语句上。Final使用要点final可以修饰:属性或局部变量,不能被修改(常量)方法,不能被覆盖(最终方法)类,不能被继承(最终类)abstract使用要点abstract类不能实例化,只能用于继承abstract方法只有方法头,没有方法体只能定义在抽象类中注意:抽象类中可以有具体方法抽象类中的抽象方法在其非抽象子类中必须实现(覆盖)父子类对象的使用和转化父子类的对象在某些情况下可以相互转化。转化
17、原则子类对象可以当作父类对象使用父类对象不能当作子类对象使用如果父类引用实际指向的是子类对象,那么该父类引用可以通过强制转换成子类对象使用说明比如父类是:A,子类是:BBb=newB();/创建子类对象Aa=newB();/创建子类对象但把它定义成父类类型的,它就可以当成父类的对象来用(类似于:doublei=12,整型的12可以当成浮点数来用)说明但反过来inti=12.5可以么?只能inti=(int)12.5。同理Bb=newA()/也不可以,父类的对象不能把他当成子类类型的除非:Aa=newB()Bb=(B)a;a仍然还是父类类型的,但可以当成子类对象来用。说明如果一个方法的形式参数定
18、义的是父类的对象,那么在调用这个方法时可以使用子类的对象来作为实际的参数;(因为子类对象就可以当成父类对象来用)见书139页例题多态性与方法的动态绑定多态:一种功能有多种实现。通过方法的重载和覆盖可以实现多态。动态绑定:方法体的调用是在程序执行时动态决定的。即调用一个方法时看到底是哪个对象在调用方法。而属性不能动态绑定。练习定义一个Fruit类,属性有颜色color,产地place,质量quality,该类有一个方法eat,可用打印语句描述水果能吃。该类有子类Apple类,它有自己特有的属性:品种variety,也有eat方法表示苹果能吃。第6章 接口和内部类接口的作用提供功能规范的、能够多重
19、继承的、特殊的抽象类。接口中只能定义静态常量和抽象方法。接口定义的语法publicinterface接口名 extends父接口列表/属性声明publicstaticfinal属性类型 属性名=常量值;/方法声明publicabstract返回值类型 方法名(参数列表);注意:1修饰接口的修饰符只有public和默认修饰符两种。2接口可以是多重继承。接口只能继承接口,不能继承类。3属性必须是常量(有初值),方法必须抽象(无方法体)。接口的实现类通过implements关键字来实现接口。类必须实现(覆盖)接口中描述的方法。这就体现接口的好处,会强制实现它的类必须得有并且实现接口中定义的方法,否则
20、该类就不能实例化类实现接口的语法class类名 extends父类implements接口列表覆盖所有接口中定义的方法;注意:1、一个类可以同时实现多个接口,但只能继承一个类2、类中必须覆盖接口中的所有方法,而且,都是公开的内部类也叫做内嵌类,是一种定义在其他类内部的类。内部类相当于外部类的一个成员可以访问外部类的所有其他成员使用受到外部类的限制第7章 异常处理异常处理的作用为程序员提供一种解决运行时错误的方法。以保证程序的正常运行。当程序遇到运行错误时,会产生并抛出一个信号(异常),然后通过try-catch语句捕获这个信号(异常),这样就可以根据这个信号(异常)的不同进行相应的处理。异常处
21、理语法try可能抛出异常的语句组;catch(异常类1e)异常处理语句组1;.catch(异常类ne)异常处理语句组n;finally语句组;异常处理流程未产生异常情况:try语句结束后,不再执行catch语句产生异常并捕获成功情况:try语句在产生异常处中断,转到catch语句执行;产生异常未捕获情况:所在方法中断;写在finally子句中的语句无论异常是否产生,无论产生的异常是否捕获成功都要执行异常的抛出语法在某个方法中if(条件判断)throw(new异常类名);异常声明(异常报告)如果一个方法中可能会存在异常,则需要在该方法头上用throws关键字声明该异常。如果某方法头部有throw
22、s声明异常,则调用该方法时建议强制用trycatch捕获,或用throws声明。String类Java中使用String类的对象表示字符串,定义字符串两种方法:例如:Strings1=“thisisastring”;Strings2=newString(“another”);Strings3=s1+s2;String类中常用方法booleanequals(Objecto)判断该字符串是否与目标字符串相等 String类中常用方法intlength()获取字符串的长度charcharAt(intindex)获取指定位置的字符,index从0开始Stringsubstring(intfrom,in
23、tend)包括from,不包括end位置上的字符Stringsubstring(intfrom)获取字符串的子串String类中常用方法intindexOf(charc)intindexOf(charc,intfrom)intindexOf(Strings)intindexOf(Strings,intfrom)查找指定字符或者字符串的位置,如果未找到返回1StringBufferString构造的字符串一旦创建不能修改StringBuffer的内容可以修改常用方法append(Strings)/在字符串的尾部追加其他字符串String与基本数据类型之间的转换字符串其他数据类型inti1=Int
24、eger.parseInt(“111”);其他数据类型字符串Stringout2=String.valueOf(100);数组用于存储同种类型、固定数目的数据数组引用的定义:Strings1;Strings2;inti1;inti2;数组对象的创建(实例化)对象名=new元素类型元素个数s1=newString5;i1=newint6;inti2=newint10;Dated1=newDate2;inti3=2,3,5,1,2;inti2=newint1,2,4,5;对象数组的初始化Circlea=newCircle10;/上面语句只是创建了有10个Circle类型引用的数组,还需要为每个引用
25、创建一个Circle对象for(inti=0;ia.length;i+)ai=newCircle();数组元素的访问语法:数组索引号索引号从0开始intmyList=newint2;myList0=20;myList1=myList0+10;访问其他元素会产生数组越界错误Java.lang.ArrayIndexsOutOfBoundsException数组的遍历intb=newint10;for(inti=0;ib.length;i+)System.out.println(bi);Math类staticdoublesqrt(doubled)/求某数的平方根staticdoublerandom()/求0,1)内的随机数,利用该方法可求任意范围内的随机数。完