Scala学习笔记(5)类
1.简单类和无参方法
calss Counter{
private var value = 0 //必须初始字段
def increment(){value +=1} //方法默认是公有的
def current()=value
}
在Scala中,类并不声明为publuc。Scala源文件可以包含多个类,所以这些类具有公有可见性。使用该类需要做的就是构造对象并按照通常的方式来调用方法:
val myCounter = new Counter //或者new Counter()
myCounter.increment()
println(myCounter.current)
调用无参构造方法的时候,可以协商圆括号,也可以不写:myCounter.current<===>myCounter.current() //这二者等价
对于改值器方法即setter increment 使用()比较好的;而对于取值器方法,去掉()是不错的风格
myCounter.increment() //对改值器使用()
println(myCounter.current) //对于取值器方法不使用()
OOP
-----------------------------
scala>class Person{
//定义变量,私有类型,变量必须进行初始化
private var id = 0 ;
//方法默认是public 的
def incre(a:Int)={id+=a}
//如果在定义方法的时候没有加括号,那么在进行调用的时候就一定不能写
def current() =id
}
scala>var p = new Person();
scala>p.current()
scala>p.current
scala>p.incre(100)
2.带getter和setter属性
------------------------------------------
编写java类的时候,我们并不喜欢使用公有字段
public class Person{ //这是Java
public int age ; //java 中是不鼓励这样做的
}
//因为在使用公有字段的时候会导致信息不安全,所以我们更倾向于使用getter和setter方法
public class Person{ //这是java
private int age ;
public int getAge(){return age;}
public void setAge(int age){this.age=age}
}
Scala对每个字段都提供getter和setter方法。在这里。我们定义一个公有字段:
calss Person{
var age = 0
}
这个地方Scala是面向JVM的,其中有一个私有的age字段以及相应的getter和setter方法。
class Person{
private var id = ;
def incre(n:Int)={id+=n}
def current()=id
}
D:\scala>javap Person.class
Compiled from "Person.scala"
public class Person { //在编译过程中已经定义好了
public void incre(int);
public int current();
public Person();
}
private[this]的作用,控制成员变量只能在自己的对象中进行访问
--------------------------------------
class Counter{
private var value = 0;
def incre(n:Int){value+=n}
def isLess(other:Counter)=value<other.value;
}
5.Bean属性
当将scala字段的标注为@BeanProperty的时候,这样的方法会自动生成
import scala.reflect.BeanProperty
定义BeanProperty注解
----------------------------------------
class Person{
@BeanProperty va name:String=_
}
将会生成四个方法:
1.name:String
2.name_=(newValue:String):Unit
3.getName():String
4.setName(newvalue:String):Unit
6.辅助构造器
----------------------------------
Scala类有一个构造器比其他所有的构造器更为重要,他就是主构造器,除了主构造器之外,类还可以有任意多的辅助构造器
辅助构造器:(1)辅助构造器的名称为this;(2)每一个辅助构造器都必须以先前已经定义的其他辅助构造器或者主构造器调用开始
class Person{
var id = ;
var name="tom";
var age =;
//辅助构造
def this(name:String){
this(); //调用主构造
this.name=name;
}
def this(name:String,age:Int){
this(name);
this.age=age;
}
}
7.主构造
class Person(name:String,age:Int){
var id =;
var name ="tom";
var age =;
//辅助构造
def this(name:String){
//调用辅助构造
this(name);
this.age=age;
} }
//主构造器
//val ===>只读
//var ===>能读能写
class Person(val name:String,var age:Int,var id:Int){ //这个地方在参数列表里面声明了参数,就可以不进行任何的声明了,
//val是常量,var是私有的,
}
Scala学习笔记(5)类的更多相关文章
- [Scala]Scala学习笔记四 类
1. 简单类与无参方法 class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的 } 备注 在Scala中,类并不声明为 ...
- Scala学习笔记——样本类和模式匹配
1.样本类 在申明的类前面加上一个case修饰符,带有这种修饰符的类被称为样本类(case class). 被申明为样本类的类的特点:1.会添加和类名一致的工厂方法:2.样本类参数列表中的所有参数隐式 ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- Java学习笔记之---类和对象
Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...
- UML学习笔记:类图
UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...
- scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类
一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...
随机推荐
- mysql增删改查相关操作
mysql增删改查相关操作 以前用mysql用的少,对于数据库相关的操作不熟悉,现在开始要接触数据库了,记录一下相关的基础操作吧. 1.数据库的授权操作 # mysql -u root -p Ente ...
- HDU3398—String-(组合数)
Problem Description Recently, lxhgww received a task : to generate strings contain '0's and '1's onl ...
- 大哥带的Orchel数据库时间盲注
0X01Oracle基于延时的盲注总结 0x00 前言 oracle注入中可以通过页面响应的状态,这里指的是响应时间,通过这种方式判断SQL是否被执行的方式,便是时间盲注: oracle的时间盲注通常 ...
- JVM参数配置详解-包含JDK1.8
堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:6 ...
- jquery版本轮播图(es5版本,兼容高)
优势:基于es5,兼容高.切换动画css配置,轻量,不包含多余代码,可扩展性很高,多个轮播图不会冲突,可配置独有namespace 注: 1.项目需要所写,所以只写了页码的切换,未写上一页下一页按钮, ...
- Linux_OpenSSH远程连接
目录 目录 SSH server SSH服务属性 SSH协议执行原理 SSH连接方式 ssh Commands scp commands sftp commands SSH在生产环境中的使用 系统间备 ...
- Python Module_Socket_网络编程
目录 目录 Socket 套接字 套接字的原理 套接字的数据处理方式 套接字类型 Socket 标准函数 ServerSocket 标准函数 ClientSocket 标准函数 公有标准函数 Sock ...
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_8 Mybatis中的返回值深入-调整实体类属性解决增和改方法的报错
如果实体类和数据库表内的字段没有保持一致 修改了属性子弹. 重新生成getter和setter还有toString方法 测试类里面,相关set的方法就都会报错. 只需要修改为最新的set方法就可以了. ...
- windows 使用Docker Desktop 使用国内镜像
===新增一些比较给力的镜像=== 1.中科大镜像加速地址 https://docker.mirrors.ustc.edu.cn 2.阿里云镜像服务 ========= 原本在配置项中添加了:国内镜像 ...
- C++ com 组件 事件 备忘
[ object, uuid(AECE8D0C-F902--A374-ED3A0EBB6B49), dual, nonextensible, pointer_default(unique) ] int ...