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

重新开始学Java——类和对象

程序员文章站 2022-07-15 17:07:05
...

Java 是面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成一种自 定义的类型,可以使用类来定义变量,这种变量统称为引用变量。也就是说,所有类是 引用类型。

面向对象的程序设计中有两个重要的概念:类(class)和对象(object,也被称为实 例,instance),其中类是一批对象的抽象,可以把类理解成某种概念;对象才是一个 具体存在的实体,从这个意义行来看,日常所说的人,其实都是人的实例,而不是人类。 Java 语言是面向对象的程序设计语言,类和对象是面向对象的核心。Java 语言提供了 对创建类和创建对象简单的语法支持。

Object:在 Java 语言来看,万事万物皆对象(所有的东西都可以当作一个对象)。是一个具体的物体(能看得见摸得着的东西),它是某个类的实例(instance)。
Class 类:是一类相关的 物体的 抽象化在 Java 语言中,Class 是创建对象的模版。

在类中可以定义属性和方法:
	属性:用来反应当前类型的事物的特征;
	方法:用来反应当前类型的事物可以干什么(做什么)。

例如 :

/**
 * 创建一个 用 class 修饰的 Rabbit,它表示 Rabbit 类型,是对一类事物的抽象
 */
public class Rabbit{
    // 属性:用来反应当前类型的事物的特征
    String name;
    int age;
    char sex;
    // 方法:用来反应当前类型的事物可以干什么,比如吃、喝、玩
    public void eat( String food){
        System.out.println("吃"+food);
    }
}

如何使用呢?(参看数组的使用方式)[此时要注意,TestRabbit与Rabbit 这两个类是要放在一起的]

public class TestRabbit {
    public static void main(String[] args) {
    	/*****************声明Rabbit类型的变量 *****************************/
        int[] array;// 声明一个数组
        // 声明一个Rabbit 类型的变量 r ,这个变量会存放在在main方法的方法栈中
        Rabbit r = null; // 通过等号为改变来那个赋值为null
        System.out.println("Rabbit:" + r);
        /*****************创建Rabbit类型的对象,(创建一个Rabbit类的实 例)**************/
        // 为每个数组元素赋予默认值
        array = new int[10]; // 创建一个数组对象,并将其堆内存中的首地址赋给array 变量
        System.out.println("数组的地址是:" + array);
        // 为属性 赋予默认值(默认值 跟 数组的默认值 是一样的 比如 int类型默认是 0)
        r = new Rabbit();// 创建一个Rabbit 对象,并将其堆内存中的首地址赋给 r 变量
        System.out.println("Rabbit对象的地址是:" + r);
        /****************输出Rabbit对象(实例)的默认值 ******************************/
        // 获得到默认值
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " , ");
        }
        System.out.println();
        // 圆点运算符 可以理解成 汉字中的 “的”
        System.out.println("name" + r.name);// 输出r 的name(r 存储的 那个地址 对应的 对象的 name)
        System.out.println("age" + r.age);// 输出r 的age (通过 r 变量 存储的地址 找到 那个对象后 ,再找 age)
        System.out.println("sex " + r.sex);// 输出r 的sex
        /***************为Rabbit对象(实例) 的属性 赋予相应的值 **************/
        // 为数组中的元素赋值
        array[0] = 100;
        array[1] = 200;
        array[2] = 300;
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " , ");
        }
        System.out.println();
        // 为 r 所引用的对象 的 各个属性 赋予相应的值
        r.name = "罗马";
        r.age = 1000;
        r.sex = '女';
        System.out.println("name:" + r.name);// 输出r 的name(r 存储的 那个地址 对应的 对象的 name)
        System.out.println("age:" + r.age);// 输出r 的age (通过 r 变量 存储的地址 找到 那个对象后 ,再找 age)
        System.out.println("sex :" + r.sex);// 输出r 的sex
        /********通过具体的对象(实例)来调用Rabbit 类中定义的方法 *********/
        // r 的 eat 方法 执行 (找到r 所引用的对象,执行它的eat 方法)
        r.eat("快餐");
    }
}

简单的写法(主要研究 new Rabbit() 干了什么事情)

public class TestRabbit1 {
    public static void main(String[] args) {
        /*****************声明Rabbit类型的变量 *****************************/
        // 声明一个Rabbit 类型的变量 r ,这个变量会存放在在main方法的方法栈中
        Rabbit r = null; // 通过等号为改变来那个赋值为null
        System.out.println("Rabbit:" + r);
        /*****************创建Rabbit类型的对象,(创建一个Rabbit类的实         例)**************/
        /**
         * 1、new 关键字 负责在堆内存中开辟空间
         * 2、为Rabbit对象的各个属性赋予默认值
         * 3、执行 Rabbit()中的代码(执行构造方法 中的代码)
         * 4、将 内存 中的 该对象 首地址 返回 ( 通常在 前面用 等号 赋给某个
         变量 ,比如 r )
         */
        r = new Rabbit();// 创建一个Rabbit 对象,并将其堆内存中的首地址赋给 r 变量
        System.out.println("Rabbit对象的地址是:" + r);
        /****************输出Rabbit对象(实例)的默认值 ******************************/
        System.out.println("name" + r.name);
        System.out.println("age" + r.age);
        System.out.println("sex " + r.sex);
        /***************为Rabbit对象(实例) 的属性 赋予相应的值 **************/
        r.name = "罗马";
        r.age = 1000;
        r.sex = '女';
        System.out.println("name:" + r.name);
        System.out.println("age:" + r.age);
        System.out.println("sex :" + r.sex);
        /********通过具体的对象(实例)来调用Rabbit 类中定义的方法 *********/
        r.eat("快餐");
    }
}

那么此时就可以总结一下,那么一个类中可以有什么(是暂时的,如果不理解,可以参看后边的文章):

[修饰符] class 类{
	0 到 n 个构造方法( constructor );
	0 到 n 个属性( field ) ;
	0 到 n 个方法( method )定义;
}

类的属性定义语法:

[ 修饰符 ] 属性类型 属性名 [ = 默认值 ] ; // 如: private String name ;

属性语法格式详解:

修饰符: 可选(可以省略)
关于权限的修饰符: public、 protected、 private (三者选其一)
关于常量和静态的修饰符: static 、 final ( 可以连用 )
属性类型: 指属性的类型
可以是 Java 语言中允许的任何数据类型(8 中基本数据类型和引用类型)
属性名: 即属性的名称(Sun 的官方说法叫做 Field<字段>)
属性名必须是合法的标识符

方法语法格式:

[ 修饰符 ] 方法返回值类型 方法名 (形参列表){
	//方法体
}

方法语法详解:

修饰符: 可选(可以省略)
访问权限修饰符: public 、 protected 、 private (三选一)
其他的: abstract、 final 、 static (前面两个不能同时出现)
方法返回值类型: 可以是 基本类型、 引用类型、 void
方法名:
望文生义, 即看到名字就知道该方法完成什么功能
建议使用英文单词, 单个单词全小写
多个单词从第二个单词起逐个首字母大写
形参列表: 就是方法接受的参数(在后面的方法详解中讲解)

构造方法语法格式:

[ 修饰符 ] 类名 ( [ 形参列表 ] ){
	//方法体
}

构造方法语法详解:

修饰符: 可选, 可以是 public、 protected、 private 之一
类名: 即构造方法的名字, 规定必须跟类名相同
形参列表: 可选, 跟普通方法的参数列表一样
构造方法一定不能书写返回类型!!!

构造方法注意的点:

构造方法顾名思义, 作用在于构造一个对象
如果一个类没有构造方法, 那么可能就无法构造该类的实例
即使程序员没有给类写构造, 系统也会提供默认的无参空构造
一旦显式地为类提供了构造, 系统将不再提供默认的无参空构造

转载于:https://my.oschina.net/lujiapeng/blog/2249916

上一篇: 重新开始

下一篇: python类