Java基础知识课件_第1页
Java基础知识课件_第2页
Java基础知识课件_第3页
Java基础知识课件_第4页
Java基础知识课件_第5页
已阅读5页,还剩278页未读 继续免费阅读

下载本文档

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

文档简介

OracleJavaEE实训教材系列Java面向对象的核心逻辑第一章Java技术简介目标Java编程语言的主要概念Java产品分组产品生命周期的各阶段Java基础知识Java编程语言的关键概念面向对象分布式简单化多线程安全平台独立性Java基础知识过程化编程过程化编程着重于顺序。Java基础知识面向对象Java基础知识分布式Java基础知识简单化使用引用代替内存指针。boolean数据类型有true或false值。自动管理内存。Java基础知识多线程Java基础知识安全Java基础知识依赖于平台的程序Java基础知识依赖于平台的程序Java基础知识依赖于平台的程序Java基础知识独立于平台的程序Java基础知识独立于平台的程序Java基础知识认识Java产品组Java基础知识使用Java平台标准版SDK组件Java运行环境(JRE):所选平台上的Java虚拟机所选平台上的Java类库Java编译器Java类库(API)文档(单独下载)其它工具,例如创建Java存档文件(JAR文件)和调试Java程序的工具Java程序示例Java基础知识产品生命周期(PLC)的各阶段1. 分析2. 设计3. 开发4. 测试5. 实现6. 维护7. 产品终止(EOL)Java基础知识分析阶段Java基础知识设计阶段Java基础知识开发阶段Java基础知识测试阶段Java基础知识实现阶段Java基础知识维护阶段Java基础知识产品终止(EOL)阶段Java基础知识第二章创建第一个Java程序目标JDK软件开发工具Java程序的装载与执行创建并运行HelloJava程序Java基础知识Java应用程序Java基础知识开发与运行环境Java基础知识开发与运行环境JRE=JVM+JavaSE标准类库JDK=JRE+开发工具集(例如Javac编译工具等)Java基础知识Java虚拟机(JVM)什么是JVM?JVM对平台有依赖性吗?Java程序对平台有依赖性吗?什么是JavaHotSpot™虚拟机?什么是JavaHotspot™客户端虚拟机?什么是JavaHotspot™服务器端虚拟机?Java基础知识JDK的安装Java基础知识设置path环境变量Java基础知识Java程序的装载与执行Java基础知识创建并运行HelloJava程序TestGreeting.java类的代码如下:1//2//"HelloJava"程序示例3//4publicclassTestGreeting{5publicstaticvoidmain(String[]args){6Greetinghello=newGreeting();7hello.greet();8}9}Greeting.java类的代码如下:1publicclassGreeting{2publicvoidgreet(){3System.out.println("HelloJava!");4}5}Java基础知识创建并运行HelloJava程序Java基础知识第三章类和对象目标类和对象的概念使用类和对象主类与main方法Java内存管理与垃圾回收Java基础知识类和对象的概念面向对象(OO)语言是最接近现实世界的编程语言对象—对应现实世界的实体类—对现实世界实体的抽象定义Java基础知识类和对象的关系类是对象的抽象对象是类的实例Java基础知识类和对象中的信息类中的信息:属性行为(或操作)—称为方法对象中的信息状态—即属性值来自类中方法Java基础知识类的声明publicclass<类名>{[属性的声明][构造器的声明][方法的声明]}Java基础知识类的声明示例1publicclassDog{2privateintweight;3publicintgetWeight(){4returnweight;5}6publicvoidsetWeight(intnewWeight){7weight=newWeight;8}9}Java基础知识创建和访问对象应针对类使用new关键字来创建Java对象。使用.符号访问对象成员—<对象>.<成员>成员包括属性和方法1publicclassTestDog{2publicstaticvoidmain(String[]args){3Dogd=newDog();4System.out.println("Dogd’sweightis"+d.getWeight());56d.setWeight(42);7System.out.println("Dogd’sweightis"+d.getWeight());8}9}Java基础知识主类与main方法一个应用程序可以包含多个类主类—包含main方法的类main方法—程序的入口方法

publicstaticvoidmain(String[]args){……

}Java基础知识JVM使用的内存堆栈—用于临时保存局部变量的值堆—用于存储对象及其加载的类Java基础知识堆内存Java基础知识JVM的垃圾回收机制垃圾对象—内存中不再被使用的对象垃圾回收(GC)—JVM自动释放垃圾对象所占内存的机制例如:1publicclassTestDog{2publicstaticvoidmain(String[]args){3Dogd=newDog();4System.out.println("Dogd’sweightis"+d.getWeight());5d=null;67Dogd1=newDog();8System.out.println("Dogd’sweightis"+d1.getWeight());9}10}Java基础知识第四章声明和使用字段目标字段的声明使用基本数据类型使用引用类型字段的初始化分号、注释和空白Java基础知识字段与属性类中的属性可分为两种形式:用字段声明用get/set方法声明Java基础知识声明字段声明对象字段的语法格式如下:<修饰符><类型><字段名称>;例如:1publicclassFoo{2privateintx;3privatefloaty=10000.0F;4privateStringname="BatesMotel";5}Java基础知识数据类型的分类基本数据类型intvar1;charvar2;floatvar3;引用类型,或对象类型,或类类型Stringstr;Datedate;Java基础知识标识符是为字段(或类、方法、局部变量)起的一个名称可以用字母、_或$作为开头区分大小写,无长度限制下列为有效的标识符示例:identifieruserNameuser_name_sys_var1$change//合法但不推荐MAX_VALUEJava基础知识Java语言的关键字注意:不能将关键字作为标识符Java基础知识基本数据类型Java语言定义了8种基本数据类型:整型:byte、short、int和long浮点类型:float和double字符类型:char逻辑类型:booleanJava基础知识逻辑类型—booleanboolean类型只有两个字面值:true和false例如:booleanflag=true;Java基础知识字符类型—char表示16位Unicode字符字符的字面值使用单引号(‘’)引起例如:‘a’—字母a‘\n’,‘\t’—转义字符“换行”和“制表符” ‘\u03a6’—希腊字母ΦJava基础知识整型—byte、short、int和long数据类型的大小:数值的字面值可用三种形式来表示:2十进制数077八进制数(以0开头)0xBAAC十六进制数(以0x开头)数值的字面值缺省为int类型,可使用后缀字母L或l来表示long类型。例如:100,205LJava基础知识浮点类型—float和double数据类型的大小:

数值的字面值可用两种形式来表示:3.14简单的浮点数值3.14E23大浮点数值数值的字面值缺省为double类型可使用后缀字母D或d来表示double数值,可使用后缀字母F或f来表示float数值。例如:3.14,2.718F,6.02DJava基础知识引用类型引用类型—在字段定义中,<数据类型>为某个预定义的类。也称为对象类型或类类型。例如:<数据类型><标识符名称>int var; //var为基本类型String str; //str为引用类型Dog dog //dog为引用类型String是JavaSE类库中定义的最常用类之一Java基础知识引用类型可用的类JavaSE类库中的类,如String,Date,……用户自行定义的类,如DogJava基础知识使用String类String的字面值须包含在双引号中:

例如:"Thequickbrownfoxjumpsoverthelazydog."String类型引用变量的声明和初始化: Stringgreeting="GoodMorning!!"; StringerrorMessage="RecordNotFound!";Java基础知识使用自定义类自定义类1publicclassDog{2privateintweight;3publicintgetWeight(){4returnweight;5}6publicvoidsetWeight(intnewWeight){7weight=newWeight;8}9}声明Dogdog;声明并赋值Dogdog=newDog();Java基础知识初始化字段的方式在使用对象的字段之前,必须对其进行初始化赋值。可使用下列方式初始化字段:使用缺省值进行初始化使用显式值进行初始化使用构造器进行初始化(后续章节介绍)Java基础知识使用缺省值进行初始化1classStock{2//字段声明3Stringsymbol;//初始化为null4doubleprice;//初始化为0.05Datedate;//初始化为null67//方法声明8}Java基础知识各数据类型的缺省值数据类型缺省值byte0short0int0long0Lfloat0.0fdouble0.0dchar‘\u0000’booleanfalse引用类型nullJava基础知识使用显式值进行初始化1classStock{2//字段声明3Stringsymbol=“SUNW”;4doubleprice=16.98;5Datedate=newDate();67//方法声明8}Java基础知识分号单行或多行语句用(;)结束a=1;b=2;c=3;total=a+b+c;Java基础知识注释共有三种注释方式可以使用://单行注释/**多行注释*//***JavaDoc文档注释*注释内容将被自动生成到JavaDoc文档中*/Java基础知识空白Java语言中的空白包括:空格制表符换行符程序中可以使用任意数量的空白可以使用空白来增加源程序的可读性

例如:{intx;x=23*54;}

{intx;

x=23*54;}Java基础知识第五章声明和使用方法(一)目标方法的声明块语句和局部变量使用表达式表达式中的数据类型转换Java基础知识声明方法基本语法:<返回类型><方法名>([参数列表]){[方法体]}例如:1publicclassDog{2privateintweight;3publicintgetWeight(){4returnweight;5}6publicvoidsetWeight(intnewWeight){7weight=newWeight;8}9}Java基础知识方法体的构成块语句 {……}局部变量的声明和赋值语句 {intx=10;}表达式语句 x=x+1;流程控制语句分支语句—if,switch循环语句—while,do-while,forJava基础知识块语句是由成对的大括号({})限定一组语句。{ x=y+1;y=x+1;}块语句可以嵌套while(i<large){a=a+i;//可以嵌套语句块if(a==max){b=b+a;a=0;}i=i+1;}Java基础知识局部变量的声明和赋值语句局部变量—在方法体(或方法体中的块语句)中声明的变量:publicvoidcompute(intparam){ intx=10;}局部变量只在其所在块内有效局部变量必须先初始化赋值,才能使用方法的参数也是局部变量Java基础知识表达式语句一个表达式至少要有一个运算符。例如:x+5;//一个运算符x+5*y;//多个运算符一个运算符有几个操作数是由运算符决定的。例如:x<2;//二元运算符++x;//一元运算符一个表达式将求出一个类型的数据表达式运算符类型结果的类型x+y;加法数值x<2;比较布尔值“sun”+22字符串连接字符串x&22;按位与int或long(取决于x)Java基础知识运算符及优先级结合方向运算符功能R到L++--+-~!单目加,单目减,正号、负号、取补、取反L到R*/%乘,除,取余L到R+-加,减L到R<<>>>>>算术左移,算术右移,逻辑右移L到R<><=>=instanceof小于,大于,小于等于,大于等于L到R==!=等于判定,不等于判定L到R&^|与,异或,或L到R&&||与判定,或判定R到L<bool_expr>?<expr1>:<expr2>按条件求值R到L=*=/=%=+=-=<<=>>=&=^=|=赋值Java基础知识表达式语句通常有以下表达式语句形式:赋值表达式x=a+b;++或––的使用x++;方法调用System.out.println(“hello”);对象创建表达式d=newDate(2010,1,1);Java基础知识字符串的连接运算符“+”可以对String对象执行连接操作,并创建新的String。例如:Stringsalutation=“Dr.”;Stringname="Pete"+""+"Seymour";Stringtitle=salutation+""+name;结果为:Dr.PeteSeymour在连接运算时,非String对象会被自动转换为String对象Java基础知识表达式中的数值升级数值升级—在将运算符作用于操作数之前,Java会按照需要将操作数的数据类型转换为结果类型。例如:result=<操作数1>+<操作数2>操作数1操作数2resultbyte/short/charbyte/short/charIntbyte/short/char/intIntIntbyte/short/char/intlonglongbyte/short/char/int/longfloatFloatbyte/short/char/int/long/floatdoubledoubleJava基础知识变量值的自动升级变量可以自动升级为较长的形式(如int或long),反之则不行。例如:longbigval=6;//6是int,自动升级intsmallval=99L;//99L是long,错误doublez=12.414F;//12.414F是float,自动升级floatz1=12.414;//12.414是double,错误Java基础知识强制类型转换当从一种较长的数据类型赋值到较短的数据类型时,需要使用强制类型转换。例如:shorta,b,c;a=1;b=2;则:c=a+b;//编译失败应为:c=(short)(a+b);Java基础知识第六章声明和使用方法(二)目标分支语句循环语句Java基础知识分支语句if语句switch语句Java基础知识简单的if语句语法 if(<布尔表达式>) <语句或语句块>例如:if(x<10)System.out.println("Areyoufinishedyet?");推荐写法if(x<10){System.out.println("Areyoufinishedyet?");}Java基础知识简单的if-else语句语法if(<布尔表达式>) <语句或语句块>else <语句或语句块>例如:if(x<10){System.out.println("Areyoufinishedyet?");}else{System.out.println("Keepworking...");}Java基础知识复杂的if-else语句如果需要进行一系列的条件检查,可以用一连串的if-else-ifif(<布尔表达式>) <语句或语句块>elseif(<布尔表达式>) <语句或语句块>else <语句或语句块>例如:intcount=getCount();//类中定义的方法if(count<0){System.out.println("Error:countvalueisnegative.");}elseif(count>getMaxCount()){System.out.println("Error:countvalueistoobig.");}else{System.out.println("Therewillbe"+count+"peopleforlunchtoday.");}Java基础知识switch语句语法switch(<表达式>){ case<常量1>: <语句或语句块>* [break;] case<常量2>: <语句或语句块>* [break;] default: <语句或语句块>* [break;]}Java基础知识switch语句示例常规的switch语句示例:switch(carModel){case‘D’://DeluxeaddAirConditioning();addRadio();addWheels();addEngine();break;case‘S’://StandardaddRadio();addWheels();addEngine();break;default:addWheels();addEngine();}Java基础知识switch语句示例switch语句中的break语句可以省略,但这会导致在执行了相应的case语句块后,将继续执行其后紧邻的语句块。例如:switch(carModel){case‘D’://DeluxeaddAirConditioning();//向下通过case‘S’://StandardaddRadio();//向下通过default:addWheels();addEngine();}Java基础知识循环语句while语句do-while语句for语句Java基础知识for循环作用:按指定的起始及终止条件循环语法:for(<初始表达式>;<终止表达式>;<步长表达式>) <语句或语句块>例如:for(inti=0;i<10;i++){ System.out.println(i+"squaredis

"+(i*i));}Java基础知识while循环作用:循环0到N次语法:while(<布尔表达式>) <语句或语句块>例如:inti=0;while(i<10){ System.out.println(i+"

squaredis

"+(i*i)); i++;}Java基础知识do/while循环作用:循环1到N次语法:do <语句或语句块>while(<布尔表达式>);例如:inti=0;do{ System.out.println(i+"

squaredis

"+(i*i)); i++;}while(i<10);Java基础知识循环中的break和continue语句break语句—结束当前循环,并跳转到循环之后do{ …… if(<条件表达式1>){ break; } ……}while(<条件表达式2>);continue语句—结束当前循环,并跳转到循环之前do{ …… if(<条件表达式1>){ continue; } ……}while(<条件表达式2>);Java基础知识循环中带标号的break语句结束当前循环,并跳转到标号所对应循环之后outer:do{ …… do{ …… if(<条件表达式1>){

breakouter; } …… }while(<条件表达式2>); ……}while(<条件表达式3>);Java基础知识循环中带标号的continue语句结束当前循环,并跳转到标号所对应循环之前outer:do{ …… do{ …… if(<条件表达式1>){ continueouter; } …… }while(<条件表达式2>); ……}while(<条件表达式3>);Java基础知识第七章声明和使用方法(三)目标方法的调用重载方法Java基础知识方法的调用方法调用—可以通过执行某个对象的方法来完成相应的任务实例方法—必须通过对象的实例来调用的方法。(同理,通过对象的实例来访问的属性称为实例变量)应使用“.”符号调用实例方法。例如:Dogd=newDog();d.setWeight(42);Java基础知识方法的参数和返回值如果方法签名中有参数列表,则调用时必须向方法传递与之相对应的参数(包括参数类型及参数个数)。例如: d.setWeight(42);如果方法有返回值,可使用相同类型的变量来接收。例如:intweight=d.getWeight();Java基础知识参数的按值传递所有参数都是以传值的方式传递。当传递基本数据类型的参数时,传递的是其值。当传递对象类型的实例时,传递的是对象的引用。Java基础知识重载方法重载方法—同一类中方法名相同而参数(类型或/和个数)不同的方法。在程序执行时,JVM将根据参数来确定调用哪个重载方法。目的—为调用者提供便利。例如:publicvoidprintln(inti)publicvoidprintln(floatf)publicvoidprintln(Strings)……Java基础知识第八章声明和使用构造器目标声明构造器使用指定的构造器创建对象缺省构造器this关键字对象在内存中的结构模型Java基础知识声明构造器构造器是一种特殊的方法(无返回类型)。用于构建对象,通常用来初始化对象的属性值。构造器的基本语法:<类名>(<参数列表>*){ <语句>*}声明示例:1publicclassDog{2privateintweight;34publicDog(){5weight=42;6}7Java基础知识构造器体的构成构造器体的构成与方法相同,可以包含:局部变量的声明和赋值语句表达式语句流程控制语句Java基础知识构造器的重载构造器是方法,所以允许重载。通常使用重载构造器进行不同情况下的属性初始化。例如:1publicclassStock{2//字段声明3Stringsymbol;4doubleprice;5Datedate=newDate();67//构造器声明8Stock(StringstockSymbol){9symbol=stockSymbol;10}1112Stock(StringstockSymbol,doublenewPrice){13this(stockSymbol);//调用另一个构造器14price=newPrice;15}16//方法声明17}Java基础知识构造器的调用构造器不能被直接调用。在使用new关键字创建对象时,实际上调用了相应的构造器。调用哪个构造器,由参数的匹配来决定。例如:Stockstock1=newStock(“ENCY”);Stockstock2=newStock(“ZUMZ”,52.00);Java基础知识缺省构造器每个类中始终至少有一个构造器。如果编程时不提供构造器,则类在编译时会被自动添加一个缺省构造器:缺省构造器不带参数缺省构造器体为空例如:5publicclassStock{6//字段声明7Stringsymbol;8doubleprice;9Datedate;1011//没有声明构造器1213//方法声明1415}Java基础知识this关键字的作用this关键字有以下作用:解决实例变量与参数的二义性调用重载构造器(必须在构造器的第1行使用)代表对象自身,可将当前对象作为参数传递给另一个方法Java基础知识this关键字示例1publicclassMyDate{2privateintday=1;3privateintmonth=1;4privateintyear=2000;56publicMyDate(intday,intmonth,intyear){7this.day=day;8this.month=month;9this.year=year;10}1112publicMyDate(MyDatedate){13this.day=date.day;14this.month=date.month;15this.year=date.year;16}1718publicMyDateaddDays(intmoreDays){19MyDatenewDate=newMyDate(this);20newDate.day=newDate.day+moreDays;21//尚未实现...22returnnewDate;23}24……Java基础知识对象在内存中的结构模型现定义用于表示日期的MyDate类:1publicclassMyDate{2privateintday=1;3privateintmonth=5;4privateintyear=1999;5publicMyDate(intday,intmonth,intyear){6this.day=day;7this.month=month;8this.year=year;9}10publicvoidprint(){...}11}Java基础知识构造和初始化对象可以如下使用MyDate类:1publicclassTestMyDate{2publicstaticvoidmain(String[]args){3MyDateref=newMyDate(10,10,2010);4}5}执行第3行创建MyDate对象时,内部过程大致如下:1. 为新对象分配空间并初始化为0或null。2. 执行显式的初始化。3. 执行构造器。new方法的括号中的参数传递给构造器(1,10,2010)。4. 将ref变量赋值为对堆内存中新对象的引用。Java基础知识a.在堆栈中为引用变量分配空间Java基础知识b.在堆中为对象分配内存Java基础知识c.执行属性的显式初始化Java基础知识d.执行构造器Java基础知识e.由new运算符返回对象引用值Java基础知识f.将对象引用值赋给引用变量Java基础知识第九章包的管理目标package与import语句包与目录的布局Java编程语言编码约定使用JavaAPI文档Java基础知识源程序文件布局Java源程序文件的基本语法:[<包的声明>][<导入声明>*]<类的声明>例如:1packageshipping.reports;23importshipping.domain.*;4importjava.util.List;5importjava.io.*;67publicclassVehicleCapacityReport{8privateListvehicles;910publicvoidgenerateReport(Writeroutput){11...12}13}Java基础知识Java语言中的包包可以帮助我们管理较大型的软件。包可以包含类和子包。与包相关的语句有:packageimportJava基础知识package语句告诉编译器我(指所在类)属于哪个包基本语法: package<顶层包名>[.<子包名>]*;示例:1//ClassVehicleofthe’domain’sub-packagewithin2//the’shipping’applicationpackage.3packageshipping.domain;45publicclassVehicle{6...7}package语句须在源文件的开始处使用每个类只能有一个包声明。如果没有包声明,则将该类放在缺省包中。Java基础知识import语句告诉编译器我(指所在类)所用的类位于哪个包。基本语法:import<包名>[.<子包名>]*.<类名>;或import<包名>[.<子包名>]*.*;示例:packageshipping.reports;importshipping.domain.*;importjava.util.List;importjava.io.*;publicclassVehicleCapacityReport{privateCompanycompanyForReport;...}位于类声明之前,package语句之后。Java基础知识包名与目录的关系Java基础知识开发Java基础知识编译时使用-d选项javac的-d选项可以将编译所产生字节码文件直接放到包所对应的目录中。例如:cdJavaProjects/ShippingPrj/srcjavac-d../classesshipping/domain/*.javaJava基础知识部署创建tempfile.txt文本文件: Main-Class:mypackage.MyClass<换行>jarcmftempfile.txtMyProgram.jarMyApp.java-jar/path/to/file/MyProgram.jarJava基础知识Java语言的编码约定包名—应全部小写。例如: com.example.domain;类名(含接口等特殊类)—由一到多个名词组成,各词首字母大写。例如: SavingsAccount方法名—由一个动词+一到多个名词组成,各名词首字母大写。例如: getAccount()变量—由一到多个名词组成,第二个及之后各词首字母大写。例如: currentCustomer常量—由一到多个名词组成,全部大写,词间用下划线连接。例如: HEAD_COUNTJava基础知识Java语言的编码约定控制结构(分支和循环)—每条语句应独立成行:

if(condition){ statement1; }else{ statement2; }空格每行只包含一条语句使用两个或四个缩进空格注释—用于对不易理解的代码进行说明简短说明使用//注释大段说明使用/*……*/注释用于生成javadoc的内容使用/**……*/注释Java基础知识使用JavaAPI文档Java基础知识第十章类的封装目标访问控制修饰符实现封装Java基础知识访问控制修饰符访问控制修饰符可用来修饰类的成员,以达到控制其被他人访问的目的。Java语言提供了四种访问控制修饰符:private=仅能被同类中的成员访问default=private+能被同包的其他类访问protected=default+能被不同包的子类访问public=被任意访问Java基础知识访问控制修饰符Java基础知识示例1packagecom.abc.util;23publicclassDate{4privateintday;56publicDate(){//...}78publicvoidaddDays(intdays){}9intgetDaysInMonth(intmonth){}10}1packagecom.abc.brokerage;23publicclassStock{4privateStringsymbol;5publicStock(Stringsymbol,doubleprice){}67publicStringgetSymbol(){}8publicvoidsetSymbol(Stringsymbol){}9}Java基础知识对类的修饰对于常规的Java类,只能使用public或default修饰符。由default修饰的类,只能被同包的其他类所访问Java基础知识封装的概念通常,封装是针对类而言:隐藏类的实现细节(如字段值的运算和访问)强制访问者使用接口来访问数据Java基础知识未封装类存在的问题访问者直接访问类的内部数据:MyDated=newMyDate();d.day=32;//无效日期d.month=2;d.day=30;d.day=d.day+1;//无效日期运算Java基础知识封装的解决方案访问者必须使用set和get方法来访问内部数据:MyDated=newMyDate();d.setDay(32);//无效日期,返回falsed.setMonth(2);d.setDay(30);//无效日期,返回falsed.setDay(d.getDay()+1);//无效日期运算,返回falseJava基础知识封装的优点保护数据的完整性提升应用程序的可维护性Java基础知识第十一章创建和使用数组目标声明和创建数组使用数组命令行参数Java基础知识声明数组数组是用来组合相同类型数据对象的集合。声明基本数组或引用类型数组:chars[];或char[]s;Pointp[];或Point[]p;数组是对象;需要使用new关键字创建。Java基础知识创建数组应使用new关键字来创建数组对象。例如,创建一个基本类型(char)的数组,并赋值:1publicchar[]createArray(){2char[]s;3s=newchar[26];4for(inti=0;i<26;i++){5s[i]=(char)(’A’+i);6}7returns;8}一旦创建数组后,其大小不能再改变。Java基础知识创建字符基本数据类型的数组Java基础知识创建引用数组另一个例子是对象数组:1publicPoint[]createArray(){2Point[]p;34p=newPoint[10];5for(inti=0;i<10;i++){6p[i]=newPoint(i,i+1);7}8returnp;9}Java基础知识创建Point对象引用的数组Java基础知识初始化数组初始化数组元素。创建带有初始值的数组String[]names;names=newString[3];names[0]="Georgianna";names[1]="Jen";names[2]="Simon";MyDate[]dates;dates=newMyDate[3];dates[0]=newMyDate(22,7,1964);dates[1]=newMyDate(1,1,2000);dates[2]=newMyDate(22,12,1964);String[]names={"Georgianna","Jen","Simon"};MyDate[]dates={newMyDate(22,7,1964),newMyDate(1,1,2000),newMyDate(22,12,1964)};Java基础知识多维数组二维数组:int[][]twoDim=newint[4][];twoDim[0]=newint[5];twoDim[1]=newint[5];int[][]twoDim=newint[][4];//illegal非矩形数组的数组:twoDim[0]=newint[2];twoDim[1]=newint[4];twoDim[2]=newint[6];twoDim[3]=newint[8];4X5的整型数组: int[][]twoDim=newint[4][5];Java基础知识数组边界所有的数组索引从0开始。publicvoidprintElements(int[]list){for(inti=0;i<list.length;i++){System.out.println(list[i]);}}Java基础知识使用增强型for循环使用Java语言“增强型for循环”功能publicvoidprintElements(int[]list){for(intelement:list){System.out.println(element);}}此版本的for循环可以被读作对于(for)list中的每个元素(element)去执行。Java基础知识数组大小的不变性不能改变其大小。可以使用同一个引用变量引用一个全新的数组。int[]myArray=newint[6];myArray=newint[10];Java基础知识命令行参数任何Java应用程序都可以使用命令行参数这些字符串参数可以被放在命令行中的类名后面,用来启动Java解释器每个命令行参数都被放在args数组中,这个数组被传递给静态main方法中。Java基础知识命令行参数1publicclassTestArgs{2publicstaticvoidmain(String[]args){3for(inti=0;i<args.length;i++){4System.out.println("args["+i+"]is’"+args[i]+"’");5}6}7}执行示例:javaTestArgsarg1arg2"anotherarg"args[0]is’arg1’args[1]is’arg2’args[2]is’anotherarg’Java基础知识第十二章类的继承(一)目标继承的概念对继承成员的访问控制Java基础知识继承的概念继承是最重要的面向对象概念之一。继承发生在类之间,与现实世界的继承类似。被继承者称为父类(或超类),继承者称为子类。子类将继承父类的所有成员(构造器除外)。Java基础知识继承示例Java基础知识继承示例Java基础知识单继承Java基础知识继承的优点可以创建更为特殊的类型消除重复代码利于可维护性Java基础知识对继承成员的访问控制子类能否直接访问从父类继承的成员,取决于成员的访问控制修饰符。访问控制修饰符继承规则private继承但无法访问default继承并且如果父类和子类在同一个包中可访问protected继承且可访问public继承且可访问Java基础知识第十三章类的继承(二)目标实现继承覆盖方法子类的构造器Java基础知识继承实现的因素确定父类和子类声明子类。为子类添加特有的属性和方法。根据需要覆盖父类的方法(后续介绍)。根据需要为子类添加构造器。Java基础知识声明子类声明子类的语法如下:<修饰符>class<子类名>[extends<父类名>]{ <声明语句>*}例如:publicclassManagerextendsEmployee{protectedStringdepartment;

publicStringgetDepartment(){returndepartment;}publicvoidsetDepartment(Stringdepartment){}}Java基础知识方法的覆盖覆盖—因为需要,子类可能重写父类的方法。子类可以通过方法覆盖来达到对所继承行为(即方法)进行功能修改的目的。Java基础知识方法覆盖示例2publicclassEmployee{……12publicStringgetDetails(){13return“Name:“+name+“\n”14 +“Salary:“+salary;15}16}1publicclassManagerextendsEmployee{……7@Override8publicStringgetDetails(){9return“Name:“+name+“\n”10+“Salary:“+salary+“\n”11+“Managerof:“+department;12}13}Java基础知识覆盖的规则子类中被覆盖的方法须遵守以下规则:匹配方法接口要求:方法名称和参数列表与父类方法相同。返回类型相同。如果返回类型是引用类型,则子类方法可以是被覆盖返回类型的子类。在覆盖方法上,可选地使用Override标注。覆盖方法的访问修饰符范围须不小于父类方法。Java基础知识使用super调用父类被覆盖方法子类方法中,可以使用super关键字调用被覆盖的方法。调用的目的是为了继续使用被覆盖方法的原有功能。例如:12publicclassManagerextendsEmployee{13privateStringdepartment;1415publicStringgetDetails(){16//调用父方法17returnsuper.getDetails()+"\nDepartment:"+department;18}19}Java基础知识super使用的说明super关键字也可用来访问所继承父类的属性,但不推荐使用。super所调用的方法不一定在父类中,它也可能位于更深的层次结构中(如父类的父类)。Java基础知识子类的构造器在子类构造器中可以(显式或隐式)调用父类的构造器,以借助父类构造器来初始化从父类继承的属性。提醒:除非父类在开发中,否则不应该修改父类,也不应该加入新的父类构造器。子类构造器要负责调用适当的父类构造器,不管是以显式或隐式的方式。父类的字段必须比子类的字段先初始化。建议步骤:步骤A:了解父类的构造器步骤B:声明子类构造器步骤C:从每个子类构造器调用适当的父类构造器Java基础知识步骤A:了解父类的构造器1publicclassEmployee{2privateStringname;3//方法4}1publicclassEmployee{2privateStringname;3publicEmployee(Stringname){4=name;5}6}1publicclassEmployee{2privateStringname;3publicEmployee(){//此处添加代码}4publicEmployee(Stringname){5=name;6}7}Java基础知识步骤B:声明子类构造器1publicclassManagerextendsEmployee{2privateStringdepartment;3publicManager(Stringdepartment){4this.department=department;5}6//以下代码不列出7}Java基础知识步骤C:从每个子类构造器调用适当的父类构造器1publicclassManagerextendsEmployee{2privateStringdepartment;3publicManager(Stringdepartment){4this.department=department;5}6//以下代码不列出7}Java基础知识示例1:显式调用父类无参数构造器1publicclassEmployee{2privateStringname;3//方法4}

1publicclassManagerextendsEmployee{2privateStringdepartment;3publicManager(Stringdepartment){4super();//注意:显式的super是可选的5this.department=department;6}7}Java基础知识示例2:显式调用父类带参数的构造器1publicclassEmployee{2privateStringname;3publicEmployee(Stringname){4=name;5}6}1publicclassManagerextendsEmployee{2privateStringdepartment;3publicManager(Stringname,Stringdepartment){4super(name);//注意:显式的super是必需的5this.department=department;6}7}Java基础知识示例3:父类具有无参数以及有参数构造器1publicclassEmployee{2privateStringname;3publicEmployee(){//此处插入代码}4publicEmployee(Stringname){5=name;6}7}

1publicclassManagerextendsEmployee{2privateStringdepartment;3publicManager(Stringname,Stringdepartment){4super(name);//注意:删除此行仍可以编译5this.department=department;6}7}Java基础知识复杂的构造器链示例1publicclassEmployee{2privateStringname;3privatedoublesalary;45publicEmployee(Stringname,doublesalary){6=name;7this.salary=salary;8}910publicEmployee(Stringname){11this(name,15000.00);12}13}Java基础知识复杂的构造器链示例1publicclassManagerextendsEmployee{2privateStringdepartment;34publicManager(Stringname,doublesalary,Stringdepartment){5super(name,salary);6this.department=department;7}89publicManager(Stringname,Stringdepartment){10super(name);11this.department=department;12}1314publicManager(Stringname){15this(name,"**NODEPARTMENTYET**");16}17}如果有外部代码要创建Manager实例:Managerm=newManager(“JoeSoap”);Java基础知识第十四章多态目标使用多态对象引用类型的转换Java基础知识多态多态是重要的面向对象概念之一,在Java编程中,几乎无处不在。多态是指一个对象具有多种形态。例如:Employeee=newManager();此对象既具有父类Employee的形态又具有子类Manager的形态。一个对象到底有几种形态,取决于其继承结构层次。Java基础知识多态引用一个对象只对应一个实例,但可以使用不同形态的引用变量来引用它,即多态引用。例如:

Employeee=newManager();//合法但是:

e.department="Sales";//错误因为对象作为父类形态时,是没有department属性的。Java基础知识虚拟方法调用在多态引用变量上的调用对象的方法时,将执行本态对象的方法。假设下面的情形为真:Employeeworker=newEmployee();Managerboss=newManager();Employeeworker=newManager();worker.getDetails();编译时的类型和运行时调用的类型有下列特征:方法名必须是已声明的变量类型的成员,例如,Employee类就带有getDetails方法。执行使用的方法是以运行时对象类型为基础的,例如,Manager类就带有getDetails方法的执行。Java基础知识异类集合可以创建一群具有相同类的对象集合。这样的集合称之为同类集合。例如:MyDate[]dates=newMyDate[2];dates[0]=newMyDate(22,12,1964);dates[1]=newMyDate(22,7,1964);异类集合是一组由不同项组成的集合。例如:Employee[]staff=newEmployee[1024];staff[0]=newManager();staff[1]=newEmployee();staff[2]=newEngineer();Java基础知识多态参数因为Manager是Employee,以下是正确的:publicclassTaxService{publicTaxRatefindTaxRate(Employeee){//计算并为e返回税率}}

//此时,在应用程序类的其它地方TaxServicetaxSvc=newTaxService();Managerm=newManager();TaxRatet=taxSvc.findTaxRate(m);Java基础知识instanceof运算符publicclassEmployeepublicclassManagerextendsEmployeepublicclassEngineerextendsEmp

温馨提示

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

评论

0/150

提交评论