JAVASE笔记.doc_第1页
JAVASE笔记.doc_第2页
JAVASE笔记.doc_第3页
JAVASE笔记.doc_第4页
JAVASE笔记.doc_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

JAVASE笔记1. 方法(函数)什么方法?方法就是定义在类中的具有特定功能的一段独立小程序,并能被多次使用。方法有两部分组成:1. 方法签名public 访问修饰符(可省略) 控制方法是否能调用static 修饰符 (可省略)用static修饰之后此方法只能被static方法调用void 返回类型 (不可省略) 方法返回的数据的类型printFX 方法名 (不可省略) 方法是用来调用方法用的(int line, int column) 参数列表 (不可省略) 执行功能所需要的数据2. 方法体 public static void printFX(int line, int column)for (int i = 0; i line; i+)for (int j = 0; j column; j+)System.out.print(*);System.out.println();修饰符 返回值类型 方法名(参数类型 形式参数1,参数类型 形式参数2,.)执行语句;return 返回值;/return关键字是用于结束该功能。并将后面的具结果返回给调用者。 /必须有return语句。注意:方法的返回值类型如果是void时,return语句可以省略不写;void表示的是没有返回值的情况。注意:方法定义只能定义一次。方法调用可以多次。1.1 方法重载(Overload)方法重载:在同一个类中,可以有方法名相同的方法,但这些相同名称的方法的入参的个数或入参类型不能相同。方法参数为引用类型时,方法体对这个引用类型的修改不用进行返回。方法参数为基本类型时,方法体对这个基本类型数据的修改需要进行返回。1.2递归(算法) 问年龄:public class Testpublic static void main(String args)System.out.println(getAge(3);public static int getAge(int num)if (num = 1)return 90;else return getAge(-num) - 5; 递归就是方法本身的自调用,这种算法是依靠了栈内存的特性。递归注意一定要有退出条件。递归的缺点是什么?如果递归次数过多很容易造成栈内存溢出。2.数组可以存放多个数据,但这些数据的类型必须相同。数组是引用类型的数组是数据结构中的一种,它的特点是可以通过下标来随机访问数据,而且随机访问数据的速度是所有数据结构中最快的。数组只能存放相同类型的数据。数组缺点是删除,新增慢。2.1 JAVA的内存结构:2.2 数组的声明1. 数据类型 变量名 = new 数据类型数组的大小;2. 数据类型 变量名 = new 数据类型数组的大小;3. 数据类型 变量名 = 数据1,数据2, 数据3;4. 数据类型 变量名 = new 数据类型数据1,数据2, 数据3; /*int: 代表是你的这个数组中的数据类型是什么: 数组array1: 数组名称new int111: 创建数组111: 数组可以存放数据的数量 */ int array1 = new int111;注意:1. 数组中的数据类型是一样的。2. 数组的大小是在声明数组的时候就确定下来,以后再想增加容量不可能,只能再声明一个数组。2.3 数组的存取数组的内存结构数组的存取是通过下标来完成,注意的是下标是从0开始的,例如Int a = new int5;a1 = 100; / 存放Int b = a1; / 取出2.4 数组的初始化值每种数据类型声明数组时都有各自默认值。Byte, short, int 初始值 0 char初始值 /u00000Float,double 初始值 0.0String以及所有的引用类型 初始值都是null;2.5 数组的遍历就是从数组的第一个元素一直访问到数组的最后一个元素这个就叫做遍历。int a = new int5;1. 方式一:System.out.println(a0);System.out.println(a1);System.out.println(a2);System.out.println(a3);System.out.println(a4);2. 方式二: for (int i = 0; i a.length; i+)System.out.println(ai); 注意:数组有一个length属性,它的值是表示的数组的长度(容量)3. 方式三:for (int item : a) / 增强for循环System.out.println(item); 优点:1.不用显示声明循环条件。 2.不写累加语句。 3.不用写访问集合或数组元素的语句了。缺点:1. 不能使用数组的下标2.6 Eclipse使用介绍Eclipse是目前java编程中最流行的IDE(集成开发环境), 我们使用ECLIPSE开发JAVA程序的主要原因就是提高开发效率。Eclipse 是一个免安装的程序,而且它支持插件机制。2.61 eclipse如何工程以及其组织结构Eclipse最顶层组织代码的结构是工作空间,一个工作空间中可以有多个工程(多类型)Workspace|-工程1|-.settings 存储当前工程的配置信息|-bin存储的是所有的class文件|-src 存储源代码|-.classpath这个配置是classpath环境变量|-.project配置文件,这个文件中包括着工程名字|-工程22.62 eclipse窗口结构1. 菜单栏:包括eclipse中的所有的功能2. 工具栏: 常用的功能3. 视图: 功能区4. 编辑区:写代码Eclipse有很多的视图,一共有多少视图,通过菜单的window-showView可以看到所有视图透视图:一个透视图里面包括着N个视图,也就说透视图所相关视图进行分类。在eclipse中写java代码,第一步是要建立一个java工程,建立步骤如下:1. File-NEW-javaproject2.64 eclipse常用快捷键1. 找类 cltr+shift+t2. 找除类以外的所有资源 ctrl+shift+r3. 找文件中的某个文本信息 ctrl+k4. 查看或寻类中的成员 ctrl+o5. 查看类层次结构 ctrl+t 或 F46. 返回编辑区历史 alt + 左右键头7. 导包 cltr+shift + o8. 注释 cltr+shift+c9. 查看方法的原代码 F310. 代码辅助功能 alt+?11. 查看当前文件信息 alt+回车12. 查看eclipse的所有快捷键 cltr+shift+l2.65 使用eclipse调试程序F6 下一步F5 进入到方法中F7 从方法中跳出来F8 执行完毕程序或者执行到下一个断点第一步,设置断点(在什么位置开始程序的调试)2.7 数组的练习题1. 数组的遍历2. 数组的拷贝3. 数组中最大值和最小值4. 删除元素5. 数组中间插入6. 冒泡排序7. 选择排序2.8 二维数组声明方式:数据类型 变量名 = new 数据类型数组大小1数组大小2;注意 1. 数组大小1不能省略,数组大小2可以省略例如:int array = new int23;int array = new int2;int array = new int3; / 错误 二维数组的内存图: /*二维数组的遍历与赋值 姓名 成绩 */public static void arrayTest()Scanner scanner = new Scanner(System.in);String list = new String32;for (int i = 0; i list.length; i+)for (int j = 0; j listi.length; j+)if (j = 0)System.out.println(请输入第+(i+1)+个同学的姓名:);else System.out.println(请输入第+(i+1)+个同学的成绩:);listij = scanner.next();printArray2(list);public static void printArray2(String list)System.out.println(姓名 成绩);for (String item: list)for (String item2: item)System.out.print(item2 + );System.out.println();3. 面向对象面向对象是一种符合人类思考习惯的思想,这种思想是由面向过程演变过来的。面向对象思想是基于面向过程的。把大象装进冰箱面向过程(这种思想考虑的问题是解决问题步骤)1. 打开冰箱门2. 把大象装进冰箱3. 关上冰箱门面向对象 (这种思想考虑的问题是解决问题是靠对象来完成的,所以解决问题首先做是找对象,然后做是调用对象的功能)冰箱 大象大象调用冰箱功能 冰箱.打门();大象.走进冰箱();大象调用冰箱功能 冰箱.关门(); 面向对象的两个核心概念: 1. 类 2.对象 什么是类?(抽象)人动物水果植物 什么是对象?(具体)张三旺旺我手里拿水果阳上的那盘花在现实生活中是先有类还是先有对象呢?现实生活中是先有对象再有类在程序中是先有类还是先有对象呢?程序中是先有类再有对象程序中的类是什么?程序中的类就是描述现实生活中的类汽车属性:四个轮子颜色方向盘后备箱功能:跑载人 描述一个类其实就是描述它的属性和功能 class Car int lunzi;String color;String fxp;double size; public void run() public void load(int i) JAVA中的类基本上是由成员方法与成员变量构成的。 类是产生对象的模板,也就是对象由类产生的。 类名 对象名 = new 类名(); Car car1 = new Car(); 面向对象思维: OOA(面向对象的分析) OOD(面象对象的设计) 3.1 面向对象的练习1. 大象与冰箱2. 汽车与汽车维修厂3. 转帐3.2 类与类之间的关系(重点)在开发项目时候,一个项目不可能是一个类,肯定是有很多的类一起协作完成的这个项目,类与类之间很多种关系,咱们必须把这些关系搞的很明白。UML统一建模语言: 类图,时序图,状态图,包图.九种。3.2.1 关联关系(Association)(一对多单向关联关系)(一对多双向关联关系)(一对一双向关联关系)(多对多双向关联关系)3.2.2依赖关系(dependency)一个类中的方法使用了另外一个类的对象,例如,学生使用电脑打字Class StudentPubic void print(Computer computer)Computer.print();Class ComputerPublic void print()3.2.3 聚合关系(Aggregation)汽车与发动机 电脑与主板Class CarEngine engine;Class Engine3.24 组合关系(Composition)人与头 组合关系与聚合关系的区别:组合关系的两个类是不能分开单独立存在的。聚合关系的两个类是可以分别独立存在的。3.25 泛化关系(Generalization)继承3.26 实现关系(Realiztion)3.3 对象在内存中的表现public class Testpublic static void main(String args)Person p = new Person(); = zx;p.say();class PersonString name;public void say()System.out.println(您好!我是+ name);3.4 匿名对象匿名对象就是直接通过new关键字产生的对象,例如:new Person();匿名对象要注意的地方1. 使用匿名对象直接对其属性进行操作(取值,附值)是没有任何意义的。2. 通过匿名对象调用其方法。3. 将匿名对象传给另外一个方法。3.5 封装面向对象三大特性:继承,封装,多态。封装好处1. 可以提高代码的可重用性。2. 保证了程序安全。 封装是把不对外界访问的接口隐藏起来,只公开对外界可以访问接口。 封装体现:1. 方法2. 类3. private4. .private: 是访问修饰符,被此修饰符修饰的元素只能在本类中访问,外部无权访问。private 可以修饰:1. 成员变量 2.成员方法 3.类(内部)外部类的访问权限只能是两个 1. 默认访问权限 2. Public3.6 JavaBeanJavabean entity(实体类) POJO(普通JAVA对象) vo po dto在java众多类中有一种类专门用来负责存储与传输数据用的。例如:学生信息类教师信息类教室信息类成绩信息类class StudentString id;Int age;String name;也就是说像这些类只有属性,像这种类咱们就用Javabean规范写此类JavaBean规范:1. 所有属性都统一用private修饰。2. 为所有属性生成get set方法。3. 此类必须有一个默认的构造方法。class Studentprivate String id;private int age;private String name;public void setId(String id)this.id = id;public String getId()return this.id;public void setAge(int age)this.age = age;public int getAge()return this.age;public void setName(String name) = name;public String getName()return ;像这种只有属性和其get set方法的javabean又叫做贫血JAVABEAN3.7 构造方法,构造块什么是构造方法?构造方法是专门为对象进行初始化用的方法。 构造方法的声明?权限修饰符 类名(参数列表) 构造方法与普通方法的区别:1. 普通方法有返回值,构造方法没有2. 普通方法的方法名字是任意的,构造方法的名称必须是类名3. 普通方法可以通过其它普通方法来调用,但是构造方法是JVM调用的,但是重载构造方法之间可以相互调用。4. 普通方法的功能是根据实际情况定的,构造方式的功能就是为对象进行初始化用的。什么初始化?初始化就是对类中的成员变量进行附初始值。对私有成员变量的初始化一共有两种方式:1. Set方法 (对象产生后初始化了)2. 构造方法 (在对象产生时就初始化了) 所有对象的产生必须依靠构造方法,一个类如果没有构造方法是不能产生对象的,其实一类也不可能没有构造方法,因为如果自己不显示写构造方法,那么JAVA会自动生成一个默认的构造方法(无参),但是一旦自已显示写了构造方法,那么自动生成的构造方法就不存在了。构造方法是可以重载的,如下所示:构造方法的相互调用:构造方法可以被其它重载的构造方法调用,调用方式是this(实参列表),而且这一句话必须放在方法的第一句。3.7.1 构造块构造块在一个类中可以有多个,它的作用是为对象初始化用的。构造块在什么时候执行?创建对象的时候执行构造块先执行呀还是构造方法先执行?构造块先执行。3.7.2 this 在每一个类中都一个隐藏的成员变量,这个变量名字叫做this,它里面存储的值就是当前对象的首地址。public class Test2public static void main(String args)Student s = new Student();s.setName(ABC);class Studentprivate String name;public void setName(String name) = name;public String getName()return ;3.8 静态成员static关键字修饰的类中的成员变量,成员方法1. static静态成员变量的特点与使用场景。static修饰的成员变量是所有对象共享static 修饰的成员变量它是放在方法区的静态区的static 变量的访问,即可以在普通方法中访问,也可以在静态方法中访问。如果静态成员变量是不是用private修饰的,那么可以通过”对象名.静态成员变量名”或者”类名.静态成员变量名”访问。使用场景:当一个成员变量是所有对象都共享的话,那么可以用static修饰这个成员变量。2. static静态成员方法的特点与使用场景。如果静态成员方法是不是用private修饰的,那么可以通过”对象名.静态成员方法名”或者”类名.静态成员方法名”访问。静态成员方法不可以方法非静态的成员(成员变量,成员方法),为什么?因为静态方法先非静态成员存在。静态方法也是存储在方法区的静态区。使用场景:当一个成员方法它在方法体内没有使用非静态成员,就可以把它声明为静态方法。3.8.1 静态导入静态导入是java JDK1.5推出的新特性,目的就是为了提高开发者的效率,在大量使用某个中的静态方法时,可以省略通过类名调用,而是直接通过方法名就可以调用了,但是要注意当前类中不能出现与静态导入的方法名相同的方法,如果出现,那么调用是当前类的方法,而不是静态导入类的方法。3.8.2 静态块1. 静态块是为类的成员进行初始化的,它只能执行一次。2. 静态块是什么时候执行的呢?它是在类加载的时候执行的。3. 静态块也可以有多个,静态块中不可以访问非静态的成员。3.8.2 成员变量和静态成员变量的区别4. 成员变量它是存储在堆内存中的,静态成员变量是存储在方法区的静态区的。5. 成员变量的它内存在对象被垃圾回收器回收的时候释放,静态成员变量的内存是在类卸载的时候释放,也就是说静态成员有如下特点:1) 它只占一份内存(优点)2) 静态成员的生命周期太长,不易释放,所以我们在编写程序的时候尽量不要写静态成员。3. 成员变量,成员方法可以通过对象来访问,静态成员即可以通过对象也可以通过类名的方式来访问。3.9 设计模式设计模式这个概念最初是在建筑。在编程中的设计模式其实就是为了解决某一类的问题的一个最佳方案。3.9.0 设计原则开闭原则:程序对修改是关闭的,对于扩展是开放的。所有的面向对象的设计模式都遵循于这个原则。 好莱坞原则:你不用来找我,到时我找你就行了。3.9.1 单例模式单例模式就是为了解决一个类只能产生一个对象。单例模式的使用场景,当一个类的对象创建起来十分复杂,而且要耗的内存很多的时候就用单例模式。3.9.2 策略模式3.9.3 模板方法模式3.9.4 迭代器模式 迭代:从集合中把集合中的元素一个一个取出来的过程叫做迭代。我们目前的数据结构有很多,比如:数组,链表,堆,队列,二叉树,它们的迭代方式不一样数组迭代方法,是按下标一个一个迭代的。链表迭代方法,先找到头节点再通过头节点找到下一个节点,依次查找.每一种数组结构迭代方法不一样,会造成使用这些数据结构的开发人员非常不方法,我们可以通过把迭代行为抽象出来,然后让每一个特定数组结构来现实自己的迭代方法,但对于使用者迭代接口是一样的。迭代器接口(interface)hasNext() 判断是否有下一个元素next()取出下一个元素while(hasNext()Next();JDK的集合中就使用迭代器模式,它定义遍历规范的接口叫做Iterator3.10 继承继承是为了解决类与类的相互重复的代码,继承能够将代码重用,但是两个类之间是否可以使用继承一定要符合如下两个条件:1. “子类 is a 父类”。2. 父类中的方法与成员变量是否子类都需要。注意: 千万不要为了代码的重用而用继承。继承格式:class 子类 extends 父类注意:1. Java不支持多继承当两个父类出相同方法的时候,子类对象在调用这个方法的时候,就不确定调哪一个了。当我们在写程序时,遇到了一系列的类,这一系列的类符合一个继承体系。我们学习这样一系列的类的顺序是按照从上向下的顺序学习的,也就是说先学习父类,再学习子类。因为父类有的非私有方法,子类一定也有。3.10.1继承的内存图 通过分析内存图,我们发现子类在构造对象时,默认通过super();调用了父类的构造方法(默认无参的构造方法),对子类继承的成员进行初始化,父构造方法执行完毕之后再执行子类的构造方法。当父类显示提供一个带参的构造方法,子类此进行初始化时就会报错解决如上问题有两个方法:1. 通过super在子类的构造方法中显示调用父类带参的构造方法。2. 给父类提供一个无参的构造方法。如果一个类没有显示继承另外一个类,那么这个类它默认继承Object类,也就是说这个类的构造方法的第一句的super();调用的是Object的无参的构造方法。3.10.2方法的覆写(Override)方法的覆写(重写)只存在于两个类有继承关系,当父类提供的方法不满足子类的需求时,使用方法覆写,方法覆写要求子类覆写的方法的名字,方法的参数列表必须完全一样。但是还要注意以下的规则:1. 在子类覆写父类方法时,建议在覆写的方法上加上注解Override,此注意可以在编译帮忙你检查是否覆写正确2. 子类覆写的方法的访问权限必须大于等于父类的方法的权限。3. 覆写的方法的方法名、返回值类型、参数列表必须完全一致。4. 子类不能覆写父类中被final修饰的方法。 5. 静态方法是不能覆写的。6. 父类中的方法没有抛异常,子类不能抛异常,而且子类抛出异常的类型不大于父类,个数也不大于父类。public class Personprivate String name;private int age;public void setName(String name) = name;public String getName()return ;public void setAge(int age)this.age = age;public int getAge()return this.age;Overridepublic String toString()return + + this.age;public static void main(String args)B per = new B();per.setName(张三);per.setAge(18);/ Object 给我们提供的toString方法返回的字符串是类名地址String msg = per.toString();System.out.println(msg);3.10.3 super关键字Java的每一个类都包含了this这个成员变量,其实还有一个变量叫super,这个super是指父类对象的内存空间,而不是父类对象的首地址和this不一样。Super的作用:1. 通过super可以在子类的构造方法中调用父类的构造方法,但是super调用父类的构造方法必须放在第一句。2. 通过super可以在子类的非静态的方法中,调用父类的成员变量。3. 通过super可以在子类的非静态的方法中,调用父类的成员方法。 注意:1.类中的this, super都不能在静态块中,静态方法中使用。 2. 在子类中不可能同时调用父类的构造方法又调用本类的构造方法class ParentString name = 李四;public Parent(String name) = name;public void say()System.out.println(你好);class Child extends ParentString name;/1.通过super可以在子类的构造方法中调用父类的构造方法,/但是super调用父类的构造方法必须放在第一句。public Child()/super(张三);/this(李四); 在子类中不可能同时调用父类的构造方法又调用本类的构造方法public Child(String name) = name;public void say()System.out.println(我的名字叫: + name);/ 2.通过super可以在子类的非静态的方法中,调用父类的成员变量。System.out.println(我的名字叫: + );/ 3.通过super可以在子类的非静态的方法中,调用父类的成员方法。super.say(); 3.11 final关键字final关键字可以修饰如下成员:1. 变量(成员变量,局部变量)A. 基本类型:常量B. 引用类型:被final修饰的变量(引用类型的变量)它不能再指向其它对象了,但对象中的属性可以改。2. 类: 被final修饰的类是不能继承的,也就是说它是最终类。3. 方法:被final修饰的方法是不能被覆写的。但是可以被子类继承。如果一个类中的方法全部被final修饰,那么这个类可以用final修饰3.12包与类的访问权限3.12.1包Java提出了一个包的概念,它解决是名字冲突问题。通过包给类提供了一个名字空间。包可以对类进行逻辑上的划分,对类进行分类管理。Java在同一个目录下不可以出现名字一样的JAVA类,本身操作系统也是不允许的。package com.hwgk.test45;public class Testpackage com.hwgk.test46;public class Test包要注意的事项:1. 包名全部要小写。2. 包名命名规范 com.huawei.项目名字.模块名字。3. package在一个类中只能写一遍。4. package必须放类文件中的第一行。注意: 1. 一个类访问另一个不在同一个包下的类,那么必须对这个访问的类用import关键字说明一下这个类的全名。2. 如果一个类访问一个包下的所有类,可以通过import 包名.*方法来引入。3. Java规定java.lang包下的类直接使用就可以了,不用使用import去引入。 类的全名就是 : 包名+类名3.12.2类的访问权限private默认访问权限protectedpublic在同一个类中YYYY在同一个包中NYYY在不同包中,通过继承NNYY在不同包中NNNY3.12 抽象类抽象类与方法的使用场景:当父类中的某些方法不确定如何实现的情况下,就把这个方法声明为抽象方法,一旦一个类中有抽象方法那么这个类就必须是抽象类。用abstract修饰的方法就是抽象方法,抽象方法是没有方法体的。抽象类就是让其它类来继承。用abstract修饰的类就是抽象类,抽象类中必须有抽象方法吗? 不一定。抽象类可以构造对象吗?答:不可以抽象类可以有构造方法吗?答:可以。抽象类中的构造方法是干什么用的?答:抽象类中的构造方法是为子类初始化用的。抽象类可不可以继承抽象类呢?答:可以Abstract可以修饰成员变量吗?答:不可以Abstract可以修饰构造方法吗?答:不可以abstract关键字不能和哪些关键字共用1. 当abstract修饰类的时候,不能和final共用,为什么?a) 因为抽象类就是为了继承的,用final修饰以后这个类就不能继承了。2. 当abstract修饰方法的时候,不能和private一起用,为什么?a) 因为抽象方法是让子类继承并重写的,用private修饰之后这个抽象方法就不能继承。3. 当abstract修饰方法的时候,不能和static一起用,为什么?a) 因为static方法可以通过类名访问,如果我们使用抽象方法的类名.抽象方法这是没有意义的。3.13 接口声明一个接口:interface 接口名接口注意事项:1. 接口中的方法只能是抽象方法,也就是说接口中没有具体方法(JDK1.8之前)2. 接口中的方法默认是用public abstract修饰的。接口中的方法全部都是公共的,不能是其它的权限。3. 接口中的成员变量默认是用public static final 修饰的。4. 接口中没有构造方法。5. 接口可以多实现,实现关键字是implements6. 接口可以继承接口,而且可以多继承。7. 接口可以继承抽象类吗?不可以8. 抽象类可实现接口?可以接口与抽象类的区别:1. 抽象类中可以有具体方法,接口中的方法全部都是抽象。2. 一个类只可以继承一个抽象类,但是可以实现多个接口。3. 抽象类中可以有构造方法,接口中不可以。4. 接口中的方法默认是用public abstract修饰的,接口中的成员变量默认是用public static final 修饰的5. 接口中的抽象方法可以不用abstract修饰,而抽象类中的抽象方法必须用abstract修饰。接口作用:1. 在团队开发中,可以用接口来规范对象的方法签名。2. 接口可以用来解藕(减少类之间关系)。3. 可以用来封装常量。(枚举JDK1.5)4. 可以起到功能的标识作用。3.14 多态多态就是父类的引用指向子类的对象,多态的前提条件是继承,实现class PPublic void A();class C extends P Pubic void b();P object = new C(); / 多态一个对象有多种形态老师儿子父亲丈夫当一个对象的类型是它的父类类型时只可以使用父类中声明的方法,如果要使用子类的方法那么必须进行向下类型转换P object = new C(); / 多态Object.a(); / 可以Object.b(); / 不可以C object2 = (C)object;object2.b(); / 可以了instaceof这个关键字是判断一个对象是否属于某个类型的。多态的优点:多态可以使用程序更易于扩展和维护多态的缺点:当在多态的情况下,如果要使用子类的方法,还必须要进行向下类型转换。向下类型转换时要注意一定要确保要转换的目标类型是当前类型的子类,如果不确保就用instanceof来判断。多态的例子:4. 内部类4.1内部类概述当一个类声明在另外一个类中,那这个类就叫做内部类。内部类也是封装的一种体现。如果一类的对象,只在某一个类中使用的话,可以声明为内部类。如果一类与另一个类存在组合关系,可以声明为内部类。人体 心脏class Bodyclass Heart4.2 成员内部类的访问方式成员内部类就是写在一个类中的类就叫做成员内部类。成员内部类的字节码文件的命名规范:“外部类$内部类.class”成员内部类可以直接访问外部类的成员,甚至是private也可以直接访问。外部类要想访问内部类的成员,必须通过创建内部类对象,然后通过内部类对象来访问。在外部类之外的类如何访问内部类的方法?1. 要在其它类中实例化成员内部类。外部类名.内部类名 内部类的对象名 = new 外部类名().new 内部类名();注意:成员内部类对象的实例化前提是要通过外部类的对象进行实例化。2. 内部类的对象名.方法名。4.3 私有成员内部类私有成员内部类对象无法在外部类以外的类中实例化,只能在外部类中实例化。私有成员内部类与普通成员内部类的区别:1. 外部类以外的类不实例化内部类的对象4.4 静态成员内部类静态成员内部类就是通过static修饰的内部类。注意:1. 静态成员内部类中的方法不能访问外部类中非静态的成员。2. 静态成员内部类实例化可以不通过外部类的对象就可以实现化。外部类名.静态成员内部类名 内部对象名 = new 外部类名.静态成员内部类名();4.5 局部内部类局部内部类就是在外部类的方法中声明的类就是局部内部类。注意:1. 局部内部类要访问外围方法的变量时,这个变量必须是用final来修饰的。4.6 匿名内部类一个没有名字的内部类叫做匿名内部类匿名内部类必须要显示继承或实现一个父类来声明。格式:new 父类();匿名内部类的特点:1. 匿名内部类必须要显示继承或实现一个父类2. 匿名内部类只能有一个对象。3. 匿名内部类不可以显示声明构造方法。为什么?因为构造方法的名字和类名是一个类的,匿名内部类根本就没有类名,所以不能显示的在类的内部声明构造方法。4. 匿名内部在声明这个类的同时,实例化了这个类的对象。5. 在匿名内部类中声明的public的成员(父类没有的成员)是无法访问的。5. 异常什么是异常? 我们把程序中出现的问题封装成一个类,这个类就叫做异常类。5.1 现实生活的病病|-不可治好|-可治好的 |-去医院 |-不去医院的5.2 Java异常体系图Throwable|-Error 不可修复的异常|-Exception |-Exception子类 (受检查) |-RuntimeException子类 (运行时)5.3 Throwable类只要是继承了Throwable的类,那么这个类就是一个异常类。但我们在平时开发中不直接继承Throwable类而继承Exception, RuntimeException。通过API学习一个类的顺序:1. 看类所在包2. 类的描述3. 类的构造方法4. 类的成员考虑问题Throwable中的方法或者属性。1. 错误的原因(属性)2. 错误通过方法来获取的。3. 错误的轨迹Throwable构造方法1. Throwable无参默认的构造方法2. Throwable(String message) message 错误的原因Throwable的普通方法1. getMessage()这个方法是获取构造时传的错误信息。2. toString()返回是类名:错误信息。3. printStackTrace() 把异常栈信息打印到控制台上。异常处理的统一的流程1. 当一个方法出现了异常,它(程序自已或JVM)会把这个异常封装成一个异常对象。2. 调用出现问题的方法如果处理不了再继续抛出,一直抛给JVM3. JVM就调用异常的printStackTrace()把异常打印到控制台上。5.4 程序中的异常处理5.4.1 自行处理处理方式1.try/ 可能出异常的代码catch(异常类型 e)/ 处理异常的JAVA代码处理方法2try/ 可能出异常的代码catch(异常类型1 e)/ 处理异常的JAVA代码catch(异常类型2 e)/ 处理异常的JAVA代码 。注意:在处理多种类型异常的时候,大类型要放到最后一个catch上,否则编译出错。5.4.2抛出处理throw new Throwable或其子类();throws 用在方法上的编译时检查异常和运行时异常编译时检查异常就是:Exception的子类,不是RumtimeException的子类。运行时异常就是: RuntimeException的子类。区别:当一个方法中的语句抛出了“编译时检查异常”,编译器会要求你必须处理。 当一个方法中的语句抛出了“运行时异常”,编译器不会检查。throw: 当程序出问题,并且解决不了时,我们给方法的调方抛出一个异常对象。注意:只能抛出一个异常对象throws: 是声明在方法上的,它表明了调用这个方法可能会出现的异常,一般来说throws后面跟的都是“编译时检查异”,throws关键字的目的就是为了让调用方来显示的处理问题。注意:throws后面可以跟多个异常类型。总结:什么时候用try catch? 什么时候用throws throw处理问题?当问题我们能够处理时用try catch,当问题处理不了时用throws throw。5.5 自定义异常当程序中出现了问题,我们要通过抛出方法来通知调用方,这时我们所做第一件事情就是找对应异常类型,如果在已知的异常类型中没的话,那么我们必须进行自定义异常!自定义异常的步骤是:1. 继承Throwable或者Exception或者RuntimeException。2. 根据实际情况写相应异常的方法。5.6 finallyfinally的90%作用是释放资源用的。Finally一定要和try一起用,finally不能单独存在1. 方式一:FileInpu

温馨提示

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

评论

0/150

提交评论