2023-05-02 12:24
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤逐一实现,使用的时候依次调用就可以了。
面向对象就是把构成问题的事物按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。
(1)封装性:封装性是面向对象的核心思想,有两层含义,一层含义是指吧对象的属性和行为看成是一个密不可分的整体,将这两者“封装”在一起(即封装在对象中);另一层含义是指“信息隐藏”,将不想让外界知道的信息隐藏起来。
(2)继承性:继承性主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行拓展。
(3)多态性:多态性是指在一个类中定义的属性和方法被其他类继承后,他们可以具有 不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。
在java中,类与对象是最基本、最重要的单元。类表示某类群体的一些抽象基本特征,对象表示一个个具体的事物。
例如:学生可以是个类,而具体的一名学生,就可以称为对象。这名具体的学生会有自己的姓名和年龄等信息,这些信息在面向对象的概念中称为属性;学生可以看书和打篮球,而看书和打篮球这些行为在类中就称为方法。
类是java中一个重要的引用数据类型,所有的java程序都是基于类的。
类是对象的抽象,用于描述一组对象的共同特征和行为。类中可以定义成员变量和成员方法,其中,成员变量用于描述对象的特征,成员变量也被称为对象的属性;成员方法用于描述对象的行为,可简称为方法。
类的定义格式如下:
在java中,定义在类中的变量称为成员变量,定义在方法中的变量称为局部变量。如果在某一个方法中定义的局部变量与成员变量同名,这种情况是允许的,此时,在方法中通过变量名访问到的是局部变量而非成员变量。
在java程序的类中,想要使用一个类则必须要有对象。在java程序中可以使用“new 关键字”创建对象,具体格式如下:
具体实现的图示如下:
从上图可以看出,对象名称uu(也就是Student类型变量uu)保存在栈内存中,而对象的属性信息则保存在对应的堆内存中
(即0x0001是地址值,不存储在栈内存中,它指向堆内存中0x0001的地址)
当我们创建完对象后(即Student uu=new Student;)可以使用对象访问类中的某个属性或方法,对象属性和方法的访问通过“.”运算符实现,具体格式如下:
下面我举一个例子进行介绍:
运行结果如图:
从上图可以看出,程序分别实例化了两个Student对象uu1和uu2,分别指向其各自的堆内存空间(内存地址)
类属于引用数据类型,引用数据类型就是指内存空间可以同时被多个栈内存引用。下面我用一个例子来说明对象的引用传递。
运行的结果如下图所示:
通过这张图片发现,两个对象输出的内容是一样的,这是因为uu2对象获得了uu1对象的堆内存空间使用权。其实就是对uu1的age属性赋值20之后,过对uu2的age属性赋值40,之后uu2的值把uu1的值覆盖掉,所以输出是40。
实际上所谓的引用传递,就是将一个堆内存空间的使用权给多个栈内存空间使用,每个栈内存空间都可以修改堆内存空间的内容,运行结果图的分析如下:
从以上的四幅图中可以发现堆内存、栈内存空间的变化,在程序的最后,uu2对象将age的值修改为50,因此最终结果uu1的age属性值是50。
针对类、成员方法和属性,java提供了四种访问控制权限。这四个访问权限由小到大依次是:
下面具体介绍一下控制权限
private:属于私有访问权限。用于修饰类的属性和方法。类的成员如果用到了private,该成员就只能在本类中进行访问。
default:属于默认访问权限。即在类中的属性或方法没有任何的访问权限声明时就会默认为此访问权限,默认的访问权限可以被本包之下的其他类调用,但是不能跨包调用。
protected:属于受保护的访问权限。只能被本包及不同包的子类访问。
public:属于公共访问权限。即可以在全局范围都可以访问。
![Java面向对象(上)](https://www.77010.cn/wp-content/uploads/2023/05/3d547c8e3828ef45f883ac0abcc628b4.png)
封装可以被认为是一个保护屏障,防止本类的代码和数据被外部程序随机访问。所以需要封装。
类的封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类提供的方法实现对内部信息的操作访问。
我们在java中实例化一个对象后,,如果要为这个对象的属性赋值,必须通过直接访问对象的属性或调用setter方法才可以实现,如果需要在实例化对象时为这个对象的属性赋值,可以通过构造方法来实现。(构造方法也称为构造器)
构造方法是一个特殊的成员方法,在定义时需注意一下几点
构造方法的名称必须与类名一致、
构造方法名称前不能有任何返回值类型。
不能再构造方法中使用return返回一个值,但是可以单独写return语句作为方法的结束。
在一个类中可以定义多个构造方法,只要每个构造方法的参数类型不同或参数个数不同即可。在创建对象时,可以通过调用不同的构造方法为不同的属性赋值。
在java中的每个类都至少有一个构造方法,如果在一个类中没有定义构造方法,系统会自动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,方法体中没有任何代码。
通常构造方法使用public修饰。
在一个类中,当成员变量与局部变量重名时,需要使用到this关键字分辨成员变量与局部变量,java中的this关键字语法比较灵活,主要作用有三点
this关键字调用本类中的属性。
this关键字调用成员方法。
this关键字调用本类的构造方法。
简单来说代码块就是用{}括起来的一段代码。代码块具体可以分为四种,分别是:
普通代码块
构造块
静态代码块
同步代码块
在定义一个类时,只是在描述某事物的特征和行为,并没有产生具体的数据。只有通过new关键字创建该类的势力对象时,柴夔开辟栈内存和堆内存,在堆内存中么个对象会有自己的属性。如果希望某些属性被所有对象共享,就必须将其声明为static属性。如果属性使用了static关键字进行修饰,则该属性可以直接使用类名称进行调用。
如果在java程序中使用static修饰属性,则该属性称为静态属性(也称为全局属性),经验属性可以使用类名直接访问,访问格式如下:
备注:
static挂年至只能修饰成员变量,不能修饰局部变量,否则编译器会报错。
如果想要使用类中的成员方法,就需要先将这个类实例化,而在实际开发时,如果想不创建对象的情况下,通过类名就可以直接调用某个方法,要实现这样的效果,只需要在成员方法前加上static关键字,使用static关键字修饰的方法通常称为静态方法。
备注:
静态方法只能访问静态成员,因为非静态成员需要先创建对选哪个才能访问,即随着对象的创建,非静态成员才会被分配内存。而静态方法在被调用时可以不创建任何对象。
用static关键字修饰的代码块称为静态代码块。当类被加载时,静态代码块会之星,由于类只加载一次,因此静态代码块只执行一次。通常使用静态代码块对类的成团变量进行初始化。