首页 > 编程语言 >Java基础之面向对象——类、对象、方法

Java基础之面向对象——类、对象、方法

时间:2022-12-29 20:11:59浏览次数:40  
标签:Java 变量 构造方法 对象 可以 面向对象 方法 定义

类与对象

     类的概念我们平时已经听过很多了。人类、鸟类、鱼类... 所谓类,就是对一类事物的描述,是抽象的、概念上的定义,比如鸟类,就泛指所有具有鸟类特征的动物。比如人类,不同的人,有着不同的性格、不同的爱好、不同的样貌等等,但是他们根本上都是人,所以说可以将他们抽象描述为人类。简单来说,类是对一类事物的统称,而对象则是类的一个个例。例如,学生是一个类,而学生小明则是一个对象,属于学生类的一个实例。而在Java中,也可以像这样进行编程,可以定义一个类,然后进一步创建许多这个类的实例对象。像这种编程方式,我们称为面向对象编程

 

类的定义与对象创建

     在Java中可以通过new关键字去创建对象,例如对于一个类A,可以通过A a=new A();这种方式去创建对象,其实创建对象可以分为两步,

即A a;  //声明引用类型的变量

a=new A(); //创建对象,并把对象的地址赋给声明的引用类型变量,即该变量指向创建的对象

定义一个类(实际上这些变量只有在一个具体的对象中才可以使用)

 

 创建一个实例对象

 

 实际上整个流程为

 

 

对象的使用

     我们可以使用一个变量来指代某个对象,只不过引用类型的变量,存储的是对象的引用,而不是对象本身。

 

 例如,这里将变量p的值赋值给变量p1实际上传递的是对象的引用,而不是对象本身,p1和p指向的都是同一个对象

 

 看一下运行结果,可以看出运行结果是true,证明p和p1的值是相等的,即它们的指向是一样的。

 

 但如果这样去编写,分别创建一个对象的话,它们的引用类型的变量就不一样了,也就是它们的指向不一样了

 

 看一下运行结果

 

 现在我们有了对象的引用之后,我们就可以进行操作了,可以直接访问对象的一些属性,也就是我们在类中定义好的那些,对于不同的对象,这些属性都具体存放值也会不同。例如,可以修改对象的名字

 

 看一下运行结果

 

 不过值得注意的是,不同对象的属性是分开独立存放的,每个对象都有一个自己的空间,修改一个对象的属性并不会影响到其他对象

 

 看一下运行结果

 注意,如果不引用任何的对象,那肯定是不应该去通过这个变量去操作所引用的对象的,虽然这样可以编译通过,但是在运行时会出现问题

 

 看一下运行结果,发现发生了空指针异常

 

 对象创建成功之后,它的属性没有进行赋值,那么创建对象之后能否直接访问呢?

 

 看一下运行结果,可以看到,如果直接创建对象,那么对象的属性都会存在初始值,如果是基本类型,那么默认是统一为0(如果是boolean的话,默认值为false)如果是引用类型,那么默认是null

 

 

 

方法创建与使用

        在一个类当中,成员变量可以说是静态属性,而方法可以说是动态属性,方法同时也可以用来表示对象的行为。方法是语句的集合,是为了完成某件事情而存在的。完成某件事情,可以有结果,也可以做了就做了,不返回结果。比如计算两个数字的和,我们需要得到计算后的结果,所以说方法需要有返回值;又比如,我们只想吧数字打印在控制台,只需要打印就行,不用给我结果,所以说方法不需要有返回值。

方法的定义如下:

 

 首先是返回值类型,也就是说这个方法完成任务之后,得到的结果的数据类型(可以是基本类型,也可以是引用类型)当然,如果没有返回值,只是完成任务,那么可以使用void表示没有返回值,比如现在给人类编写一个自我介绍的行为:

 

 注意,方法名称同样可以随便起,但是规则跟变量的命名差不多,也是尽量使用小写字母开头的单词,如果是多个单词,一般使用驼峰命名法最规范。

而对于方法的使用,也是和成员变量类似,都是需要引用类型的变量去操作一个对象

 

 像这样执行定义好的方法,一般称之为方法的调用,看一下运行结果

 

 比如现在要让人类学会加法运算,也可以通过定义一个方法的形式来完成,只不过,要完成加法运算,需要别人给人类提供两个参与加法运算的值才可以,所以这里就要用到参数了

 

 同时可以测试一下

 

 注意:方法定义时编写的参数,一般称为形式参数,而调用方法实际传入的参数,称为实际参数。

在使用return关键字之后,方法就会直接结束并返回结果,所以说在这之后编写的任何代码,都是不可到达的,例如:

 

 在return后编写代码,会导致编译不通过,因为存在不可达语句

如果程序中出现了分支语句,那么必须保证每一个分支都有返回值才可以,否则无法通过编译

 

 

方法进阶使用

      有时候我们的方法中可能会出现一些与成员变量重名的变量。比如,当形式参数和成员变量重名时,

 

 可以先测试一下,发现name依然是没有修改的状态,因为当出现重名的时候,默认情况下会优先使用作用域最近的变量

 

 如果想要在方法中访问到当前对象的属性,那么可以使用this关键字,来明确表示当前类的示例对象本身:

 

 看一下运行结果,可以看到name的值确实发生了变化

 

 

方法重载

     方法的重载是指方法名称相同但方法的参数不同,方法的参数不同即方法的参数不同或者方法的参数个数不同。不过值得注意的是方法的返回值可以相同也可以不同。例如:

 

 在这个程序中,就使用到了方法的重载,看一下运行结果

 

 

构造方法

     构造方法是一种比较特殊的方法,它的名称和类的名称一样,并且没有返回值。,默认情况下每个类都会自带一个没有任何参数的无参构造方法(只是不用我们去写,编译出来就自带),而且在创建对象的时候都会调用一次构造方法。当然,我们也可以手动声明构造方法,对其进行修改,例如:

 

 看一下运行结果

 

 

当然,也可以为构造方法设定参数,例如

 

 不过值得注意的是,,在定义一个构造方法之后,会覆盖掉默认的那一个无参构造方法,除非手动重载一个无参构造,否则要创建这个类的对象,必须调用定义的构造方法

 

要给成员变量设定初始值,不仅可以通过构造方法,也可以直接在定义时赋值。不过需要特别注意的是,成员变量的初始化在调用构造方法前就开始了

 

 也可以在类中添加代码块,代码块同样会在对象构造之前进行,在成员变量初始化之后执行

 

 

静态变量和静态方法

      静态的内容,可以理解为是属于这个类的,也可以理解为是所有对象共享的内容。通过使用static关键字来声明一个变量或一个方法为静态的,一旦被声明为静态,那么通过这个类创建的所有对象,操作的都是同一个目标,也就是说,对象再多,也只有这一个静态的变量或方法。一个对象改变了静态变量的值,那么其他的对象读取的就是被改变的值。

 

 可以看到,由于静态属性是属于类的,因此无论通过什么方式改变,都改变的是同一个目标

所以说一般情况下,我们并不会通过一个具体的对象去修改和使用静态属性,而是通过这个类去使用

 

 和静态变量类似,静态方法也是属于类的,一般由类去调用

 

标签:Java,变量,构造方法,对象,可以,面向对象,方法,定义
From: https://www.cnblogs.com/yunque01/p/17008002.html

相关文章