栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

new 命令 M语音 Cache

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

new 命令 M语音 Cache

查看了很多介绍new命令的说明,感觉没有搞懂,特别记录一下自己的探索记录和结果。

结论: new命令只对特别的类Not ProcedureBlock有意义
普通类ProcedureBlock类[Not ProcedureBlock]
变量同其他语音的理解变量不同其他语音的理解
变量只在方法作用域内有效变量在这个类域有效
B方法无法获取A方法的私有变量; B方法同名变量是私有的,不影响A的值。 方法传参的情况,B方法接收的是形参当前进程的类域。 同一个进程,类方法的任何地方,可以获取到之前的定义的类变量。
方法里面使用 New方法里面使用 New
没有使用场景 ,使用的时候报错,Private variable not allowed : ‘(a)’见下表
new命令的使用

特殊类的情况 [Not ProcedureBlock]
类里面所有的变量都相当于变成 public static 的类变量
还是同Java不一样;是当前进程的类的static变量。任何方法的操作,其他方法获取的都是变量的最新值。大家再同一个域,相互影响。

newnew param1new (param1)
完全新开一个new域,所有变量都不影响类域;不能访问任何类域的变量;同名的变量不相互影响。使当前方法,开一个新的new域,里面存 新的变量 param1 ;是一个单独的域,不影响类域里面的变量。当前方法可以查看,new 域里面的变量,和类域里面的变量。同名变量,new 域优先类域。使当前方法,开一个新的域,当前方法,只可以访问类域的 param1 变量,不能访问类域里面的其他变量。
使用场景
一个独立的方法;不用使用任何类变量,也不用入参。这样方法产生的变量,也不需要加入类域param1 是方法里面的临时变量,例如循环的i;不需要加入类域的。入参是param1 ,希望他是引用型变量,其他任何定义的变量都是临时变量。

这里面说的类域,还是同Java不一样;是当前进程的类域。同一个进程,类方法的任何地方,可以获取到之前的定义的类变量。Java的是系统启动,static类成员变量即可访问了。所有进程共用。

代码测试

特别强调,以下方法都是对类 [ Not ProcedureBlock ] 而言

Class Test.NewCommand1 Extends %RegisteredObject [ Not ProcedureBlock ]
{....}
没有new命令
/// d ##class(Test.NewCommand1).testA()
ClassMethod testA()
{
	s a = 1
	s b = 2
	w "var in A "
	zw  // a=1 b=2
	w !
	d ..testB()
	w "var in A "
	zw // a=1 b=B c=C
	w !
}

ClassMethod testB()
{
	w "var in B "
	zw // a=1 b=2
	w !
	s a = "B"
	s c = "C"
	w "var in B "
	zw // a=1 b=B c=C
	w !
}
new 命令
/// d ##class(Test.NewCommand1).testAN()
ClassMethod testAN()
{
	s a = 1
	s b = 2
	w "var in A "
	zw // a=1 b=2
	w !
	d ..testBN()
	w "var in A "
	zw // a=1 b=2
	w !
}

ClassMethod testBN()
{
	new
	w "var in B "
	zw // 无变量
	w !
	s a = "B"
	w "var in B "
	zw // a=B
	w !
}

new param1
/// d ##class(Test.NewCommand1).testA2()
ClassMethod testA2()
{
	s a = 1
	s b = 2
	w "var in A "
	zw // a=1 b=2
	w !
	d ..testB2(a)
	w "var in A "
	zw // a=1 b=2
	w !
}

ClassMethod testB2(a)
{
	new a
	w "var in B "
	zw // b=2
	w !
	s a = "B"
	w "var in B "
	zw // a=B b=2
	w !
}

new (param1)
/// d ##class(Test.NewCommand1).testA1()
ClassMethod testA1()
{
	s a = 1
	s b = 2
	w "var in A "
	zw // a=1 b=2
	w !
	d ..testB1(a)
	w "var in A "
	zw // a=B b=2
	w !
}

ClassMethod testB1(a)
{
	new (a)
	w "var in B "
	zw // a=1
	w !
	s a = "B"
	s c = "c"
	w "var in B "
	zw // a=B c=c
	w !
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/927123.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号