分享
分享赚钱 收藏 举报 版权申诉 / 77

类型Java笔记.doc

  • 上传人:HR专家
  • 文档编号:6617181
  • 上传时间:2019-04-18
  • 格式:DOC
  • 页数:77
  • 大小:589KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Java笔记.doc
    资源描述:

    1、111. 前言 .1-41.1. JAVA 特点 1-41.2. 运行原理 .1-41.3. JAVA 目录 1-42. 一基础知识 2-42.1. 配置环境 .2-42.2. Java 中基本概念 .2-53. 二定义,关键字和类型 .3-53.1. 注释的三种形式 .3-53.2. Java 代码中的“;” 、 “”、 “ ” 3-53.3. 标识符 .3-53.4. 数据类型 .3-63.5. 命名规则 .3-64. 三表达式和控制流 .4-64.1. 变量和作用域 .4-64.2. 操作符 .4-74.3. 数字类型之间的转换 .4-74.4. 强制类型转换 .4-84.5. 转换的二

    2、种类型 .4-84.6. 控制流 .4-84.7. 循环语句 .4-85. 四数组 .5-95.1. 声明数组 .5-95.2. 创建数组 .5-95.3. 初始化数组 .5-105.4. 多维数组 .5-105.5. 数组拷贝 .5-106. 五对象和类 .6-116.1. 面向对象与面向过程 .6-116.2. 对象的概念 .6-126.3. 成员变量和局部变量 .6-126.4. 成员方法 .6-126.5. This 关键字 .6-136.6. 访问控制符 .6-136.7. 构造方法 .6-136.8. 数据和方法的隐藏封装 .6-146.9. 方法的重载 .6-157. 六高级语言

    3、特性 7-157.1. 封装 (encapsulation) 7-157.2. 继承 (inherit)7-167.2.1. JAVA 继承特点 .7-167.2.2. 父类(SuperClass)和 子类(SubClass )的关系 7-177.2.3. 系统构造一个对象的顺序 7-17227.3. 多态(polymorphism) .7-187.3.1. 方法的覆盖(overridding) 7-187.3.2. 多态的分类 7-187.3.3. 运行时多态的三原则 7-197.3.4. 关系运算符:instanceof 7-207.4. 静态变量,方法和类 .7-207.5. Singl

    4、eton 模式 .7-227.6. final 关键字 .7-227.6.1. final 变量不能被改变; .7-227.6.2. final 方法不能被改写; .7-237.6.3. final 类不能被继承; .7-237.6.4. String 类 .7-237.7. 抽象类 .7-247.8. 接口 (模板方法模式) 7-257.9. Object 类 7-277.10. 封装类 .7-287.11. 内部类 .7-297.11.1. 内部类的分类 7-297.11.2. 成员内部类 7-297.11.3. 局部内部类 7-307.11.4. 静态内部类 7-307.11.5. 匿名

    5、内部类 7-317.12. 集合 .7-317.12.1. 集合接口类层次 7-327.12.2. 集合类层次 7-337.12.3. 五个最常用的集合类之间的区别和联系 7-337.12.4. 比较 7-357.13. 反射 .7-378. 七异常 .8-378.1. 异常的基本概念 .8-378.2. 捕获异常 .8-388.3. 处理异常 .8-388.4. 捕捉多个异常 .8-388.5. finally 声明 8-388.6. 异常调用栈 .8-398.7. 异常层次 .8-398.8. 一些未检查的异常 .8-398.9. 写你自己的异常 .8-398.10. 抛出你自己的异常 .

    6、8-409. 八图形用户接口 .9-4010. 九AWT(Abstract Window Toolkit) 事件模型 10-4111. 十The AWT Component Library .11-4112. 十一JFC(Java Foundation Classes) .12-4113. 十二Applets 13-413314. 十三线程 Thread 14-4114.1. 线程原理 .14-4114.2. 线程实现的两种形式 .14-4214.3. 线程的生命周期 .14-4314.4. Thread 的方法 .14-4314.5. 共享数据的并发处理 .14-4414.6. 使用互斥锁的

    7、注意事项 .14-4415. 十四标准 I/O 流与文件 .15-4615.1. 对文件的操作 .15-4615.2. 处理跨平台性 .15-4615.3. 对象的序列化接口 .15-4715.4. I/O 流基础 .15-4715.5. 流的分类 .15-4715.6. I/O 输入输出 .15-4816. 十五网络编程 16-5216.1. 网络基础知识 .16-5216.2. TCP Socket 16-5416.2.1. 建立 TCP 服务器端 .16-5416.2.2. 建立 TCP 客户端 .16-5516.3. 建立 URL 连接 .16-5516.4. UDP socket 1

    8、6-5816.4.1. 建立 UDP 发送端 .16-5816.4.2. 建立 UDP 接受端 .16-5917. java5.0 的新特性 17-5917.1. 泛型 .17-5917.1.1. 说明 17-5917.1.2. 用法 17-6017.1.3. 泛型的通配符“?“ .17-6217.1.4. 泛型方法的定义 17-6317.1.5. 泛型类的定义 17-6317.1.6. 泛型与异常 17-6417.1.7. 泛型的一些局限型 17-6517.2. 增强的 for 循环 .17-6617.3. 自动装箱和自动拆箱 .17-6917.3.1. 在基本数据类型和封装类之间的自动转换

    9、 17-6917.4. 类型安全的枚举 .17-7017.5. 静态引入 .17-7117.6. C 风格的格式化输出 17-7217.7. Building Strings(StringBuilder 类) 17-7317.8. 可变长的参数 .17-7317.9. JAVA5.0 的注释 (Annotation)17-7317.10. Callable 和 Future 接口 .17-74JAVA 数据库连接:JDBC441. 前言1.1. JAVA 特点1) 简单 (Java 语法是 C+语法的一个“纯净”版本); 2) 可移植性 (一次编译到处运行)3) 面向对象 4) 分布式 (Ja

    10、va 把打开套接字连接等繁琐的网络任务变得非常容易) 5) 健壮性 (Java 编译器会检查出很多其他语言在运行时刻才显示出来的错误;Java 采用的指针模型可以消除重写内存和数据崩溃的可能) 6) 多线程 (多线程编程的简单性是 Java 成为流行的服务器端开发语言的主要原因之一) 7)安全 (用 Java 可以构建防病毒和防篡改的系统) 9) 动态 (Java 可随意增加新的方法以及实例变量,而客户端却不需做任何的更改) 10)体系结构中立( 字节码与计算机体系结构无关,只要存在运行时系统,可在多种处理器上执行)1.2. 运行原理先编译 *.java 文件*.class 文件运行 *.cl

    11、ass 加载 JVM(JAVA 虚拟机)1.3. JAVA 目录JRE运行环境SRC类库BIN应用程序552. 一基础知识2.1. 配置环境LINUX 系统(修改环境配置文件)1 打开 shell2 vi .bash_profile3 JAVA_HOME=JAVA 目录路径4 PATH=$JAVA_HOME/bin:其他路径5 CLASSPATH=.6 export JAVA_HOME CLASSPATHWindows 系统我的电脑属性环境变量 设置环境变量: JAVA_HOME=路径PATH = %PATH%;c:j2sdk1.4.2_05bin; CLASSPATH = .;2.2. Ja

    12、va 中基本概念 1) 源文件 在最顶层只包括一个 public 类型的类/接口,文件名与类/ 接口名同并以.java 作为文件后缀。 2) 包(package ,在源文件中 this identify 只能放在第一行,且最多只能是一行 ) 一个将类和接口组织在一块的实体,在文件系统中以目录/文件夹型式呈现。3. 二定义,关键字和类型3.1. 注释的三种形式 / 单行注释 /* 一或多行注释 */ /* 文档注释 */3.2. Java 代码中的“;” 、 “”、 “ ” Java 语句以分号分隔; Java 代码块包含在大括号内; 66忽略空格。3.3. 标识符 1) 用以命名类、方法和变量

    13、、以及包; 遵守 JAVA 的命名规范类以每个单词都以大写字母开头。方法和变量第一个字母不大写,其他依旧2) 以字符、 “_”或“$”开头; 3) 无长度限制。3.4. 数据类型 1) 整型 byte 1B 8 位 -128 到 127 short 2B 16 位 -215 到 215-1 int 4B 32 位 -231 到 231-1 long 8B 64 位 -263 到 263-1 2) 浮点类型 float 4B 32 位 double 8B 64 位 3) 字符类型 char 2B 16 位 4) 布尔型 boolean false/true 注:1) char 是无符号的 16

    14、位整数,字面值必须用单引号括起来; a2) String 是类,非原始数据类型; 3) 长整型数字有一个后缀为“L”或“l” ,八进制前缀为“0” ,十六进制前缀为“0x” ; 4) 黙认浮点类型为 double; 5) float 数据类型有一个后缀为“f”或“F”,Double 数据类型后可跟后缀“D”或“d“3.5. 命名规则1) 类/接口名首字母大写; 2) 方法、变量名第一个字母小写,其余首字母大写; 3) 常量名称全部大写; 4) 包名全部小写。774. 三表达式和控制流4.1. 变量和作用域 1) 局部变量 定义在方法内部,其作用域为所在代码块,也称为临时变量、栈变量。 存在于栈

    15、中。2) 实例变量 定义在类内部方法之外,其作用域为整个类。如未定义初值,系统会自动为其赋黙认值。存在于堆中默认数值类型 黙认值 byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char u0000 空格boolean false *All reference types null4.2. 操作符 System.out.println(3/2) 按整型计算 得 11) 前面是零补零,前面是一补一; 2) 无符号右移 ; 和 对于负数不一样正数:等于除以 X 的 2 次方负数:正数的结果13) 2) 当没有返回值时,返回类型必须被定义为 v

    16、oid。 3) 构造方法没有返回类型。4) 返回类型必须与方法相邻,其他修饰符号可以调换位置。参数传递 Java 语言总是使用传值调用。这意味着方法得到的只是所有参数值的拷贝。因此,方法不能修改传递给它的任何参数变量的内容。对于对象类型的参数传递的也是该对象的引用值,方法中并不能改变对象变量,但能通过该变量调用对象的方法或修改对象的成员。*方法与函数的区别,方法的内容是和对象的属性紧密相连的,函数只为了解决一个功能。6.5. This 关键字1) this 是个隐式参数,代表被构造的对象; publie class Personprivate String name;public void s

    17、etName(String name)this.name=name;-this.name 为成员变量2) 如果构造器的第一个语句具有形式 this(.),那么这个构造器将调用同一类中的其他构造器。14143)在构造器中 this()必须放在方法的第一行。*Super 关键字也是个隐形参数,代表被构造对象的父类。同样也必须在构造方法的第一行6.6. 访问控制符权限高public 全部可见protected 本类可见,同包可见,子类可见default 本类可见,同包可见private 本类可见权限低6.7. 构造方法构造方法是在生成对象的过程中调用的方法,但构造方法并不能创建对象。其特点为:1构造

    18、方法没有返回值。2构造方法的方法名与类名相同。格式为:public ClassName()构造方法也可以是其他的限制符private protected default private 一般用在singleton 模式中。在一个对象的生成周期中构造方法只用一次,一旦这个对象生成,那么这个构造方法失效。*接口不能创建实例,因为没有构造方法可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法:-构造方法的重载public student(string name,int a)public student(int a,string name)为两个不同的构造方法。如果

    19、我们未给系统提供一个构造方法,那么系统会自动提供一个为空的构造方法。如果我们提供了有参的构造方法,那么系统不会再提供无参的构造方法了。这样当被子类继承时,如果子类构造方法不人为调用父类的有参构造方法就会出现异常。6.8. 数据和方法的隐藏封装public class Person1515private String name;-数据的隐藏private int age;public String getName()-方法尽量公开return name;public int getAge()return age;有些方法也需要隐藏起来,比如:Class SingletonPrivate Sing

    20、leton()Public static Singleton getInstance()If()Singleton=new Singleton();/对生产对象的条件进行限制Return singleton;6.9. 方法的重载Overloading 在一个类中可以定义多个同名方法,各个方法的参数表一定不同。但修饰词可能相同,返回值也可能相同。在程序的编译过程中根据变量类型来找相应的方法。Overloading 被认为是编译时的多态。Overloading 只是为方便程序员编程的解决方法,编译之后的方法名实际加上了各参数类型成为唯一的名字。普通方法public void aa(int a,do

    21、uble b) throws IOExceptionprivate int aa(double a,int b)protected double aa(String a,String b)构造方法也可以实现 overloading。例:public void teach();public void teach(int a);public void teach(String a)为三种不同的方法。Overloading 方法对于不匹配的参数是从低向高转换的。1616Byteshortfloatintlongdouble。System.out.println(“%5.2f,%10.3f”, num

    22、,num2); 按格式输入7. 六高级语言特性7.1. 封装 (encapsulation)1事物的内部实现细节隐藏起来2对外提供一致的公共的接口间接访问隐藏数据3可维护性7.2. 继承 (inherit)7.2.1. JAVA 继承特点继承:父类的成员能否继承到子类?子类能否访问到父类的成员private:本类内部可以访问 不能继承到子类(default):本类内部可以访问,同包其他类也可以访问;能否继承到子类? 不一定protected:本类内部可以访问,不同包的子类也可以访问, 同包其他类也可以访问能继承到子类public:任何地方都可以访问 能继承到子类从严 到宽覆盖:方法名:相同参数

    23、表:相同访问限制符:相同或者更宽返回值类型:相同 或者 子类返回的类型是父类返回的类型的子类1717对象的构造过程:1.递归的构造父类对象2.分配空间3.初始化属性4.调用本类的某一个构造方法super:调用父类的某一个构造方法父类对象多态:1. 对象不变2. 只能对对象调用编译时类型中定义的方法3. 运行时,根据对象的运行时类型,找覆盖过的方法来调用(运行时动态类型判定)强制类型转换 instanceof屏蔽子类差异,利用父类共性做出通用编程属性的遮盖(shadow)没有多态方法的重载看参数的编译时类型7.2.2. 父类(SuperClass)和 子类(SubClass )的关系父类的非私有

    24、化属性(不同包的子类无法访问 default 修饰符)和方法可以默认继承到子类。Class Son extends Father而如果父类中的私有方法被子类调用的话,则编译报错。父类的构造方法子类不可以继承,更不存在覆盖的问题。所以子类构造方法默认调用父类的无参构造方法。 (所以养成写无参构造的习惯)如果子类访问父类的有参构造方法,必须在子类构造方法第一行使用 super(参数)当构造一个对象的时候,系统先构造父类对象,再构造子类对象。Public class BMWcar extends CarPublic BMWcar()Super(int alength); /显式的调用父类的构造,默认

    25、调用无参构造/所以父类没有无参构造的话,子类如果不加显示调用其他构造就会报错。这里的 super 是一个对父类的引用18187.2.3. 系统构造一个对象的顺序 1 先为最里层类成员属性赋初值;2 再构造该类对象;3 返回外层,重复 1(上一层类) 、2 步骤直到完成最外层类的构造。最外层类最里层基类super() this() 不会同时出现A()super();A(int a)this();7.3. 多态(polymorphism) 多态:一个对象变量可以指向多种实际类型的现象。7.3.1. 方法的覆盖(overridding)当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子

    26、类新写的方法覆盖父类的方法,称为覆盖。 (注意返回值类型也必须相同,否则编译出错。 )如果方法参数表不同,则成重载。特点:1对于方法的访问限制修饰词,子类方法要比父类的访问权限更高。父类为 public,那么子类为 private 则出现错误。2子类抛出的异常应该是父类抛出的异常或其子类。7.3.2. 多态的分类多态分两种:19191 编译时多态:编译时动态重载;2 运行时多态:指一个对象可以具有多个类型,方法的覆盖这样对于对象而言分为:理解运行时多态:Car c = new Bus();Car 编译时类型 编译时检查变量类型是否存在,是否有调用的方法Bus 运行时类型 实际运行是访问 hee

    27、p 中的对象,调用实际的方法。运行时多态是由运行时类型决定的编译时多态是由编译时类型决定的猫,小鸟,狗 都是动物,都可以安上动物的标签。Interface AnimalClass Car implements AnimalClass Bird implements AnimalClass Dog implements Animal方法中Animal a = new Car();Animal b = new Bird();Animal c = new Dog();*方法重载看的是参数的编译时类型public class Animalpublic static void main(String a

    28、rgs)(1) 是覆盖吗?不能多态了abstract class MyClasspriavate void m();class Sub extends MyClass()public void m();(2) 错误的修饰符组合abstract class MyClasspriavate abstract void m();class Sub extends MyClass()public void m();(3) 5.0 新 非覆盖 abstract class MyClass2020private final void m();class Sub extends MyClass()publi

    29、c void m();7.3.3. 运行时多态的三原则1.对象不变;(改变的是主观认识)2.对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。在上面的例子中:Animal a=new Dog();对象 a 的编译时类型为 Animal,运行时类型为 dog。注意:编译时类型一定要为运行时类型的父类或者同类型。对于语句:Dog d=(Dog)a。将 d 强制声明为 a 类型,此时 d 为 Dog(),此时 d 就可以调用运行时类型。注意:a 和 d 指向同一对象。3.动态类型判定实际调用的方法。即它调用覆盖后的方法。7.3.4. 关系运算符:instanceofinstanceo

    30、f Animal;(这个式子的结果是一个布尔表达式)上面语句是判定 a 是否可以贴 Animal 标签。如果可以贴则返回 true,否则返回false。在上面的题目中: a instanceof Animal 返回 True,a instanceof Dog 也返回 True,用于判定前面的对象是否是后边的类或者子类。Animal a = new Car();If(a instanceof Dog)Dog b =(Dog)a;else if(a instanceof Car)Car c =(Car)a不会错。7.4. 静态变量,方法和类 静态变量Static int data 语句说明 dat

    31、a 为类变量,为一个类的共享变量,属于整个类。2121例:Class Mstatic int data;M m1=new M(); M m2=new M();m1.data=0;m1.data+的结果为 1,此时 m2.data 的结果也为 1。Static 定义的是一块为整个类共有的一块存储区域。其变量可以通过类名去访问:类名.变量名。与通过对象引用访问变量是等价的。2) 静态方法Public static void printData()表明此类方法为类方法(静态方法)静态方法不需要有对象,可以使用类名调用。静态方法中不允许访问类的非静态成员,包括成员的变量和方法,因为此时是通过类调用的,

    32、没有对象的概念。方法中 this.data 和 super.data 是不可用的。原因:从根本来说,是静态变量不管类是否实例化都会存在,而实例变量只有类实例化了才存在。直接调用静态方法时并不确定实例变量是否存在。一般情况下,主方法是静态方法,所以 JVM 可以直接调用它,主方法为静态方法是因为它是整个软件系统的入口,而进入入口时系统中没有任何对象,只能使用类调用。猜想:JVM 在代码中有这样的语句:ClassName.main(arg); ClassName 通过命令行的”java 类名”取得,所以类名不用加.class 扩展名*覆盖不适用于静态方法。静态方法不可被覆盖。如果子类中有和父类重名

    33、的静态方法,虽然编译通过,但它并不能实现多态,所以不能称作覆盖。public class Test public static void main(String arg) Super s = new Sub();s.show();class Superstatic public void show()System.out.println(“in Super“);2222class Sub extends Superstatic public void show()System.out.println(“in Sub“);执行结果是: in Super3) 静态内部类-只能是成员内部类class

    34、 Outpublic static class Inner4) 初始化块 1 只被执行一次; 2 初始化块在类被加载后首先被运行,不管类是否实例化3一般用来初始化静态变量Public static void main(String args)System.out.println(Car.name);/这时加载 Car Class 进入 JVM 并执行静态代/码块 7.5. Singleton 模式Static 通常用于 Singleton 模式开发:Singleton 是一种设计模式,高于语法,可以保证一个类在整个系统中仅有一个对象。特点:1有一个静态属性2私有的构造singleton 不能

    35、new3公共的静态方法来得到静态属性实现单例模式的原理:利用类属性(静态变量)在系统中唯一的特性,建立这样一个唯一的引用并控制这个引用所指的空间是不变的。public class ConnectionFactoryprivate static Connection conn;private Connection()if(conn=null)conn = new Connction();public Connection getInstance()return conn;实现 2public class ConnectionFactoryprivate static Connection con

    36、n;2323staticconn = new Connection();public static Connection getInstance()return conn;7.6. final 关键字 7.6.1. final 变量不能被改变; 当利用 final 修饰一个属性(变量)的时候,此时的属性成为常量。注意 JAVA 命名规范中常量全部字母大写:Final int AGE=10;常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的。在 JAVA 中利用 public static final 的组合方式对常量进行标识(固定格式) 。Final 变量是在整个类被创建时候被

    37、赋值,之后就不能改变了。对于 final 变量,如果在声明的时候和构造的时候均不进行赋值,编译出错。对于利用构造方法对 final 变量进行赋值的时候,此时在构造之前系统设置的默认值被覆盖。常量(这里的常量指的是实例常量:即成员变量)赋值:在初始化的时候通过显式声明赋值。Final int x=3;在构造的时候赋值。Class AFinal int x=3;Public A()x=4;7.6.2. final 方法不能被改写; 利用 final 定义方法:这样的方法为一个不可覆盖的方法。Public final void print();为了保证方法的一致性(即不被改变) ,可将方法用 fin

    38、al 定义。如果在父类中有 final 定义的方法,那么在子类中继承同一个方法。如果一个方法前有修饰词 private 或 static,则系统会自动在前面加上 final。即private 和 static 方法默认均为 final 方法。2424注:final 并不涉及继承,继承取决于类的修饰符是否为private、default、protected 还是 public。也就是说,是否继承取决于这个类对于子类是否可见。Final 和 abstract 永远不会同时出现。7.6.3. final 类不能被继承; final 修饰类的时候,此类不可被继承,即 final 类没有子类。这样可以用

    39、 final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生。String 类数据 final 类 ,目的是提供效率保证安全。7.6.4. String 类String 的声明:public final class String 无法继承,强不变模式字符串池池化思想 数据库连接池,EJB 池public class TestString public static void main(String args)String s1=new String(“abc”);String s2=s1;s1+=”d”;System.out.println( s1 );System.out.printl

    40、n( s1=s2 );便于实例重用不要轻易在 heap 里创建空间intern() 返回池地址对于字符串连接str=”123”+”456”+”789”“123”;产生:123456123456789123456789123产生多余对象应该使用 StringBuffer(线程安全的) 或者 StringBuilder(线程不安全的)String str=”hello:nihao:happy”;2525StringTokenizer st=new StringTokenizer(s,”:”);while(st.hasMoreTokens()String str=st.nextToken();Sys

    41、tem.out.println(str);7.7. 抽象类 1) Abstract(抽象)可以修饰类、方法如果将一个类声明为 abstract,此类不能生成对象,只能被继承使用。Abstract 类的设计是将子类的共性最大限度的抽取出来,以提高程序的统一性。2) 一个类中包含有抽象方法必须声明为抽象类; 如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。反之,如果一个类为抽象类,那么其中可能有非抽象的方法。3) 抽象类不能实例化,但仍可以声明; Abstract 类可以作为编译时类型,但不能作为运行时类型。4) 子类继承抽象类必须实现其中抽象方法当 abstract 用于修饰方法时,此时

    42、该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子类覆盖该方法之后方法才能够生效。注意比较:private void print();此语句表示方法的空实现。Abstract void print(); 此语句表示方法的抽象,无实现7.8. 接口 (模板方法模式)1) 接口是抽象类的另外一种形式(没有实例变量的抽象类); 2) 在一个接口中所有方法都是抽象方法; 3) 接口中所有变量都必须被定义为 final static; 4) 接口可以继承多个接口。 5) 可插入性的保障工程模式6) 是规范的制订者和规范的实现者分开。JDBC注:1) 接口中的方法自动被置为 public, 因经,

    43、在接口中声明方法并不需要提供 public 关键字。但在实现接口时,必须把方法声明为 public。接口与抽象类的区别:接口 抽象类无实现方法 可以有非抽象方法实现代码2626可以把子类的共有代码提取出来放在抽象类中在 JAVA 中的接口分类:普通 -有方法和属性常量 -存常量标记 -没有方法,属性,只为了做编译类型的标记实例:简单工厂模式(接口和多态的实际使用)public interface Car public void brake();public void grade();public void engineer();public class BMW implements Carpr

    44、ivate String name;public String getName() return name;public void setName(String name) this.name = name;public void brake() / TODO Auto-generated method stubSystem.out.println(“BMWcars brake()“);public void engineer() / TODO Auto-generated method stubSystem.out.println(“BMWcars engieer()“);public vo

    45、id grade() / TODO Auto-generated method stubSystem.out.println(“BMWcars greade()“);/* param args*/Public class Banz implements CarPublic class Factory2727Public static Car factory(String name)If(name.equals(“BMW”)Return new BMWCar(); /返回一个引用If(name.equals(“Banz”)Return new BanzCar();注意:1 这个问题不是对象有没有

    46、 toString 方法的问题,而是用接口作为编译时类型能否调用的问题.2 接口就是接口 ,尽管本质上是抽象类,但是总归不是类,接口没有父类,Object 类绝不是接口的父类,这种理解大错而特错!3.我们来看看虚拟机规范是怎么说的JVM 会解析类型为 CONSTANT_InterfaceMethodref_info 的常量池的入口,会按照如下步骤执行接口方法解析:1) 检查接口是否具有用户调用的方法2) 检查接口的父接口是否具有用户调用的方法3) 检查 java.lang.Object 是否具有用户调用的方法4) 抛出 NoSuchMethodException因此,不是接口类型有 toStr

    47、ing 方法,用反射是看不到这个方法的,而是虚拟机在作方法调用连接时,会自动去找 Object 类中的方法.虚拟机就是这么工作的.所以,对以接口作为编译时类型的方法调用,根据以上说的第三点,Object 类中的方法都可以得到调用7.9. Object 类JAVA 中有一个特殊的类: Object。它是 JAVA 体系中所有类的父类(直接父类或者间接父类) 。此类中的方法可以使所的类均继承。以下介绍的三种属于 Object 的方法:(1)finalize 方法:当一个对象被垃圾回收的时候调用的方法。(2)toString():是利用字符串来表示对象。当我们直接打印定义的对象的时候,隐含的是打印

    48、toString()的返回值。可以通过子类作为一个 toString()来覆盖父类的 toString()。以取得我们想得到的表现形式,即当我们想利用一个自定义的方式描述对象的时候,我们应该覆盖 toString()。(3)equal2828首先试比较下例:String A=new String(“hello”);String B=new String(“hello”);A=B(此时程序返回为 FALSE)因为此时 AB 中存的是不同的对象引用。 附加知识:字符串类为 JAVA 中的特殊类,String 中为 final 类,一个字符串的值不可重复。因此在 JAVA VM(虚拟机)中有一个字符串池,专门用来存储字符串。如果遇到 String a=”hello”时(注意没有 NEW,不是创建新串) ,系统在字符串池中寻

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:Java笔记.doc
    链接地址:https://www.docduoduo.com/p-6617181.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开