`

Java 面向对象基础 供大家学习

阅读更多

1.面向对象编程介绍
1.        万事万物皆对象。
2.        使用面向对象编程的思想是将现实世界中的该事物用编程语言描叙出来,在这个过程中必须保持和现实世界中该事物一致。
3.        设计面向对象编程:
1)       从问题中抽取对象,思考对象之间的关系;
2)       用类来描叙对象;
3)       为类添加属性;
4)       为类添加方法;
5)       为类添加他们之间的关系;
6)       使用java语言来创建对象来完成业务操作;
7)       具体-----抽象----具体。
2.类以及类相关的基本概念
2.1类的定义
1.        类:是对现实世界中相同事物的描叙、一个相同集合、是一个抽象的。
2.        类的格式:
[<修饰符>]  class <类名称>{
//属性
//方法
//构造方法
//嵌套类
}
3.        修饰符的作用就是一个权限管理
4.        属性用于存储类的数据
5.        方法用于完成类的行为、功能、操作属性
6.        构造方法用于创建对象,没有构造方法是不能创建对象
7.        属性和方法是类的成员,成员变量,成员方法
2.2方法
1.        方法格式:
[<修饰符>] <返回值的类型>|void <方法名称>([<参数列表>]){
//方法体
return [<返回值>];
}
2.        返回值的类型一定要和返回的值类型相同。
3.        return给调用者返回值,或者是结束方法。void什么都不返回,但是在编译成字节码的时候会默认加上一个返回空的return,该方法的作用就是结束方法。如果方法有返回值类型,这个时候return的作用是返回值,并结束方法。
4.        返回值的类型:有8种基本数据类型和引用数据类型(定义了一个类就是定义了一个新的数据类型,该类型是含有逻辑结构的数据类型)。
5.        参数列表接受调用者传入的数据,又称为形式参数。
6.        实参:调用环境传入的实际的值,必须和形式参数保持一致。
2.3属性
1.        类的内部,方法的外部定义的属性称为全局变量,为该类服务。
2.        方法内部定义的属性成为局部变量,为该方法服务。
3.        可以使用引用,调用全局变量
4.        全局变量可以加修饰符,局部变量不可以加修饰符,因为局部变量只为方法服务。
5.        全局变量:[<修饰符>] <数据类型> <变量名称> [<=值>];
6.        局部变量:<数据类型> <变量名称> <=值>;局部变量在使用前一定要有初始值。
7.        全局变量的生存周期是和对象相同,局部变量的生存周期是调用完毕马上消失。
2.4对象的定义
1.        对象是类的具体表现,类是对象的模板。
2.        一个类可以有多个对象,相互之间是不会受到干涉的,因为地址不同。
3.        类 引用变量=new构造方法;//类和构造方法的名称相同
4.        类 引用变量=(类)class.forName(…).NewInstance();
2.5构造方法
1.        用于创建对象和初始化。
2.        构造方法的名称和类名称要保持一致。
3.        构造方法不返回任何值。
4.        如果我们在定义类的时候没有显示地定义构造方法,系统会创建一个默认的无参构造方法;一旦显示地定义了构造方法,系统就不再提供默认的无参构造方法,如果要想使用无参构造放,就要重载构造方法,定义一个无参的构造方法
5.        new用于创建对象,分配内存空间,参数地址,构造方法是通过new关键字自动调用。
6.        [<修饰符>] <构造方法的名称>([<参数列表>]){
//构造方法体
}
7.        一个类中有多个构造方法,只要参数列表不相同(数据类型、个数、位置)就可以。
2.6封装
在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
3.内存分析
1.        对引用变量进行初始化赋值,分配栈空间,这时的引用变量的值为null
2.        new分配堆空间,看类中有多少个属性,就将堆分成多少个小格,进行属性的默认初始化,如果属性存在显示初始化,就会将默认的值替换,如果还存在构造方法为属性赋值,就会再将属性已有的值替换(默认赋值、显示赋值、构造方法赋值),完成所有的赋值操作后,就会将new出的内存地址赋值给引用变量。
3.        深入内存分析:os为jvm分配内存空间,再由jvm来管理这块内存空间。jvm将管理的内存空间分为栈、堆、静态区、代码区。
1)       栈 存储的是局部变量。
2)       堆 存储的是new出来的空间。
3)       静态区 存储的是存储的是字符串常量和静态属性。
4)       代码区 存储的就是代码。
4.包
在大型项目中使用不同的类来封装不同的业务,但是在封装的过程中所有的类可以分为几大类型(视图类型、控制类型、数据业务类型、vo类型、工具类型),我们就是使用包结构来管理不同的类型的类。
1.        包只能在源文件的第一行(注释除外)。
2.        包定义的格式:package包名称1.包名称2….
3.        使用包管理后的类的类名就为:包名+类名
4.        使用包管理的类:import包的路径.类名
5.        在同一个类中使用不同的包管理的相同名称的类的时候,只能使用import导入一个,另外的一个使用方法就要在该类的前面明确添加上包的路径。
6.        有包管理的代码(类)不可以调用无包管理的代码(类),但是无包管理的可以调用有包管理的,只要在调用的时候导入包就可以。
5.继承
5.1继承介绍
一个项目要实现代码重用、灵活性、可扩展、便于维护(保证现有项目的正常运行、以及对原有项目的新的功能点的增加)。继承就是实现代码重用的方式之一。
将功能业务相同的类的相同业务和数据抽取为一个新的类,该类就是父子,这样的方式就是继承,子类可以从父类继承相同业务的行为,同时还可以有自己的行为。
如果类之间不存在继承关系,千万不要随意使用继承,这个时候就可以使用组合的方式来完成。组合:A类拥有B类中的某些特性,而A类和B类又没有继承关系,那么这个时候我们就可以使用组合的方式来完成功能和实现代码重用,在A类中创建B类的对象,再通过B类创建的变量调用B类中的特性。使用组合比使用继承多,更多的情况下我们使用的是组合,因为如果修改了父类中的继承方法,有可能就会影响到子类的功能实现。
5.2继承的特性
在C++中是可以多继承,但是在JAVA中只可以单一继承,因为一个子类继承多个父类时,如果多个父类中有相同名称的方法,但是方法内部实现不相同的话,就有可能使子类在业务上混乱。
在java中可以有多层继承,因为多继承,使用类的数据类型的多样性就有多个,这样可以让我们在调用方法的时候更加灵活。
Object类是所以类的顶级父类,是为了系统提供API的时候实现代码重用,所以在使用系统提供这些API方法中接受的参数大部分都为Object类型。
子类从父类中继承除私有的以外的所有特性。
子类不能继承父类中的构造方法,因为每一个类的构造方法,只能用于创建本类的对象,初始化本类属性和业务。但是在子类的构造方法中,会默认地调用父类的无参构造方法。如果父类中不存在无参构造方法,则可以通过两种途径解决:为父类添加无参构造构造方法,另一种就是在子类中,显示地调用父类里面的构造方法。(推荐使用)
5.3方法重载
当一个类中的多个方法业务相同,只是根据不同的参数指向细微的不同业务的是就是要方法重载
1.        方法名相同;
2.        方法的参数类型、个数、顺序至少一项不同;
3.        方法的返回类型、修饰符可以不同
5.4方法重写(覆盖)
当子类从父类继承过来的方法,不能满足子类的要求的时候,就在子类中显示地重新定义该方法,增加新的特性,完成新的功能。
1.        子类方法的名称、参数、返回类型必须与父类相同;
2.        子类方法不能缩小父类方法的访问权限;
3.        子类方法不能抛出比父类方法更多的异常;
4.        父类的静态方法不能被子类覆盖为非静态方法;
5.        父类的非静态方法不能被子类覆盖为静态方法;
6.        子类可以定义与父类的静态方法相同的静态方法;
7.        父类的私有方法不能被子类继承,也就不能被覆盖;
8.        父类的抽象方法,子类可以:实现抽象方法;继续重新声明父类的抽象方法;
9.        父类的非抽象方法,可以被覆盖为抽象方法。
5.5this
this代表本类对象、this接收的就是对象的地址,因为一个类可以有多个对象,类是为该类的所有对象共享,使用this接收到对象地址来区分到底是那个对象正在调用代码运行
在一个类中有3个地方存在this:类的内部方法的外部、构造方法内部、方法内部(非静态方法内部)
this特性:
1)       类的内部方法中调用属性和方法的时候都会隐含的有一个this。
2)       this调用变量表明该变量是那个对象的,this调用方法表示该方法正在被那个对象调用。
3)       当全局变量和局部变量同名的时候使用this来区分全局变量和局部变量
4)       类的内部方法的外部、构造方法内部this是创建对象是的地址,而方法中的this只有在被调用时才占用内存
5)       可以使用this(值)来调用重载的构造方法,this调用重载的构造方法只能在构造方法的第一行
5.6super
super代表的就是父类,但是接收的内存地址为子类创建的对象的地址。在创建子类对象的时候,会通过super调用父类的构造方法创建父类对象,便于子类继承,再创建子类的对象,将子类对象赋值给父类创建的内存地址。
Super调用构造方法必须放置在子类构造方法的第一行,又因为在子类构造方法中使用this调用重载的构造方法,该this也必须是在构造方法的第一行,使用super和this调用构造方法不能一起使用。
使用this在子类中调用重载的构造方法后,super调用父类构造方法的方式就要向this调用的构造方法中移动。

1.面向对象编程介绍
1.        万事万物皆对象。
2.        使用面向对象编程的思想是将现实世界中的该事物用编程语言描叙出来,在这个过程中必须保持和现实世界中该事物一致。
3.        设计面向对象编程:
1)       从问题中抽取对象,思考对象之间的关系;
2)       用类来描叙对象;
3)       为类添加属性;
4)       为类添加方法;
5)       为类添加他们之间的关系;
6)       使用java语言来创建对象来完成业务操作;
7)       具体-----抽象----具体。
2.类以及类相关的基本概念
2.1类的定义
1.        类:是对现实世界中相同事物的描叙、一个相同集合、是一个抽象的。
2.        类的格式:
[<修饰符>]  class <类名称>{
//属性
//方法
//构造方法
//嵌套类
}
3.        修饰符的作用就是一个权限管理
4.        属性用于存储类的数据
5.        方法用于完成类的行为、功能、操作属性
6.        构造方法用于创建对象,没有构造方法是不能创建对象
7.        属性和方法是类的成员,成员变量,成员方法
2.2方法
1.        方法格式:
[<修饰符>] <返回值的类型>|void <方法名称>([<参数列表>]){
//方法体
return [<返回值>];
}
2.        返回值的类型一定要和返回的值类型相同。
3.        return给调用者返回值,或者是结束方法。void什么都不返回,但是在编译成字节码的时候会默认加上一个返回空的return,该方法的作用就是结束方法。如果方法有返回值类型,这个时候return的作用是返回值,并结束方法。
4.        返回值的类型:有8种基本数据类型和引用数据类型(定义了一个类就是定义了一个新的数据类型,该类型是含有逻辑结构的数据类型)。
5.        参数列表接受调用者传入的数据,又称为形式参数。
6.        实参:调用环境传入的实际的值,必须和形式参数保持一致。
2.3属性
1.        类的内部,方法的外部定义的属性称为全局变量,为该类服务。
2.        方法内部定义的属性成为局部变量,为该方法服务。
3.        可以使用引用,调用全局变量
4.        全局变量可以加修饰符,局部变量不可以加修饰符,因为局部变量只为方法服务。
5.        全局变量:[<修饰符>] <数据类型> <变量名称> [<=值>];
6.        局部变量:<数据类型> <变量名称> <=值>;局部变量在使用前一定要有初始值。
7.        全局变量的生存周期是和对象相同,局部变量的生存周期是调用完毕马上消失。
2.4对象的定义
1.        对象是类的具体表现,类是对象的模板。
2.        一个类可以有多个对象,相互之间是不会受到干涉的,因为地址不同。
3.        类 引用变量=new构造方法;//类和构造方法的名称相同
4.        类 引用变量=(类)class.forName(…).NewInstance();
2.5构造方法
1.        用于创建对象和初始化。
2.        构造方法的名称和类名称要保持一致。
3.        构造方法不返回任何值。
4.        如果我们在定义类的时候没有显示地定义构造方法,系统会创建一个默认的无参构造方法;一旦显示地定义了构造方法,系统就不再提供默认的无参构造方法,如果要想使用无参构造放,就要重载构造方法,定义一个无参的构造方法
5.        new用于创建对象,分配内存空间,参数地址,构造方法是通过new关键字自动调用。
6.        [<修饰符>] <构造方法的名称>([<参数列表>]){
//构造方法体
}
7.        一个类中有多个构造方法,只要参数列表不相同(数据类型、个数、位置)就可以。
2.6封装
在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
3.内存分析
1.        对引用变量进行初始化赋值,分配栈空间,这时的引用变量的值为null
2.        new分配堆空间,看类中有多少个属性,就将堆分成多少个小格,进行属性的默认初始化,如果属性存在显示初始化,就会将默认的值替换,如果还存在构造方法为属性赋值,就会再将属性已有的值替换(默认赋值、显示赋值、构造方法赋值),完成所有的赋值操作后,就会将new出的内存地址赋值给引用变量。
3.        深入内存分析:os为jvm分配内存空间,再由jvm来管理这块内存空间。jvm将管理的内存空间分为栈、堆、静态区、代码区。
1)       栈 存储的是局部变量。
2)       堆 存储的是new出来的空间。
3)       静态区 存储的是存储的是字符串常量和静态属性。
4)       代码区 存储的就是代码。
4.包
在大型项目中使用不同的类来封装不同的业务,但是在封装的过程中所有的类可以分为几大类型(视图类型、控制类型、数据业务类型、vo类型、工具类型),我们就是使用包结构来管理不同的类型的类。
1.        包只能在源文件的第一行(注释除外)。
2.        包定义的格式:package包名称1.包名称2….
3.        使用包管理后的类的类名就为:包名+类名
4.        使用包管理的类:import包的路径.类名
5.        在同一个类中使用不同的包管理的相同名称的类的时候,只能使用import导入一个,另外的一个使用方法就要在该类的前面明确添加上包的路径。
6.        有包管理的代码(类)不可以调用无包管理的代码(类),但是无包管理的可以调用有包管理的,只要在调用的时候导入包就可以。
5.继承
5.1继承介绍
一个项目要实现代码重用、灵活性、可扩展、便于维护(保证现有项目的正常运行、以及对原有项目的新的功能点的增加)。继承就是实现代码重用的方式之一。
将功能业务相同的类的相同业务和数据抽取为一个新的类,该类就是父子,这样的方式就是继承,子类可以从父类继承相同业务的行为,同时还可以有自己的行为。
如果类之间不存在继承关系,千万不要随意使用继承,这个时候就可以使用组合的方式来完成。组合:A类拥有B类中的某些特性,而A类和B类又没有继承关系,那么这个时候我们就可以使用组合的方式来完成功能和实现代码重用,在A类中创建B类的对象,再通过B类创建的变量调用B类中的特性。使用组合比使用继承多,更多的情况下我们使用的是组合,因为如果修改了父类中的继承方法,有可能就会影响到子类的功能实现。
5.2继承的特性
在C++中是可以多继承,但是在JAVA中只可以单一继承,因为一个子类继承多个父类时,如果多个父类中有相同名称的方法,但是方法内部实现不相同的话,就有可能使子类在业务上混乱。
在java中可以有多层继承,因为多继承,使用类的数据类型的多样性就有多个,这样可以让我们在调用方法的时候更加灵活。
Object类是所以类的顶级父类,是为了系统提供API的时候实现代码重用,所以在使用系统提供这些API方法中接受的参数大部分都为Object类型。
子类从父类中继承除私有的以外的所有特性。
子类不能继承父类中的构造方法,因为每一个类的构造方法,只能用于创建本类的对象,初始化本类属性和业务。但是在子类的构造方法中,会默认地调用父类的无参构造方法。如果父类中不存在无参构造方法,则可以通过两种途径解决:为父类添加无参构造构造方法,另一种就是在子类中,显示地调用父类里面的构造方法。(推荐使用)
5.3方法重载
当一个类中的多个方法业务相同,只是根据不同的参数指向细微的不同业务的是就是要方法重载
1.        方法名相同;
2.        方法的参数类型、个数、顺序至少一项不同;
3.        方法的返回类型、修饰符可以不同
5.4方法重写(覆盖)
当子类从父类继承过来的方法,不能满足子类的要求的时候,就在子类中显示地重新定义该方法,增加新的特性,完成新的功能。
1.        子类方法的名称、参数、返回类型必须与父类相同;
2.        子类方法不能缩小父类方法的访问权限;
3.        子类方法不能抛出比父类方法更多的异常;
4.        父类的静态方法不能被子类覆盖为非静态方法;
5.        父类的非静态方法不能被子类覆盖为静态方法;
6.        子类可以定义与父类的静态方法相同的静态方法;
7.        父类的私有方法不能被子类继承,也就不能被覆盖;
8.        父类的抽象方法,子类可以:实现抽象方法;继续重新声明父类的抽象方法;
9.        父类的非抽象方法,可以被覆盖为抽象方法。
5.5this
this代表本类对象、this接收的就是对象的地址,因为一个类可以有多个对象,类是为该类的所有对象共享,使用this接收到对象地址来区分到底是那个对象正在调用代码运行
在一个类中有3个地方存在this:类的内部方法的外部、构造方法内部、方法内部(非静态方法内部)
this特性:
1)       类的内部方法中调用属性和方法的时候都会隐含的有一个this。
2)       this调用变量表明该变量是那个对象的,this调用方法表示该方法正在被那个对象调用。
3)       当全局变量和局部变量同名的时候使用this来区分全局变量和局部变量
4)       类的内部方法的外部、构造方法内部this是创建对象是的地址,而方法中的this只有在被调用时才占用内存
5)       可以使用this(值)来调用重载的构造方法,this调用重载的构造方法只能在构造方法的第一行
5.6super
super代表的就是父类,但是接收的内存地址为子类创建的对象的地址。在创建子类对象的时候,会通过super调用父类的构造方法创建父类对象,便于子类继承,再创建子类的对象,将子类对象赋值给父类创建的内存地址。
Super调用构造方法必须放置在子类构造方法的第一行,又因为在子类构造方法中使用this调用重载的构造方法,该this也必须是在构造方法的第一行,使用super和this调用构造方法不能一起使用。
使用this在子类中调用重载的构造方法后,super调用父类构造方法的方式就要向this调用的构造方法中移动。
分享到:
评论

相关推荐

    Java面向对象程序设计

    《Java面向对象程序设计》和《Java面向对象程序设计习题解答与实验》,使用超星阅读器浏览,仅供学习和参考使用。

    Java面向对象(高级).pptx

    Java SE基础详细的PPT教程,供Java 基础学习者或者Java 基础授课使用

    2-Java面向对象(基础).pptx

    Java SE基础详细的PPT教程,供Java 基础学习者或者Java 基础授课使用

    面向对象程序java课件

    一些基础的java课件,里面包含一些基础的java...是一些初学学习java这门面向对象编程的课件,可以供同学们学习使用!!!里面包括一些java的类啊,还有一些比如字符串的操作啊,还有一些中断和线程等等一些基础的知识

    Java学习笔记7.0

    《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次...而对于一些曾经学习过Java,但概念和基础仍不扎实的读者,本书也准备了一些面向对象的观点与进阶的议题可供参考。

    Java基础学习笔记(印象笔记)

    Java基础学习笔记(印象笔记) Java 是一种广泛使用的面向对象编程语言,最初由 Sun Microsystems(现为 Oracle Corporation)于1995年发布。它具有简单、易学、可移植、安全和高性能等特点。 Java 是一种跨平台语言...

    Java学习笔记(必看经典)

    本书是作者近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置...而对于一些曾经学习过Java,但概念和基础仍不扎实的读者,本书也准备了一些面向对象的观点与进阶的议题可供参考。

    Java语言程序设计:基础篇(原书第8版)

    《Java语言程序设计:基础篇(原书第8版)》是Java语言的经典教材,中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》,主要介绍程序设计基础、面向对象程序设计、gui程序设计、算法和数据结构、高级...

    《Java基础案例教程》-教学PPT.zip

    提供《Java基础案例教程》-教学PPT,供开发者和初学者进行学习,Java是一种高级计算机语言,它是由SUN公司(已被Oracle公司收购)于1995年5月推出的一种可以编写跨平台应用软件、完全面向对象的程序设计语言。Java...

    《Java开发实战经典》——学习攻略

    4、Java数据库操作(JDBC):JDBC首先并不能算是一门技术,更多的应该算是一种服务 —— Java提 供的数据库访问服务,里面提供了大量的操作接口,各个数据库生产商根据这些接口实现自己的数据库操作,从面向对象的...

    Java综合技能知识库

    包含 Java面向对象、Java基础类库、JDBC数据库访问、Web编程Jsp&Servlet、Hibernate持久层、iBatis持久层、Structs界面控制层、JSF界面控制层、Spring应用框架、Ejb、WebService技术、J2EE模式等其他Java相关开发...

    java jdk6学习笔记

    本书门槛很低,只要您了解Windows基本操作,无须有其他程序语言的 基础,甚至没有接触过Java,都可以通过本书扎扎实实地学习Java。而对 于一些曾经学习过JaVa,但概念和基础仍...些面向对象的观点与进阶的议题可供参考

    Java基础课程案例源码.zip

    这些案例涵盖了Java编程的各个方面,从基本的语法和数据类型开始,逐步深入到面向对象编程、异常处理、多线程编程、文件处理、网络编程等高级主题。每个案例都经过精心设计,以帮助您更好地理解和应用Java编程的各个...

    良葛格Java JDK 5.0学习笔记

    本书是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、...而对于一些曾经学习过Java,但概念和基础仍不扎实的读者,本书也准备了一些面向对象的观点与进阶的议题可供参考。

    软件工程课程设计JAVA实现的面向对象设计(酒店管理系统)+面向过程设计(淘宝评论情感分析)两个项目的源码+报告文档+功能截图

    软件工程课程设计JAVA开发的面向对象设计(酒店管理系统)+面向过程设计(淘宝评论情感分析)两个项目的源码+报告文档+功能截图 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都...

    JAVA语言挖雷游戏开发

    把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。 我此次开发的是一款挖雷小游戏,工作学习之余仅供休闲娱乐之用。

    java源码包---java 源码 大量 实例

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    《面向对象课程设计》-简易聊天软件Java源码+文档说明+实施计划书+答辩ppt+5000字论文

    《面向对象课程设计》-简易聊天软件Java源码+文档说明+实施计划书+答辩ppt+5000字论文 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审...

    Java代码开发斗地主游戏全代码

    用一千多行Java代码实现的斗地主游戏,后端使用的技术栈是Springboot+SpringCache+Websocket,项目中运用了Java基础及面向对象的各类技术,类、接口、对象、枚举、集合、Map、数组、排序、算法、缓存等都有使用........

Global site tag (gtag.js) - Google Analytics