1、参悟参悟JavaJava根底根底中心技术中心技术讲师:宋红康讲师:宋红康新浪微博:尚硅谷新浪微博:尚硅谷--宋红康宋红康一、一、WhyisJava在各领域中的运用在各领域中的运用从Java的运用领域来分,Java言语的运用方向主要表如今以下几个方面:企业级运用:主要指复杂的大企业的软件系统、各种类型的网站。Java的平安机制以及它的跨平台的优势,使它在分布式系统领域开发中有广泛运用。运用领域包括金融、电信、交通、电子商务等。Android平台运用:Android运用程序运用Java言语编写。Android开发程度的上下很大程度上取决于Java言语中心才干能否扎实。挪动领域运用
3、术的中心。Java舍弃了C言语中容易引起错误的指针以援用取代、运算符重载operatoroverloading、多重承继以接口取代等特性,添加了渣滓回收器功能用于回收不再被援用的对象所占据的内存空间。JDK1.5又引入了泛型编程GenericProgramming、类型平安的枚举、不定长参数和自动装/拆箱java言语的主要特性言语的主要特性Java言语是易学的。言语是易学的。Java言语的语法与言语的语法与C言语和言语和C+言语很接近,使言语很接近,使得大多数程序员很容易学习和运用得大多数程序员很容易学习和运用Java。Java言语是强迫面向对象的。言语是强迫面向对象的。Java言语提供类
4、、接口和承继等原语,言语提供类、接口和承继等原语,为了简单起见,只支持类之间的单承继,但支持接口之间的多承继,为了简单起见,只支持类之间的单承继,但支持接口之间的多承继,并支持类与接口之间的实现机制关键字为并支持类与接口之间的实现机制关键字为implements。Java言语是分布式的。言语是分布式的。Java言语支持言语支持Internet运用的开发,在根运用的开发,在根本的本的Java运用编程接口中有一个网络运用编程接口运用编程接口中有一个网络运用编程接口javanet,它提供了用于网络运用编程的类库,包括它提供了用于网络运用编程的类库,包括URL、URLConnection、Socke
5、t、ServerSocket等。等。Java的的RMI远程方法激活机制也远程方法激活机制也是开发分布式运用的重要手段。是开发分布式运用的重要手段。Java言语是强壮的。言语是强壮的。Java的强类型机制、异常处置、渣滓的自动搜的强类型机制、异常处置、渣滓的自动搜集等是集等是Java程序强壮性的重要保证。对指针的丢弃是程序强壮性的重要保证。对指针的丢弃是Java的明智选的明智选择。择。java言语的主要特性言语的主要特性Java言语是平安的。言语是平安的。Java通常被用在网络环境中,为此,通常被用在网络环境中,为此,Java提供提供了一个平安机制以防恶意代码的攻击。如:平安防备机制类了一个平安
6、机制以防恶意代码的攻击。如:平安防备机制类ClassLoader,如分配不同的名字空间以防替代本地的同名类、,如分配不同的名字空间以防替代本地的同名类、字节代码检查。字节代码检查。Java言语是体系构造中立的。言语是体系构造中立的。Java程序后缀为程序后缀为java的文件在的文件在Java平台上被编译为体系构造中立的字节码格式后缀为平台上被编译为体系构造中立的字节码格式后缀为class的文的文件,然后可以在实现这个件,然后可以在实现这个Java平台的任何系统中运转。平台的任何系统中运转。Java言语是解释型的。如前所述,言语是解释型的。如前所述,Java程序在程序在Java平台上被编译为平台
7、上被编译为字节码格式,然后可以在实现这个字节码格式,然后可以在实现这个Java平台的任何系统的解释器中运平台的任何系统的解释器中运转。转。Java是性能略高的。与那些解释型的高级脚本言语相比,是性能略高的。与那些解释型的高级脚本言语相比,Java的性的性能还是较优的。能还是较优的。Java言语是原生支持多线程的。在言语是原生支持多线程的。在Java言语中,线程是一种特殊的言语中,线程是一种特殊的对象,它必需由对象,它必需由Thread类或其子孙类来创建。类或其子孙类来创建。2.从从java言语的市场需求来看言语的市场需求来看2021年年2月月TIOBE编程言语排行榜单编程言语排行榜单2.从
8、从java言语的市场需求来看言语的市场需求来看2021年年2月月TIOBE编程言语排行榜单编程言语排行榜单二、二、如何对待如何对待java根底?根底?如何了解面向对象思想?如何了解面向对象思想?Java根底根底l深化讲授java言语的中心内容:l涵盖java的根本语法构造、java的面向对象特征、java集合框架体系、java泛型、异常处置、java注释、java的io流体系、java多线程编程、java网络通讯编程和java反射机制;l覆盖了java.lang、java.util、java.text、java.io和java.nio、java.sql包下绝
9、大部分类和接口。l全面引见java7的二进制整数、菱形语法、加强switch语句、多异常捕获、自动封锁资源的try语句、nio.2、aio等新特性。Java根底知识图解根底知识图解JAVA开展历程JAVA环境搭建根底程序设计数据类型流程控制运算符数组面向对象编程类和对象属性方法设计方式接口三大特性运用程序开发JDBC集合异常处置类库多线程IO反射网络Oracle/MySQLJAVA新特性Eclipse运用泛型枚举装箱/拆箱可变参数Annotation何谓何谓“面向对象的编程思想?面向对象的编程思想?顿悟?OR渐悟?例子:人把大象装冰箱面向过程面向过程1.翻开冰箱2.把大象装进冰箱
10、3.把冰箱门关住面向对象面向对象人冰箱大象人翻开冰箱冰箱.开门;操作大象大象.进入冰箱;封锁冰箱冰箱.关门;冰箱开门关门大象进入冰箱学习面向对象内容的三条主线学习面向对象内容的三条主线1.java类及类的成员2.面向对象的三大特征3.其它关键字1.java类及类的成员类及类的成员l现实世界万事万物是由分子、原子构成的。同理,Java代码世界是由诸多个不同功能的类构成的。l面向对象程序设计的重点是类的设计l现实世界中的分子、原子又是由什么构成的呢?原子核、电子!那么,Java中用类class来描画事物也是如此l属性:对应类中的成员变量l行为:对应类中的成员方法
11、Field=属性属性=成员变量,成员变量,Method=成员方法成员方法=函函数数1.java类及类的成员类及类的成员类的成员构成类的成员构成version1.0语法格式:语法格式:定义类的属性:修饰符定义类的属性:修饰符类型类型属性名属性名=初值初值;定义类的方法:修饰符定义类的方法:修饰符前往值类型前往值类型方法名方法名参数列表参数列表方法体语句;方法体语句;类的成员构成类的成员构成verson2.01.java类及类的成员类及类的成员java类的实例化,即创建类的对象类的实例化,即创建类的对象l类class和对象object是面向对象的中心
12、概念l完成工程需求时:l先去找具有所需功能的对象来用l假设该对象不存在,那么创建一个具有所需功能的对象l这样简化开发并提高复用如何运用java类?可以了解为:类=汽车设计图;对象=实真实在的汽车类的实例化:Carc=newCar;类和对象的关系类和对象的关系面向对象思想面向对象思想“落地法那么落地法那么一一运用运用new+构造器创建一个新的对象;构造器创建一个新的对象;运用运用“对象名对象名.对象成员的方式访问对象成员包括属性对象成员的方式访问对象成员包括属性和方法;和方法;假设创建了一个类的多个对象,对于类中定义的属性,每假设创建了一个类的多个对象,对
13、于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。个对象都拥有各自的一套副本,且互不干扰。在一个类中:类中的方法可以直接访问类中的成员变量或在一个类中:类中的方法可以直接访问类中的成员变量或其它方法。例外:其它方法。例外:static方法访问非方法访问非static,编译不经过。,编译不经过。Java类类数据1数据n方法1方法n属性属性方法方法Carwheelsmovestop数据属性数据属性方法方法类名类名c2:Carwheels=6movestopc1:Carwheels=4movestopnewCarnewCar举例举例Java中类与对象举例中类与对象举例练习:创建
14、练习:创建Java自定义类自定义类步骤:步骤:定义类思索修饰符、类名定义类思索修饰符、类名编写类的属性思索修饰符、属性类型、属性名、初编写类的属性思索修饰符、属性类型、属性名、初始化值始化值编写类的方法思索修饰符、前往值类型、方法名、编写类的方法思索修饰符、前往值类型、方法名、形参等形参等提示:提示:定义定义Person、Animal、Bird、Zoo等类,加以领会。等类,加以领会。2.面向对象的三大特征面向对象的三大特征封装Encapsulation承继Inheritance多态Polymorphism运用者对类内部定义的属性对象的成员变量的直接操作会导致数据的错误、混乱或平安性问运用
15、者对类内部定义的属性对象的成员变量的直接操作会导致数据的错误、混乱或平安性问题。题。publicclassAnimalpublicintlegs;publicvoideatSystem.out.println“Eating.;publicvoidmoveSystem.out.println“Moving.;publicclassZoopublicstaticvoidmainStringargsAnimalxb=newAnimal;xb.legs=4;System.out.printlnxb.legs;xb.eat;xb.move;问题:问题:
17、intlegs;/将属性将属性legs定义为定义为private,只能被,只能被Animal类内部访问类内部访问publicvoidsetLegsinti/在这里定义方法在这里定义方法eat和和moveifi!=0&i!=2&i!=4System.out.printlnWrongnumberoflegs!;return;legs=i;publicintgetLegsreturnlegs;publicclassZoopublicstaticvoidmainStringargsAnimalxb=newAnim
18、al;xb.setLegs4;/xb.setLegs-1000;xb.legs=-1000;/非法非法System.out.printlnxb.getLegs;Java权限修饰符public、protected、private置于类的成员定义前,用来限定对象对该类成员的访问权限。四种访问权限修饰符四种访问权限修饰符修饰符修饰符类内部类内部同一个包同一个包子类子类任何地方任何地方privateYes缺省YesYesprotectedYesYesYespublicYesYesYesYes对于class的权限修饰只可以用public和default缺省。public类可以在恣意地方被访问。d
19、efault类只可以被同一个包内部的类访问。privatedefaultprotectedpublic相应的调用者2.2面向对象的特征二:承继性面向对象的特征二:承继性一样的代码特有的代码特有的代码特有的代码特有的代码学生类教师类工人类农民类人类经过“承继实现承继的思想承继的思想教师类学生类工人类兽医类人类承继extendsl承继的思想承继的思想l多个类中存在一样属性和行为时,将这些内容抽取多个类中存在一样属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性到单独一个类中,那么多个类无需再定义这些属性和行为,只需承继那个类即可。和行为,只需承继那个类即可。l此处的
20、多个类称为子类,单独的这个类称为父类此处的多个类称为子类,单独的这个类称为父类基类或超类。可以了解为基类或超类。可以了解为:“子类子类isa父类父类l类承继语法规那么类承继语法规那么:lclassSubclassextendsSuperclass面向对象思想面向对象思想“落地法那么落地法那么三三l经过承继,简化Student类的定义:publicclassPersonpublicStringname;publicintage;publicDatebirthDate;publicStringgetInfo.publicclassStudent
21、extendsPersonpublicStringschool;/Student类承继了父类Person的一切属性和方法,并添加了一个属性school。Person中的属性和方法,Student都可以利用。PersonPerson+name:String+age:int+birthDate:Date+getInfo:StringStudentStudent+school:String2.2面向对象的特征二:承继性面向对象的特征二:承继性l子类承继了父类,就承继了父类的方法和属性。l在子类中,可以运用父类中定义的方法和属性,也可以创建新的数据和方法。l在J
22、ava中,承继的关键字用的是“extends,即子类不是父类的子集,而是对父类的“扩展。关于承继的规那么:关于承继的规那么:子类不能直接访问父类中私有的子类不能直接访问父类中私有的private的成员变量和方法。的成员变量和方法。2.2面向对象的特征二:承继性面向对象的特征二:承继性承继举例承继举例Person+name:String+age:int+birthDate:Date+getInfo:StringStudent+school:StringSoldierOfficerGraduate+major:String+register:voidsupercl
23、asssubclasssubsubclasslJava只支持单承继,不允许多重承继l一个子类只能有一个父类l一个父类可以派生出多个子类lclassSubDemoextendsDemo/oklclassSubDemoextendsDemo1,Demo2./error多重承继多重承继多层承继多层承继2.2面向对象的特征二:承继性面向对象的特征二:承继性练习练习1.1定义一个ManKind类,包括成员变量intsex和intsalary;方法voidmanOrWorman:根据sex的值显示“mansex=1或者“womensex=0;方法voidemployee
24、d:根据salary的值显示“nojobsalary=0或者“jobsalary!=0。2定义类Kids承继ManKind,并包括成员变量intyearsOld;方法printAge打印yearsOld的值。3在Kids类的main方法中实例化Kids的对象someKid,用该对象访问其父类的成员变量及方法。2.3面向对象的特征三:多态性面向对象的特征三:多态性l多态性,是面向对象中最重要的概念,在java中有两种表达:l方法的重载overload和重写overwrite。l对象的多态性:父类的援用指向子类对象实体l可以直接运用在笼统类和接口上2.3面向对象的特征三:多
25、态性多态思想的运用实例多态思想的运用实例Connection3ConnectionConnection2Connection1l对象的多态lPersonp=newStudent;lObjecto=newPerson;/Object类型的变量o,指向Person类型的对象lo=newStudent;/Object类型的变量o,指向Student类型的对象l虚拟方法调用多态情况下lPersone=newStudent;le.getInfo;/调用Student类的getInfo方法面向对象思想面向对象思想“落地法那么落地法那么四四编译时e为Person
26、类型,而方法的调用是在运转时确定的,所以调用的是Student类的getInfo方法。动态绑定较高级的根本数据类型较低级的根本数据类型自动类型转化强迫类型转化父类如:Person子类如:Student向上转型向下转型运用instanceof进展判别3.其它关键字其它关键字thissuperstaticfinalabstractinterfacel在java中,this关键字比较难了解,它的作用和其词义很接近。l它在方法内部运用,即这个方法所属对象的援用;l它在构造器内部运用,表示该构造器正在初始化的对象。lthis表示当前对象,可以调用类的属性、方法和构l造器l什么时
27、候运用this关键字呢?l当在方法内需求用到调用该方法的对象时,就用this。关键字关键字thisthis是什么?是什么?l运用运用this,调用属性、方法,调用属性、方法classPerson/定义Person类privateStringname;privateintage;publicPersonStringname,int=name;this.age=age;publicvoidgetInfoSystem.out.println姓名:+name;this.speak;publicvoidspeakSyste
28、m.out.println“年龄:+this.age;1.当形参与成员变量重名时,假设在方法内部需求运用成员变量,必需添加this来阐明该变量时类成员2.在恣意方法内,假设运用当前类的成员变量或成员方法可以在其前面添加this,加强程序的阅读性classPerson/定义Person类privateStringname;privateintage;publicPerson/无参构造System.out.println新对象实例化;publicPersonStringnamethis;/调用本类中的无参构造方法=name;publi
29、cPersonStringname,intagethisname;/调用有一个参数的构造方法this.age=age;publicStringgetInforeturn姓名:+name+,年龄:+age;l运用运用this调用本类的构造器调用本类的构造器3.this可以作为一个类中,构造方法相互调用的特殊格式关键字关键字superl在Java类中运用super来调用父类中的指定操作:lsuper可用于访问父类中定义的属性lsuper可用于调用父类中定义的成员方法lsuper可用于在子类构造方法中调用父类的构造器l留意:l尤其当子父类呈现同名成
30、员时,可以用super进展区分lsuper的追溯不只限于直接父类lsuper和this的用法相像,this代表本类对象的援用,super代表父类的内存空间的标识关键字关键字super举例举例classPersonprotectedStringname=张三;protectedintage;publicStringgetInforeturnName:+name+nage:+age;classStudentextendsPersonprotectedStringname=李四;privateStringschool=NewOrien
31、tal;publicStringgetSchoolreturnschool;publicStringgetInforeturnsuper.getInfo+nschool:+school;publicclassTestStudentpublicstaticvoidmainStringargsStudentst=newStudent;System.out.printlnst.getInfo;当我们编写一个类时,其实就是在描画其对象的属性和行为,而并没有产生本质上的对象,只需经过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外
32、部调用。我们有时候希望无论能否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只需一份,例如一切的中国人都有个国家称号,每一个中国人都共享这个国家称号,不用在每一个中国人的实例对象中都单独分配一个用于代表国家称号的变量。关键字关键字static关键字关键字staticlclassCirclelprivatedoubleradius;lpublicCircledoubleradiusthis.radius=radius;lpublicdoublefindAreareturnMath.PI*radius*radius
33、;l创建两个Circle对象lCirclec1=newCircle2.0;/c1.radius=2.0lCirclec2=newCircle3.0;/c2.radius=3.0lCircle类中的变量radius是一个实例变量instancevariable,它属于类的每一个对象,不能被同一个类的不同对象所共享。l上例中c1的radius独立于c2的radius,存储在不同的空间。c1中的radius变化不会影响c2的radius,反之亦然。假想象让一个类的一切实例共享数据,就用类变量!假想象让一个类的一切实例共享数据,就用类变量!类属性、类方法的设计思想类属性、类方法的设
35、cdoublefindAreareturnMath.PI*radius*radius;publicvoiddisplaySystem.out.printlnname:+name+radius:+radius;publicclassTestStaticpublicstaticvoidmainStringargsCirclec1=newCircle2.0;Circlec2=newCircle3.0;c1.display;c2.display;栈堆静态域c1:c2:radius:2.0name:radius:3.0name:name:圆关键字关键字
39、被承继的,笼统类的子类必需重写父类的笼统方法,并提供方法体。假设没有重写全部的笼统方法,仍为笼统类。l不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法。笼统类举例笼统类举例abstractclassAabstractvoidm1;publicvoidm2System.out.printlnA类中定义的m2方法;classBextendsAvoidm1System.out.printlnB类中定义的m1方法;publicclassTestpublicstaticvoidmainStringargsAa=newB;a.m1;a.m2;关键字关键字interface接接口口l有时必需从几个类中派生出一个子类,承继它们一切的属性和方法。但是,Java不支持多重承继。有了接口,就可以得到多重承继的效果。l接口interface是笼统方法和常量值的定义的集合。l从本质上讲,接口是一种特殊的笼统类,这种笼统类中只包含常量和方法的定义,而没有变量和方法的实现。l实现接口类:lclassSubClassimplementsInterfaceA运发动运发动笼统类笼统类学生学生笼统类笼统类篮球运篮球运发动发动大学生大学生跨栏运跨栏运发动发动中学生中学生学