Java的面向对象

面向对象


什么是对象呢?老师说过万物皆对象。每个对象都具有各自的状态特征(也可以称为属性)及行为特征(方法),java就是通过对象之间行为的交互来解决问题的。

   三大特征

  • 封装:核心思想就是“隐藏细节”、“数据安全”,将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。所有的内容对外部不可见。
  • 继承:子类可以继承父类的属性和方法,并对其进行拓展。将其他的功能继承下来继续发展 。
  • 多态:同一种类型的对象执行同一个方法时可以表现出不同的行为特征。通过继承的上下转型、接口的回调以及方法的重写和重载可以实现多态。方法的重载本身就是一个多态性的体现。

类与对象

类是对某一类事物的抽象描述,对象用于表示现实中该类事物的个体。

类必须通过对象才可以使用,对象的所有操作都在类中定义。

类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也被称作属性,成员方法用于描述对象的行为,可简称为方法。

对象的创建与使用:类名 对象名=new 类名();

所有类的对象都是通过new关键字创建

访问类中的属性: 对象.属性;

调用类中的方法: 对象.方法(实际参数列表) ;

  • 类必须编写在.java文件中
  • 一个.java文件中,可以存在N个类,但是只能存在一个public修饰的类
  • .java文件的文件名必须与public修饰的类名完全一直
  • 同一个包中不能有重名的类

类的封装:私有化属性,创建getter与setter方法

匿名对象

没有对象名称的对象就是匿名对象 (栈内存中没有名字,而堆内存中有对象)
匿名对象只能使用一次,因为没有任何的对象引用,所以将称为垃圾,等待被GC回收
只使用一次的对象可以通过匿名对象的方式完成,这一点在以后的开发中将经常使用到


构造方法


构造方法的定义:

  • 方法名与类名相同
  • 在方法名的前面没有返回值类型的声明
  • 在方法中不能使用return语句返回一个值,但是可以单独写return语句来作为方法的结束

构造方法的重载:

  • Java中每一个类中都至少有一个构造函数,如果没有定义,那么系统会自动创建一个默认的无参构造函数;一旦定义构造函数,那么默认的无参构造就不会创建
  • 重载只看方法名以及方法参数,无关返回值

修饰符


控制访问修饰符


Java中,可以使用控制访问的修饰符来控制其访问权限,从而实现对类、成员变量和方法访问的保护

public
public:公共的,共有的

public:可以修饰类,成员变量和方法

public:表示对所有的类都开放,可以被所有的类访问,如果被访问的public类与使用类不在一个包下,就需要先导入被访问public类的包

protected
protected:被保护的

protected:可以修饰成员变量、方法和内部类,它不能用来修饰类,它也不能用来修饰接口、接口的成员变量和接口的方法

被protected修饰的只能被同一包中的类和子类访问

default
default:默认的

使用default就相当于不添加控制访问的修饰符,它能修饰类,成员变量和方法

被default修饰的只能被同包下的类所访问

private
private:私有的

private不允许用来修饰类(但是可以修饰内部类),它能够修饰成员变量和方法

被private修饰的只能被本类所访问

非控制访问的修饰符


非控制访问的修饰符就是用来实现其他的一些功能

static
static:静态的
static修饰符用来修饰变量和方法

  • 静态变量:static关键字用来声明独立于对象的静态变量,无论一个类有多少个实例化对象,它的静态变量都只有一份,它同类一起加载,所以它不需要实例化类,就能被使用。静态变量也称作类变量。这里注意局部变量不能声明为static变量
  • 静态方法:static用来声明独立于对象的静态方法,静态方法中不能使用非静态的成员变量和非静态方法。它也是和类同时加载,所以它也不需要实例化类,就可以直接被使用

final
final:最终的
final修饰符用来修饰类、成员变量和方法

final类:表示最终的类,该类不允许被继承

final变量:表示最终的变量,该变量一经赋值,就不能被修改

final方法:表示最终的方法,它能被子类所继承,但是该方法不能被子类所重写

abstract
abstract:抽象的

abstract用来修饰类和方法

  • 抽象类:抽象类不能用来实例化对象,声明抽象类的唯一目的是为了对该类进行扩充,一个类不能被abstract和final同时修饰,如果一个类中含有抽象方法,该类一定要声明为抽象类。但是抽象类中可以包含抽象方法和非抽象方法
  • 抽象方法:抽象方法是一种没有实现的方法,它不包含方法体,没有{},它就是为了让继承此类的子类将其实现,抽象方法不能用final和static修饰

synchronized
synchronized:同步的

synchronized用于修饰方法,还可用做代码块的修饰

synchronized修饰的方法或者代码块,在同一时间内只能被一个线程所访问

transient
transient:短暂的
transient用于修饰成员变量

transient包含在定义变量的语句中,用来预处理类和变量的数据类型。序列化的对象包含被transient修饰的实例变量时,JVM会跳过该特定的变量

volatile
volatile:不稳定的
volatile用于修饰成员变量

volatile修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。当成员变量发生变化时,会强制线程将变化值回写到共享内存中。这样在任何时候,两个不同的线程总是看到某个成员变量的同一个值

内部类


在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类

  • 成员内部类
  • 局部内部类
  • 匿名内部类
  • 静态内部类

抽象类


抽象类必须使用abstract

一个抽象类中可以没有抽象方法,抽象方法必须写在抽象类或者接口中

抽象方法(不能被实例化)

  • 只声明而未实现的方法称为抽象方法(未实现指的是:没有{}方法体),抽象方法必须使用abstract关键字声明
  • 抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。 不能被我们创建,但是jvm虚拟器可以创建
  • 一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须重写抽象类中的全部抽象方法
  • 抽象方法没有方法体,不可以被调用

类的继承


在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称为父类,子类会自动拥有父类的所有可继承的属性和方法

  • 在Java中,一个类想要继承另一个类,需要使用关键字 extends
  • 在Java中,类只支持单继承
  • 多个类可以继承一个父类
  • 在Java中,多层继承是可以的
  • 在继承中,子类自动拥有父类的所有可继承的属性和方法,但是可以对继承而来的父类的方法和属性进行重写,但在重写时需注意访问权限(不能低于父类的权限)
  • 在子类中想要调用父类的方法,可以使用super关键字,使用super关键字可以访问父类的成员变量和成员方法,也可以访问父类的构造函数(调用构造函数时必须要放在第一行)

接口


Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)

  • 定义接口的关键字是 interface
  • 接口的实现关键字是 implements
  • 接口中只能有常量和未实现的方法
  • 类可以单继承,接口可以多实现,多个接口使用逗号隔开,一个类在继承类后,还可以实现接口,但是继承必须在前

多态


多态就是对象的多种表现形式,在类中有子类和父类之分,子类就是父类的一种形态 ,对象多态性就从此而来

  • 重载:一个类中方法的多态性体现 
  • 重写:子父类中方法的多态性体现
  • 对象的类型转换:子类对象转父类,直接转换即可,父类对象转子类,需要进行类型判断,不然会报错 (instanceof可以判断当前对象是否属于这个类型)
  • Object是所有类的父类

异常 


Java中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类 

  • 异常的父类:Throwable,它有两个子类,分别是Error与Exception;
  • Error称为错误类,表示Java程序在运行时产生的系统内部错误或资源耗尽的错误,这类仅依靠修改代码不能恢复执行
  • Exception称为异常类,表示程序本身可以处理的错误
  • Exception:异常类分两种,一种是RuntimeException(运行时异常),一种是编译时异常

异常的处理方式

  • 使用try{}catch(){}finally{}语句处理异常,try{}这个里面写的是可能会出现异常的代码,catch(){}这个里面写的是捕获到的异常,以及捕获到相应异常后的处理,finally{}不管之前的代码是否有异常都会执行的语句(除非调用System.exit())
  • 使用Throws关键字处理异常,往往会在声明一个方法时使用Throws抛出异常,表示当前方法存在异常,在调用该方法时应当处理这个异常,否则会出现编译时异常

自定义异常:继承Exception或其子类
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值