欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Java学习提高笔记材料(修订版).doc

    • 资源ID:809178       资源大小:178KB        全文页数:32页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java学习提高笔记材料(修订版).doc

    ''JAVAJAVA 的面向对象编程的面向对象编程-课堂笔记课堂笔记面向对象主要针对面向过程。面向对象主要针对面向过程。 面向过程的基本单元是函数。面向过程的基本单元是函数。什么是对象:什么是对象:EVERYTHING IS OBJECT(万物皆对象)(万物皆对象)所有的事物都有两个方面:所有的事物都有两个方面: 有什么(属性):用来描述对象。有什么(属性):用来描述对象。 能够做什么(方法):告诉外界对象有那些功能。能够做什么(方法):告诉外界对象有那些功能。 后者以前者为基础。后者以前者为基础。 大的对象的属性也可以是一个对象。大的对象的属性也可以是一个对象。为什么要使用面向对象:为什么要使用面向对象: 首先,面向对象符合人类看待事物的一般规律。首先,面向对象符合人类看待事物的一般规律。 对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。 方法的定义非常重要。方法有参数,也可能有返回值。方法的定义非常重要。方法有参数,也可能有返回值。注意区分:对象(本身)注意区分:对象(本身) 、对象的实现者、对象的调用者。、对象的实现者、对象的调用者。 分析对象主要从方法开始。分析对象主要从方法开始。 我们通过类来看待对象,类是对象的抽象。我们通过类来看待对象,类是对象的抽象。其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。 对象之间的耦合性一定要低(比如不同硬盘和不同主板之间的关系)对象之间的耦合性一定要低(比如不同硬盘和不同主板之间的关系) 。这样才能使每个对象本身做成最。这样才能使每个对象本身做成最 好的。好的。对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。 实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚) 。 可复用性是可复用性是 OOP 的基础。的基础。比较面向过程的思想和面向对象的思想:比较面向过程的思想和面向对象的思想: 面向过程的思想:由过程、步骤、函数组成,以过程为核心;面向过程的思想:由过程、步骤、函数组成,以过程为核心; 面向对象的思想:以对象为中心,先开发类,得到对象,通过对象之间相互通信实现功能。面向对象的思想:以对象为中心,先开发类,得到对象,通过对象之间相互通信实现功能。 面向过程是先有算法,后有数据结构。面向过程是先有算法,后有数据结构。 面向对象是先有数据结构,然后再有算法。面向对象是先有数据结构,然后再有算法。在用面向对象思想开发的过程中,可以复用对象就进行复用,如无法进行复用则开发新的对象。在用面向对象思想开发的过程中,可以复用对象就进行复用,如无法进行复用则开发新的对象。 开发过程是用对个简单的对象的多个简单的方法,来实现复杂的功能开发过程是用对个简单的对象的多个简单的方法,来实现复杂的功能 。 从语法上来看,一个类是一个新的数据类型。从语法上来看,一个类是一个新的数据类型。 在面向对象编程中,除了简单数据类型,就是对象类型。在面向对象编程中,除了简单数据类型,就是对象类型。 定义类的格式:定义类的格式: class Student代码代码 诚信、创新、开放、合作诚信、创新、开放、合作'' 注意类名中单词的首字母大写。注意类名中单词的首字母大写。 实例变量:定义在类中但在任何方法之外。实例变量:定义在类中但在任何方法之外。 (New 出来的均有初值)出来的均有初值) 局部变量:定义在方法之中的变量。局部变量:定义在方法之中的变量。 局部变量要先赋值,再进行运算,而实例变量均已经赋初值。这是局部变量和实例变量的一大区别。局部变量要先赋值,再进行运算,而实例变量均已经赋初值。这是局部变量和实例变量的一大区别。 实例变量的对象赋值为实例变量的对象赋值为 null。 局部变量不允许范围内定义两个同名变量。实例变量的作用域在本类中完全有效,当被其他的类调用的局部变量不允许范围内定义两个同名变量。实例变量的作用域在本类中完全有效,当被其他的类调用的 时候也可能有效。时候也可能有效。 实例变量和局部变量允许命名冲突。实例变量和局部变量允许命名冲突。书写方法的格式:书写方法的格式: 修饰符修饰符 返回值返回值 方法名方法名 调用过程中调用过程中 方法体方法体 可能出现的例外可能出现的例外public int/void addNumber(参数参数) throw Excepion 例:例: public int addNumber(int a,int b) 注:方法名中的参数注:方法名中的参数 int a,int b 为局部变量为局部变量类方法中的一类特殊方法:构造方法。类方法中的一类特殊方法:构造方法。 构造方法是当用类生成对象时,系统在生成对象的过程中利用的方法。构造方法是当用类生成对象时,系统在生成对象的过程中利用的方法。 注意:构造方法在生成对象的时候会被调用,但并不是构造方法生成了对象。注意:构造方法在生成对象的时候会被调用,但并不是构造方法生成了对象。 构造方法没有返回值。格式为:构造方法没有返回值。格式为:public 方法名。方法名。 构造方法的方法名与类名相同。构造方法的方法名与类名相同。 构造方法是在对象生成的过程中自动调用,不可能利用指令去调用。构造方法是在对象生成的过程中自动调用,不可能利用指令去调用。 在一个对象的生成周期中构造方法只用一次,一旦这个对象生成,那么这个构造方法失效。在一个对象的生成周期中构造方法只用一次,一旦这个对象生成,那么这个构造方法失效。用类来生成对象的语句:用类来生成对象的语句: Student s=new Student()。 第一个第一个 Student 表示这是用表示这是用 Student 类进行定义。类进行定义。 “Student()”表示调用一个无参数的构造方法。表示调用一个无参数的构造方法。 如果如果()中有参数,则系统构造对象的过程中调用有参的方法。中有参数,则系统构造对象的过程中调用有参的方法。 此时此时 S 称为一个对象变量。称为一个对象变量。Student s 的存储区域存放的是地址:一个对象在硬盘上占有一个连续地址,首地址赋予的存储区域存放的是地址:一个对象在硬盘上占有一个连续地址,首地址赋予 s 空间。空间。 S 称为对象称为对象 Student 的引用。的引用。 注意:在对象变量中存放的是引用(地址)注意:在对象变量中存放的是引用(地址) ;在简单变量中存放的是数值。;在简单变量中存放的是数值。可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法:可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法: public student(string name,int a) public student(int a,string name) 为两个不同的构造方法。为两个不同的构造方法。 如果我们未给系统提供一个构造方法,那么系统会自动提供一个为空的构造方法。如果我们未给系统提供一个构造方法,那么系统会自动提供一个为空的构造方法。 练习:写一个类,定义一个对象,定义两个构造方法:一个有参,一个无参。练习:写一个类,定义一个对象,定义两个构造方法:一个有参,一个无参。 (编写一个程序验证对象的传递的值为地址)(编写一个程序验证对象的传递的值为地址) 注意下面这种形式:注意下面这种形式: static void changename(student stu)stu.setName “LUCY”'' 注意生成新的对象与旧对象指向无关,生成新对象生命消亡与旧对象无关。注意生成新的对象与旧对象指向无关,生成新对象生命消亡与旧对象无关。面向对象方法的重载(面向对象方法的重载(overloading)和覆盖()和覆盖(overriding) 。 在有些在有些 JAVA 书籍中将书籍中将 overriding 称为重载,称为重载,overloading 称为过载。称为过载。 Overloading 在一个类中可以定义多个同名方法,各个方法的在一个类中可以定义多个同名方法,各个方法的参数表参数表一定不同。但修饰词可能相同,一定不同。但修饰词可能相同, 返回值也可能相同。返回值也可能相同。 在程序的编译过程中根据变量类型来找相应的方法。因此也有人认为在程序的编译过程中根据变量类型来找相应的方法。因此也有人认为 overloading 是编译时的多态,是编译时的多态, 以后我们还会学到运行时多态。以后我们还会学到运行时多态。为什么会存在为什么会存在 overloading 技术呢?作为应对方法的细节。技术呢?作为应对方法的细节。 利用类型的差异来影响对方法的调用。利用类型的差异来影响对方法的调用。 吃()可以分为吃肉,吃菜,吃药,在一个类中可以定义多个吃方法。吃()可以分为吃肉,吃菜,吃药,在一个类中可以定义多个吃方法。构造方法也可以实现构造方法也可以实现 overloading。例:。例: public void teach(); public void teach(int a); public void teach(String a)为三种不同的方法。为三种不同的方法。Overloading 方法是从低向高转。方法是从低向高转。Byteshortfloatintlongdouble。在构造方法中,在构造方法中,this 表示本类的其他构造方法:表示本类的其他构造方法: student(); student(string n)this();/表示调用表示调用 student() 如果调用如果调用 student(int a)则为则为 this(int a)。 特别注意特别注意:用:用 this 调用其他构造方法时,调用其他构造方法时,this 必须为第一条语句,然后才是其他语句。必须为第一条语句,然后才是其他语句。This 表示当前对象。表示当前对象。Public void printNum()Int number=40;System.out.println(this.number); 此时打印的是实例变量,而非局部变量,即定义在类中而非方法中的变量。此时打印的是实例变量,而非局部变量,即定义在类中而非方法中的变量。This.number 表示实例变量。表示实例变量。 谁调用谁调用 this.number 那么谁即为当前那么谁即为当前(this)对象的对象的 number 方法。方法。封装:使对象的属性尽可能私有,对象的方法尽可能的公开。用封装:使对象的属性尽可能私有,对象的方法尽可能的公开。用 private 表示此成员属性为该类的私有表示此成员属性为该类的私有 属性。属性。Public 表示该属性(方法)公开;表示该属性(方法)公开; Private 表示该属性(方法)为只有本类内部可以访问(类内部可见)表示该属性(方法)为只有本类内部可以访问(类内部可见) 。 (想用(想用 private 还要用还要用 set 和和 get 方法供其他方法调用,这样可以保证对属性的访问方式统一,并且便于方法供其他方法调用,这样可以保证对属性的访问方式统一,并且便于'' 维护访问权限以及属性数据合法性)维护访问权限以及属性数据合法性) 如果没有特殊情况,属性一定私有,方法该公开的公开。如果没有特殊情况,属性一定私有,方法该公开的公开。 如果不指明谁调用方法,则默认为如果不指明谁调用方法,则默认为 this。 区分实例变量和局部变量时一定要写区分实例变量和局部变量时一定要写 this。 11.29继承:继承: 父类(父类(SuperClass)和)和 子类(子类(SonClass) 。 父类的非私有化属性和方法可以默认继承到子类。父类的非私有化属性和方法可以默认继承到子类。 Class Son extends Father 而如果父类中的私有方法被子类调用的话,则编译报错。而如果父类中的私有方法被子类调用的话,则编译报错。父类的构造方法子类不可以继承,更不存在覆盖的问题。父类的构造方法子类不可以继承,更不存在覆盖的问题。 (非构造方法可以)(非构造方法可以) 如果子类访问父类的构造方法,则在编译的时候提示访问不到该方法。如果子类访问父类的构造方法,则在编译的时候提示访问不到该方法。 JAVA 中不允许多继承,一个类有且只有一个父类(单继承)中不允许多继承,一个类有且只有一个父类(单继承) 。 JAVA 的数据结构为树型结构,而非网状。的数据结构为树型结构,而非网状。 (JAVA 通过接口和内部类实现多继承)通过接口和内部类实现多继承)方法的覆盖(方法的覆盖(overriding) 方法的重载并不一定是在一个类中:子类可以从父类继承一个方法,也可以定义一个同名异参的方法,方法的重载并不一定是在一个类中:子类可以从父类继承一个方法,也可以定义一个同名异参的方法, 也称为也称为 overloading。 当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子类新写的方法覆盖父类的方法,当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子类新写的方法覆盖父类的方法, 称为覆盖。称为覆盖。 (注意返回值类型也必须相同,否则编译出错。(注意返回值类型也必须相同,否则编译出错。 ) 如果方法不同,则成重载。如果方法不同,则成重载。对于方法的修饰词,子类方法要比父类的方法范围更加的宽泛。对于方法的修饰词,子类方法要比父类的方法范围更加的宽泛。 父类为父类为 public,那么子类为,那么子类为 private 则出现错误。则出现错误。 之所以构造方法先运行父类再运行子类是因为构造方法是无法覆盖的。之所以构造方法先运行父类再运行子类是因为构造方法是无法覆盖的。 以下范围依次由严到宽:以下范围依次由严到宽: private :本类访问;:本类访问; default :表示默认,不仅本类访问,而且是同包可见。:表示默认,不仅本类访问,而且是同包可见。 Protected:同包可见:同包可见+不同包的子类可见不同包的子类可见 Public :表示所有的地方均可见。:表示所有的地方均可见。当构造一个对象的时候,系统先构造父类对象,再构造子类对象。当构造一个对象的时候,系统先构造父类对象,再构造子类对象。 构造一个对象的顺序:(注意:构造父类对象的时候也是这几步)构造一个对象的顺序:(注意:构造父类对象的时候也是这几步) 递归地构造父类对象;递归地构造父类对象; 顺序地调用本类成员属性赋初值语句;顺序地调用本类成员属性赋初值语句; 本类的构造方法。本类的构造方法。Super()表示调用父类的构造方法。表示调用父类的构造方法。 Super()也和也和 this 一样必须放在第一行。一样必须放在第一行。 This()用于调用本类的构造方法。用于调用本类的构造方法。 如果没有定义构造方法,那么就会调用父类的无参构造方法,即如果没有定义构造方法,那么就会调用父类的无参构造方法,即 super()。要养成良好的编程习惯:就是要加上默认的父类无参的构造方法。要养成良好的编程习惯:就是要加上默认的父类无参的构造方法。 思考:可是如果我们没有定义无参的构造方法,而在程序中构造了有参的构造方法,那么如果方法中没思考:可是如果我们没有定义无参的构造方法,而在程序中构造了有参的构造方法,那么如果方法中没'' 有参数,那么系统还会调用有参的构造方法么?应该不会。有参数,那么系统还会调用有参的构造方法么?应该不会。多态:多态指的是编译时类型变化,而运行时类型不变。多态:多态指的是编译时类型变化,而运行时类型不变。 多态分两种:多态分两种: 编译时多态:编译时动态重载;编译时多态:编译时动态重载; 运行时多态:指一个对象可以具有多个类型。运行时多态:指一个对象可以具有多个类型。对象是客观的,人对对象的认识是主观的。对象是客观的,人对对象的认识是主观的。 例:例: AnimalAnimal a=newa=new Dog()Dog();查看格式名称;查看格式名称; DogDog d=(Dog)ad=(Dog)a。声明父类来引用子类。声明父类来引用子类。 (思考上面的格式)(思考上面的格式)运行时多态的三原则:(应用时为覆盖)运行时多态的三原则:(应用时为覆盖) 1 1、对象不变;(改变的是主观认识)对象不变;(改变的是主观认识) 2、对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。 在上面的例子中:在上面的例子中:AnimalAnimal a=newa=new Dog()Dog();对象;对象 a a 的编译时类型为的编译时类型为 AnimalAnimal,运行时类型为,运行时类型为 dogdog。 注意:编译时类型一定要为运行时类型的父类(或者同类型)注意:编译时类型一定要为运行时类型的父类(或者同类型) 。 对于语句:对于语句:DogDog d=(Dog)ad=(Dog)a。将。将 d d 强制声明为强制声明为 a a 类型,此时类型,此时 d d 为为 Dog()Dog(),此时,此时 d d 就可以调用运行时类型。就可以调用运行时类型。 注意:注意:a a 和和 d d 指向同一对象。指向同一对象。 3、在程序的运行时,动态类型判定。运行时调用运行时类型,即它调用覆盖后的方法。在程序的运行时,动态类型判定。运行时调用运行时类型,即它调用覆盖后的方法。关系运算符:关系运算符:instanceof a instanceof Animal;(这个式子的结果是一个布尔表达式这个式子的结果是一个布尔表达式) a 为对象变量,为对象变量,Animal 是类名。是类名。 上面语句是判定上面语句是判定 a 是否可以贴是否可以贴 Animal 标签。如果可以贴则返回标签。如果可以贴则返回 true,否则返回,否则返回 false。 在上面的题目中:在上面的题目中: a instanceof Animal 返回返回 True,a instanceof Dog 也返回也返回 True, instanceof 用于判定是否将前面的对象变量赋值后边的类名。用于判定是否将前面的对象变量赋值后边的类名。 Instanceof 一般用于在强制类型转换之前判定变量是否可以强制转换。一般用于在强制类型转换之前判定变量是否可以强制转换。如果如果 Animal a=new Animal(); Dog d=Dog()a; 此时编译无误,但运行则会报错。此时编译无误,但运行则会报错。Animal a=new Dog()相当于下面语句的功能:相当于下面语句的功能: Animal a=getAnimal(); Public static Animal.getAnimal; Return new Dog();封装、继承、多态为面向对象的三大基石(特性)封装、继承、多态为面向对象的三大基石(特性) 。运行时的动态类型判定针对的是方法。运行程序访问的属性仍为编译时属性。运行时的动态类型判定针对的是方法。运行程序访问的属性仍为编译时属性。Overloading 针对的是编译时类型,不存在运行时的多态。针对的是编译时类型,不存在运行时的多态。习题:建立一个习题:建立一个 shape 类,有类,有 circle 和和 rect 子类。子类。'' Shape 类有类有 zhouchang()和和 area()两种方法。两种方法。 (正方形)(正方形)squ 为为 rect 子类,子类,rect 有有 cha()用于比较长宽的差。用于比较长宽的差。覆盖时考虑子类的覆盖时考虑子类的 private 及父类的及父类的 public(考虑多态)(考虑多态) ,之所以这样是避免调用,之所以这样是避免调用 A 时出现实际调用时出现实际调用 B 的情况。而出现错误。的情况。而出现错误。 11.29 下午讲的是教程上的下午讲的是教程上的 Module6 Module6-7 包括:面向对象高级、内部类、集合、反射(暂时不讲)包括:面向对象高级、内部类、集合、反射(暂时不讲) 、例外。、例外。 面向对象高级、集合和例外都是面向对象的核心内容。面向对象高级、集合和例外都是面向对象的核心内容。面向对象高级:面向对象高级: 修饰符:修饰符:static:可修饰变量(属性)可修饰变量(属性) ;可修饰方法;可修饰方法;可修饰代码块。可修饰代码块。Static int data 语句说明语句说明 data 为类变量,为一个类的共享变量,属于整个类。为类变量,为一个类的共享变量,属于整个类。 Int data 为实例变量。为实例变量。 例:例: static int data; m1.data=0; m1.data+的结果为的结果为 1,此时此时 m2.data 的结果也为的结果也为 1。 Static 定义的是一块为整个类共有的一块存储区域,其发生变化时访问到的数据都时经过变化的。定义的是一块为整个类共有的一块存储区域,其发生变化时访问到的数据都时经过变化的。 其变量可以通过类名去访问:类名其变量可以通过类名去访问:类名.变量名。与通过访问对象的编译时类型访问类变量为等价的。变量名。与通过访问对象的编译时类型访问类变量为等价的。Public static void printData() 表明此类方法为类方法(静态方法)表明此类方法为类方法(静态方法) 静态方法不需要有对象,可以使用类名调用。静态方法不需要有对象,可以使用类名调用。 静态方法中不允许访问类的非静态成员,包括成员的变量和方法,因为此时是通过类调用的,没有对象静态方法中不允许访问类的非静态成员,包括成员的变量和方法,因为此时是通过类调用的,没有对象 的概念。的概念。This.data 是不可用的。是不可用的。一般情况下,主方法是静态方法,所以可调用静态方法,主方法为静态方法是因为它是整个软件系统的一般情况下,主方法是静态方法,所以可调用静态方法,主方法为静态方法是因为它是整个软件系统的 入口,而进入入口时系统中没有任何对象,只能使用类调用。入口,而进入入口时系统中没有任何对象,只能使用类调用。覆盖不适用于静态方法。覆盖不适用于静态方法。 静态方法不可被覆盖。静态方法不可被覆盖。 (允许在子类中定义同名静态方法,但是没有多态,严格的讲,方法间没有多态(允许在子类中定义同名静态方法,但是没有多态,严格的讲,方法间没有多态 就不能称为覆盖)就不能称为覆盖) 当当 static 修饰代码块时(注:此代码块要在此类的任何一个方法之外)修饰代码块时(注:此代码块要在此类的任何一个方法之外) ,那么这个代码块在代码被装载,那么这个代码块在代码被装载 进虚拟机生成对象的时候可被装载一次,以后再也不执行了。进虚拟机生成对象的时候可被装载一次,以后再也不执行了。 一般静态代码块被用来初始化静态成员。一般静态代码块被用来初始化静态成员。Static 通常用于通常用于 Singleton 模式开发:模式开发: Singleton 是一种设计模式,高于语法,可以保证一个类在整个系统中仅有一个对象。是一种设计模式,高于语法,可以保证一个类在整个系统中仅有一个对象。11.30final 可以修饰类、属性、方法。可以修饰类、属性、方法。当用当用 final 修饰类的时候,此类不可被继承,即修饰类的时候,此类不可被继承,即 final 类没有子类。这样可以用类没有子类。这样可以用 final 保证用户调用时动保证用户调用时动'' 作的一致性,可以防止子类覆盖情况的发生。作的一致性,可以防止子类覆盖情况的发生。当利用当利用 final 修饰一个属性(变量)的时候,此时的属性成为常量。修饰一个属性(变量)的时候,此时的属性成为常量。 JAVA 利用利用 final 定义常量(注意在定义常量(注意在 JAVA 命名规范中常量需要全部字母都大写):命名规范中常量需要全部字母都大写): Final int AGE=10; 常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的。常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的。Final 可以配合可以配合 static 使用。使用。 ? Static final int age=10;在在 JAVA 中利用中利用 public static final 的组合方式对常量进行标识(固定格式)的组合方式对常量进行标识(固定格式) 。对于在构造方法中利用对于在构造方法中利用 final 进行赋值的时候,此时在构造之前系统设置的默认值相对于构造方法失效。进行赋值的时候,此时在构造之前系统设置的默认值相对于构造方法失效。常量(这里的常量指的是实例常量:即成员变量)赋值:常量(这里的常量指的是实例常量:即成员变量)赋值: 在初始化的时候通过显式声明赋值。在初始化的时候通过显式声明赋值。FinalFinal intint x=3x=3; 在构造的时候赋值。在构造的时候赋值。 局部变量可以随时赋值。局部变量可以随时赋值。利用利用 finalfinal 定义方法:这样的方法为一个不可覆盖的方法。定义方法:这样的方法为一个不可覆盖的方法。 PublicPublic finalfinal voidvoid print()print(); 为了保证方法的一致性(即不被改变)为了保证方法的一致性(即不被改变) ,可将方法用,可将方法用 finalfinal 定义。定义。如果在父类中有如果在父类中有 finalfinal 定义的方法,那么在子类中继承同一个方法。定义的方法,那么在子类中继承同一个方法。如果一个方法前有修饰词如果一个方法前有修饰词 privateprivate 或或 staticstatic,则系统会自动在前面加上,则系统会自动在前面加上 finalfinal。即。即 privateprivate 和和 staticstatic 方法默认均为方法默认均为 finalfinal 方法。方法。注:注:finalfinal 并不涉及继承,继承取决于类的修饰符是否为并不涉及继承,继承取决于类的修饰符是否为 privateprivate、defaultdefault、protectedprotected 还是还是 publicpublic。 也就是说,是否继承取决于这个方法对于子类是否可见。也就是说,是否继承取决于这个方法对于子类是否可见。 Abstract(Abstract(抽象抽象) )可以修饰类、方法可以修饰类、方法 如果将一个类设置为如果将一个类设置为 abstractabstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。,则此类必须被继承使用。此类不可生成对象,必须被继承使用。 AbstractAbstract 可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。 AbstractAbstract 虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。 FinalFinal 和和 abstractabstract 永远不会同时出现。永远不会同时出现。当当 abstractabstract 用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子 类覆盖该方法之后方法才能够生效。类覆盖该方法之后方法才能够生效。注意比较:注意比较: privateprivate voidvoid print()print();此语句表示方法的空实现。;此语句表示方法的空实现。 AbstractAbstract voidvoid print()print(); 此语句表示方法的抽象,无实现。此语句表示方法的抽象,无实现。如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。 反之,如果一个类为抽象类,那么其中可能有非抽象的方法。反之,如果一个类为抽象类,那么其中可能有非抽象的方法。''如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一 个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须 为抽象类,这与此类为非抽象冲突,所以报错。为抽象类,这与此类为非抽象冲突,所以报错。所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。只有将理论被熟练运用在实际的程序设计的过程中之后,才能说理论被完全掌握!只有将理论被熟练运用在实际的程序设计的过程中之后,才能说理论被完全掌握!为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成 abstract 类。如果没有定义抽象的父类,那么编译会出现错误。类。如果没有定义抽象的父类,那么编译会出现错误。Abstract 和和 static 不能放在一起,否则便会出现错误。不能放在一起,否则便会出现错误。 (这是因为(这是因为 static 不可被覆盖,而不可被覆盖,而 abstract 为了为了 生效必须被覆盖。生效必须被覆盖。 )例:(本例已存在例:(本例已存在CODINGabstractTestClass.java 文件中)文件中) public class TestClasspublic static void main(String args) SuperClass sc=new SubClass(); Sc.print(); Abstract class SuperClass Abstract void print(); class SubClass extends SuperClass()void print() System.out.println(“print”); JAVA 的核心概念:接口(的核心概念:接口(interface) 接口与类属于同一层次,实际上,接口是一种特殊的抽象类。接口与类属于同一层次,实际上,接口是一种特殊的抽象类。 如如:interface IA public interface:公开接口:公开接口 与类相似,一个文件只能有一个与类相似,一个文件只能有一个 public 接口,且与文件名相同。接口,且与文件名相同。 在一个文件中不可同时定义一个在一个文件中不可同时定义一个 public 接口和一个接口和一个 public 类。类。一个接口中,所有方法为公开、抽象方法;所有的属性都是公开、静态、常量。一个接口中,所有方法为公开、抽象方法;所有的属性都是公开、静态、常量。一个类实现一个接口的格式:一个类实现一个接口的格式: class IAImple implements IA ;一个类实现接口,相当于它继承一个抽象类。一个类实现接口,相当于它继承一个抽象类。类必须实现接口中的方法,否则其为一抽象类。类必须实现接口中的方法,否则其为一抽象类。 实现中接口和类相同。实现中接口和类相同。''接口中可不写接口中可不写 public,但在子类中实现接口的过程中,但在子类中实现接口的过程中 public 不可省。不可省。 (如果剩去(如果剩去 public 则在编译的时候提示出错:对象无法从接口中实现方法。则在编译的时候提示出错:对象无法从接口中实现方法。 )注:注: 一个类除继承另外一个类,还可以实现接口;一个类除继承另外一个类,还可以实现接口; classclass IAImplIAImpl extendsextends java.util.Arrylistjava.util.Arrylist implementimplement IAIA继承类继承类 实现接口实现接口 这样可以实现变相的多继承。这样可以实现变相的多继承。 一个类只能继承另外一个类,但是它可以继承多个接口,中间用一个类只能继承另外一个类,但是它可以继承多个接口,中间用“, ”隔开。隔开。 ImplementsImplements IA,IBIA,IB 所谓实现一个接口,就是指实现接口中的方法。所谓实现一个接口,就是指实现接口中的方法。 接口和接口之间可以定义继承关系,并且接口之间允许实现多继承。接口和接口之间可以定义继承关系,并且接口之间允许实现多继承。 例:例:interfaceinterface ICIC extendsextends IA,IB;IA,IB; 接口也可以用于定义对象接口也可以用于定义对象 IAIA I=newI=new IAImpl();IAImpl(); 实现的类从父类和接口继承的都可做运行时类型。实现的类从父类和接口继承的都可做运行时类型。 IAImpleIAImple extendsextends A A implementimplement IA,IBIA,IB IBIB I=newI=new IAImple();IAImple(); I I instanceinstance ofof IAImple;IAImple; I I instanceinstance ofof A;A; I I instanceinstance ofof IA;IA; I I instanceinstance ofof IB;IB; 返回的结果均为返回的结果均为 true.true.接口和多态都为接口和多态都为 JAVAJAVA 技术的核心。技术的核心。接口往往被我们定义成一类接口往往被我们定义成一类 XXXX 的东西。的东西。 接口实际上是定义一个规范、标准。接口实际上是定义一个规范、标准。 通过接口可以实现不同层次、不同体系对象的共同属性;通过接口可以实现不同层次、不同体系对象的共同属性; 通过接口实现通过接口实现 writewrite onceonce asas anywhere.anywhere. 以以 JAVAJAVA 数据库连接为例子:数据库连接为例子:JDBCJDBC 制定标准;数据厂商实现标准;用户使用标准。制定标准;数据厂商实现标准;用户使用标准。 接口通常用来屏蔽底层的差异。接口通常用来屏蔽底层的差异。 接口也因为上述原因被用来保持架构的稳定性。接口也因为上述原因被用来保持架构的稳定性。JAVA 中有一个特殊的类:中有一个特殊的类: Object。它是。它是 JAVA 体系中所有类的父类(直接父类或者间接父类)体系中所有类的父类(直接父类或者间接父类) 。此类中的方法可以使所的类均继承。此类中的方法可以使所的类均继承。以下介绍的三种方法属于以下介绍的三种方法属于 Object: (1) finalize 方法:当一个对象

    注意事项

    本文(Java学习提高笔记材料(修订版).doc)为本站会员(一***)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开