请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

class和type它们之间的关系到底是什么?

//以此为例
var x:Int = 99;
class foo(val a:Int = 33)
var y:foo = foo();

个人想法:
常规理解来看就把":"后看作type就行,但是这样的话就又不好解释foo他又是个class,又不是常规的type。那么将他们都看作class,而x和y又不是类,这让我很困惑

正在回答

1回答

foo就是一个类型,也是一个class,xy都是实例,这有什么不好区分的吗?没太get到你的问题

0 回复 有任何疑惑可以回复我~
  • 提问者 慕无忌0242235 #1
    我想问的也就是,类型声明是不是通过类的实例化来完成的,如果是,那么这个过程是在编译时期完成的吗?另外,我看Int类的源码里好像没有写Int对象有个属性来存储值,那么关于这个x,它的3存在哪里呢?
    回复 有任何疑惑可以回复我~ 2021-09-04 18:27:13
  • bennyhuo 回复 提问者 慕无忌0242235 #2
    同学是不是之前主要写 C++?类型声明在 C++ 当中经常会遇到,但在 Java 系的语言当中是没有所谓的类型声明的,在定义一个 class 的时候就完成了类型定义,所以我不确定你所谓的类型声明是不是 C++ 当中的类型声明?
    
    所以,类型的定义是通过定义 class 来完成的,实例化就是创建一个类的实例。
    
    下面这一句,如果你看不懂,你就当我没说——定义类型,代码当然要在编译前写好,但编译也可以发生在程序运行期间;对于 Kotlin 来讲,这里有点儿复杂,如果是 Kotlin JVM,要看 JVM 的机制,实际上就是类加载那一套,不展开了建议同学自行了解,这个不会影响你学习这门课。
    
    Int 类实际上真正的实现在运行时所在的平台里面定义,例如 JVM 上就对应于 int,JavaScript 上就对应 number,创建 Int 变量会开辟内存存储。你看的 Int 源码(包括很多其他的 Double、Float 还有 Array 等等)那不过是官方为了编译通过写的障眼法而已。
    回复 有任何疑惑可以回复我~ 2021-09-04 19:04:33
  • 提问者 慕无忌0242235 回复 bennyhuo #3
    是的,我就是前面这个意思。我只是想学一门跨平台的FP语言,不过没有java基础。。现在总算明白了
    回复 有任何疑惑可以回复我~ 2021-09-04 22:47:42
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信