二、Java面向对象

一、类与对象

1、编程思想

1.一门编程语言在设计时采用的核心思想,称之为编程思想

2.常见的编程思想

        【1】面向过程

                该语言是以算法或者是业务流程的步骤为核心,进行编程

                在面向过程的编程语言中,会存在独立的函数结构,而且函数结构是该语言中的高级公民

                常见的面向过程的语言:C

        【2】面向对象

                该语言是以整个程序运行为核心,在编程代码,是以一个个类来完成编写

                在面向对向的编程语言中,对象是运行起来的最基本单位,所有的信息都必须依附于对象存在

                最常见的面向对象编程语言:Java、C++、C#、Python、JavaScript 等

                最大的特点就是和人类的正常思想保持一致

2、类(类型)

1.本身是一个抽象的概念,是根据具有相同特点和行为的个体进行总体和抽象后,所形成的概念

2.是Java编写的最基本单位

3.类的组成

        属性:该类型个体所具有的结构特征,是能够直接观察到的

        方法:该类型个体所具有的行为能力,需要其进行表现,才能够体现

4.在Java代码中,使用 class 定义类型

        使用变量声明或者是初始化体现属性

                使用变量声明语法结构,那么无法预知该类型以后的具体个体的具体外贸特征

                使用变量初始化语法结构,那么表明能够明确该类型所有个体对应该类型的默认样子

        使用方法语法结构体现方法

3、对象

1.是一个具体的个体,通过抽象的类型这一概念进行创建,真的是参与了 Java 程序的运行

2.是 Java 程序运行起来后的最基本单位

3.对象的组成

        属性:此时每个具体的对象都具有了具体的属性对象

        方法

4、通过类创建对象

1.使用 new 关键字可以通过类来创建一个具体的该类的对象:类型名称  对象名 = new 类型名称();

2.使用对象的属性和方法

        通过 "." 来表示使用该对象的属性或者方法

                获得属性值:对象名.属性名;

                为属性赋值:对象名.属性名=属性值();

        可以将 "." 理解为 “的”

3.构造方法

        和 new 关键字一起使用,用于创建对象的方法,称之为构造方法

        构造方法语法:

                修饰词  类名  ([参数列表])  {

                        //构造方法方法体

                }

                构造方法的方法名必须和类名相同

                构造方法没有返回值类型结构,也不能使用 void 关键字

        构造方法的规定:

                Java 要求所有的类都必须有构造方法

                如果某个类没有明确写出构造方法,那么Java 会为其提供一个默认的无参构造方法来提供使用。

                        public  类名()  {};

                如果一个类明确写出了构造方法,那么 Java 将不再提供那个默认的无参构造方法

4.Java创建对象的流程

【1】根据创建的数据类型,在虚拟机栈中开辟内存空间,并且将该虚拟机栈内从空间以对象名命名

【2】new 关键字开始创建对象

        根据该类的类信息,在堆内存中开启内存空间,用于存储该对象未来的数据;

        再根据该类的属性信息,将开辟好的堆内存空间进一步划分,用于存储各个属性值;

        new 关键字工作结束后,Java 会在虚拟机栈中开辟临时存储空间用于存储堆内存中该对象的堆内存地址,同时将该临时虚拟机栈内存空间命名为“this”;

【3】构造方法开始完成对对象的初始化工作,尤其是对各个属性的初始化

        如果构造方法中给定了初始值,那么按照构造方法中的值进行赋值

        如果构造方法中没给定初始值:

                如果创建类时,属性使用了初始化语法结构,那么使用创建类时属性的初始化的值作为默认值

                如果创建类时,属性使用的是声明语法结构,那么会按照 Java 的不同数据类型给定默认值

【4】进行赋值运算,将虚拟机栈中 this 临时内存中所储存的堆内存地址复制到对应的变量内存空间

【5】虚拟机栈中 this 临时变量出栈消失,对象创建完毕

5、Java虚拟机运行时内存分配

1.程序计数器

        用于记录下一条运行的代码信息

        在多线程时,每个线程都会存在独立的程序计数器,这从该线程再次回到运行状态时,就能够从计数器中获得即将要运行的代码

2.本地方法栈

        用来执行程序中所有使用关键字 native 修饰的方法执行的区域

3.方法区

        用于存储所有的类的类结构信息

        静态变量和常量,使用 static 修饰的变量

4.虚拟机栈

        虚拟机栈采用了 “栈 stack” 这一数据结构,其特点是先进去的数据最后出去;

        所有创建的变量,均在虚拟机栈中划分内存空间,也就是说变量存储在虚拟机中

                基本数据类型的值所占用空间较小,因此会直接存储在虚拟机栈中对应的变量空间中

                引用数据类型的值所占空间较大,因此会将数据存储在堆内存中,而虚拟机栈中对应的变量空间里会存储对应堆内存的地址信息

        Java 在根据变量名查找数据时,只会根据变量名在虚拟机栈中

6、static 关键字

1.表示“静态的” 这一概念

2.既可以修饰属性变量,也可以修饰方法

        普通的属性和方法,虽然定义在类中,但是最终是归对象所有,必须创建对象后,才能调用;

        使用 static 修饰的属性和方法将不在属于对象,而是属于类级别,是可以直接使用类进行调用;

        使用 static 修饰的属性不仅仅属于类级别,而且该类所创建的对象都使用同一个属性值;

        使用 static 修饰的方法,只能使用 static 修饰的属性,而且调用的其它方法也必须是 static 修饰的;

3.当使用 static 修饰代码块时,称之为静态代码块:

        static {

                //代码块

        }

        静态代码块的代码,会随着类的加载,就开始运行;

        由于类只会被加载一会,因此静态代码块也只会被执行一次;

7、开发中类的分类

1.该类着重于描述一类事物的样子,主要以对应属性为主,例如描述学生、车这样的概念,称之为 POJO;

        实体(Entity、DO:Data Object):这类 POJO 专门用于 Java 和数据库进行交互的,往往实体的名字会对应到数据库的表明上,其属性和对应的数据表字段保持一致;

        视图对象(VO、View Object):这类 POJO 专门用于 Java 和前端进行交互时使用,Java 会使用 VO 接受前端数据,往往返回给前端的数据也是 VO 对象

        数据传输对象(DTO,Data Transfer Object):这类 POJO 专门用于两个系统之间进行数据交互时使用的对象

2.该类着重于描述其具有的行为能力,有可能该类以方法为主,有可能会存在属性,有可能没有

        该类型的方法和具体的业务无关,主要是为整个系统提供一些通用操作方法,往往这些方法都使用 static 修饰,目的在于通过类名直接使用,我们将这种类型称之为工具类,通常在项目的 util 包下

        该类型的方法都是用于项目业务流程方法,通过这些方法的组合调用,能够实现一个完整业务流程,那么这样的类称之为业务类,业务类往往为了提高灵活性,均采用面向接口方式设计,也就是接口-实现类,已用于应对多变的需求业务

二、面向对象特征

1、封装

1.为了提高代码的安全性,将其属性进行保护,从而产生了封装这一特性

2.封装的步骤

        (1)将属性进行私有化

                Java 访问限定修饰符

                        用于修改 Java 中属性、变量、方法的可见范围的关键字,称之为 Java 访问限定修饰符

                        Java 提供了四个访问限定修饰符

                                private

                                default

                                        如果不明确写出访问限定修饰符,则默认为 default

                                        default 关键字不用明确写出

                                protected

                                public

                将属性使用 private 进行修饰

        (2)为私有化的属性提供公共访问方法

                通常我们会为私有属性提供获得属性的方法,该方法使用 “get” 作为方法名开始,后面为对应属性名大写,将该方法称之为 getter 方法

                        public  属性类型   get属性名首字母大写(){

                                return  属性;

                        }

                通常我们会为私有属性提供设置属性的方法,该方法使用 “set” 作为方法名开始,后面为对应属性名大写,该方法称之为 setter 方法

                        public  void  set属性名首字母大写(属性参数){

                                属性 = 属性参数;

                        }

3.在 Java 中,属性在没有特殊要求的情况下,必须进行封装,以提高代码的安全性

2、继承

        1.将各个类里面相同的属性和方法提取出来,放到一个基础类中,其它通过 extends 完成对基础类的继承

        2.继承完就可以使用基础类中的属性和方法。基础类成为父类,为它类成为子类

        3.约定:

                子类继承父类就能拥有父类的属性和方法
                子类对象也属于父类的对象
                一个子类只能继承一个父类

        4.无法继承的情况:

                使用private修饰的属性和方法
                使用default修饰,但不在一个包中
                父类的构造方法无法被继承

        5.final:

                修饰的类叫最终类,不能被继承
                修饰的方法不能被重写
                修饰的变量叫常量,必须初始化,初始化之后不能被修改

3、多态

        1.在继承关系下,一个变量随着存储的数据的类型不同,呈现出了多种的数据类型,我们将这种特征称之为多态

        2.目的:能够使一个变量尽量多的存储各种类型的数据,从而提高一个变量的复用性

三、抽象类与接口

1、产生的原因

1.不在创建方法体:子类继承于父类,往往都会选择将父类的某个方法进行重写,因此父类的该方法对应的方法体存在将没有任何意义

2.子类强制重写该方法:如果父类不在规定方法体,但是如果有子类忘记重写该方法,那么就会导致方法的运行是空的

2、抽象方法

1.使用关键字 abstract 修饰,没有方法体语法结构的方法,称之为抽象方法

2.语法结构:【修饰词】 abstract  返回值类型  方法名(【参数列表】);

3.抽象方法其存在的目的就是等待子类完成对该方法的重写,若子类未进行重写,则会产生编译错误

4.能够创建抽象方法的类,必须是抽象类

3、抽象类

1.使用关键字 abstract 修饰,能够创建抽象方法的类,称之为抽象类

2.语法结构:

        [修饰词]  abstract  class  抽象类类名  {

                //  类的相关代码

        }

3.抽象类的特点:

        (1).使用关键字 abstract 进行修饰

        (2).可以创建普通的属性和方法

        (3).可以创建抽象方法

        (4).抽象类无法进行实例化:

                 当创建完成一个类的对象之后,我们可以通过该类的对象为其属性进行赋值,并且也可以获得该对象的属性值,同时也可以使用对该对象的方法调用。
                但是,当抽象类一旦能够创建成对象,那么也就意味着可以调用抽象类对象的属性和方法,如果是普通方法,该方法存在方法体,是可以正常运行的。但是如果调用的是抽象方法,那么该方法并没有方法体的语法结构,因此是无法运行的,因此为了避免出现此类问题,因此Java规定,抽象类是无法完成实例化的。

4.抽象类存在的意义

        (1).等待子类继承抽象类

        (2).子类就必须负责将抽象类中所有的抽象方法进行重写

4、接口

1.当规定一个抽象类中所有的方法都必须是抽象方法时,我们就可以获得一个接口

2.接口通过关键字 interface 表示,只能够创建抽象方法的类,就称之为接口

3.语法结构:

        public  interface  接口名  {

                //  接口的内部代码

        }

4.接口特点:

        (1).使用关键字 interface 表示

        (2).所有的方法都是抽象方法,这行抽象方法都不在使用 abstract 进行修饰

        (3).由于接口中含有抽象方法,因此无法进行实例化

        (4).子类继承于接口,不在使用 extends 关键字,而是使用 implements 来完成

        (5).实现类实现接口后,必须从写实现接口中所有的抽象方法

        (6).实现类允许实现多个接口,每个接口之间通过逗号分隔

                        如:public  class  实现类类名  imlements  接口1,接口2,接口3,...{

                                        //实现类代码

                                }

5.接口存在的意义

        (1).通过接口实现对整个系统的功能设计,使用接口完成该功能相关各个接口的设计工作,实现类通过实现接口,就能够保证完成这个该功能模块的所有功能

        (2).通过编写代码时,采用多态的形式,以接口作为变量类型,进行功能开发,此时和具体的实现类无关,当需要哪个实现类的功能时,只需要赋子该实现类对象,就能够实现功能切换,从而达到了和实现类脱离的目的,降低了代码的耦合性,我们们将这种编程称之为面向接口的编程

6.抽象类和接口的区别

四、Lambda表达式

1、Java 类的种类

1.公共类:使用 public  class 修饰的类,一个.java文件只能有一个公共类

2.普通类:直接使用 class 修饰的类,如:

                public class HelloWorld {

                }

                //普通类

                class  Scu  {

                }

3.嵌套类

        (1)静态嵌套类:在一个类中,创建一个使用 static 修饰的类

        (2)非静态嵌套类:在一个类中,使用 class 创建一个类,那么这个类就称之为非静态嵌套类

        (3)局部类:创建在一个方法中的类称之为局部类

        (4)匿名类:通知 Java 动态的创建一个类,然后再完成所谓的继承,或者是实现,再将这个类进行对象创建,存入变量,只不过该类没有明确的类名

2、Lambda 存在的目的

1.目的在于能够快速的实现只含有一个抽象方法接口的实现和调用工作

2.Lambda 能够极大的简化代码开发,是代码更加简洁紧凑

3、语法结构

语法1.([参数名列表])  ->  只有一行的方法体代码;

语法2.([参数名列表])  ->  {

                //  方法体

            }

4、结构特点

1.可选类型声明,不需要明确声明参数的类型,编译器可根据接口的该方法进行判断

2.可选的参数括号,当对应的参数只有一个时,可以忽略对应的括号(当参数多于一个时,则必须增加对应的下括号。如果没有参数也必须保留小括号)

3.可选的大括号,如果方法代码的主体只有一条语句时,可以忽略大括号

4.可选的返回关键字,如果主体只有一个表达式返回值,则编译器会自动返回该值。如果有大括号,则需要明确使用 return 进行返回

五、异常

1、错误分类

1.由于语法错误所引起的称之为编译错误

2.由于运行时错产生的错误称之为运行时错误

2、异常基础

1.代码本身没有任何编译错误,正常情况下运行时,也不会产生问题,只有当特殊条件产生时,从而导致程序无法进行运行而产生的错误

2.Java 对运行时错误的处理方案

        (1).Java 为几乎所有可预见的运行时错误都创建了预支对应的 Java 类,我们就将这些对应的类称之为异常类

        (2).当某种运行时错误发生时,Java 会找到预支对应的异常类,完成该异常类对象的创建

        (3).随后会将其对象通知开发人员,用于告知开发人员程序运行时产生了对应的运行时错误

3、Java 异常处理

1.捕获处理产生的异常

        (1)使用三个关键字:try、catch和finally组成

        (2)语法结构:

                        try  {

                                //可能产生异常的代码

                        }catch (声明异常类型变量1){

                                //当产生的异常对象符合该声明对象的异常类型时,所执行的代码块

                        } ... [ finally {

                                //无论是否发生异常情况,都需要执行的代码

                        }]

2.抛出产生的异常

        (1)throw:可用于抛出一个具体的异常对象

        (2)throws:将该方法中所产生的所有异常情况,均不进行处理,而是抛出。谁调用该方法,谁负责处理。

4、Java异常体系结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值