Zentutorial
  • 首页
  • Zenscript
  • 简单运用
    • 局部变量
    • 尖括号调用
    • 工作台合成
      • 添加配方
      • 移除配方
      • Metadata
      • NBT
    • 熔炉配方
    • 矿物词典(Ore Dictionaries)
    • 物品名称修改
    • tooltips
      • 样式代码
    • 物品条件
    • 物品转换器
    • 掉落物
      • 打草掉落物
      • 生物掉落物
      • Dropt - 导言
        • Dropt - 方法速查
        • Dropt - 使用示例
    • 战利品表 : 导论
      • 战利品表修改(LootTableTweaker)
      • 战利品表修改(LootTweaker-基础)
    • 循环语句(foreach循环) / 普通数组
  • 高级运用
    • 概论
      • 基本类
      • ZenGetter
      • ZenSetter
      • ZenMethod(方法)
    • 常见错误
    • 基本运算
    • 数组与集合
    • 循环与遍历
    • 全局函数
    • Math包
    • if
    • in/has 操作符
    • 战利品表修改(LootTweaker-进阶)
    • 三元操作符
    • 预处理器
    • 全局和静态变量
    • 跨脚本引用
    • 关联数组(映射)
    • IItemStack类型的重新认识
    • IIngredient接口
    • IItemDefinition & IBlockDefinition
    • IData 类型
      • DataMap
    • 穷举与遍历
    • 自定义函数
    • 配方函数与配方事件
      • 配方函数
      • 配方事件
    • 事件概论
      • 一些忠告
    • ZenClass
  • ContentTweaker
    • ContentTweaker
    • 指令
    • 原版加工厂
      • 概论
      • 物品
      • 方块
      • 流体
      • 创造标签
      • 食物
    • 材料系统
      • 基础用法
        • 材料
        • 部件
        • 注册材料部件
        • 材料部件信息
      • 高级运用
        • 自定义部件类型
        • 注册自定义部件
        • 自定义材料部件信息
    • 高级运用
    • 更多鸡联动
    • 匠魂联动
      • 材料引导
        • 材料
        • 构建材料
      • 特性引导
        • 特性
        • 构建特性
        • 特性数据
      • 高级运用
  • 实战
    • 配方
      • 数据驱动合成修改
    • 事件
      • 修改方块掉落物
      • 禁止开创造
由 GitBook 提供支持
在本页
  • 所需的关键词
  • 声明例子
  • 使用例子

这有帮助吗?

  1. 高级运用

ZenClass

前面已经说过,ZenScript 是一门面向对象的语言。作为面向对象的语言,怎么不能自定义类呢?ZenScript 是一个基于 Java 的语言,它的类 ZenClass 本质上就是一个 Java 类。

所需的关键词

关键词

描述

zenClass

告诉编译器要新建一个类,需要在后面指定自定义类的名字

zenConstructor

声明这个类的构造函数,之后调用该函数会返回该类的一个全新的实例。

val 和 var

声明这个类的字段。val 关键词声明的字段为 final 的,不可再次赋值。

static

声明这个类的静态字段。静态字段针对整个类,而不仅仅只是这个类的一个实例。

function

声明这个类的一个方法,在 ZenScript 中,你不可以声明静态方法。

this

指代对象本身,只在声明方法和构造器时有效。

声明例子

zenClass MyClass { // 声明一个叫做 MyClass 的类
    zenConstructor(arg as string, arg1 as int) { // 声明构造函数
        myValue = arg;
        myValueTwo = arg1;
        // 一般这里填的都是给新的实例设置字段值
        print("new MyClass");
    }

    zenConstructor(arg as string) { // 你可以声明多个构造函数,但不可互相调用,而且参数表不能相同。
        myValue = arg;
        myValueTwo = 25;
    }

    // 设置该类的字段
    val myValue as string; // 在这里你可以不设初值,而在构造函数内给其赋值
    val myValueTwo as int;
    var myValueThree as int;
    static myStaticValue as int = 233;

    // 声明该类的叫做 getMyValue 的方法,返回字符串
    function getMyValue() as string {
        return this.myValue; // this指代该对象,这行即为返回该对象的 myValue 字段的值
    }

    function setMyValueThree(arg as int) as MyClass {
        this.myValueThree = arg; // 由于 myValueThree 字段由 var 关键词声明,可以多次赋值
        return this; // 返回该对象本身
    }

    function method() as string {
        return this.myValue ~ this.myValueTwo;
    }
}

使用例子

假如前文的脚本保存在 ./scripts/Class.zs中。

import scripts.Class.MyClass; //导入该类

val obj as MyClass = MyClass("abc", 1); // 构建该类的实例,调用构建函数

print(obj.getMyValue()); // 调用 getMyValue 方法,将会打印 "abc"
print(obj.myValueTwo); // 获取该实例 myValueTwo 字段的值,将会打印 1

print(MyClass.myStaticValue); // 调用 myStaticValue 字段的值,针对整个类(可以看见前面是 MyClass 类名)

val test as MyClass = MyClass("test");
test.myStaticValue = 3;
print(test.myStaticValue); // 也可以针对一个实例调用静态字段
上一页一些忠告下一页ContentTweaker

最后更新于3年前

这有帮助吗?