三大特征
1、 封装性,把相关的数据封装成一个“类”组件
2、 继承性,是子类自动共享父类属性和方法,这是类之间的一种关系
3、 多态,增强软件的灵活性和重用性
类
1、 Java语言最基本单位就是类,类似于类型。
2、 类是一类事物的抽象。
3、 可以理解为模板或者设计图纸。
4、 类通过关键字class创建
对象
每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
1、 对象的状态用来描述对象的基本特征。
2、 对象的行为用来描述对象的功能。
3、 对象的标识是指对象在内存中都有一个唯一的地址用来和其他对象区分开来。
4、 类是一类事物的抽象,对象是具体的实现。
用new关键字来创建对象,匿名对象一次只能干一个活。
类和对象的关系
1、 属性+行为
2、 通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法。
对象在内存中的存储
1、 一般来讲局部变量存在栈中,方法执行完毕内存就被释放,特点是先进后出。
2、 对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
3、 每个堆内存的元素都有地址值
4、 对象中的属性都是有默认值的
封装
概述
封装是指隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式。
好处:
1、 提高安全性
2、 提高重用性
是通过private关键字这个权限修饰符来实现的,用于修饰成员变量和成员函数,被私有化的成员只能在本类中访问,想要修改或获得成员变量只能,通过对外提供公共的get和set方法来实现。想要调用成员函数只能通过创建一个对外提供公共的show方法,间接调用。
this关键字
概念
this代表本类对象的一个引用对象,相当于this在底层创建了一个本类对象。
this可以调用本类的成员(成员变量/方法)。
构造函数中,this()必须放在第一行。
当局部变量和成员变量同名时,基于就近原则,都是优先使用局部变量,那么要想使用成员变量就要通过this来实现。还有当同一个类里的 构造方法 互相调用时,也需要使用this
继承
概念
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。生活中比如儿子继承父亲的财产。
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类/超类/基类。
提高代码的复用性,缩短开发周期,降低开发费用。
特点
1、 使用extends关键字实现继承关系。
2、 相当于子类把父类的功能复制了一份。
3、 java只支持单继承,像是is a 的关系,是一种强制的依赖关系,又叫强耦合。这种关系并不提倡。
4、 继承可以传递(爷爷,儿子,孙子的关系)。
5、 不能继承父类的私有成员和构造方法。
6、 继承多用于功能的修改,子类可以拥有父类的功能的同时,进行功能拓展和对父类功能的修改。
super关键字
1、 通过super关键字可以使用父类的内容
2、 super代表父类的一个引用对象
3、 如果用,必须出现在调用位置的第一行
4、 子类和父类中没有同名资源的时候一般都是省略super,相反则必须用super才能调用父类的内容
static
概念
1、 是java中的一个关键字
2、 用于修饰成员(成员变量和成员方法)
特点
1、 可以修饰成员变量,成员方法
2、 随着类的加载而加载,优先于对象加载
3、 只加载一次,就会一直存在,不再开辟新空间
4、 全局唯一,全局共享
5、 可以直接被类名调用
6、 静态只能调用静态,非静态可以随意调用
7、 static不能和this或者super共用,因为有static时可能还没有对象
final
概念
1、 是java提供的一个关键字
2、 final是最终的意思
3、 final可以修饰类,方法,成员变量
特点
1、 被final修饰的类,不能被继承
2、 被final修饰的方法,不能被重写
3、 被final修饰的变量是个常量,值不能被更改
4、 常量的定义形式: final 数据类型 常量名 = 值
多态
概念
多态指同一个实体同时具有多种形式。
主要是指同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。
好处是可以把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。提高了程序的灵活性
特点
1、 多态的前提是继承
2、 要有方法的重写
3、 父类引用指向子类对象,如:Animal a = new Dog(); -- 小到大,向上转型
4、 多态中,编译看左边,运行看右边
想要保存成功,只能使用 左边 父类的
结果以右边 子类 为准
5、 多态中如果想使用子类特有的方法,除了new子类对象这一个方法外,还可以使用向下造型,思路就和变量中,大转小要强转一样。
如:Animal a = new Dog();
Dog d=(Dog)a;
多态的好处
1、 多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法。
2、 提高了程序的扩展性和可维护性
异常
概述
是指程序中出现的bug,用来封装错误信息的对象。
组成结构:类型,提示,行号。
异常的继承结构
Throwable - 顶级父类
-- Error:系统错误,无法修复,不是软件问题,不关注
-- Exception:软件的bug,可修复的错误
--RunTimeException
--ClassCastException
--ClassNotFoundException
异常处理
程序中遇到了异常,通常有两种处理方式:捕获或者向上抛出。
当调用了一个抛出异常的方法时,调用位置可以不做处理继续向上抛出也可以捕获异常。
1、捕获方式:
try{
需要捕获的代码
}catch(异常类型 异常名){
处理方案}
捕获异常的时候如果还有很多的异常要处理,但是又不知道具体的异常类型,可以用Exception。因为所有的异常都是Exception的子类。
开发阶段打印堆栈的跟踪信息,用异常里的printStackTrace()方法
项目上线后可以用输出语句,给用户看。
2、抛出方式:
在会发生异常的方法上添加代码:throws 异常类型(可以抛多个异常,用,号分开)
例如: public static void main(String[] args) throws Exception{}
抛出异常的时候如果还有很多的异常要处理,但是又不知道具体的异常类型,可以用Exception。因为所有的异常都是Exception的子类。
3、代码在执行时,如果出现异常,不管是把异常抛出还是捕获异常,之后的代码都不会继续执行。这时我们可以用关键字finally来让后面的代码继续执行,一般finally也是配合try{}catch(){}来用的。
抽象类
概念
Java中可以定义没有方法体的方法,该方法由其子类来具体的实现。该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。
抽象类可以理解为是一个只有方法声明没有方法体的特殊类,特殊在可以有普通方法也可以有抽象方法。
特点
1、 通过java关键字abstract实现
2、 可以修饰方法或者类
3、 抽象类中可以没有抽象方法(由子类去实现),为了不让外界随便new对象
4、 如果类中有抽象方法,那该类必须定义为一个抽象类
5、 子类继承了抽象类以后,要么还是一个抽象类,要么就把所有抽象方法都重写
6、 多用于多态中
7、 抽象类不可以被实例化
8、 抽象类虽然不能被实例化,也就是不能被new对象,但是也是有构造方法的,目的是为了让子类new对象,子类在new对象时,触发的构造方法,方法体的第一行默认就有super();就会调用父类的构造方法的
总结:
1、抽象类里有 变量和常量吗?--都有
2、通常用来修饰父类层
3、抽象类是程序设计的结果
4、父类中有些方法的方法体会被子类重写,父类就可以不提供方法体
5、没有方法体的方法,父类就可以修饰成一个抽象方法
6、重写方法时:要有足够的权限,只是抽象方法必须重写,,对于普通方法没要求
接口
概念
Java里面由于不允许多重继承,所以如果要实现多个类的功能,则可以通过实现多个接口来实现。
Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程,正确地使用接口、抽象类这些太有用的抽象类型做为java结构层次上的顶层。
interface 接口名{ 代码… }
特点
1、 接口中都是抽象方法
2、 通过interface关键字创建接口
3、 通过implements让子类来实现,一般实现类的规范写法是在类名后面加Impl。实现类如果不重写接口的所有抽象方法,就是一个抽象的实现类
4、 可以理解成,接口是一个特殊的抽象类
5、 接口突破了java的单继承的局限性
6、 接口和类之间可以多实现(逗号隔开),接口和接口之间可以多继承(逗号隔开)
7、 接口是对外暴露的规则,是一套开发规范
8、 接口提高了程序的功能扩展,降低了耦合性
9、 接口里没有构造方法,没有变量
10、接口里常量和抽象方法可以简写,底层会自动为简写形式拼接代码
11、接口里的资源默认都是public的
12、实现类里的构造方法,隐藏的super(),在创建对象的时候调用的是object类的构造方法
13、接口里的普通方法可以用default、static来修饰(接口里可以有普通方法是在JDK1.8支持的)
总结:
--1,类与类的关系
--是 继承关系,,而且是单根继承
--class A extends B
--其中,A是子类,B是父类
--继承中,private和构造方法是不能被继承的
--A可以继承B的所有功能(除了private)
--A还可以进行功能扩展
--A还可以 修改 原有功能,,叫方法重写
--重写的要求:子类的方法声明必须和父类一样 + 有足够的权限
--重写 不影响原有功能,影响的是子类自己的
--OCP原则开闭原则,是针对源码修改关闭的,对功能扩展开放
--2,接口和接口的关系
--是 继承关系,而且可以多继承
--突破了java单继承的局限性
--interface A extends B , C
--其中,A是子接口,B和C是父接口
--A 可以同时拥有B和C的所有功能
--class X implements A
--其中,X是实现类,A是接口
--X 需要重写A B C 接口里的所有抽象方法
--3,类和接口的关系
--是 实现关系,,而且可以多实现
--class A implements B , C
--其中,A叫实现类,B和C是接口
--A 需要重写B和C里的 所有抽象方法
--在继承的同时 多实现
--class X extends Y implements M,N
--其中,X是实现类, Y是父类 ,M和N是接口
--X 需要重写 Y M N里的 所有抽象方法
--否则就是一个抽象的X
--4,接口和抽象类的区别
--相同点
--都不能实例化
--都是用来优化抽象层
--不同点
--语法不同,修饰抽象类使用abstract,修饰接口用interface
--抽象类里有常量,也有变量
--接口里只有常量,而且可以简写
--抽象类里的方法可以是普通方法也可以是抽象方法,不能简写
--接口里的方法都是抽象方法,也可以简写
--抽象类里有构造方法,用来给子类new
--接口里没有构造方法
断点模式 DeBug
用来在开发阶段跟踪和调试代码
步骤:
1.设置断点:需要看的代码的那行在最左侧鼠标双击
2.激活断点模式:点击工具类里的小虫子图标
3.向下执行一行代码:ecplise里是f6 IDEA里是F8
4.结束断点模式:ecplise里是f8 IDEA里是按小红框或Ctrl+F2