面向对象——类和对象

人生之路不会是一帆风顺的,我们会遇上顺境,也会遇上逆境,在所有成功路上折磨你的,背后都隐藏着激励你奋发向上的动机,人生没有如果,只有后果与结果,成熟,就是用微笑来面对一切小事。

导读:本篇文章讲解 面向对象——类和对象,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Java——类和对象

活动地址:CSDN21天学习挑战赛

类是Java中的一种重要的引用数据类型,是组成Java程序的基本要素。它封装了一类对象的数据和操作。

类实际上在现实世界中是不存在的,是一个抽象的概念、模板,是人类大脑进行”思考、总结、抽象“的一个结果。

类本质上是现实世界中某些事物具有共同特征,将这些共同特征提取出来形成的一个概念就是一个”类“,就是一个模板。

类声明

Java语言中一个类的实现包括:类声明和类体。类声明语法格式如下

[public][abstract|final] class className [extends superclassName] [implements interfaceNameList] {
	//类体 
}

其中,class是声明类的关键字,className是自定义的类名;class前面的修饰符public、abstract、final用来声明类,它们可以省略,它们的具体用法后面章节会详细介绍;superclassName为父类名,可以省略,如果省略则该类继承Object类,Object类所有类的根类,所有类都直接或间接继承Object;interfaceNameList是该类实现的接口列表,可以省略,接口列表中的多个接口之间用逗号分隔。

在语法说明中,括号([])部分表示可以省略;竖线(|) 表示“或关系”,例如abstract|final,说明可以使用abstract或final关键字,两个关键字不能同时出现。

成员变量

class className {
	[public | protected | private ] [static] [final] type variableName;
    //成员变量
}

其中type是成员变量数据类型,variableName是成员变量名。type前的关键字都是成员变量修饰符,它们说明如下:

  1. public、protected和private修饰符用于封装成员变量。

  2. static修饰符用于声明静态变量,所以静态变量也称为“类变量”。

  3. final修饰符用于声明变量,该变量不能被修改。

    下面看一个声明成员变量示例:

 // Animal.java 
   public class Animal extends Object {
       //动物年龄
       int age = 1;
       //动物性别
       public boolean sex = false;
       //动物体重
       private double weight = 0.0;
   }

成员方法

声明类体中成员方法语法格式如下:

class className {
    [public | protected | private ] [static] [final | abstract] [native] [synchronized] 
    type methodName([paramList]) [throws exceptionList] {
    //方法体
    }
}

其中type是方法返回值数据类型,methodName是方法名。type前的关键字都是方法修饰符,它们说明如下:

  1. public、protected和private修饰符用于封装方法。

  2. static修饰符用于声明静态方法,所以静态方法也称为“类方法”。

  3. final | abstract不能同时修饰方法,final修饰的方法不能在子类中被覆盖;abstract用来修饰抽象方法,抽象方法必须在子类中被实现。

  4. native修饰的方法,称为“本地方法”,本地方法调用平台本地代码(如:C或C++编写的代码),不能实现跨平台。

  5. synchronized修饰的方法是同步的,当多线程方 式同步方法时,只能串行地执行,保证是线程安全的。

方法声明中还有([paramList])部分,它是方法的参数列表。throws exceptionList是声明抛出异常列表。

下面看一个声明方法示例:

public class Animal {
    // extends Object {
    //动物年龄
    int age = 1;
    //动物性别
    public boolean sex = false;
    //动物体重
    private double weight = 0.0;
    public void eat() {
        // 方法体
        return;
	}
    int run() {
        // 方法体
        return 10;
    }
    protected int getMaxNumber(int number1, int number2) {
    	// 方法体
        if (number1 > number2) {
        return number1;
        }
    return number2;
    }
}

对象

对象—–(抽象)—–>类

类—–(实例化)—–>对象(也叫做实例)

类实例化可生成对象,实例方法就是对象方法,实例变量就是对象属性。一个对象的生命周期包括三个阶段:创建、使用和销毁。

创建对象

创建对象包括两个步骤:声明和实例化。

声明

声明对象与声明普通变量没有区别,语法格式如下:

type objectName;

其中type是引用类型,即类、接口和数组。示例代码如下:

String name;

该语句声明了字符串类型对象name。可以声明并不为对象分配内存空间,而只是分配一个引用。

实例化

实例化过程分为两个阶段:为对象分配内存空间和初始化对象,首先使用new运算符为对象分配内存空间,然后再调用构造方法初始化对 象。示例代码如下:

String name;
name = new String("Hello World");

一个引用变量没有通过new分配内存空间,这个对象就是空对象,Java使用关键字null表示空对象。

示例代码如下:

String name = null;
name = "Hello World";

引用变量默认值是null。当试图调用一个空对象的实例变量或实例方法时,会抛出空指针异常NullPointerException,如下代码所示:

String name = null;
//输出null字符串
System.out.println(name);
//调用length()方法
int len = name.length();

产生空对象有两种可能性:第一是程序员自己忘记了实例化,第二是空对象是别人传递过来的。

Student类

package com.shouyerenst.OOP;

public class Student {
    //属性(描述状态),在Java程序中以”成员变量“的方式存在
    
    //学号
    int no; //这些成员变量又称为实例变量
    
    //姓名
    String name;
    
    //年龄
    int age;
    
    //性别
    boolean sex;
    
    //住址
    String addr;
    
    public Student(int no, String name, int age, boolean sex, String addr) {
        this.no = no;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.addr = addr;
    }
}

StudentTest类

package com.shouyerenst.OOP;

public class StudentTest {
    public static void main(String[] args) {
        //s1是局部变量,也叫做引用
        Student s1 = new Student(10001,"李华",19,true,"北京");
        System.out.println(s1.no);
        System.out.println(s1.name);
        System.out.println(s1.age);
        System.out.println(s1.sex);
        System.out.println(s1.addr);
    
        System.out.println("----------------------");
    
        Student s2 = new Student(10002,"王雪",17,false,"成都");
        System.out.println(s2.no);
        System.out.println(s2.name);
        System.out.println(s2.age);
        System.out.println(s2.sex);
        System.out.println(s2.addr);
    }
}

虚拟机内存调用图解

在这里插入图片描述


在这里插入图片描述


感觉不错的话,动手点个赞吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/125495.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!