欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

类与对象的概念

程序员文章站 2024-03-08 15:58:58
...

JAVA是基于面向对象的编程语言,从这篇博客开始,我将会从面向对象基础的类与对象来开始记录我的JAVA学习过程,作为初学者,如果有些部分理解的比较欠缺,希望看到这篇博客的各位可以对我进行一些批评和指正。

一、何为面向对象

在面向过程的编程中(C语言),我们将一个问题分成很多个过程来逐步解决(即把一个程序分成很多的函数),这样在我们的主函数main中,程序就会显得非常的有条理,这样做也是非常符合逻辑的分块的,但实际上解决很多问题时,在问题中的很多分块中我们总是可以找到相似的部分。折射到现实生活中,我们可以把这些具有共特征的事物成为“类”,而类的具象化就叫做“对象”,我们可以称对象属于一个类,而类是全体对象的集合。例如“人类”就可以认为是一个类,而具体的一个人(例如你和我)就可以称为人类的一个具体对象,事实上,面向对象的编程就是将要解决的问题分为不同对象的属性与方法之间的关系来进行的,这种思路也是符合我们的日常思路的。面向对象的程序设计就是使用对象来进行程序设计。

二、类与对象

1.类与对象的定义与创建

在进行编程的过程中,我们需要把类具有的状态与行为用代码的形式来呈现在计算机上面,例如人类这个类中,我们说每一个人都具有的具体属性有身高,体重以及各种各样的公共属性,也就是我们每个人都有的属性,像身高和体重我们只需要用一个小数就可以储存在计算机中,我们称这种可以用特定的数据表示的性质就称为类的“属性”,同时类还有行为的性质,就比如人可以进行唱歌和跳舞这些动作,这种带着过程性质的行为我们把他称为“方法”,我们也可以认为是C语言中的函数。
例如,我们定义一个人的类就可以这样定义:

public class Person {
 //定义一个双精度的属性身高
 public double height;
 //定义一个双精度的属性体重
 public double weight;
 //定义一个双精度的属性体力
 public double power;
 //当调用跳舞的方法时,人的体力减少
 public void dance(){
  this.power = this.power-1;
 }

在我们定义好一个类之后,我们需要创建出一个实例化的对象,否则我们创建的这类就是没有意义的,就像是如果我们有人类这样的一个概念,但是世界上却找不到一个人类,这样我们自然不能用这个类做任何事情,创建一个类的过程代码如下,接着我们可以对类中的属性和方法进行操作与调用:

//创建一个名为per的对象
  Person per = new Person();
  per.height = 170;
  per.weight = 55;
  per.power = 100;
  per.dance();

2.类中属性的可见性修饰符

我们在类中定义一个变量时,相应的这个变量一定会有他的作用域,而可见性修饰符就是对类中变量的可见性修饰。修饰符分为以下的四种:
类与对象的概念
JAVA编程中,对类的属性进行可见性修饰可以限制用户对对象中的数据进行更改,起到一定的保护作用。

3.主类

在一个包中我们可以构造很多的类,但是程序究竟要从哪里开始执行呢,事实上java以main方法作为执行的入口,而含main方法的函数则被称为主类,但是主类和其他的类本质上其实并没有区别,唯一的区别就是:Java虚拟机有一个约定,一旦启动时给了一个类,而且这个类包含一个形如public static main(字符串数组)的方法,那就执行这个方法。就连main方法本身也是可以被调用的(陷入一个死循环),关于程序的执行代码如下:

public static void main(String args[]){
  //创建一个名为per的对象
  Person per = new Person();
  per.height = 170;
  per.weight = 55;
  per.power = 100;
  per.dance();
  //输出剩余的体力
  System.out.println(per.power);
 }

4.构造方法

我们在构造一个类的时候,对于类中的private属性,我们是没有办法直接调用的,这样的话想要输出属性或者对属性赋值我们都要定义一个方法来完成(即在类中的方法中调用属性),为了方便起见,JAVA中提供了类的构造方法,构造方法在创建类的同时开始调用,将括号中的参数传给类中的属性,从而完成对对象中属性的赋初值。如果没有书写构造方法,编译器会自动给出一个不含参数的构造方法,事实上,new+类名()就是调用了一个不含参数的构造方法,代码如下

public class Person {
 //定义一个双精度的属性身高
 private double height;
 //定义一个双精度的属性体重
 private double weight;
 //定义一个双精度的属性体力
 public int power;
 //构造方法
 public Person(double a,double b,int c){
  //将a赋给height
  this.height = a;
  //将b赋给weight
  this.weight = b;
  //将c赋给power
  this.power = c;
 }
 //当调用跳舞的方法时,人的体力减少
 public void dance(){
  this.power = this.power-1;
 }
 public static void main(String args[]){
  //创建一个名为per的对象
  Person per = new Person(170,55,100);
  per.dance();
  //输出剩余的体力
  System.out.println(per.power);
 }
}

这样一个比较完整的类与对象的实践程序就完成了,其中this可以调用该类中的元素,事实上构造方法是可以进行重载的,关于重载的概念以后会重点谈到。

三、内存中的类与对象

对象本身只有数据(静态)属性,但是JAVA的class机制会将类的方法绑定到对象上,成为对象的方法。换句话说,可以理解为同一个类的所有对象的方法都储存在同一个区域,而不同对象的属性则被储存在不同的位置。,创建对象的时候会开辟出一块新的内存区块来储存对象的属性(不储存方法)。