scala之构造器详解
1、基本语法:
构造器分为主构造器和辅助构造器
|
class 类名(形参列表) { // 主构造器 // 类体 def this(形参列表) { // 辅助构造器 } def this(形参列表) { //辅助构造器可以有多个... } } //1. 辅助构造器 函数的名称this, 可以有多个,编译器通过不同参数来区分 |
2、主构造器
class Person(val age:Int,var name:String, sex:Int, score1:Int) {
|
执行结果:

反编译:
|
public class { private final int age; private int score; public int age() //get { return this.age; } public String name() //get { return this.name; } public void name_$eq(String x$1) //set { this.name = x$1; } public int score() //get { return this.score; } public void score_$eq(int x$1) //set { this.score = x$1; } public Person(int age, String name, int sex, int score1) { this.score = score1; Predef..MODULE$.print("Ö÷¹¹ÔìÆ÷"); } public static void main(String[] paramArrayOfString) { Person..MODULE$.main(paramArrayOfString); } } |
从上面的代码和结果可以得:
1、主构造器的声明直接放在类名后面
2、主构造器会执行所有的代码,方法定义除外
3、如果主构造无参数,后面的小括号可以省略(简单,不作证明)
4、如果想让主构造器私有化,则可以在(参数)前面添加private关键字
5、从上面代码中我们在Person类中有三个变量
被val修饰,则为只读属性,会生成一个相当于get的方法(反编译看)
被var修饰,则为读写属性,会生成一个相当于get和set的方法
没有被修饰,则是一个局部变量,则不会生成任何方法
其中的sex属性没有生产任何的方法,是局部变量,而score是里面定义的变量,朱构造器也会执行,score1是局部变量,也不会生成任何的相关方法。
3、辅助构造器
class Person(val age:Int,var name:String, sex:Int, score1:Int) {
|
运行结果:

辅助构造器的名称为this,多个辅助构造器通过不同的参数列表进行区分,也就是重载
4、Bean属性
将scala字段添加@BeanProperty就会生成同java类似的get和set方法
import scala.beans.BeanProperty
class Person( val name:String, @BeanProperty var age:Int) {
|
反编译结果
|
public class Person { private final String name; public String name() { return this.name; } public int age() { return this.age; } public void age_$eq(int x$1) { this.age = x$1; } public void setAge(int x$1) //setAge { this.age = x$1; } public int getAge() //getAge { return age(); } public Person(String name, int age) { Predef..MODULE$.print("主构造器"); } public static void main(String[] paramArrayOfString) { Person..MODULE$.main(paramArrayOfString); } } |
从上面的代码,可以得出生成了get和set方法,如果是val修饰,则只会有get方法
scala之构造器详解的更多相关文章
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- windows scala helloworld例子详解
[学习笔记] windows scala helloworld例子详解: 在操作系统中,我们的Test3.scala会生成Test3.class,然后class文件被虚拟机加载并执行, 这一点和jav ...
- Scala面向对象—类详解
package com.zzy import scala.beans.BeanProperty class Aclass { @BeanProperty//生成get和set方法对于其他框架里对标准的 ...
- 关于scala环境配置详解
首先从官网下载适合自身电脑配置的scala安装包.scala下载官网网址:http://www.scala-lang.org/download/ 同时scala还有自己集成好的IDE,例如eclips ...
- linkin大话面向对象--构造器详解
对象的产生格式:类名称 对象名 = new 类名称(); 因为有(),所以是方法,实际上它就是构造方法,并且是非私有的构造方法.如:CellPhone cp = new CellPhone( ...
- scala 隐式详解(implicit关键字)
掌握implicit的用法是阅读spark源码的基础,也是学习scala其它的开源框架的关键,implicit 可分为: 隐式参数 隐式转换类型 隐式调用函数 1.隐式参数 当我们在定义方法时,可以把 ...
- Scala集合类型详解
Scala集合 Scala提供了一套很好的集合实现,提供了一些集合类型的抽象. Scala 集合分为可变的和不可变的集合. 可变集合可以在适当的地方被更新或扩展.这意味着你可以修改,添加,移除一个集合 ...
- Scala面向对象—类详解2(继承相关)
1.单例类 package com.zzzy class AAA {//单例 /*//java 思路--私有化构造方法,提供公开的getAAA 行不通 private def this(){ this ...
- Java面向对象系列(5)- 构造器详解
构造器: 和类名相同 没有返回值 作用: new本质在调用构造器 初始化对象的值 注意点: 定义了有参构造之后,如果想要使用有参构造,必须显示的定义一个无参构造 IDEA快捷键: Alt + Inse ...
随机推荐
- redis快速部署
1. 场景描述 以前是直接使用公司提供的redis集群,只使用不负责维护,因项目用到负载均衡,需要使用redis做session共享,存储session信息,所以就部署了下,记录下以便后续能快速部署. ...
- WEB前端--返回顶部特效源码
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- TF项目实战(SSD目标检测)-VOC2007
TF项目实战(SSD目标检测)-VOC2007 训练好的模型和代码会公布在网上: 步骤: 1.代码地址:https://github.com/balancap/SSD-Tensorflow 2.解压s ...
- Excel催化剂开源第12波-VSTO开发遍历功能区所有菜单按钮及自定义函数清单
在插件开发过程中,随着功能越来越多,用户找寻功能入口将变得越来越困难,在Excel催化剂 ,将采用遍历所有功能的方式,让用户可以轻松使用简单的查找功能找到想要功能所在位置,查找的范围有:功能按钮的显示 ...
- Excel催化剂开源第9波-VSTO开发图片插入功能,图片带事件
图片插入功能,这个是Excel插件的一大刚需,但目前在VBA接口里开发,如果用Shapes.AddPicture方法插入的图片,没法对其添加事件,且图片插入后需等比例调整纵横比例特别麻烦,特别是对于插 ...
- git的使用之eclipse Hbuilder
工欲善其事,必先利其器 eclipse使用git管理项目 准备 eclipse 码云(github)账号 下载插件 首先电脑已经安装好git了,然后在eclipse中下载git的插件. 打开eclip ...
- [leetcode]python 695. Max Area of Island
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- 代码中批量执行Oracle SQL语句
今天在写一个工具(winform),作用是批量的INSERT OR UPDATE ORACLE数据库中的一个表. 执行的时候老是报错“[911] ORA-00911: invalid charact ...
- VMWare虚拟机:三台虚拟机互通且连网
虚拟机:三台虚拟机互通且连网 目录 一.虚拟机 相关软件 虚拟机安装 Linux系统安装 1) 使用三个Linux虚拟机 多台虚拟机互通且上网 1) 多台配置注意事项 2) 虚拟机软件的配置 3) W ...
- java - 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法
通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间: 而通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收 ...