1、1 类和对象1.1 类:类是用来描述一类事物的共性内容的, 类是抽象的 ;创建类,如何描述属性 功能用变量来描述属性用方法来描述功能1.2 对象: 就是现实中具体的事物,对象是具体的;创建对象类名 对象名 = new 类名();如何通过对象访问类中属性和方法呢?对象名.变量名对象名.方法名();只要是 new 的对象 ,就是新创建的 ,就会在内存中开辟一段单独的空间1.2 匿名对象创建的对象没有赋值给具体的变量;所以给匿名对象的属性赋值是没有任何意义的;匿名对象使用场景1 调用方法2 作为参数传递3 添加进容器中1.3 This 关键字This. 类中的普通方法访问到的成员前边都有 this.
2、这个关键字This. 就代表当前对象,普通方法, 创建对象调方法, 谁调用就代表谁This(); 可以用来在构造函数中调用本类与之相对应的构造函数使用注意事项:1 this() 只能是构造函数的第一条执行语句2 this() 不能在构造函数之间相互调用3 this() 不能调用自己1.4 构造函数 (方法)1.4.1 构造函数的作用 用来给对象进行初始话的(初始化就是指给对象的各个属性赋值)1.4.2 构造函数何时执行对象一创建就会调用与之相对应的构造函数1.4.3 构造函数语法修饰符 没有返回值类型 类名(参数列表)具体执行的代码1.4.4 构造函数自动添加当一个类中我们没有明确指定构造函数
3、的话,jvm 会自动帮我们添加一个空参数的构造,如果我们指定了,就不添加了1.5.5 构造函数和普通函数的区别5.1 执行时机不同对象一创建就会调用与之相对应的构造函数普通函数只有被调用才会执行1.5 return 1 就是用来在方法中返回具体结果( 结果类型必须和方法的返回值类型一致)2 即便方法的返回值类型是 void,方法中也可以出现 return;3 构造函数中也可以有 return 关键字1.6 成员变量 和 局部变量1 作用范围不同, 成员变量是定义在类中的 ,在整个类中都起作用局部变量是定义在方法中的,在所在代码块起作用2 初始值不同, 成员变量有默认初始值 ,不用赋值, 也能直
4、接时候局部变量,没有初始值, 必须得赋值以后才能使用2 封装2.1 staticStatic 是用来修饰类中成员 成员变量 成员方法被 static 修饰的成员,就多了一种调用方式 ,可以被类名直接调用了2.1.1 修饰成员变量该变量在内存中只会保存一份,被类和所有对象共享 , 那么一个对象对其进行修改, 会影响到其他对象, 为了不影响其他对象, 经常会把静态变量搞成常量, 被 final修饰;2.1.2 修饰成员方法静态方法中只能访问静态成员普通方法中都能访问;静态方法中不能出现 this,super 关键字Main 函数是静态的;那么我们定义方法时,什么时候定义静态,什么时候定义非静态?当
5、方法中使用到了普通(非静态) 成员的话,就不能定义成静态的;2.1.3 static 代码块 (静态代码块)用来给类进行初始话 (给类中的静态成员进行初始化)会随着类的加载而执行(只会执行一次)2.2 封装就是隐藏类中的某些成员;仅对外提供公共的访问方式封装三步走:1 私有属性2 提供 set 和 get 方法供外界给对象设置值和获取值3 在方法中添加具体的存取限制2.3 包和权限修饰符2.3.1 类 权限修饰符可以用来修饰两种东西:Public 该类在其他包中也可以访问 (首先要导包 import)默认2.3.2 类中成员Public protected 默认 private本类中是否能访问
6、 本包其他类 其他包Public 能 能 能默认 能 能 不能Private 能 不能 不能包1 创建包2 声明包 package com.wanshi.day0803;3 导入包 import java.util.Scanner;包的作用1 便于管理2 防止命名冲突;3 包 也是封装的一种方式,可以在更广的范围保护类3 继承某个类 可以 通过 extends 继承其他的类一个类继承了另外一个类以后,就继承了所有的非私有的属性和方法注意事项1 java 中只允许单继承; 不允许多继承, 但是允许多层继承2 何时继承? A is B;继承发生以后类中成员的特点1 成员变量当子类和父类的成员变量同
7、名是,子类中优先使用子类自己的 . 可以通过 super.调用父类的成员变量和成员方法;2 成员方法子父类具有相同的功能,但是子类有自己具体的实现 ,这个时候子类是没有必要重新定义一个方法的,只需要重写父类就行了;重写 (覆盖)1 前提, 存在继承 和 实现关系2 方法名一样,参数列表一样 ,返回值类型一样(jdk5 以后要求子类的返回值类型是父类返回值类型的子类也行)3 子类方法的权限不能小于父类4 子类方法不能抛出比父类更多的异常重载同一个类中,方法名一样, 参数列表不一样( 参数数量, 参数类型),与返回值类型无关3 构造函数1 构造函数是不能继承的;2 但是子类可以在构造函数中通过 s
8、uper()调用父类与之相对应的构造3 如果子类构造函数首行没有明确指定 this(), super(“”);这样的语句的话,其实是有一天隐式语句 super(),调用父类空参数构造,如果父类没有空参数构造的话,子类是会报错的;4 如果子类首行有 this() 这样的语句的话,就没有隐式语句 super();5 不论子类的第一行有没有 this(),super(); 创建子类对象的时候一定会调用到父类的某个构造;4 与上帝相关 Object1 任何类 java 中自带的类, 或者是我们自定义的类, 都直接或间接的继承自Object;2 如果某个类没有明确指定 父类的话,那么这个类就默认继承自
9、Object;3 所有 Object 中定义的方法所有 java 对象都可以调用4 比如 toString() equals(Object object)5 直接打印对象的话.我们发现出现的是对象的内存地址值,因为打印对象就是打印的对象的 toString()方法的返回值 . 而 Object 身上定义的 toString 方法返回的就是对象的内存地址值,这个时候这需要我们重写 toString 方法以后, 调用的就是子类自己的 toString方法了5 抽象类1 发现该类事物都具备该功能,但是不确定如何实现, 就可以定义成抽象方法2 抽象方法特点 没有方法体, 被 abstract 修饰3
10、如果一个类中有抽象方法,这个类也必须得是抽象类4 如果一个类继承了抽象类以后,这个类要么是抽象的,要么必须实现抽象类中的所有抽象方法5 抽象类和普通类的不同;抽象类不能被实例化对象;6 为什么不能实例化对象因为创建对象以后就可以通过对象调用抽象类中没有方法体的抽象方法了,这样是没有意义的,为了不让调用,干脆就不让创建对象了;7 抽象类有没有构造函数?抽象类天生就是被继承的,然后创建子类对象的时候一定会调用到父类构造8 抽象类中可以没有抽象方法;6 Final 1 常量 不能重新赋值2 类 该类不能被继承 不能派生子类3 方法 该方法不能被重写( 覆盖)7 Abstract 修饰方法 和三个关键
11、字冲突1 final 2 static 3 private 8 super 关键字1 super. 指代父类对象的引用 可以通过 super.调用父类的属性和方法2 可以通过 super() 在构造函数中调用父类与之相对应的构造函数4 多态4.1 多态的体现Animal animal = new Pig();父类的引用指向了子类对象左边声明的是父类,右边创建的是子类;4.2 多态的前提存在继承或 实现关系4.3 多态的好处简化了代码;大大提高了程序扩张性;4.4 多态的弊端只能调用父类共有的方法,不能调用子类特有的方法4.5 多态的应用Animal animal = new Pig();能不能
12、调用看左边, 具体调用谁的看右边;非要调用子类特有的方法需要强转, 向下转型:强制把父类的应用转成子类对象 ;向下转型容易出问题, 为了防止类型映射异常,最好在强转以前进行类型判断;Instanceof 4.6 多态的应用场景4.6.1 定义方法的时候 ,形式参数的类型声明为父类, 这样调用方法的时候就可以传递该父类的任意子类对象进来了;4.6.2 以父类作为方法的返回值类型,5 接口1 如何定义一个接口, interface 2 初期理解,接口就是里边都是抽象方法的抽象类3 接口中成员 接口中只能有两种成员3.1 抽象方法3.2 静态常量4 接口中的成员都有固定的修饰符,可以省略抽象方法的
13、public abstract 静态常量的 public final static 5 接口和抽象类都不能实例化对象6 接口是没有构造函数的,7 接口支持多实现 implements A,B,C ,D8 一个类在继承了一个类的同 时还可以实现多个接口9 接口和接口之间也有关系,是继承关系10 接口和接口之间支持多继承2 何时使用接口2.1 接口是额外的功能2.2 接口预先定义好的规则6 异常程序运行中的不正常事件,会导致程序终止运行,1 try Try可能出现异常的代码2 catchCatch(要捕获的异常对象)捕获住异常执行的代码;e.printStackTrace();3 finallyF
14、inally不论是否发生异常;不论发生异常之后能不能捕获住异常,都会执行的代码即便 try catch 中有 return 语句,也是先执行完 finally 中的代码, 再 return;Finally 不执行的唯一情况是 try catch 中碰到 System.exit(1);4 多重 catch 语句块;Try 中代码发生异常以后,会从上往下依次匹配 catch 代码块,匹配上某一个的话就不继续往下匹配了;我们经常会在多个 catch 的最后 catch 一个最大的 Exception, 起一个兜底的操作,就是即便发生了我们没有预料到的异常,程序也不会终止掉 ,并且 最大的异常应该放在最后一个 catch 块 ;5 throws throwThrows 用来在方法上抛出多个异常类的, 各个异常类之间用 逗号分隔开Throw 用来在方法内部抛出一个异常对象我们调用到了声明过异常的方法,必须进行处理,两种处理方式,要么抛, 要么 try;6 自定义异常自定义一个类继承 Exception 就是异常类了;public class NoFriendException extends ExceptionNoFriendException()NoFriendException(String message)super(message);