Java学习笔记(必看经典).pdf

所需积分/C币:9 2017-10-19 22:50:28 738KB PDF

针对初学者,一些笔记整理,Java的知识就是这 样积少成多啊
在一个类中可以定义多个同名方法,各个方法的参数表一定不同。但修饰词可能相同, 返回值也可能相同。 在程序的编详过程中根据变量类型来找相应的方法。因此也有人认为 是编译时的多态, 以后我们还会学到运行时多态。 为什么会存在 技术呢?作为应对方法的细节 利用类型的差异来影响对方法的调用。 吃()可以分为吃肉,吃菜,吃药,在一个类中可以定义多个吃方法。 构造方法也可以实现 例: 为三种不同的方法。 方法是从低向高转。 在构造方法中,表示本类的其他构造方法: 表示调用 如果调用 则为 特别注意:用调用其他构造方法时,必须为第一条语句,然后才是其他语句。 表示当前对象。 此时打印的是实例变量,而非局部变量,即定义在类中而非方法中的变量。 表示实例变量 谁调用 那么谁即为当前对象的 方法。 封装:使对象的属性尽可能私有,对象的方法尽可能的公开。用 表示此成员属性为该类的私有 属性。 表示该属性(方法)公开; 表示该属性(方法)为只有本类内部可以访问(类内部可见)。 (想用 还要用和方法供其他方法调用,这样可以保证对属性的访问方式统一,并且便于 维护访问权限以及属性数据合法性) 如果没有特殊情况,属性一定私有,方法该公开的公开。 如果不指明谁调用方法,则默认为 区分实例变量和局部变量时一定要写 继承: 达内学习笔记 父类( )和子类( 父类的非私有化属性和方法可以默认继承到子类。 而如果父类中的私有方法被子类调用的话,则编译报错。 父类的构造方法子类不可以继承,更不存在覆盖的问题。(非构造方法可以) 如果子类访问父类的构造方法,则在编泽的时候提示访问不到该方法。 中不允许多继承,一个类有且只有一个父类(单继承)。 的数据结构为树型结构,而非网状。(通过接口和内部类实现多继承) 方法的覆盖( 方法的重载并不一定是在一个类中:子类可以从父类继承一个方法,也可以定义一个同名异参的方法, 也称为 当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子类新写的方法覆盖父类的方法, 称为覆盖。(注意返回值类型也必须相同,否则编译出错。) 如果方法不同,则成重载 对于方法的修饰词,子类方法要比父类的方法范围更加的宽泛。 父类为 ,那么子类为 则出现错误。 之所以构造方法先运行父类再运行子类是因为构造方法是无法覆盖的。 以下范围依次由严到宽: :本类访问; 表示默认,不仅本类访问,而且是同包可见。 :同包可见不同包的子类可见 :表示所有的地方均可见。 当构造一个对象的时候,系统先构造父类对象,再构造子类对象。 构造一个对象的顺序:(注意:构造父类对象的时候也是这几步) ①递归地构造父类对象; ②顺序地调用本类成员属性赋初值语句; ③本类的构造方法。 表示调用父类的构造方法。 也和 样必须放在第一行。 用于调用本类的构造方法 如果没有定义构造方法,那么就会调用父类的无参构造方法,即 要养成良好的编程习惯:就是要加上默认的父类无参的构造方法。 思考:可是如果我们没有定义无参的构造方法,而在程序中构造了有参的构造方法,那么如果方法中没 有参数,那么系统还会调用有参的构造方法么?应该不会。 多态:多态指的是编译时类型变化,而运行时类型不变。 多态分两种: ①编译时多态:编译时动态重载; ②运行时多态:指一个对象可以具有多个类型。 对象是客观的,人对对象的认识是主观的。 例: 达内学习笔记 Animal a= new Dog(;查看格式名称; Dogd=(Dog)a。声明父类来引用子类。 (思考上面的格式) 运行时多态的三原则:(应用时为覆盖) 1、对象不变;(改变的是主观认识) 对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。 在上面的例子中: Animal a= new Dogo;对象a的编译时类型为 Anima1,运行时类型为dog 注意:编译时类型一定要为运行时类型的父类(或者同类型)。 对于语句:Dogd=(Dog)a。将d强制声明为a类型,此时d为DogO,此时d就可以调用运行时类型。 注意:a和d指向同一对象。 在程序的运行时,动态类型判定。运行时调用运行时类型,即它调用覆盖后的方法 关系运算符: 这个式子的结果是一个布尔表达式 为对象变量, 是类名。 上面语句是判定是否可以贴 标签。如果可以贴则返回,否则返回。 在上面的题目中 返回 也返回 用于判定是否将前面的对象变量赋值后边的类名。 一般用于在强制类型转换之前判定变量是否可以强制转换。 如果 此时编译无误,但运行则会报错。 相当于下面语句的功能 封装、继承、多态为面向对象的三大基石(特性)。 运行时的动态类型判定针对的是方法。运行程序访问的属性仍为编译时属性 针对的是编译时类型,不存在运行时的多态 习题:建立一个 类,有 和子类。 类有 和 两种方法。 (正方形)为子类,有用于比较长宽的差 覆盖时考虑子类的 及父类的 (考虑多态),之所以这样是避免调用时出现实际调用 的情况。而出现错误。 下午讲的是教程上的 包括:面向对象高级、内部类、集合、反射(暂时不讲)、例外。 面向对象高级、集合和例外都是面向对象的核心内容。 面向对象高级:修饰符 达内学习笔记 ①可修饰变量(属性);②可修饰方法;③可修饰代码块。 语句说明为类变量,为一个类的共享变量,属于整个类。 为实例变量 例 的结果为此时 的结果也为 定义的是一块为整个类共有的一块存储区域,其发生变化时访问到的数据都时经过变化的。 其变量可以通过类名去访问:类名变量名。与通过访问对象的编译时类型访问类变量为等价的。 表明此类方法为类方法(静态方法) 静态方法不需要有对象,可以使用类名调用。 静态方法中不允许访问类的非静态成员,包括成员的变量和方法,因为此时是通过类调用的,没有对象 的概念。 是不可用的。 一般情况下,主方法是静态方法,所以可调用静态方法,主方法为静态方法是因为它是整个软件系统的 入口,而进入入口时系统中没有任何对象,只能使用类调用 覆盖不适用于静态方法。 静态方法不可被覆盖。(允许在子类中定义同名静态方法,但是没有多态,严格的讲,方法间没有多态 就不能称为覆盖) 当修饰代码块时(注:此代码块要在此类的任何一个方法之外),那么这个代码块在代码被装载进 虚拟机生成对象的时候可被装载一次,以后再也不执行了。 般静态代码块被用来初始化静态成员。 通常用于 模式开发 是一种设计模式,高于语法,可以保证一个类在整个系统中仅有一个对象。 可以修饰类、属性、方法。 当用修饰类的时候,此类不可被继承,即类没有子类。这样可以用保证用户调用时动作 的一致性,可以防止子类覆盖情况的发生。 当利用修饰一个属性(变量)的时候,此时的属性成为常量。 利用定义常量(注意在命名规范中常量需要全部字母都大写) 常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的。 可以配合 使用。? 在 中利用 的组合方式对常量进行标识(固定格式) 对于在构造方法中利用进行赋值的时候,此时在构造之前系统设置的默认值相对于构造方法失效 达内学习笔记 常量(这里的常量指的是实例常量:即成员变量)赋值: ①在初始化的时候通过显式声明赋值。 Final int x=3 ②在构造的时候赋值。 局部变量可以随时赋值 利用fina1定义方法:这样的方法为一个不可覆盖的方法 Public final void printout 为了保证方法的一致性(即不被改变),可将方法用fina1定义。 如果在父类中有fina定义的方法,那么在子类中继承同一个方法。 如果一个方法前有修饰词 private或 static,则系统会自动在前面加上 final。即 private和 static 方法默认均为fina1方法。 注:fina并不涉及继承,继承取决于类的修饰符是否为 private、 default、 protected还是 publico 也就是说,是否继承取决于这个方法对于子类是否可见。 Abstract(抽象)可以修饰类、方法 如果将一个类设置为 abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。 Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。 Abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。 Fina1和 abstract永远不会同时出现。 当 abstract用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子 类覆盖该方法之后方法才能够生效 注意比较: private void print(仍;此语句表示方法的空实现。 Abstract void printo;此语句表示方法的抽象,无实现。 如果一个类中有一个抽象方法,那么这个类一定为一个抽象类 反之,如果一个类为抽象类,那么其中可能有非抽象的方法。 如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一 个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须 为抽象类,这与此类为非抽象冲突,所以报错 所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。 只有将理论被熟练运用在实际的程序设计的过程中之后,才能说理论被完全掌握! 为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成 类。如果没有定义抽象的父类,那么编译会出现错误 和 不能放在一起,否则便会出现错误。(这是因为不可被覆盖,而 为了生 效必须被覆盖。 例:(本例已存在 文件中 达内学习笔记 System. out. printIn(“ print”);} 的核心概念:接口( 接口与类属于同一层次,实际上,接口是一种特殊的抽象类。 如 :公开接口 与类相似,一个文件只能有一个 接口,且与文件名相同。 在一个文件中不可同时定义一个 接口和一个 类 一个接口中,所有方法为公开、抽象方法;所有的属性都是公开、静态、常量。 个类实现一个接口的格式 个类实现接口,相当于它继承一个抽象类。 类必须实现接口中的方法,否则其为一抽象类 实现中接口和类相同。 接口中可不写,但在子类中实现接口的过程中 不可省。 (如果剩去 则在编译的时候提示出错:对象无法从接口中实现方法。) 注 ①一个类除继承另外一个类,还可以实现接口; class IAImpl extends java, util. Arrylist implement IA 继承类 实现接口 这样可以实现变相的多继承。 ②一个类只能继承另外一个类,但是它可以继承多个接口,中间用“,”隔开 Implements IA, IB 所谓实现一个接口,就是指实现接口中的方法 ③接口和接口之间可以定义继承关系,并且接口之间允许实现多继承。 例: interface ic extends ia,IB扑 接口也可以用于定义对象 IA I=new IAImp1o 实现的类从父类和接口继承的都可做运行时类型。 IAImple extends a implement IA, IB IB I=new IAImpleo 达内学习笔记 I. instance of. IAImple I instance of A: I instance of ia: i instance of ib: 返回的结果均为true 接口和多态都为JAVA技术的核心。 接口往往被我们定义成一类XX的东西。 接口实际上是定义一个规范、标准。 ①通过接口可以实现不同层次、不同体系对象的共同属性; 通过接口实现 write once as anywhere. 以JAVA数据库连接为例子:JDBC制定标准;数据厂商实现标准;用户使用标准。 接口通常用来屏蔽底层的差异。 ②接口也因为上述原因被用来保持架构的稳定性。 中有一个特殊的类: 它是 体系中所有类的父类(直接父类或者间接父类)。 此类中的方法可以使所的类均继承。 以下介绍的三种方法属于 方法:当一个对象被垃圾回收的时候调用的方法。 是利用字符串来表示对象。 当我们直接打印定义的对象的时候,隐含的是打印 的返回值 可以通过子类作为一个 来覆盖父类的 以取得我们想得到的表现形式,即当我们想利用一个自定义的方式描述对象的时候,我们应该覆盖 首先试比较下例: String A=new String("hello); String a= new string(“ hello”); 此时程序返回为 因为此时中存的是地址,因为创建了新的对象,所以存放的是不同的地址 附加知识 字符串类为 中的特殊类, 中为类,一个字符串的值不可重复。因此在 (虚 拟机)中有一个字符串池,专门用来存储字符串。如果遇到 String a=” hello”时(注意没有不是 创建新串),系统在字符串池中寻找是否有”hco”,此时字符串池中没有”hco”,那么系统将此字符串 存到字符串池中,然后将”hell”在字符申池中的地址返回。如果系统再遇到 String b=” hello”,此时系 统可以在字符串池中找到“hell”。则会把地址返回,此时与为相同 String a=”hlo System.out. printIn (a==?hello); 系统的返回值为 故如果要比较两个字符串是否相同(而不是他们的地址是否相同)。可以对调用 达内学习笔记 要个对象中字符串的顺序 是内神宇的值的比较 注意下面程序 student a= new student(“LUCY”,20); student b= new student(“LUCY”,20); 此时返回的结果均为 以下为定义(加上这个定义,返回或 如果 返回的值为 以下为实现标准 的流程 此时两者相同 不同类 强制转换 以上过程为实现 的标准过程。 练习:建立一个 类,有 运用和方法,使用 使用 封装类: 为每一个简单数据类型提供了一个封装类,使每个简单数据类型可以被 来装载。 除了和,其余类型首字母大写即成封装类 转换字符的方式: String s-I+””; 看 的帮助文档 附加内容 ”在任何时候都是比较地址,这种比较永远不会被覆盖。 达内学习笔记

...展开详情
img

关注 私信 TA的资源

上传资源赚积分,得勋章
相关内容推荐