类与对象的概念

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

一、何为面向对象

在面向过程的编程中(C语言),我们通常将一个问题分成很多个过程来逐步解决(即把一个程序分成很多的函数),这样在我们的主函数main中,程序就会显得非常的有条理,这样对程序进行分块也是非常符合我们的做事逻辑的。实际上,解决很多问题时我们还可以采用另外的一种思路,即把我们需要做的事情分成很多不同的“对象”来完成。“对象”(object)代表现实生活中可以明确标识的一个实体。例如:一个学生,一张桌子,一个圆,一个按钮都可以看做是一个对象。每个对象都有自己独特的标识,状态和行为。我们通常使用“类”来定义同一类型的对象,也可以说,“类”就是对象的通用模板,用来定义对象的属性与方法。
面向对象的程序设计就是使用对象来进行程序设计。

二、类与对象

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

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

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机制会将类的方法绑定到对象上,成为对象的方法。换句话说,可以理解为同一个类的所有对象的方法都储存在同一个区域,而不同对象的属性则被储存在不同的位置。创建对象的时候会开辟出一块新的内存区块来储存对象的属性(不储存方法)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值